@longzai-intelligence-scripts/cli 0.0.8 → 0.0.9

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.
Files changed (2) hide show
  1. package/dist/index.js +5 -5
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -209,9 +209,9 @@ ${K.default.gray(jf+kf.repeat(a+2)+Mf)}
209
209
  `);process.stdout.write(G.cursor.move(-999,e.length-1)),process.stdout.write(G.erase.down(e.length))},g=e=>e.replace(/\.+$/,``),_=e=>{let t=(performance.now()-e)/1e3,n=Math.floor(t/60),r=Math.floor(t%60);return n>0?`[${n}m ${r}s]`:`[${r}s]`},v=(u=``)=>{o=!0,i=lf(),s=g(u),l=performance.now(),process.stdout.write(`${K.default.gray(Y)}
210
210
  `);let d=0,f=0;p(),a=setInterval(()=>{if(r&&s===c)return;h(),c=s;let n=K.default.magenta(t[d]);if(r)process.stdout.write(`${n} ${s}...`);else if(e===`timer`)process.stdout.write(`${n} ${s} ${_(l)}`);else{let e=`.`.repeat(Math.floor(f)).slice(0,3);process.stdout.write(`${n} ${s}${e}`)}d=d+1<t.length?d+1:0,f=f<t.length?f+.125:0},n)},y=(t=``,n=0)=>{o=!1,clearInterval(a),h();let r=n===0?K.default.green(Tf):n===1?K.default.red(Cf):K.default.red(wf);s=g(t??s),e===`timer`?process.stdout.write(`${r} ${s} ${_(l)}
211
211
  `):process.stdout.write(`${r} ${s}
212
- `),m(),i()};return{start:v,stop:y,message:(e=``)=>{s=g(e??s)}}},Kf={red:e=>K.default.red(e),green:e=>K.default.green(e),yellow:e=>K.default.yellow(e),blue:e=>K.default.blue(e),cyan:e=>K.default.cyan(e),magenta:e=>K.default.magenta(e),gray:e=>K.default.gray(e),bold:e=>K.default.bold(e),dim:e=>K.default.dim(e)},qf={async select(e,t){let n=await Vf({message:e,options:t.map(e=>({value:e.value,label:e.label,hint:e.hint}))});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`string`?n:String(n)},async textInput(e,t){let n=await zf({message:e,placeholder:t?.placeholder,defaultValue:t?.defaultValue});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`string`?n:String(n)},async confirm(e,t){let n=await Bf({message:e,initialValue:t?.defaultValue??!1});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`boolean`?n:!!n},spinner(){let e=Gf();return{start(t){e.start(t)},stop(t){e.stop(t)}}},note(e,t){Hf(e,t)},log:{info(e){Wf.info(K.default.blue(e))},success(e){Wf.success(K.default.green(e))},warn(e){Wf.warn(K.default.yellow(e))},error(e){Wf.error(K.default.red(e))},step(e){Wf.step(e)}}},Jf=[`root`,`root-engineering`,`package`],Yf=e=>{let t=u(e)?e:f(process.cwd(),e);for(;t!==`/`;){let e=d(t,`lzi-scripts.config.ts`);if(i(e))return e;t=l(t)}return null},Xf=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zf=e=>typeof e==`string`&&Jf.includes(e),Qf=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),$f=e=>{if(!Xf(e))return{};let t={};typeof e.registryRoot==`string`&&(t.registryRoot=e.registryRoot),Zf(e.profile)&&(t.profile=e.profile);let n=[];if(Array.isArray(e.exempt))for(let t of e.exempt)Xf(t)&&Qf(t.scripts)&&typeof t.reason==`string`&&t.reason.length>0&&n.push({scripts:t.scripts,reason:t.reason});n.length>0&&(t.exempt=n);let r=[];if(Array.isArray(e.extraAlternatives))for(let t of e.extraAlternatives)Xf(t)&&typeof t.script==`string`&&typeof t.definition==`string`&&r.push({script:t.script,definition:t.definition});return r.length>0&&(t.extraAlternatives=r),t},ep=async(e=process.cwd())=>{let t=Yf(e);if(t===null)return{config:{},configPath:null};try{let e=await import(t),n=typeof e==`object`&&e&&`default`in e?e.default:e;if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`配置 default export 须为对象: ${t}`);return{config:$f(n),configPath:t}}catch(e){throw e instanceof Error&&e.message.startsWith(`配置 default export`)?e:Error(`加载配置文件失败: ${t} ${e instanceof Error?e.message:String(e)}`)}},tp=d(`registry`,`index.ts`),np=e=>typeof e==`string`,rp=e=>typeof e==`object`&&!!e&&!Array.isArray(e),ip=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),ap=e=>e===`required`||e===`recommended`,op=e=>{if(!rp(e)||!np(e.name)||!np(e.definition)||!np(e.family)||!ap(e.severity)||e.alternatives!==void 0&&!ip(e.alternatives))return null;let t={name:e.name,definition:e.definition,severity:e.severity,family:e.family};return e.alternatives!==void 0&&(t.alternatives=e.alternatives),t},sp=e=>{if(!rp(e)||e.formatVersion!==1)return null;let t={};if(rp(e.profiles))for(let[n,r]of Object.entries(e.profiles)){if(n!==`root`&&n!==`root-engineering`&&n!==`package`)continue;let e=[];if(Array.isArray(r))for(let t of r){let n=op(t);n!==null&&e.push(n)}t[n]=e}let n=[];if(Array.isArray(e.companions))for(let t of e.companions)rp(t)&&np(t.path)&&np(t.reason)&&ap(t.severity)&&n.push({path:t.path,severity:t.severity,reason:t.reason});let r=[];if(Array.isArray(e.legacyMappings))for(let t of e.legacyMappings)rp(t)&&np(t.legacyPrefix)&&np(t.targetScript)&&np(t.targetPackage)&&np(t.note)&&r.push({legacyPrefix:t.legacyPrefix,targetScript:t.targetScript,targetPackage:t.targetPackage,note:t.note});return{formatVersion:1,profiles:t,companions:n,legacyMappings:r}},cp=async e=>{let t=u(e)?e:f(process.cwd(),e),n=d(t,tp);if(!i(n))return null;try{let e=await import(n),t=typeof e==`object`&&e&&`default`in e?e.default:e;return sp(t)}catch{return null}},lp=async e=>{if(e.explicit!==void 0&&e.explicit!==``){let t=await cp(e.explicit);return t===null?null:{data:t,root:f(process.cwd(),e.explicit),source:`explicit`}}if(e.configRoot!==void 0&&e.configRoot!==``){let t=await cp(f(e.repoDir,e.configRoot));if(t!==null)return{data:t,root:f(e.repoDir,e.configRoot),source:`config`}}let t=process.env.LZI_SCRIPTS_REGISTRY_ROOT;if(t!==void 0&&t!==``){let e=await cp(t);if(e!==null)return{data:e,root:f(t),source:`env`}}let n=d(l(e.repoDir),`longzai-intelligence-scripts-registry`),r=await cp(n);return r===null?null:{data:r,root:n,source:`sibling`}};function up(e){return{ok:!0,value:e}}function X(e){return{ok:!1,error:e}}const dp=/^[a-z][a-z0-9-]*$/,fp=[`edition-root`,`customer-root`,`single-repo`],pp=pc([`high`,`normal`,`low`]),mp=pc(fp),hp=/\S/,gp=nc({id:U().regex(dp,`范围 id 非法(应为小写字母开头的字母数字连字符)`),kind:mp,remotes:$s(U().regex(hp,`远程位置非法(不得为空串或纯空白)`)).default([]),tags:$s(U().regex(hp,`标签非法(不得为空串或纯空白)`)).default([]),priority:pp.default(`normal`),excludes:$s(U().min(1)).default([]),projectPriorities:dc(U(),pp).default({})}).check(e=>{e.value.kind===`single-repo`&&(e.value.excludes.length>0&&e.issues.push({code:`custom`,input:e.value,path:[`excludes`],message:`single-repo 范围禁用 excludes(声明的即唯一项目,如需排除请改用 edition-root/customer-root)`}),Object.keys(e.value.projectPriorities).length>0&&e.issues.push({code:`custom`,input:e.value,path:[`projectPriorities`],message:`single-repo 范围禁用 projectPriorities(优先级直接设于 scope 级)`}))}),_p=`scopes`,vp=/^[a-z][a-z0-9-]*\.scope\.ts$/;async function yp(e){let t=d(e,_p);if(!i(t))return X({code:`SCOPES_DIR_MISSING`,message:`声明域目录缺失:${t}(应为 project-registry 仓根下 ${_p}/,含 *.scope.ts 声明文件)`});let n=s(t).filter(e=>vp.test(e)).sort((e,t)=>e<t?-1:1);if(n.length===0)return X({code:`SCOPE_REGISTRY_EMPTY`,message:`范围声明域为空:${t}(无 *.scope.ts——范围消失属配置事故,如需清空请显式移除 registryRoot 配置)`});let r=/* @__PURE__ */ new Set,a=[];for(let e of n){let n=d(t,e),i=await import(p(n).href),o=gp.safeParse(i.default);if(!o.success){let e=o.error.issues[0];return X({code:`SCOPE_DECLARATION_INVALID`,message:`范围声明结构非法:${n}(${e?.path.join(`.`)??``} ${e?.message??``})`})}let s=e.replace(/\.scope\.ts$/,``);if(o.data.id!==s)return X({code:`SCOPE_ID_MISMATCH`,message:`范围 id 与文件名不一致:${n}(id=${o.data.id},应为 ${s}——命名即身份)`});if(r.has(o.data.id))return X({code:`SCOPE_ID_CONFLICT`,message:`范围 id 重复:${o.data.id}(声明域内同 id 即同范围,不得重复声明)`});r.add(o.data.id),a.push(o.data)}return up(a)}const bp=`LZI_PROJECT_REGISTRY_ROOT`,xp=`LZI_PROJECT_MARKDOWN_REGISTRY_ROOT`,Sp=`LZI_PROJECT_SCOPE_ROOTS`,Cp=`LZI_PROJECT_MARKDOWN_SCOPE_ROOTS`,wp=/^[a-z][a-z0-9-]*=\/\S+$/;function Tp(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e!==``)}function Ep(e){let t=/* @__PURE__ */ new Map;for(let n of Tp(e)){if(!wp.test(n))return X({message:`范围根映射段非法:${n}(应为 id=绝对路径 形态,id 为小写字母开头的字母数字连字符)`});let e=n.indexOf(`=`),r=n.slice(0,e),i=f(n.slice(e+1));if(t.has(r))return X({message:`范围根映射 id 重复:${r}(同一范围不得重复映射)`});t.set(r,i)}return up(t)}function Dp(e,t,n,r){return e!==void 0&&t!==void 0&&e.trim()!==t.trim()?X({code:`ACQUISITION_ENV_INVALID`,message:`环境变量双名冲突:${n} 与 ${r} 同时在场且值不一致(请统一使用新名 ${n})`,variables:[n,r]}):up({value:e??t,variables:e===void 0?t===void 0?[]:[r]:[n]})}function Op(e=process.env){let t=Dp(e[bp],e[xp],bp,xp);if(!t.ok)return X(t.error);let n=Dp(e[Sp],e[Cp],Sp,Cp);if(!n.ok)return X(n.error);let r;if(n.value.value!==void 0){let e=Ep(n.value.value);if(!e.ok)return X({code:`ACQUISITION_ENV_INVALID`,message:e.error.message,variables:[...n.value.variables]});r=e.value}return up({registryRoot:t.value.value===void 0?void 0:f(t.value.value.trim()),scopeRoots:r})}const kp=/^[A-Za-z0-9_][A-Za-z0-9._-]*$/;function Ap(e,t){return e.name<t.name?-1:+(e.name>t.name)}function jp(e){return i(d(e,`.git`))}function Mp(e,t){return t.get(e.id)}function Np(e,t,n,r){if(n.has(e.id))return X({code:`SCOPE_ID_CONFLICT`,message:`范围 id 冲突:${e.id}(声明域内不得重复)`});n.add(e.id);let a=Mp(e,t);return a===void 0?X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${e.id}(声明零本地路径,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 或 LZI_PROJECT_MARKDOWN_SCOPE_ROOTS 补 id=绝对路径 映射)`}):i(a)?up({def:e,root:a,sourceId:r}):X({code:`DIR_NOT_FOUND`,message:`范围根不存在:${a}(范围 ${e.id} 机内映射目标)`})}function Pp(e,t){let n=[],r=[];for(let i of[...s(e.root,{withFileTypes:!0})].sort(Ap)){if(i.name.startsWith(`.`))continue;if(!i.isDirectory()){r.push({scope:e.def.id,entry:i.name,reason:`ROOT_FILE`});continue}if(e.def.excludes.includes(i.name)){r.push({scope:e.def.id,entry:i.name,reason:`EXCLUDED`});continue}let a=d(e.root,i.name);t!==void 0&&f(a)===f(t)?r.push({scope:e.def.id,entry:i.name,reason:`EXCLUDED_PATH`}):!jp(a)||!kp.test(i.name)?r.push({scope:e.def.id,entry:i.name,reason:`NOT_A_REPO`}):n.push({scope:e.def.id,scopeKind:e.def.kind,priority:e.def.projectPriorities[i.name]??e.def.priority,sourceId:e.sourceId,project:i.name,path:a})}return{scope:e.def.id,scopeKind:e.def.kind,priority:e.def.priority,scopeRoot:e.root,sourceId:e.sourceId,projects:n,skipped:r}}function Fp(e,t){let n=c(e.root);return t!==void 0&&f(e.root)===f(t)||!jp(e.root)||!kp.test(n)?X({code:`SCOPE_ROOT_INVALID`,message:`single-repo 范围根非法:${e.root}(应为含 .git 的合规项目目录,且不得为排除路径)`}):up({scope:e.def.id,scopeKind:`single-repo`,priority:e.def.priority,scopeRoot:e.root,sourceId:e.sourceId,projects:[{scope:e.def.id,scopeKind:`single-repo`,priority:e.def.priority,sourceId:e.sourceId,project:n,path:e.root}]})}function Ip(e,t,n){let r=[],i=[],a=/* @__PURE__ */ new Set,o=/* @__PURE__ */ new Map;for(let s of e){let e=Np(s,n.scopeRoots,a,n.sourceId);if(!e.ok)return X(e.error);let c,l=[];if(s.kind===`single-repo`){let n=Fp(e.value,t);if(!n.ok)return X(n.error);c=n.value}else{let n=Pp(e.value,t);c=n,l=n.skipped}for(let e of c.projects){let t=o.get(e.project);if(t!==void 0)return X({code:`PROJECT_NAME_CONFLICT`,message:`项目名跨范围冲突:${e.project}(${t} 与 ${e.scope} 均含此名;归档平铺要求项目名全局唯一,可在后登记范围的 excludes 中显式排除)`});o.set(e.project,e.scope)}r.push(c),i.push(...l)}return r.sort((e,t)=>e.scope<t.scope?-1:+(e.scope>t.scope)),i.sort((e,t)=>e.scope===t.scope?e.entry<t.entry?-1:+(e.entry>t.entry):e.scope<t.scope?-1:1),up({scopes:r,skipped:i})}const Lp=n(g);function Rp(e){return typeof e==`object`&&!!e&&`stderr`in e}async function zp(e,t){try{let{stdout:n}=await Lp(`git`,[`-C`,e,...t],{encoding:`utf8`});return{ok:!0,stdout:n.trim()}}catch(e){let t=Rp(e)?e.stderr:void 0;return{ok:!1,stderr:typeof t==`string`?t:String(e)}}}function Bp(e){return typeof e==`object`&&!!e}function Vp(e){let t=d(e,`package.json`);if(!i(t))return{packageName:null,description:null};let n;try{n=JSON.parse(o(t,`utf8`))}catch{return{packageName:null,description:null}}if(!Bp(n))return{packageName:null,description:null};let r=n.name,a=n.description;return{packageName:typeof r==`string`&&r!==``?r:null,description:typeof a==`string`&&a!==``?a:null}}async function Hp(e){let t=await zp(e.path,[`rev-parse`,`--git-dir`]);if(!t.ok)return X({code:`INSPECT_FAILED`,scope:e.scope,project:e.project,message:`仓库健康探测失败:${e.path}(${t.stderr})`});let n=await zp(e.path,[`remote`,`get-url`,`origin`]),r=n.ok&&n.stdout!==``?n.stdout:null,i=Vp(e.path);return up({scope:e.scope,scopeKind:e.scopeKind,priority:e.priority,sourceId:e.sourceId,project:e.project,projectPath:e.path,remoteUrl:r,packageName:i.packageName,description:i.description})}async function Up(e,t,n){let r=Math.max(1,Math.floor(t)),i=[],a=0;for(;a<e.length;){let t=e.slice(a,a+r),o=await Promise.all(t.map((e,t)=>n(e,a+t)));i.push(...o),a+=r}return i}async function Wp(e={}){let t=Op(e.processEnv??process.env);if(!t.ok)return X(t.error);let n=e.registryRoot??t.value.registryRoot;if(n===void 0)return X({code:`ACQUISITION_ENV_INVALID`,message:`未定位 registry 仓根(请在 .env 配置 LZI_PROJECT_REGISTRY_ROOT 或显式传入 registryRoot)`});let r=await yp(n);if(!r.ok)return X(r.error);let i=e.scopeRoots??t.value.scopeRoots??/* @__PURE__ */ new Map,a=e.scopeIds===void 0?void 0:new Set(e.scopeIds),o=a===void 0?[]:[...a].filter(e=>!r.value.some(t=>t.id===e));if(o.length>0)return X({code:`SCOPE_SELECTOR_UNKNOWN`,message:`圈定的范围 id 不在声明域:${o.join(`、`)}(合法范围 id:${r.value.map(e=>e.id).join(`、`)})`});let s=r.value,c=[];if(a!==void 0){s=r.value.filter(e=>a.has(e.id));let e=s.filter(e=>!i.has(e.id)).map(e=>e.id);if(e.length>0)return X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${e.join(`、`)}(声明零本地路径,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 补 id=绝对路径 映射)`})}else if(s=r.value.filter(e=>i.has(e.id)),c=r.value.filter(e=>!i.has(e.id)).map(e=>e.id),s.length===0)return X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${r.value.map(e=>e.id).join(`、`)}(本机未配置任何范围根映射,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 补 id=绝对路径 映射)`});let l=Ip(s,e.excludePath,{scopeRoots:i,sourceId:`scope-declarations`});if(!l.ok)return X(l.error);let u=l.value.scopes.flatMap(e=>[...e.projects]),d=[],f=/* @__PURE__ */ new Map;if(e.inspect===!0){let e=await Up(u,16,async e=>Hp(e));for(let t of e)t.ok?f.set(t.value.project,t.value):d.push({scope:t.error.scope,project:t.error.project,message:t.error.message})}let p=u.map(e=>{let t=f.get(e.project);return{scope:e.scope,scopeKind:e.scopeKind,priority:e.priority,sourceId:e.sourceId,project:e.project,path:e.path,remoteUrl:t?.remoteUrl??null,packageName:t?.packageName??null,description:t?.description??null}});return up({registryRoot:n,scopes:l.value.scopes,projects:p,skipped:l.value.skipped,unmappedScopes:c,inspectFailures:d,inspected:e.inspect===!0})}const Gp=/import\s*\{[^}]*\bdefineConfig\b[^}]*\}\s*from\s*['"]@longzai-intelligence-oxlint\/(?:oxlint-config\/)?presets\/([a-z0-9-]+)['"]/,Kp={react:{build:[`lzi-tsgo`,`vite`],buildProd:[`bun`]},"react-native":{build:[`expo`],buildProd:[`bun`]},expo:{build:[`expo`],buildProd:[`bun`]},taro:{build:[`taro`,`lzi-taro`],buildProd:[`bun`]},fumadocs:{build:[`react-router`],buildProd:[`bun`]},next:{build:[`next`],buildProd:[`bun`]},electron:{build:[`lzi-electron`,`electron-builder`],buildProd:[`bun`]},elysia:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]},nest:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]},hono:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]},mcp:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]},library:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]},sdk:{build:[`lzi-builder`],buildProd:[`lzi-builder`,`bun`]}},qp=e=>{let t=d(e,`oxlint.config.ts`);if(!i(t))return null;try{let e=Gp.exec(o(t,`utf8`));if(e===null)return null;let n=e[1];return n!==void 0&&n in Kp?n:null}catch{return null}},Jp=e=>e.split(/&&|\|\||;|\|/).map(e=>e.trim()).filter(e=>e.length>0),Yp=e=>{let t=e.split(/\s+/).filter(e=>e.length>0);for(let e of t)if(!/^[A-Za-z_][A-Za-z0-9_]*=/.test(e))return e;return null},Xp=e=>{let t=qp(e.unitDir);if(t===null)return[];let n=Kp[t];if(n===void 0)return[];let r=[],i=[{key:`build`,list:n.build},{key:`build:prod`,list:n.buildProd}];for(let n of i){let i=e.scripts[n.key];if(i!==void 0)for(let a of Jp(i)){let i=Yp(a);i!==null&&!n.list.includes(i)&&r.push({rule:`scripts/build-toolchain-mismatch`,level:`warning`,script:e.scriptNamePrefix===void 0?n.key:`${e.scriptNamePrefix}:${n.key}`,message:`命令 "${i}" 不在预设 ${t} 允许的清单内(允许 ${n.list.join(`、`)}),build 脚本形态按预设校验`,hint:`改用当前预设允许的命令,依据 ADR 0221`})}}return r},Zp=/* @__PURE__ */ new Set([`cd`,`exit`,`export`,`echo`,`true`,`false`,`set`,`wait`]),Qp=e=>e.startsWith(`"`)&&e.endsWith(`"`)&&e.length>=2||e.startsWith(`'`)&&e.endsWith(`'`)&&e.length>=2?e.slice(1,-1):e,$p=e=>/^[A-Za-z_][A-Za-z0-9_]*=/.test(e),em=e=>{let t=e.trim().split(/\s+/).filter(e=>e.length>0).map(Qp),n=0;for(;n<t.length&&$p(t[n]??``);)n++;let r=t[n];return r===void 0||r.length===0?null:{bin:r,args:t.slice(n+1)}},tm=e=>{let t=e.split(/\s*(?:&&|\|\||;)\s*/).map(e=>e.trim()).filter(e=>e.length>0),n=[];for(let e of t){let t=em(e);t!==null&&!Zp.has(t.bin)&&n.push(t)}return n},nm=e=>/\.(?:mjs|cjs|js|ts|mts|cts)$/.test(e),rm=e=>e===`check`||e.endsWith(`:check`),im=e=>{let t=/* @__PURE__ */ new Map;for(let n of tm(e)){if(!n.bin.startsWith(`lzi-`))continue;let e=(t.get(n.bin)??0)+1;if(t.set(n.bin,e),e>=2)return n.bin}return null},am=(e,t)=>rm(e)?im(t):null,om=e=>{let t=[],n=/* @__PURE__ */ new Set,r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let[i,a]of Object.entries(e.scripts)){if(e.exemptedNames.has(i))continue;let o=am(i,a);o!==null&&(n.add(i),t.push({rule:`scripts/check-chain-split`,level:`error`,script:r(i),message:`脚本 ${i} 以串联拆分域门禁,${o} 出现多段`,hint:`check 脚本须为单命令形态,应统一为 ${o} check`}))}return{violations:t,hitScripts:n}},sm=e=>i(e),cm=(e,t)=>{let n=u(t)?t:f(process.cwd(),t);for(;n!==`/`;){let t=d(n,`node_modules`,`.bin`,e);if(sm(t))return t;n=l(n)}let r=process.env.PATH??``;for(let t of r.split(`:`)){if(t.length===0)continue;let n=d(t,e);if(sm(n))return n}return null},lm=e=>{let t=e.prober.probe(e.execPath,e.baseArgs);if(t===null){e.notes.push(`${e.binName} 的 help 输出不可解析,跳过命令面校验`);return}let n=[],r=t;for(let t of e.args){if(t.startsWith(`-`)||r===null)break;if(r.has(t))n.push(t),r=e.prober.probe(e.execPath,[...e.baseArgs,...n]);else{e.violations.push({rule:`scripts/dead-command`,level:`error`,script:e.scriptLabel,message:`${e.binName} 无子命令 ${t},实际命令面: ${[...r].join(` `)}`});return}}},um=e=>{let t=[],n=[],r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let[a,o]of Object.entries(e.scripts)){if(e.skipScripts.has(a))continue;let s=r(a),c=e.presumedAliveValues.has(o),l=tm(o);for(let r of l){if(r.bin===`lzi-dev-cli`&&(r.args[0]===`version`||r.args[0]===`changelog`)){t.push({rule:`scripts/legacy-command`,level:`error`,script:s,message:`${a} 指向已迁出的旧命令面: ${o}`,hint:"version 域归 `lzi-version` 与 `lzi-dependencies`,changelog 域归 `lzi-changelog`"});continue}if(r.bin===`bun`||r.bin===`bunx`){let o=r.args[0];if(r.bin===`bun`&&o!==void 0&&nm(o)){let l=f(e.repoDir,o);if(!i(l)){t.push({rule:`scripts/bin-missing`,level:`error`,script:s,message:`${a} 引用的文件不存在: ${o}`});continue}c||lm({prober:e.prober,execPath:process.execPath,baseArgs:[l],args:r.args.slice(1),binName:`bun ${o}`,scriptLabel:s,violations:t,notes:n})}continue}let l=cm(r.bin,e.repoDir);l===null?t.push({rule:`scripts/bin-missing`,level:`error`,script:s,message:`${a} 调用的命令不可解析: ${r.bin}`,hint:`请确认依赖已安装且 bin 已在依赖树或 PATH 中`}):r.bin.startsWith(`lzi-`)&&!c&&lm({prober:e.prober,execPath:l,baseArgs:[],args:r.args,binName:r.bin,scriptLabel:s,violations:t,notes:n})}}return{violations:t,notes:n}},dm=(e,t)=>{for(let n of t)if(e===n.legacyPrefix||e.startsWith(`${n.legacyPrefix} `))return n;return null},fm=e=>{let t=[],n=/* @__PURE__ */ new Set,r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let i of e.entries){if(e.exemptedNames.has(i.name))continue;let a=i.severity===`required`?`error`:`warning`,o=e.scripts[i.name];if(o===void 0){t.push({rule:`scripts/missing-required`,level:a,script:r(i.name),message:`缺少标准脚本 ${i.name}`,hint:`标准定义: ${i.definition}`});continue}let s=dm(o,e.legacyMappings);if(s!==null){n.add(i.name),t.push({rule:`scripts/legacy-command`,level:`error`,script:r(i.name),message:`${i.name} 指向已迁出的旧命令面: ${o}`,hint:`${s.note},标准定义: ${i.definition}`});continue}let c=e.extraAlternatives.get(i.name)??[];o===i.definition||(i.alternatives?.includes(o)??!1)||c.includes(o)||t.push({rule:`scripts/definition-drift`,level:a,script:r(i.name),message:`脚本 ${i.name} 定义偏离标准`,hint:`当前: ${o},标准: ${i.definition}`})}return{violations:t,legacyHitScripts:n}},pm=e=>typeof e==`object`&&!!e&&!Array.isArray(e),mm=e=>pm(e)&&Object.values(e).every(e=>typeof e==`string`),hm=e=>{if(!pm(e))return{};let t={};if(typeof e.name==`string`&&(t.name=e.name),mm(e.scripts)&&(t.scripts=e.scripts),mm(e.dependencies)&&(t.dependencies=e.dependencies),mm(e.devDependencies)&&(t.devDependencies=e.devDependencies),Array.isArray(e.workspaces)){let n=e.workspaces.filter(e=>typeof e==`string`);n.length>0&&(t.workspaces=n)}return t},gm=async e=>{if(!i(e))throw Error(`package.json 不存在: ${e}`);let t=await Bun.file(e).text();return hm(JSON.parse(t))},_m=async e=>{let t=f(e.repoDir),n=[],r=[],a={};try{let e=await ep(t);e.configPath!==null&&l(e.configPath)===t&&(a=e.config)}catch(e){n.push({rule:`scripts/config-error`,level:`error`,message:`就地配置加载失败: ${e instanceof Error?e.message:String(e)}`})}let o;try{o=await gm(d(t,`package.json`))}catch(e){return n.push({rule:`scripts/config-error`,level:`error`,message:e instanceof Error?e.message:String(e)}),{repoName:c(t),repoDir:t,profile:`unknown`,scriptCount:0,violations:n,notes:r}}let s=o.scripts??{},u=e.profileOverride??a.profile??(o.workspaces===void 0?`root`:`root-engineering`),p=e.registry.profiles[u]??[],m=new Set((a.exempt??[]).flatMap(e=>e.scripts)),h=/* @__PURE__ */ new Map;for(let e of a.extraAlternatives??[]){let t=h.get(e.script)??[];t.push(e.definition),h.set(e.script,t)}let g=/* @__PURE__ */ new Set;for(let t of Object.values(e.registry.profiles))for(let e of t??[]){g.add(e.definition);for(let t of e.alternatives??[])g.add(t)}for(let e of h.values())for(let t of e)g.add(t);let _=fm({scripts:s,entries:p,legacyMappings:e.registry.legacyMappings,exemptedNames:m,extraAlternatives:h});n.push(..._.violations);let v=om({scripts:s,exemptedNames:m});if(n.push(...v.violations),u!==`package`)for(let r of e.registry.companions)i(d(t,r.path))||n.push({rule:`scripts/config-companion-missing`,level:r.severity===`required`?`error`:`warning`,message:`兼伴配置文件缺失: ${r.path}`,hint:r.reason});let y=um({scripts:s,repoDir:t,prober:e.prober,skipScripts:/* @__PURE__ */ new Set([..._.legacyHitScripts,...v.hitScripts]),presumedAliveValues:g});if(n.push(...y.violations),r.push(...y.notes),o.workspaces===void 0){let e=Xp({scripts:s,unitDir:t});n.push(...e)}if(u===`root-engineering`&&e.skipNested!==!0){let i=e.registry.profiles.package??[];for(let a of vm(t))try{let o=(await gm(d(t,a))).scripts??{};if(Object.keys(o).length===0)continue;let s=fm({scripts:o,entries:i,legacyMappings:e.registry.legacyMappings,exemptedNames:m,extraAlternatives:h,scriptNamePrefix:a});n.push(...s.violations);let c=om({scripts:o,exemptedNames:m,scriptNamePrefix:a});n.push(...c.violations);let u=um({scripts:o,repoDir:l(d(t,a)),prober:e.prober,skipScripts:/* @__PURE__ */ new Set([...s.legacyHitScripts,...c.hitScripts]),presumedAliveValues:g,scriptNamePrefix:a});n.push(...u.violations),r.push(...u.notes);let f=Xp({scripts:o,unitDir:l(d(t,a)),scriptNamePrefix:a});n.push(...f)}catch{r.push(`嵌套 package.json 解析失败,跳过: ${a}`)}}return{repoName:c(t),repoDir:t,profile:u,scriptCount:Object.keys(s).length,violations:n,notes:[...new Set(r)]}},vm=e=>{let t=Bun.spawnSync([`git`,`ls-files`,`--`,`*/package.json`],{cwd:e,stdout:`pipe`,stderr:`pipe`});return t.exitCode===0?(t.stdout?.toString()??``).trim().split(`
213
- `).map(e=>e.trim()).filter(t=>t.length>0&&i(d(e,t))):[]},ym=e=>{let t=e.split(`
214
- `),n=t.findIndex(e=>e.trim()===`Commands:`);if(n===-1)return null;let r=/* @__PURE__ */ new Set;for(let e=n+1;e<t.length;e++){let n=t[e]??``;if(n.trim().length===0||!n.startsWith(` `))break;let i=n.trim().split(/\s+/)[0]??``;i.length===0||i.startsWith(`-`)||r.add(i)}return r.size===0?null:r};var bm=class{cache=/* @__PURE__ */ new Map;isolatedCwd=null;ensureIsolatedCwd(){return this.isolatedCwd===null&&(this.isolatedCwd=a(d(t(),`lzi-scripts-probe-`))),this.isolatedCwd}probe(e,t=[]){let n=`${e}::${t.join(` `)}`,r=this.cache.get(n);if(r!==void 0)return r;let i=``;try{let n=Bun.spawnSync([e,...t,`--help`],{cwd:this.ensureIsolatedCwd(),stdout:`pipe`,stderr:`pipe`,timeout:8e3}),r=n.stdout?.toString()??``;i=r.length>0?r:n.stderr?.toString()??``}catch{i=``}let a=ym(i);return this.cache.set(n,a),a}};const xm=(e,t)=>Bun.spawnSync([`git`,`diff`,`--quiet`,`HEAD`,`--`,t],{cwd:e,stdout:`pipe`,stderr:`pipe`}).exitCode===0,Sm=(e,t,n)=>Bun.spawnSync([`git`,`commit`,...t,`-m`,n],{cwd:e,stdout:`pipe`,stderr:`pipe`}).exitCode===0,Cm=async(e,t,n)=>{let r=0,i=async()=>{for(;r<e.length;){let t=e[r];if(r++,t===void 0)break;await n(t)}},a=Array.from({length:Math.min(t,e.length)},()=>i());await Promise.all(a)},Z={RED:`\x1B[0;31m`,GREEN:`\x1B[0;32m`,YELLOW:`\x1B[1;33m`,BLUE:`\x1B[0;34m`,RESET:`\x1B[0m`};function wm(e){return e.map(e=>{if(typeof e==`string`)return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}).join(` `)}function Q(...e){process.stdout.write(`${wm(e)}\n`)}function $(...e){process.stderr.write(`${wm(e)}\n`)}function Tm(e){let t=e;for(;;){if(i(d(t,`longzai-intelligence-globals`))||i(d(t,`lzi-architecture.yaml`)))return t;let e=d(t,`..`);if(e===t)return;t=e}}function Em(e){return e.filter(e=>i(d(e.path,`package.json`))).map(e=>({name:e.project,dir:e.path}))}async function Dm(e){if(e.projectScope!==void 0){let t=await Wp({scopeIds:[e.projectScope]});return t.ok||($(`错误: 项目范围解析失败: ${t.error.message}`),$(`提示: 请确认 .env 配置 LZI_PROJECT_REGISTRY_ROOT 与 LZI_PROJECT_SCOPE_ROOTS`),process.exit(1)),{registryRoot:t.value.registryRoot,scopeId:e.projectScope,projects:Em(t.value.projects),source:`env`}}let t=Tm(e.cwd??process.cwd());t===void 0&&($(`错误: 未定位产品群聚合根(一级子目录应存在 longzai-intelligence-globals 仓)`),$(`提示: 请自产品群内任意仓库运行,或使用 --project-scope <id> 显式圈定范围`),process.exit(1));let n=c(t),r=d(t,`longzai-intelligence-project-registry`);i(d(r,`scopes`))||($(`错误: registry 声明域缺失: ${d(r,`scopes`)}`),$(`提示: 请确认 longzai-intelligence-project-registry 仓已在聚合根就位`),process.exit(1));let a=await Wp({registryRoot:r,scopeIds:[n],scopeRoots:/* @__PURE__ */ new Map([[n,t]])});return a.ok||($(`错误: 项目范围解析失败: ${a.error.message}`),process.exit(1)),{registryRoot:r,scopeId:n,projects:Em(a.value.projects),source:`structure`}}const Om=async e=>{let t=e.concurrency??10,n=await Dm({projectScope:e.projectScope}),r=n.projects;if(Q(`${Z.BLUE}═══ lzi-scripts check-across ═══${Z.RESET}`),Q(`项目获取来源: ${n.source===`structure`?`结构锚点(cwd 上溯聚合根)`:`显式圈定(--project-scope)`}`),Q(`registry: ${n.registryRoot}`),Q(`项目范围: ${n.scopeId}`),Q(`发现 ${r.length} 个子项目,并发审计(并发 ${t})...`),Q(``),r.length===0){Q(`${Z.YELLOW}聚合根下无含 package.json 的子项目,结束${Z.RESET}`);return}let i=await lp({explicit:e.registry,repoDir:r[0]?.dir??n.registryRoot});i===null&&($(`错误: 未找到标准脚本注册真源仓`),$(`提示: 使用 --registry <path> 显式指定,或设置 LZI_SCRIPTS_REGISTRY_ROOT,或将真源仓克隆为聚合根下的兄弟目录`),process.exit(2));let a=new bm,o=[],s=0;await Cm(r,t,async e=>{let t=await _m({repoDir:e.dir,registry:i.data,prober:a});o.push(t),s++;let n=t.violations.some(e=>e.level===`error`)?`${Z.RED}✗${Z.RESET}`:t.violations.length>0?`${Z.YELLOW}⚠${Z.RESET}`:`${Z.GREEN}✓${Z.RESET}`,c=t.violations.filter(e=>e.level===`error`).length,l=t.violations.length-c;Q(` [${s}/${r.length}] ${n} ${e.name}(${c} 违例 / ${l} 警告)`)}),Q(``);let c=o.filter(e=>e.violations.some(e=>e.level===`error`)),l=o.filter(e=>e.violations.length>0&&!e.violations.some(e=>e.level===`error`)),u=o.filter(e=>e.violations.length===0);if(Q(`${Z.BLUE}═══ 普查结果 ═══${Z.RESET}`),e.format===`json`)Q(JSON.stringify({rootDir:n.registryRoot,total:o.length,clean:u.length,warnRepos:l.length,errorRepos:c.length,audits:o},null,2));else{Q(`${Z.RED}✗ 存在违例: ${c.length}${Z.RESET}`);for(let e of c){let t=e.violations.filter(e=>e.level===`error`);Q(` ${e.repoName}`);for(let e of t)Q(` ${e.rule}${e.script===void 0?``:` [${e.script}]`}: ${e.message}`)}Q(``),Q(`${Z.BLUE}汇总: ${u.length} 干净 / ${l.length} 警告 / ${c.length} 违例(共 ${o.length} 仓)${Z.RESET}`)}process.exitCode=+(c.length>0)},km=e=>{Q(`${Z.BLUE}═══ lzi-scripts check ═══${Z.RESET}`),Q(`目标仓: ${e.repoName}(${e.repoDir})`),Q(`审计档案: ${e.profile}`),Q(`脚本总数: ${e.scriptCount}`),Q(``);let t=e.violations.filter(e=>e.level===`error`),n=e.violations.filter(e=>e.level===`warning`);if(t.length===0&&n.length===0&&e.notes.length===0)Q(`${Z.GREEN}✓ 全部通过${Z.RESET}`);else{for(let e of t)Q(`${Z.RED}✗ ${e.rule}${e.script===void 0?``:` [${e.script}]`}${Z.RESET}`),Q(` ${e.message}`),e.hint!==void 0&&Q(` ${e.hint}`);for(let e of n)Q(`${Z.YELLOW}⚠ ${e.rule}${e.script===void 0?``:` [${e.script}]`}${Z.RESET}`),Q(` ${e.message}`),e.hint!==void 0&&Q(` ${e.hint}`);for(let t of e.notes)Q(`${Z.YELLOW}· ${t}${Z.RESET}`);Q(``),Q(`${Z.BLUE}汇总: ${t.length} 违例 / ${n.length} 警告 / ${e.notes.length} 说明${Z.RESET}`)}},Am=async e=>{try{let t=await ep(process.cwd()),n=t.configPath===null?process.cwd():l(t.configPath),r=await lp({explicit:e.registry,configRoot:t.config.registryRoot,repoDir:n});r===null&&($(`错误: 未找到标准脚本注册真源仓`),$(`提示: 使用 --registry <path> 显式指定真源仓根目录`),$(`提示: 或在就地配置 lzi-scripts.config.ts 声明 registryRoot`),$(`提示: 或在 .env 设置 LZI_SCRIPTS_REGISTRY_ROOT`),$(`提示: 或将真源仓克隆为同工作区兄弟目录 longzai-intelligence-scripts-registry`),process.exit(2));let i=await _m({repoDir:n,registry:r.data,prober:new bm});e.format===`json`?Q(JSON.stringify({repo:i.repoName,repoDir:i.repoDir,profile:i.profile,scriptCount:i.scriptCount,registrySource:r.source,violations:i.violations,notes:i.notes},null,2)):km(i);let a=i.violations.filter(e=>e.level===`error`).length;process.exitCode=+(a>0)}catch(e){$(`错误: ${e instanceof Error?e.message:String(e)}`),process.exit(2)}},jm=(e,t)=>{for(let n of Object.values(t.profiles))for(let t of n??[])if(t.name===e)return t;return null},Mm=(e,t)=>{if(t.length===0)return e;let n=new Set(e.split(/\s+/)),r=t.split(/\s+/).filter(e=>!(e.startsWith(`-`)&&n.has(e)));return r.length===0?e:`${e} ${r.join(` `)}`},Nm=(e,t)=>{let n=dm(e,t.legacyMappings);if(n===null)return null;let r=jm(n.targetScript,t);return r===null?null:Mm(r.definition,e.slice(n.legacyPrefix.length).trim())},Pm=(e,t,n)=>{let r=am(e,t);return r===null?null:jm(e,n)?.definition??`${r} check`},Fm=(e,t)=>{let n=[];for(let[r,i]of Object.entries(e)){let e=Nm(i,t);if(e!==null&&e!==i){n.push({scriptName:r,from:i,to:e,kind:`legacy`});continue}let a=Pm(r,i,t);a!==null&&a!==i&&n.push({scriptName:r,from:i,to:a,kind:`check-chain-split`})}return n},Im=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Lm=async(e,t)=>{let n=await Bun.file(e).text(),r=JSON.parse(n);if(!Im(r))throw Error(`package.json 顶层非对象: ${e}`);let i=Im(r.scripts)?r.scripts:{};for(let e of t)i[e.scriptName]=e.to;return r.scripts=i,await Bun.write(e,`${JSON.stringify(r,null,2)}\n`),t.length},Rm=async(e,t,n,r)=>{try{let i=(await gm(d(e.dir,`package.json`))).scripts??{},a=Fm(i,t);return a.length===0?{name:e.name,status:`skipped-nochange`,rewrites:a}:xm(e.dir,`package.json`)?r?{name:e.name,status:`success`,rewrites:a}:(await Lm(d(e.dir,`package.json`),a),Sm(e.dir,[`package.json`],n)?{name:e.name,status:`success`,rewrites:a}:{name:e.name,status:`failed`,rewrites:a,reason:`git commit 失败,保留现场待人工介入`}):{name:e.name,status:`skipped-dirty`,rewrites:a,reason:`package.json 已有未提交改动`}}catch(t){return{name:e.name,status:`failed`,rewrites:[],reason:t instanceof Error?t.message:String(t)}}},zm=async e=>{let t=e.concurrency??10,n=await Dm({projectScope:e.projectScope}),r=n.projects,i=await lp({explicit:e.registry,repoDir:r[0]?.dir??n.registryRoot});i===null&&($(`错误: 未找到标准脚本注册真源仓(同 check-across 命令解析链提示)`),process.exit(2));let a=e.message??`chore: 迁移标准化脚本至新命令面`;Q(`${Z.BLUE}═══ lzi-scripts fix-across ═══${Z.RESET}`),Q(`聚合根: ${n.registryRoot}`),Q(`发现 ${r.length} 个子项目,并发改写(并发 ${t})...`),e.dryRun&&Q(`${Z.YELLOW}[dry-run] 预览模式,不写文件、不提交${Z.RESET}`),Q(``);let o=[],s=0;await Cm(r,t,async t=>{let n=await Rm(t,i.data,a,e.dryRun);o.push(n),s++;let c=n.status===`success`?`${Z.GREEN}✓${Z.RESET}`:n.status===`failed`?`${Z.RED}✗${Z.RESET}`:`·`;Q(` [${s}/${r.length}] ${c} ${t.name}`)}),Q(``);let c=o.filter(e=>e.status===`success`),l=o.filter(e=>e.status===`skipped-dirty`),u=o.filter(e=>e.status===`skipped-nochange`),d=o.filter(e=>e.status===`failed`);Q(`${Z.BLUE}═══ 处理结果 ═══${Z.RESET}`);let f=e.dryRun?`将改写`:`已改写并提交`;Q(`${Z.GREEN}✓ ${f}: ${c.length}${Z.RESET}`);for(let e of c){Q(` ${e.name}`);for(let t of e.rewrites)Q(` ${t.scriptName}: ${t.from} → ${t.to}`)}if(l.length>0){Q(``),Q(`${Z.YELLOW}⚠ 跳过(文件已改动): ${l.length}${Z.RESET}`);for(let e of l)Q(` ${e.name}: ${e.reason}`)}if(u.length>0&&(Q(``),Q(`跳过(无可改写形态): ${u.length}`)),d.length>0){Q(``),Q(`${Z.RED}✗ 失败(需人工介入): ${d.length}${Z.RESET}`);for(let e of d)Q(` ${e.name}: ${e.reason}`)}Q(``),Q(`${Z.BLUE}汇总: ${c.length} ${f} / ${l.length} 跳过(dirty) / ${u.length} 跳过(无匹配) / ${d.length} 失败${Z.RESET}`),!e.dryRun&&c.length>0&&(Q(``),Q(`下一步:推送到远程`),Q(` bun push-all`)),d.length>0&&(process.exitCode=1)},Bm=e=>e===`legacy`?`遗留死链`:`拆分串联`,Vm=async e=>{try{let t=await ep(process.cwd()),n=t.configPath===null?process.cwd():l(t.configPath),r=await lp({explicit:e.registry,configRoot:t.config.registryRoot,repoDir:n});r===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2));let a=await gm(d(n,`package.json`)),o=a.scripts??{},s=Fm(o,r.data);if(s.length===0){Q(`${Z.GREEN}✓ 未发现可改写形态(遗留死链或拆分串联),无需改写${Z.RESET}`);return}Q(`${Z.BLUE}═══ lzi-scripts fix ═══${Z.RESET}`);for(let e of s)Q(` ${e.scriptName}(${Bm(e.kind)})`),Q(` ${Z.RED}- ${e.from}${Z.RESET}`),Q(` ${Z.GREEN}+ ${e.to}${Z.RESET}`);if(e.dryRun)Q(``),Q(`${Z.YELLOW}[dry-run] 预览模式,不写文件${Z.RESET}`);else{let e=await Lm(d(n,`package.json`),s);Q(``),Q(`${Z.GREEN}✓ 已写入 package.json(${e} 条改写)${Z.RESET}`)}let c=/* @__PURE__ */ new Set;for(let e of s){if(e.kind!==`legacy`)continue;let t=dm(e.from,r.data.legacyMappings);t!==null&&c.add(t.targetPackage)}for(let e of c)a.devDependencies?.[e]===void 0&&a.dependencies?.[e]===void 0&&Q(`${Z.YELLOW}⚠ 依赖提示: ${e} 未在 package.json 声明,请补装${Z.RESET}`);for(let e of r.data.companions)i(d(n,e.path))||Q(`${Z.YELLOW}⚠ 兼伴提示: ${e.path} 缺失(${e.reason})${Z.RESET}`)}catch(e){$(`错误: ${e instanceof Error?e.message:String(e)}`),process.exit(2)}},Hm=async()=>{let e=d(process.cwd(),`lzi-scripts.config.ts`);i(e)?(Q(`${Z.YELLOW}⚠ 配置文件已存在,拒绝覆盖: ${e}${Z.RESET}`),process.exitCode=1):(await Bun.write(e,`import { defineConfig } from '@longzai-intelligence-scripts/config';
212
+ `),m(),i()};return{start:v,stop:y,message:(e=``)=>{s=g(e??s)}}},Kf={red:e=>K.default.red(e),green:e=>K.default.green(e),yellow:e=>K.default.yellow(e),blue:e=>K.default.blue(e),cyan:e=>K.default.cyan(e),magenta:e=>K.default.magenta(e),gray:e=>K.default.gray(e),bold:e=>K.default.bold(e),dim:e=>K.default.dim(e)},qf={async select(e,t){let n=await Vf({message:e,options:t.map(e=>({value:e.value,label:e.label,hint:e.hint}))});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`string`?n:String(n)},async textInput(e,t){let n=await zf({message:e,placeholder:t?.placeholder,defaultValue:t?.defaultValue});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`string`?n:String(n)},async confirm(e,t){let n=await Bf({message:e,initialValue:t?.defaultValue??!1});return sf(n)&&(Uf(`操作已取消`),process.exit(0)),typeof n==`boolean`?n:!!n},spinner(){let e=Gf();return{start(t){e.start(t)},stop(t){e.stop(t)}}},note(e,t){Hf(e,t)},log:{info(e){Wf.info(K.default.blue(e))},success(e){Wf.success(K.default.green(e))},warn(e){Wf.warn(K.default.yellow(e))},error(e){Wf.error(K.default.red(e))},step(e){Wf.step(e)}}},Jf=[`root`,`root-engineering`,`package`],Yf=e=>{let t=u(e)?e:f(process.cwd(),e);for(;t!==`/`;){let e=d(t,`lzi-scripts.config.ts`);if(i(e))return e;t=l(t)}return null},Xf=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zf=e=>typeof e==`string`&&Jf.includes(e),Qf=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),$f=e=>{if(!Xf(e))return{};let t={};typeof e.registryRoot==`string`&&(t.registryRoot=e.registryRoot),Zf(e.profile)&&(t.profile=e.profile);let n=[];if(Array.isArray(e.exempt))for(let t of e.exempt)Xf(t)&&Qf(t.scripts)&&typeof t.reason==`string`&&t.reason.length>0&&n.push({scripts:t.scripts,reason:t.reason});n.length>0&&(t.exempt=n);let r=[];if(Array.isArray(e.extraAlternatives))for(let t of e.extraAlternatives)Xf(t)&&typeof t.script==`string`&&typeof t.definition==`string`&&r.push({script:t.script,definition:t.definition});return r.length>0&&(t.extraAlternatives=r),t},ep=async(e=process.cwd())=>{let t=Yf(e);if(t===null)return{config:{},configPath:null};try{let e=await import(t),n=typeof e==`object`&&e&&`default`in e?e.default:e;if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`配置 default export 须为对象: ${t}`);return{config:$f(n),configPath:t}}catch(e){throw e instanceof Error&&e.message.startsWith(`配置 default export`)?e:Error(`加载配置文件失败: ${t} ${e instanceof Error?e.message:String(e)}`)}},tp=d(`registry`,`index.ts`),np=e=>typeof e==`string`,rp=e=>typeof e==`object`&&!!e&&!Array.isArray(e),ip=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),ap=e=>e===`required`||e===`recommended`,op=e=>{if(!rp(e)||!np(e.name)||!np(e.definition)||!np(e.family)||!ap(e.severity)||e.alternatives!==void 0&&!ip(e.alternatives))return null;let t={name:e.name,definition:e.definition,severity:e.severity,family:e.family};return e.alternatives!==void 0&&(t.alternatives=e.alternatives),t},sp=e=>{if(!rp(e)||e.formatVersion!==1)return null;let t={};if(rp(e.profiles))for(let[n,r]of Object.entries(e.profiles)){if(n!==`root`&&n!==`root-engineering`&&n!==`package`)continue;let e=[];if(Array.isArray(r))for(let t of r){let n=op(t);n!==null&&e.push(n)}t[n]=e}let n=[];if(Array.isArray(e.companions))for(let t of e.companions)rp(t)&&np(t.path)&&np(t.reason)&&ap(t.severity)&&n.push({path:t.path,severity:t.severity,reason:t.reason});let r=[];if(Array.isArray(e.legacyMappings))for(let t of e.legacyMappings)rp(t)&&np(t.legacyPrefix)&&np(t.targetScript)&&np(t.targetPackage)&&np(t.note)&&r.push({legacyPrefix:t.legacyPrefix,targetScript:t.targetScript,targetPackage:t.targetPackage,note:t.note});return{formatVersion:1,profiles:t,companions:n,legacyMappings:r}},cp=async e=>{let t=u(e)?e:f(process.cwd(),e),n=d(t,tp);if(!i(n))return null;try{let e=await import(n),t=typeof e==`object`&&e&&`default`in e?e.default:e;return sp(t)}catch{return null}},lp=async e=>{if(e.explicit!==void 0&&e.explicit!==``){let t=await cp(e.explicit);return t===null?null:{data:t,root:f(process.cwd(),e.explicit),source:`explicit`}}if(e.configRoot!==void 0&&e.configRoot!==``){let t=await cp(f(e.repoDir,e.configRoot));if(t!==null)return{data:t,root:f(e.repoDir,e.configRoot),source:`config`}}let t=process.env.LZI_SCRIPTS_REGISTRY_ROOT;if(t!==void 0&&t!==``){let e=await cp(t);if(e!==null)return{data:e,root:f(t),source:`env`}}let n=d(l(e.repoDir),`longzai-intelligence-scripts-registry`),r=await cp(n);return r===null?null:{data:r,root:n,source:`sibling`}};function up(e){return{ok:!0,value:e}}function X(e){return{ok:!1,error:e}}const dp=/^[a-z][a-z0-9-]*$/,fp=[`edition-root`,`customer-root`,`single-repo`],pp=pc([`high`,`normal`,`low`]),mp=pc(fp),hp=/\S/,gp=nc({id:U().regex(dp,`范围 id 非法(应为小写字母开头的字母数字连字符)`),kind:mp,remotes:$s(U().regex(hp,`远程位置非法(不得为空串或纯空白)`)).default([]),tags:$s(U().regex(hp,`标签非法(不得为空串或纯空白)`)).default([]),priority:pp.default(`normal`),excludes:$s(U().min(1)).default([]),projectPriorities:dc(U(),pp).default({})}).check(e=>{e.value.kind===`single-repo`&&(e.value.excludes.length>0&&e.issues.push({code:`custom`,input:e.value,path:[`excludes`],message:`single-repo 范围禁用 excludes(声明的即唯一项目,如需排除请改用 edition-root/customer-root)`}),Object.keys(e.value.projectPriorities).length>0&&e.issues.push({code:`custom`,input:e.value,path:[`projectPriorities`],message:`single-repo 范围禁用 projectPriorities(优先级直接设于 scope 级)`}))}),_p=`scopes`,vp=/^[a-z][a-z0-9-]*\.scope\.ts$/;async function yp(e){let t=d(e,_p);if(!i(t))return X({code:`SCOPES_DIR_MISSING`,message:`声明域目录缺失:${t}(应为 project-registry 仓根下 ${_p}/,含 *.scope.ts 声明文件)`});let n=s(t).filter(e=>vp.test(e)).sort((e,t)=>e<t?-1:1);if(n.length===0)return X({code:`SCOPE_REGISTRY_EMPTY`,message:`范围声明域为空:${t}(无 *.scope.ts——范围消失属配置事故,如需清空请显式移除 registryRoot 配置)`});let r=/* @__PURE__ */ new Set,a=[];for(let e of n){let n=d(t,e),i=await import(p(n).href),o=gp.safeParse(i.default);if(!o.success){let e=o.error.issues[0];return X({code:`SCOPE_DECLARATION_INVALID`,message:`范围声明结构非法:${n}(${e?.path.join(`.`)??``} ${e?.message??``})`})}let s=e.replace(/\.scope\.ts$/,``);if(o.data.id!==s)return X({code:`SCOPE_ID_MISMATCH`,message:`范围 id 与文件名不一致:${n}(id=${o.data.id},应为 ${s}——命名即身份)`});if(r.has(o.data.id))return X({code:`SCOPE_ID_CONFLICT`,message:`范围 id 重复:${o.data.id}(声明域内同 id 即同范围,不得重复声明)`});r.add(o.data.id),a.push(o.data)}return up(a)}const bp=`LZI_PROJECT_REGISTRY_ROOT`,xp=`LZI_PROJECT_MARKDOWN_REGISTRY_ROOT`,Sp=`LZI_PROJECT_SCOPE_ROOTS`,Cp=`LZI_PROJECT_MARKDOWN_SCOPE_ROOTS`,wp=/^[a-z][a-z0-9-]*=\/\S+$/;function Tp(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e!==``)}function Ep(e){let t=/* @__PURE__ */ new Map;for(let n of Tp(e)){if(!wp.test(n))return X({message:`范围根映射段非法:${n}(应为 id=绝对路径 形态,id 为小写字母开头的字母数字连字符)`});let e=n.indexOf(`=`),r=n.slice(0,e),i=f(n.slice(e+1));if(t.has(r))return X({message:`范围根映射 id 重复:${r}(同一范围不得重复映射)`});t.set(r,i)}return up(t)}function Dp(e,t,n,r){return e!==void 0&&t!==void 0&&e.trim()!==t.trim()?X({code:`ACQUISITION_ENV_INVALID`,message:`环境变量双名冲突:${n} 与 ${r} 同时在场且值不一致(请统一使用新名 ${n})`,variables:[n,r]}):up({value:e??t,variables:e===void 0?t===void 0?[]:[r]:[n]})}function Op(e=process.env){let t=Dp(e[bp],e[xp],bp,xp);if(!t.ok)return X(t.error);let n=Dp(e[Sp],e[Cp],Sp,Cp);if(!n.ok)return X(n.error);let r;if(n.value.value!==void 0){let e=Ep(n.value.value);if(!e.ok)return X({code:`ACQUISITION_ENV_INVALID`,message:e.error.message,variables:[...n.value.variables]});r=e.value}return up({registryRoot:t.value.value===void 0?void 0:f(t.value.value.trim()),scopeRoots:r})}const kp=/^[A-Za-z0-9_][A-Za-z0-9._-]*$/;function Ap(e,t){return e.name<t.name?-1:+(e.name>t.name)}function jp(e){return i(d(e,`.git`))}function Mp(e,t){return t.get(e.id)}function Np(e,t,n,r){if(n.has(e.id))return X({code:`SCOPE_ID_CONFLICT`,message:`范围 id 冲突:${e.id}(声明域内不得重复)`});n.add(e.id);let a=Mp(e,t);return a===void 0?X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${e.id}(声明零本地路径,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 或 LZI_PROJECT_MARKDOWN_SCOPE_ROOTS 补 id=绝对路径 映射)`}):i(a)?up({def:e,root:a,sourceId:r}):X({code:`DIR_NOT_FOUND`,message:`范围根不存在:${a}(范围 ${e.id} 机内映射目标)`})}function Pp(e,t){let n=[],r=[];for(let i of[...s(e.root,{withFileTypes:!0})].sort(Ap)){if(i.name.startsWith(`.`))continue;if(!i.isDirectory()){r.push({scope:e.def.id,entry:i.name,reason:`ROOT_FILE`});continue}if(e.def.excludes.includes(i.name)){r.push({scope:e.def.id,entry:i.name,reason:`EXCLUDED`});continue}let a=d(e.root,i.name);t!==void 0&&f(a)===f(t)?r.push({scope:e.def.id,entry:i.name,reason:`EXCLUDED_PATH`}):!jp(a)||!kp.test(i.name)?r.push({scope:e.def.id,entry:i.name,reason:`NOT_A_REPO`}):n.push({scope:e.def.id,scopeKind:e.def.kind,priority:e.def.projectPriorities[i.name]??e.def.priority,sourceId:e.sourceId,project:i.name,path:a})}return{scope:e.def.id,scopeKind:e.def.kind,priority:e.def.priority,scopeRoot:e.root,sourceId:e.sourceId,projects:n,skipped:r}}function Fp(e,t){let n=c(e.root);return t!==void 0&&f(e.root)===f(t)||!jp(e.root)||!kp.test(n)?X({code:`SCOPE_ROOT_INVALID`,message:`single-repo 范围根非法:${e.root}(应为含 .git 的合规项目目录,且不得为排除路径)`}):up({scope:e.def.id,scopeKind:`single-repo`,priority:e.def.priority,scopeRoot:e.root,sourceId:e.sourceId,projects:[{scope:e.def.id,scopeKind:`single-repo`,priority:e.def.priority,sourceId:e.sourceId,project:n,path:e.root}]})}function Ip(e,t,n){let r=[],i=[],a=/* @__PURE__ */ new Set,o=/* @__PURE__ */ new Map;for(let s of e){let e=Np(s,n.scopeRoots,a,n.sourceId);if(!e.ok)return X(e.error);let c,l=[];if(s.kind===`single-repo`){let n=Fp(e.value,t);if(!n.ok)return X(n.error);c=n.value}else{let n=Pp(e.value,t);c=n,l=n.skipped}for(let e of c.projects){let t=o.get(e.project);if(t!==void 0)return X({code:`PROJECT_NAME_CONFLICT`,message:`项目名跨范围冲突:${e.project}(${t} 与 ${e.scope} 均含此名;归档平铺要求项目名全局唯一,可在后登记范围的 excludes 中显式排除)`});o.set(e.project,e.scope)}r.push(c),i.push(...l)}return r.sort((e,t)=>e.scope<t.scope?-1:+(e.scope>t.scope)),i.sort((e,t)=>e.scope===t.scope?e.entry<t.entry?-1:+(e.entry>t.entry):e.scope<t.scope?-1:1),up({scopes:r,skipped:i})}const Lp=n(g);function Rp(e){return typeof e==`object`&&!!e&&`stderr`in e}async function zp(e,t){try{let{stdout:n}=await Lp(`git`,[`-C`,e,...t],{encoding:`utf8`});return{ok:!0,stdout:n.trim()}}catch(e){let t=Rp(e)?e.stderr:void 0;return{ok:!1,stderr:typeof t==`string`?t:String(e)}}}function Bp(e){return typeof e==`object`&&!!e}function Vp(e){let t=d(e,`package.json`);if(!i(t))return{packageName:null,description:null};let n;try{n=JSON.parse(o(t,`utf8`))}catch{return{packageName:null,description:null}}if(!Bp(n))return{packageName:null,description:null};let r=n.name,a=n.description;return{packageName:typeof r==`string`&&r!==``?r:null,description:typeof a==`string`&&a!==``?a:null}}async function Hp(e){let t=await zp(e.path,[`rev-parse`,`--git-dir`]);if(!t.ok)return X({code:`INSPECT_FAILED`,scope:e.scope,project:e.project,message:`仓库健康探测失败:${e.path}(${t.stderr})`});let n=await zp(e.path,[`remote`,`get-url`,`origin`]),r=n.ok&&n.stdout!==``?n.stdout:null,i=Vp(e.path);return up({scope:e.scope,scopeKind:e.scopeKind,priority:e.priority,sourceId:e.sourceId,project:e.project,projectPath:e.path,remoteUrl:r,packageName:i.packageName,description:i.description})}async function Up(e,t,n){let r=Math.max(1,Math.floor(t)),i=[],a=0;for(;a<e.length;){let t=e.slice(a,a+r),o=await Promise.all(t.map((e,t)=>n(e,a+t)));i.push(...o),a+=r}return i}async function Wp(e={}){let t=Op(e.processEnv??process.env);if(!t.ok)return X(t.error);let n=e.registryRoot??t.value.registryRoot;if(n===void 0)return X({code:`ACQUISITION_ENV_INVALID`,message:`未定位 registry 仓根(请在 .env 配置 LZI_PROJECT_REGISTRY_ROOT 或显式传入 registryRoot)`});let r=await yp(n);if(!r.ok)return X(r.error);let i=e.scopeRoots??t.value.scopeRoots??/* @__PURE__ */ new Map,a=e.scopeIds===void 0?void 0:new Set(e.scopeIds),o=a===void 0?[]:[...a].filter(e=>!r.value.some(t=>t.id===e));if(o.length>0)return X({code:`SCOPE_SELECTOR_UNKNOWN`,message:`圈定的范围 id 不在声明域:${o.join(`、`)}(合法范围 id:${r.value.map(e=>e.id).join(`、`)})`});let s=r.value,c=[];if(a!==void 0){s=r.value.filter(e=>a.has(e.id));let e=s.filter(e=>!i.has(e.id)).map(e=>e.id);if(e.length>0)return X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${e.join(`、`)}(声明零本地路径,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 补 id=绝对路径 映射)`})}else if(s=r.value.filter(e=>i.has(e.id)),c=r.value.filter(e=>!i.has(e.id)).map(e=>e.id),s.length===0)return X({code:`SCOPE_ROOT_UNMAPPED`,message:`范围根未映射:${r.value.map(e=>e.id).join(`、`)}(本机未配置任何范围根映射,请在 .env 的 LZI_PROJECT_SCOPE_ROOTS 补 id=绝对路径 映射)`});let l=Ip(s,e.excludePath,{scopeRoots:i,sourceId:`scope-declarations`});if(!l.ok)return X(l.error);let u=l.value.scopes.flatMap(e=>[...e.projects]),d=[],f=/* @__PURE__ */ new Map;if(e.inspect===!0){let e=await Up(u,16,async e=>Hp(e));for(let t of e)t.ok?f.set(t.value.project,t.value):d.push({scope:t.error.scope,project:t.error.project,message:t.error.message})}let p=u.map(e=>{let t=f.get(e.project);return{scope:e.scope,scopeKind:e.scopeKind,priority:e.priority,sourceId:e.sourceId,project:e.project,path:e.path,remoteUrl:t?.remoteUrl??null,packageName:t?.packageName??null,description:t?.description??null}});return up({registryRoot:n,scopes:l.value.scopes,projects:p,skipped:l.value.skipped,unmappedScopes:c,inspectFailures:d,inspected:e.inspect===!0})}function Gp(e){return typeof e==`object`&&!!e}function Kp(e){return typeof e==`object`&&!!e}function qp(e){return e.split(/&&|\|\||;|\|/).map(e=>e.trim()).filter(e=>e.length>0)}function Jp(e){let t=e.split(/\s+/).filter(e=>e.length>0);for(let e of t)if(!/^[A-Za-z_][A-Za-z0-9_]*=/.test(e))return e;return null}function Yp(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}const Xp=async e=>{let t=d(e,`oxlint.config.ts`);if(!i(t))return null;try{let e=await import(p(t).href);if(!Gp(e))return null;let n=e.default;if(n?.rules===void 0)return null;let r=n.rules[`@longzai-intelligence-oxlint/package-json-plugin/require-build-script-toolchain`];if(!Array.isArray(r)||r.length<2)return null;let i=r[1];return Kp(i)?i:null}catch{return null}},Zp=async e=>{let t=await Xp(e.unitDir);if(t===null)return[];let n=[{key:`dev`,list:Yp(t.dev)},{key:`build`,list:Yp(t.build)},{key:`build:prod`,list:Yp(t.buildProd)}],r=[];for(let t of n){if(t.list.length===0)continue;let n=e.scripts[t.key];if(typeof n==`string`)for(let i of qp(n)){let n=Jp(i);n!==null&&!t.list.includes(n)&&r.push({rule:`scripts/build-toolchain-mismatch`,level:`warning`,script:e.scriptNamePrefix===void 0?t.key:`${e.scriptNamePrefix}:${t.key}`,message:`命令 "${n}" 不在本单元预设允许的清单内(允许 ${t.list.join(`、`)}),build 脚本形态按单元所属预设校验`,hint:`改用本单元预设允许的命令,判据经单元 oxlint 配置流转,依据 ADR 0221`})}}return r},Qp=/* @__PURE__ */ new Set([`cd`,`exit`,`export`,`echo`,`true`,`false`,`set`,`wait`]),$p=e=>e.startsWith(`"`)&&e.endsWith(`"`)&&e.length>=2||e.startsWith(`'`)&&e.endsWith(`'`)&&e.length>=2?e.slice(1,-1):e,em=e=>/^[A-Za-z_][A-Za-z0-9_]*=/.test(e),tm=e=>{let t=e.trim().split(/\s+/).filter(e=>e.length>0).map($p),n=0;for(;n<t.length&&em(t[n]??``);)n++;let r=t[n];return r===void 0||r.length===0?null:{bin:r,args:t.slice(n+1)}},nm=e=>{let t=e.split(/\s*(?:&&|\|\||;)\s*/).map(e=>e.trim()).filter(e=>e.length>0),n=[];for(let e of t){let t=tm(e);t!==null&&!Qp.has(t.bin)&&n.push(t)}return n},rm=e=>/\.(?:mjs|cjs|js|ts|mts|cts)$/.test(e),im=e=>e===`check`||e.endsWith(`:check`),am=e=>{let t=/* @__PURE__ */ new Map;for(let n of nm(e)){if(!n.bin.startsWith(`lzi-`))continue;let e=(t.get(n.bin)??0)+1;if(t.set(n.bin,e),e>=2)return n.bin}return null},om=(e,t)=>im(e)?am(t):null,sm=e=>{let t=[],n=/* @__PURE__ */ new Set,r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let[i,a]of Object.entries(e.scripts)){if(e.exemptedNames.has(i))continue;let o=om(i,a);o!==null&&(n.add(i),t.push({rule:`scripts/check-chain-split`,level:`error`,script:r(i),message:`脚本 ${i} 以串联拆分域门禁,${o} 出现多段`,hint:`check 脚本须为单命令形态,应统一为 ${o} check`}))}return{violations:t,hitScripts:n}},cm=e=>i(e),lm=(e,t)=>{let n=u(t)?t:f(process.cwd(),t);for(;n!==`/`;){let t=d(n,`node_modules`,`.bin`,e);if(cm(t))return t;n=l(n)}let r=process.env.PATH??``;for(let t of r.split(`:`)){if(t.length===0)continue;let n=d(t,e);if(cm(n))return n}return null},um=e=>{let t=e.prober.probe(e.execPath,e.baseArgs);if(t===null){e.notes.push(`${e.binName} 的 help 输出不可解析,跳过命令面校验`);return}let n=[],r=t;for(let t of e.args){if(t.startsWith(`-`)||r===null)break;if(r.has(t))n.push(t),r=e.prober.probe(e.execPath,[...e.baseArgs,...n]);else{e.violations.push({rule:`scripts/dead-command`,level:`error`,script:e.scriptLabel,message:`${e.binName} 无子命令 ${t},实际命令面: ${[...r].join(` `)}`});return}}},dm=e=>{let t=[],n=[],r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let[a,o]of Object.entries(e.scripts)){if(e.skipScripts.has(a))continue;let s=r(a),c=e.presumedAliveValues.has(o),l=nm(o);for(let r of l){if(r.bin===`lzi-dev-cli`&&(r.args[0]===`version`||r.args[0]===`changelog`)){t.push({rule:`scripts/legacy-command`,level:`error`,script:s,message:`${a} 指向已迁出的旧命令面: ${o}`,hint:"version 域归 `lzi-version` 与 `lzi-dependencies`,changelog 域归 `lzi-changelog`"});continue}if(r.bin===`bun`||r.bin===`bunx`){let o=r.args[0];if(r.bin===`bun`&&o!==void 0&&rm(o)){let l=f(e.repoDir,o);if(!i(l)){t.push({rule:`scripts/bin-missing`,level:`error`,script:s,message:`${a} 引用的文件不存在: ${o}`});continue}c||um({prober:e.prober,execPath:process.execPath,baseArgs:[l],args:r.args.slice(1),binName:`bun ${o}`,scriptLabel:s,violations:t,notes:n})}continue}let l=lm(r.bin,e.repoDir);l===null?t.push({rule:`scripts/bin-missing`,level:`error`,script:s,message:`${a} 调用的命令不可解析: ${r.bin}`,hint:`请确认依赖已安装且 bin 已在依赖树或 PATH 中`}):r.bin.startsWith(`lzi-`)&&!c&&um({prober:e.prober,execPath:l,baseArgs:[],args:r.args,binName:r.bin,scriptLabel:s,violations:t,notes:n})}}return{violations:t,notes:n}},fm=(e,t)=>{for(let n of t)if(e===n.legacyPrefix||e.startsWith(`${n.legacyPrefix} `))return n;return null},pm=e=>{let t=[],n=/* @__PURE__ */ new Set,r=t=>e.scriptNamePrefix===void 0?t:`${e.scriptNamePrefix} :: ${t}`;for(let i of e.entries){if(e.exemptedNames.has(i.name))continue;let a=i.severity===`required`?`error`:`warning`,o=e.scripts[i.name];if(o===void 0){t.push({rule:`scripts/missing-required`,level:a,script:r(i.name),message:`缺少标准脚本 ${i.name}`,hint:`标准定义: ${i.definition}`});continue}let s=fm(o,e.legacyMappings);if(s!==null){n.add(i.name),t.push({rule:`scripts/legacy-command`,level:`error`,script:r(i.name),message:`${i.name} 指向已迁出的旧命令面: ${o}`,hint:`${s.note},标准定义: ${i.definition}`});continue}let c=e.extraAlternatives.get(i.name)??[];o===i.definition||(i.alternatives?.includes(o)??!1)||c.includes(o)||t.push({rule:`scripts/definition-drift`,level:a,script:r(i.name),message:`脚本 ${i.name} 定义偏离标准`,hint:`当前: ${o},标准: ${i.definition}`})}return{violations:t,legacyHitScripts:n}},mm=e=>typeof e==`object`&&!!e&&!Array.isArray(e),hm=e=>mm(e)&&Object.values(e).every(e=>typeof e==`string`),gm=e=>{if(!mm(e))return{};let t={};if(typeof e.name==`string`&&(t.name=e.name),hm(e.scripts)&&(t.scripts=e.scripts),hm(e.dependencies)&&(t.dependencies=e.dependencies),hm(e.devDependencies)&&(t.devDependencies=e.devDependencies),Array.isArray(e.workspaces)){let n=e.workspaces.filter(e=>typeof e==`string`);n.length>0&&(t.workspaces=n)}return t},_m=async e=>{if(!i(e))throw Error(`package.json 不存在: ${e}`);let t=await Bun.file(e).text();return gm(JSON.parse(t))},vm=async e=>{let t=f(e.repoDir),n=[],r=[],a={};try{let e=await ep(t);e.configPath!==null&&l(e.configPath)===t&&(a=e.config)}catch(e){n.push({rule:`scripts/config-error`,level:`error`,message:`就地配置加载失败: ${e instanceof Error?e.message:String(e)}`})}let o;try{o=await _m(d(t,`package.json`))}catch(e){return n.push({rule:`scripts/config-error`,level:`error`,message:e instanceof Error?e.message:String(e)}),{repoName:c(t),repoDir:t,profile:`unknown`,scriptCount:0,violations:n,notes:r}}let s=o.scripts??{},u=e.profileOverride??a.profile??(o.workspaces===void 0?`root`:`root-engineering`),p=e.registry.profiles[u]??[],m=new Set((a.exempt??[]).flatMap(e=>e.scripts)),h=/* @__PURE__ */ new Map;for(let e of a.extraAlternatives??[]){let t=h.get(e.script)??[];t.push(e.definition),h.set(e.script,t)}let g=/* @__PURE__ */ new Set;for(let t of Object.values(e.registry.profiles))for(let e of t??[]){g.add(e.definition);for(let t of e.alternatives??[])g.add(t)}for(let e of h.values())for(let t of e)g.add(t);let _=pm({scripts:s,entries:p,legacyMappings:e.registry.legacyMappings,exemptedNames:m,extraAlternatives:h});n.push(..._.violations);let v=sm({scripts:s,exemptedNames:m});if(n.push(...v.violations),u!==`package`)for(let r of e.registry.companions)i(d(t,r.path))||n.push({rule:`scripts/config-companion-missing`,level:r.severity===`required`?`error`:`warning`,message:`兼伴配置文件缺失: ${r.path}`,hint:r.reason});let y=dm({scripts:s,repoDir:t,prober:e.prober,skipScripts:/* @__PURE__ */ new Set([..._.legacyHitScripts,...v.hitScripts]),presumedAliveValues:g});if(n.push(...y.violations),r.push(...y.notes),o.workspaces===void 0){let e=await Zp({scripts:s,unitDir:t});n.push(...e)}if(u===`root-engineering`&&e.skipNested!==!0){let i=e.registry.profiles.package??[];for(let a of ym(t))try{let o=(await _m(d(t,a))).scripts??{};if(Object.keys(o).length===0)continue;let s=pm({scripts:o,entries:i,legacyMappings:e.registry.legacyMappings,exemptedNames:m,extraAlternatives:h,scriptNamePrefix:a});n.push(...s.violations);let c=sm({scripts:o,exemptedNames:m,scriptNamePrefix:a});n.push(...c.violations);let u=dm({scripts:o,repoDir:l(d(t,a)),prober:e.prober,skipScripts:/* @__PURE__ */ new Set([...s.legacyHitScripts,...c.hitScripts]),presumedAliveValues:g,scriptNamePrefix:a});n.push(...u.violations),r.push(...u.notes);let f=await Zp({scripts:o,unitDir:l(d(t,a)),scriptNamePrefix:a});n.push(...f)}catch{r.push(`嵌套 package.json 解析失败,跳过: ${a}`)}}return{repoName:c(t),repoDir:t,profile:u,scriptCount:Object.keys(s).length,violations:n,notes:[...new Set(r)]}},ym=e=>{let t=Bun.spawnSync([`git`,`ls-files`,`--`,`*/package.json`],{cwd:e,stdout:`pipe`,stderr:`pipe`});return t.exitCode===0?(t.stdout?.toString()??``).trim().split(`
213
+ `).map(e=>e.trim()).filter(t=>t.length>0&&i(d(e,t))):[]},bm=e=>{let t=e.split(`
214
+ `),n=t.findIndex(e=>e.trim()===`Commands:`);if(n===-1)return null;let r=/* @__PURE__ */ new Set;for(let e=n+1;e<t.length;e++){let n=t[e]??``;if(n.trim().length===0||!n.startsWith(` `))break;let i=n.trim().split(/\s+/)[0]??``;i.length===0||i.startsWith(`-`)||r.add(i)}return r.size===0?null:r};var xm=class{cache=/* @__PURE__ */ new Map;isolatedCwd=null;ensureIsolatedCwd(){return this.isolatedCwd===null&&(this.isolatedCwd=a(d(t(),`lzi-scripts-probe-`))),this.isolatedCwd}probe(e,t=[]){let n=`${e}::${t.join(` `)}`,r=this.cache.get(n);if(r!==void 0)return r;let i=``;try{let n=Bun.spawnSync([e,...t,`--help`],{cwd:this.ensureIsolatedCwd(),stdout:`pipe`,stderr:`pipe`,timeout:8e3}),r=n.stdout?.toString()??``;i=r.length>0?r:n.stderr?.toString()??``}catch{i=``}let a=bm(i);return this.cache.set(n,a),a}};const Sm=(e,t)=>Bun.spawnSync([`git`,`diff`,`--quiet`,`HEAD`,`--`,t],{cwd:e,stdout:`pipe`,stderr:`pipe`}).exitCode===0,Cm=(e,t,n)=>Bun.spawnSync([`git`,`commit`,...t,`-m`,n],{cwd:e,stdout:`pipe`,stderr:`pipe`}).exitCode===0,wm=async(e,t,n)=>{let r=0,i=async()=>{for(;r<e.length;){let t=e[r];if(r++,t===void 0)break;await n(t)}},a=Array.from({length:Math.min(t,e.length)},()=>i());await Promise.all(a)},Z={RED:`\x1B[0;31m`,GREEN:`\x1B[0;32m`,YELLOW:`\x1B[1;33m`,BLUE:`\x1B[0;34m`,RESET:`\x1B[0m`};function Tm(e){return e.map(e=>{if(typeof e==`string`)return e;if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch{return String(e)}}).join(` `)}function Q(...e){process.stdout.write(`${Tm(e)}\n`)}function $(...e){process.stderr.write(`${Tm(e)}\n`)}function Em(e){let t=e;for(;;){if(i(d(t,`longzai-intelligence-globals`))||i(d(t,`lzi-architecture.yaml`)))return t;let e=d(t,`..`);if(e===t)return;t=e}}function Dm(e){return e.filter(e=>i(d(e.path,`package.json`))).map(e=>({name:e.project,dir:e.path}))}async function Om(e){if(e.projectScope!==void 0){let t=await Wp({scopeIds:[e.projectScope]});return t.ok||($(`错误: 项目范围解析失败: ${t.error.message}`),$(`提示: 请确认 .env 配置 LZI_PROJECT_REGISTRY_ROOT 与 LZI_PROJECT_SCOPE_ROOTS`),process.exit(1)),{registryRoot:t.value.registryRoot,scopeId:e.projectScope,projects:Dm(t.value.projects),source:`env`}}let t=Em(e.cwd??process.cwd());t===void 0&&($(`错误: 未定位产品群聚合根(一级子目录应存在 longzai-intelligence-globals 仓)`),$(`提示: 请自产品群内任意仓库运行,或使用 --project-scope <id> 显式圈定范围`),process.exit(1));let n=c(t),r=d(t,`longzai-intelligence-project-registry`);i(d(r,`scopes`))||($(`错误: registry 声明域缺失: ${d(r,`scopes`)}`),$(`提示: 请确认 longzai-intelligence-project-registry 仓已在聚合根就位`),process.exit(1));let a=await Wp({registryRoot:r,scopeIds:[n],scopeRoots:/* @__PURE__ */ new Map([[n,t]])});return a.ok||($(`错误: 项目范围解析失败: ${a.error.message}`),process.exit(1)),{registryRoot:r,scopeId:n,projects:Dm(a.value.projects),source:`structure`}}const km=async e=>{let t=e.concurrency??10,n=await Om({projectScope:e.projectScope}),r=n.projects;if(Q(`${Z.BLUE}═══ lzi-scripts check-across ═══${Z.RESET}`),Q(`项目获取来源: ${n.source===`structure`?`结构锚点(cwd 上溯聚合根)`:`显式圈定(--project-scope)`}`),Q(`registry: ${n.registryRoot}`),Q(`项目范围: ${n.scopeId}`),Q(`发现 ${r.length} 个子项目,并发审计(并发 ${t})...`),Q(``),r.length===0){Q(`${Z.YELLOW}聚合根下无含 package.json 的子项目,结束${Z.RESET}`);return}let i=await lp({explicit:e.registry,repoDir:r[0]?.dir??n.registryRoot});i===null&&($(`错误: 未找到标准脚本注册真源仓`),$(`提示: 使用 --registry <path> 显式指定,或设置 LZI_SCRIPTS_REGISTRY_ROOT,或将真源仓克隆为聚合根下的兄弟目录`),process.exit(2));let a=new xm,o=[],s=0;await wm(r,t,async e=>{let t=await vm({repoDir:e.dir,registry:i.data,prober:a});o.push(t),s++;let n=t.violations.some(e=>e.level===`error`)?`${Z.RED}✗${Z.RESET}`:t.violations.length>0?`${Z.YELLOW}⚠${Z.RESET}`:`${Z.GREEN}✓${Z.RESET}`,c=t.violations.filter(e=>e.level===`error`).length,l=t.violations.length-c;Q(` [${s}/${r.length}] ${n} ${e.name}(${c} 违例 / ${l} 警告)`)}),Q(``);let c=o.filter(e=>e.violations.some(e=>e.level===`error`)),l=o.filter(e=>e.violations.length>0&&!e.violations.some(e=>e.level===`error`)),u=o.filter(e=>e.violations.length===0);if(Q(`${Z.BLUE}═══ 普查结果 ═══${Z.RESET}`),e.format===`json`)Q(JSON.stringify({rootDir:n.registryRoot,total:o.length,clean:u.length,warnRepos:l.length,errorRepos:c.length,audits:o},null,2));else{Q(`${Z.RED}✗ 存在违例: ${c.length}${Z.RESET}`);for(let e of c){let t=e.violations.filter(e=>e.level===`error`);Q(` ${e.repoName}`);for(let e of t)Q(` ${e.rule}${e.script===void 0?``:` [${e.script}]`}: ${e.message}`)}Q(``),Q(`${Z.BLUE}汇总: ${u.length} 干净 / ${l.length} 警告 / ${c.length} 违例(共 ${o.length} 仓)${Z.RESET}`)}process.exitCode=+(c.length>0)},Am=e=>{Q(`${Z.BLUE}═══ lzi-scripts check ═══${Z.RESET}`),Q(`目标仓: ${e.repoName}(${e.repoDir})`),Q(`审计档案: ${e.profile}`),Q(`脚本总数: ${e.scriptCount}`),Q(``);let t=e.violations.filter(e=>e.level===`error`),n=e.violations.filter(e=>e.level===`warning`);if(t.length===0&&n.length===0&&e.notes.length===0)Q(`${Z.GREEN}✓ 全部通过${Z.RESET}`);else{for(let e of t)Q(`${Z.RED}✗ ${e.rule}${e.script===void 0?``:` [${e.script}]`}${Z.RESET}`),Q(` ${e.message}`),e.hint!==void 0&&Q(` ${e.hint}`);for(let e of n)Q(`${Z.YELLOW}⚠ ${e.rule}${e.script===void 0?``:` [${e.script}]`}${Z.RESET}`),Q(` ${e.message}`),e.hint!==void 0&&Q(` ${e.hint}`);for(let t of e.notes)Q(`${Z.YELLOW}· ${t}${Z.RESET}`);Q(``),Q(`${Z.BLUE}汇总: ${t.length} 违例 / ${n.length} 警告 / ${e.notes.length} 说明${Z.RESET}`)}},jm=async e=>{try{let t=await ep(process.cwd()),n=t.configPath===null?process.cwd():l(t.configPath),r=await lp({explicit:e.registry,configRoot:t.config.registryRoot,repoDir:n});r===null&&($(`错误: 未找到标准脚本注册真源仓`),$(`提示: 使用 --registry <path> 显式指定真源仓根目录`),$(`提示: 或在就地配置 lzi-scripts.config.ts 声明 registryRoot`),$(`提示: 或在 .env 设置 LZI_SCRIPTS_REGISTRY_ROOT`),$(`提示: 或将真源仓克隆为同工作区兄弟目录 longzai-intelligence-scripts-registry`),process.exit(2));let i=await vm({repoDir:n,registry:r.data,prober:new xm});e.format===`json`?Q(JSON.stringify({repo:i.repoName,repoDir:i.repoDir,profile:i.profile,scriptCount:i.scriptCount,registrySource:r.source,violations:i.violations,notes:i.notes},null,2)):Am(i);let a=i.violations.filter(e=>e.level===`error`).length;process.exitCode=+(a>0)}catch(e){$(`错误: ${e instanceof Error?e.message:String(e)}`),process.exit(2)}},Mm=(e,t)=>{for(let n of Object.values(t.profiles))for(let t of n??[])if(t.name===e)return t;return null},Nm=(e,t)=>{if(t.length===0)return e;let n=new Set(e.split(/\s+/)),r=t.split(/\s+/).filter(e=>!(e.startsWith(`-`)&&n.has(e)));return r.length===0?e:`${e} ${r.join(` `)}`},Pm=(e,t)=>{let n=fm(e,t.legacyMappings);if(n===null)return null;let r=Mm(n.targetScript,t);return r===null?null:Nm(r.definition,e.slice(n.legacyPrefix.length).trim())},Fm=(e,t,n)=>{let r=om(e,t);return r===null?null:Mm(e,n)?.definition??`${r} check`},Im=(e,t)=>{let n=[];for(let[r,i]of Object.entries(e)){let e=Pm(i,t);if(e!==null&&e!==i){n.push({scriptName:r,from:i,to:e,kind:`legacy`});continue}let a=Fm(r,i,t);a!==null&&a!==i&&n.push({scriptName:r,from:i,to:a,kind:`check-chain-split`})}return n},Lm=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Rm=async(e,t)=>{let n=await Bun.file(e).text(),r=JSON.parse(n);if(!Lm(r))throw Error(`package.json 顶层非对象: ${e}`);let i={};if(Lm(r.scripts))for(let[e,t]of Object.entries(r.scripts))typeof t==`string`&&(i[e]=t);for(let e of t)i[e.scriptName]=e.to;return r.scripts=i,await Bun.write(e,`${JSON.stringify(r,null,2)}\n`),t.length},zm=async(e,t,n,r)=>{try{let i=(await _m(d(e.dir,`package.json`))).scripts??{},a=Im(i,t);return a.length===0?{name:e.name,status:`skipped-nochange`,rewrites:a}:Sm(e.dir,`package.json`)?r?{name:e.name,status:`success`,rewrites:a}:(await Rm(d(e.dir,`package.json`),a),Cm(e.dir,[`package.json`],n)?{name:e.name,status:`success`,rewrites:a}:{name:e.name,status:`failed`,rewrites:a,reason:`git commit 失败,保留现场待人工介入`}):{name:e.name,status:`skipped-dirty`,rewrites:a,reason:`package.json 已有未提交改动`}}catch(t){return{name:e.name,status:`failed`,rewrites:[],reason:t instanceof Error?t.message:String(t)}}},Bm=async e=>{let t=e.concurrency??10,n=await Om({projectScope:e.projectScope}),r=n.projects,i=await lp({explicit:e.registry,repoDir:r[0]?.dir??n.registryRoot});i===null&&($(`错误: 未找到标准脚本注册真源仓(同 check-across 命令解析链提示)`),process.exit(2));let a=e.message??`chore: 迁移标准化脚本至新命令面`;Q(`${Z.BLUE}═══ lzi-scripts fix-across ═══${Z.RESET}`),Q(`聚合根: ${n.registryRoot}`),Q(`发现 ${r.length} 个子项目,并发改写(并发 ${t})...`),e.dryRun&&Q(`${Z.YELLOW}[dry-run] 预览模式,不写文件、不提交${Z.RESET}`),Q(``);let o=[],s=0;await wm(r,t,async t=>{let n=await zm(t,i.data,a,e.dryRun);o.push(n),s++;let c=n.status===`success`?`${Z.GREEN}✓${Z.RESET}`:n.status===`failed`?`${Z.RED}✗${Z.RESET}`:`·`;Q(` [${s}/${r.length}] ${c} ${t.name}`)}),Q(``);let c=o.filter(e=>e.status===`success`),l=o.filter(e=>e.status===`skipped-dirty`),u=o.filter(e=>e.status===`skipped-nochange`),d=o.filter(e=>e.status===`failed`);Q(`${Z.BLUE}═══ 处理结果 ═══${Z.RESET}`);let f=e.dryRun?`将改写`:`已改写并提交`;Q(`${Z.GREEN}✓ ${f}: ${c.length}${Z.RESET}`);for(let e of c){Q(` ${e.name}`);for(let t of e.rewrites)Q(` ${t.scriptName}: ${t.from} → ${t.to}`)}if(l.length>0){Q(``),Q(`${Z.YELLOW}⚠ 跳过(文件已改动): ${l.length}${Z.RESET}`);for(let e of l)Q(` ${e.name}: ${e.reason}`)}if(u.length>0&&(Q(``),Q(`跳过(无可改写形态): ${u.length}`)),d.length>0){Q(``),Q(`${Z.RED}✗ 失败(需人工介入): ${d.length}${Z.RESET}`);for(let e of d)Q(` ${e.name}: ${e.reason}`)}Q(``),Q(`${Z.BLUE}汇总: ${c.length} ${f} / ${l.length} 跳过(dirty) / ${u.length} 跳过(无匹配) / ${d.length} 失败${Z.RESET}`),!e.dryRun&&c.length>0&&(Q(``),Q(`下一步:推送到远程`),Q(` bun push-all`)),d.length>0&&(process.exitCode=1)},Vm=e=>e===`legacy`?`遗留死链`:`拆分串联`,Hm=async e=>{try{let t=await ep(process.cwd()),n=t.configPath===null?process.cwd():l(t.configPath),r=await lp({explicit:e.registry,configRoot:t.config.registryRoot,repoDir:n});r===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2));let a=await _m(d(n,`package.json`)),o=a.scripts??{},s=Im(o,r.data);if(s.length===0){Q(`${Z.GREEN}✓ 未发现可改写形态(遗留死链或拆分串联),无需改写${Z.RESET}`);return}Q(`${Z.BLUE}═══ lzi-scripts fix ═══${Z.RESET}`);for(let e of s)Q(` ${e.scriptName}(${Vm(e.kind)})`),Q(` ${Z.RED}- ${e.from}${Z.RESET}`),Q(` ${Z.GREEN}+ ${e.to}${Z.RESET}`);if(e.dryRun)Q(``),Q(`${Z.YELLOW}[dry-run] 预览模式,不写文件${Z.RESET}`);else{let e=await Rm(d(n,`package.json`),s);Q(``),Q(`${Z.GREEN}✓ 已写入 package.json(${e} 条改写)${Z.RESET}`)}let c=/* @__PURE__ */ new Set;for(let e of s){if(e.kind!==`legacy`)continue;let t=fm(e.from,r.data.legacyMappings);t!==null&&c.add(t.targetPackage)}for(let e of c)a.devDependencies?.[e]===void 0&&a.dependencies?.[e]===void 0&&Q(`${Z.YELLOW}⚠ 依赖提示: ${e} 未在 package.json 声明,请补装${Z.RESET}`);for(let e of r.data.companions)i(d(n,e.path))||Q(`${Z.YELLOW}⚠ 兼伴提示: ${e.path} 缺失(${e.reason})${Z.RESET}`)}catch(e){$(`错误: ${e instanceof Error?e.message:String(e)}`),process.exit(2)}},Um=async()=>{let e=d(process.cwd(),`lzi-scripts.config.ts`);i(e)?(Q(`${Z.YELLOW}⚠ 配置文件已存在,拒绝覆盖: ${e}${Z.RESET}`),process.exitCode=1):(await Bun.write(e,`import { defineConfig } from '@longzai-intelligence-scripts/config';
215
215
 
216
216
  /**
217
217
  * lzi-scripts 就地配置
@@ -227,5 +227,5 @@ export default defineConfig(
227
227
  // extraAlternatives: [{ script: 'version:sync', definition: '自定义等价命令行' }],
228
228
  // },
229
229
  );
230
- `),Q(`${Z.GREEN}✓ 已生成 ${e}${Z.RESET}`))},Um=[`root`,`root-engineering`,`package`],Wm=async e=>{let t=await lp({explicit:e.registry,repoDir:process.cwd()});t===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2)),Q(`${Z.BLUE}═══ lzi-scripts list ═══${Z.RESET}`),Q(`真源仓: ${t.root}(来源 ${t.source})`),Q(``);for(let n of Um){if(e.profile!==void 0&&e.profile!==n)continue;let r=t.data.profiles[n]??[];Q(`${Z.BLUE}[${n}](${r.length} 条)${Z.RESET}`);for(let e of r)Q(` ${e.severity===`required`?`${Z.RED}!${Z.RESET}`:`?`} ${e.name} = ${e.definition}`);Q(``)}Q(`遗留死链映射: ${t.data.legacyMappings.length} 条`),Q(`兼伴配置要求: ${t.data.companions.length} 条`)},Gm=async e=>{let t=await lp({explicit:e.registry,repoDir:process.cwd()});t===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2));let n=null;for(let[r,i]of Object.entries(t.data.profiles)){for(let t of i??[])if(t.name===e.scriptName){n={profile:r,entry:t};break}if(n!==null)break}if(Q(`${Z.BLUE}═══ lzi-scripts show ${e.scriptName} ═══${Z.RESET}`),n===null)Q(`${Z.YELLOW}未在真源档案中找到该脚本名${Z.RESET}`);else{Q(`档案: ${n.profile}`),Q(`严格级别: ${n.entry.severity}`),Q(`脚本族: ${n.entry.family}`),Q(`标准定义: ${n.entry.definition}`);for(let e of n.entry.alternatives??[])Q(`等价形态: ${e}`)}let r=t.data.legacyMappings.filter(t=>t.targetScript===e.scriptName);if(r.length>0){Q(``),Q(`遗留死链映射:`);for(let e of r)Q(` ${e.legacyPrefix} → ${e.targetPackage}`),Q(` ${e.note}`)}};function Km(e){Dd(e,{name:`check`,description:`审计当前仓 scripts 的完备性、形态一致性与命令面存活`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--format <format>`,description:`输出形态(text 或 json)`}],schema:rc({registry:U().optional(),format:pc([`text`,`json`]).optional()}),action:async e=>{await Am({registry:e.registry,format:e.format})}}),Dd(e,{name:`check-across`,description:`跨仓普查(项目清单经 project-registry 声明域获取)`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--project-scope <id>`,description:`显式圈定项目范围(缺省自动取当前 edition 范围)`},{flags:`--concurrency <n>`,description:`并发数(默认 10)`},{flags:`--format <format>`,description:`输出形态(text 或 json)`}],schema:rc({registry:U().optional(),projectScope:U().optional(),concurrency:Uc().int().positive().optional(),format:pc([`text`,`json`]).optional()}),action:async e=>{await Om({registry:e.registry,projectScope:e.projectScope,concurrency:e.concurrency,format:e.format})}}),Dd(e,{name:`fix`,description:`按真源遗留映射表改写旧命令面死链脚本`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--dry-run`,description:`仅预览,不写文件`}],schema:rc({registry:U().optional(),dryRun:qs().optional()}),action:async e=>{await Vm({registry:e.registry,dryRun:e.dryRun===!0})}}),Dd(e,{name:`fix-across`,description:`跨仓批量改写旧命令面死链脚本(读聚合配置,内置 git 安全策略)`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--project-scope <id>`,description:`显式圈定项目范围(缺省自动取当前 edition 范围)`},{flags:`-m, --message <message>`,description:`自定义提交信息`},{flags:`--concurrency <n>`,description:`并发数(默认 10)`},{flags:`--dry-run`,description:`仅预览(不写文件、不提交)`}],schema:rc({registry:U().optional(),projectScope:U().optional(),message:U().optional(),concurrency:Uc().int().positive().optional(),dryRun:qs().optional()}),action:async e=>{await zm({registry:e.registry,projectScope:e.projectScope,message:e.message,concurrency:e.concurrency,dryRun:e.dryRun===!0})}}),Dd(e,{name:`init`,description:`生成本仓 lzi-scripts.config.ts 就地配置模板`,schema:rc({}),action:async()=>{await Hm()}}),Dd(e,{name:`list`,description:`列出真源档案的标准脚本条目`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--profile <profile>`,description:`档案过滤(root / root-engineering / package)`}],schema:rc({registry:U().optional(),profile:pc([`root`,`root-engineering`,`package`]).optional()}),action:async e=>{await Wm({registry:e.registry,profile:e.profile})}}),Dd(e,{name:`show`,description:`查看单条标准脚本的真源详情`,arguments:[{signature:`<script>`,description:`脚本名,如 version:sync`}],options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`}],schema:rc({registry:U().optional()}),action:async(e,t)=>{let n=t[0];n===void 0&&(process.stderr.write(`错误: show 需要指定脚本名,如 lzi-scripts show version:sync
231
- `),process.exit(1)),await Gm({scriptName:n,registry:e.registry})}})}const qm=Cd({name:`lzi-scripts`,description:`Longzai Intelligence 标准脚本审计工具`,interaction:qf,color:Kf});Km(qm);async function Jm(){await qm.parseAsync(process.argv)}Jm().catch(e=>{process.stderr.write(`错误: ${e instanceof Error?e.message:String(e)}\n`),process.exit(1)});export{};
230
+ `),Q(`${Z.GREEN}✓ 已生成 ${e}${Z.RESET}`))},Wm=[`root`,`root-engineering`,`package`],Gm=async e=>{let t=await lp({explicit:e.registry,repoDir:process.cwd()});t===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2)),Q(`${Z.BLUE}═══ lzi-scripts list ═══${Z.RESET}`),Q(`真源仓: ${t.root}(来源 ${t.source})`),Q(``);for(let n of Wm){if(e.profile!==void 0&&e.profile!==n)continue;let r=t.data.profiles[n]??[];Q(`${Z.BLUE}[${n}](${r.length} 条)${Z.RESET}`);for(let e of r)Q(` ${e.severity===`required`?`${Z.RED}!${Z.RESET}`:`?`} ${e.name} = ${e.definition}`);Q(``)}Q(`遗留死链映射: ${t.data.legacyMappings.length} 条`),Q(`兼伴配置要求: ${t.data.companions.length} 条`)},Km=async e=>{let t=await lp({explicit:e.registry,repoDir:process.cwd()});t===null&&($(`错误: 未找到标准脚本注册真源仓(同 check 命令解析链提示)`),process.exit(2));let n=null;for(let[r,i]of Object.entries(t.data.profiles)){for(let t of i??[])if(t.name===e.scriptName){n={profile:r,entry:t};break}if(n!==null)break}if(Q(`${Z.BLUE}═══ lzi-scripts show ${e.scriptName} ═══${Z.RESET}`),n===null)Q(`${Z.YELLOW}未在真源档案中找到该脚本名${Z.RESET}`);else{Q(`档案: ${n.profile}`),Q(`严格级别: ${n.entry.severity}`),Q(`脚本族: ${n.entry.family}`),Q(`标准定义: ${n.entry.definition}`);for(let e of n.entry.alternatives??[])Q(`等价形态: ${e}`)}let r=t.data.legacyMappings.filter(t=>t.targetScript===e.scriptName);if(r.length>0){Q(``),Q(`遗留死链映射:`);for(let e of r)Q(` ${e.legacyPrefix} → ${e.targetPackage}`),Q(` ${e.note}`)}};function qm(e){Dd(e,{name:`check`,description:`审计当前仓 scripts 的完备性、形态一致性与命令面存活`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--format <format>`,description:`输出形态(text 或 json)`}],schema:rc({registry:U().optional(),format:pc([`text`,`json`]).optional()}),action:async e=>{await jm({registry:e.registry,format:e.format})}}),Dd(e,{name:`check-across`,description:`跨仓普查(项目清单经 project-registry 声明域获取)`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--project-scope <id>`,description:`显式圈定项目范围(缺省自动取当前 edition 范围)`},{flags:`--concurrency <n>`,description:`并发数(默认 10)`},{flags:`--format <format>`,description:`输出形态(text 或 json)`}],schema:rc({registry:U().optional(),projectScope:U().optional(),concurrency:Uc().int().positive().optional(),format:pc([`text`,`json`]).optional()}),action:async e=>{await km({registry:e.registry,projectScope:e.projectScope,concurrency:e.concurrency,format:e.format})}}),Dd(e,{name:`fix`,description:`按真源遗留映射表改写旧命令面死链脚本`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--dry-run`,description:`仅预览,不写文件`}],schema:rc({registry:U().optional(),dryRun:qs().optional()}),action:async e=>{await Hm({registry:e.registry,dryRun:e.dryRun===!0})}}),Dd(e,{name:`fix-across`,description:`跨仓批量改写旧命令面死链脚本(读聚合配置,内置 git 安全策略)`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--project-scope <id>`,description:`显式圈定项目范围(缺省自动取当前 edition 范围)`},{flags:`-m, --message <message>`,description:`自定义提交信息`},{flags:`--concurrency <n>`,description:`并发数(默认 10)`},{flags:`--dry-run`,description:`仅预览(不写文件、不提交)`}],schema:rc({registry:U().optional(),projectScope:U().optional(),message:U().optional(),concurrency:Uc().int().positive().optional(),dryRun:qs().optional()}),action:async e=>{await Bm({registry:e.registry,projectScope:e.projectScope,message:e.message,concurrency:e.concurrency,dryRun:e.dryRun===!0})}}),Dd(e,{name:`init`,description:`生成本仓 lzi-scripts.config.ts 就地配置模板`,schema:rc({}),action:async()=>{await Um()}}),Dd(e,{name:`list`,description:`列出真源档案的标准脚本条目`,options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`},{flags:`--profile <profile>`,description:`档案过滤(root / root-engineering / package)`}],schema:rc({registry:U().optional(),profile:pc([`root`,`root-engineering`,`package`]).optional()}),action:async e=>{await Gm({registry:e.registry,profile:e.profile})}}),Dd(e,{name:`show`,description:`查看单条标准脚本的真源详情`,arguments:[{signature:`<script>`,description:`脚本名,如 version:sync`}],options:[{flags:`--registry <path>`,description:`真源仓根目录(显式指定,覆盖自动解析)`}],schema:rc({registry:U().optional()}),action:async(e,t)=>{let n=t[0];n===void 0&&(process.stderr.write(`错误: show 需要指定脚本名,如 lzi-scripts show version:sync
231
+ `),process.exit(1)),await Km({scriptName:n,registry:e.registry})}})}const Jm=Cd({name:`lzi-scripts`,description:`Longzai Intelligence 标准脚本审计工具`,interaction:qf,color:Kf});qm(Jm);async function Ym(){await Jm.parseAsync(process.argv)}Ym().catch(e=>{process.stderr.write(`错误: ${e instanceof Error?e.message:String(e)}\n`),process.exit(1)});export{};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longzai-intelligence-scripts/cli",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "description": "Longzai Intelligence 标准脚本审计 CLI(lzi-scripts)",
5
5
  "license": "UNLICENSED",
6
6
  "bin": {
@@ -36,7 +36,7 @@
36
36
  "dependencies": {
37
37
  "@longzai-intelligence-cli/core": "^0.0.10",
38
38
  "@longzai-intelligence-cli/standard": "^0.0.10",
39
- "@longzai-intelligence-scripts/core": "0.0.8",
39
+ "@longzai-intelligence-scripts/core": "0.0.9",
40
40
  "zod": "^4.4.3"
41
41
  }
42
42
  }