UNPKG

anl

Version:
7 lines 4.46 kB
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`),n=require(`../utils/index.cjs`);let r=require(`inquirer`);r=e.__toESM(r);let i=require(`fs`);i=e.__toESM(i);let a=require(`path`);a=e.__toESM(a);let o=require(`chalk`);o=e.__toESM(o);let s=require(`jiti`);const c=[{name:`api-report - API 变更检测报告`,value:`api-report`},{name:`api-mock - Mock 数据生成`,value:`api-mock`}];function l(){return a.default.join(__dirname,`..`,`skills`)}function u(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>n in t?t[n]:`{{${n}}}`)}function d(e){let t=a.default.join(e,`an.config.ts`),n=a.default.join(e,`an.config.json`);if(i.default.existsSync(t))try{let e=(0,s.createJiti)(__filename,{interopDefault:!0}).import(t);return(`default`in e&&e.default?e.default:e)??null}catch{return null}if(!i.default.existsSync(n))return null;try{return JSON.parse(i.default.readFileSync(n,`utf-8`))}catch{return null}}function f(e){let t=e.saveApiListFolderPath??`src/api`,n=e.saveTypeFolderPath??`src/types`,r=[],i=[];if(Array.isArray(e.swaggerConfig))for(let t of e.swaggerConfig)t.apiListFileName&&r.push(t.apiListFileName),t.url&&i.push(t.url);return{apiDir:t,typesDir:n,apiFiles:r,swaggerUrls:i}}function p(e,t,n,r){return r===`command`?a.default.join(e,t,`${n}.md`):a.default.join(e,t,n,`SKILL.md`)}async function m(e,r,o,s,c){let d=a.default.join(l(),e,`SKILL.md`);if(!i.default.existsSync(d))throw Error(`找不到模板文件: ${d}`);let f=u(i.default.readFileSync(d,`utf-8`),r),m=p(o,s,e,c);await n.writeFileRecursive(m,f),t.log.success(`Skill 文件已写入: ${a.default.relative(o,m)}`)}async function h(e,t,n,i){let{scanDirs:a}=await r.default.prompt([{type:`input`,name:`scanDirs`,message:`需要扫描 API 使用的目录(逗号分隔,支持 glob):`,default:`src/pages/**,src/components/**`}]);await m(`api-report`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,SCAN_DIRS:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(` - `)},e,n,i)}async function g(e,t,n,i){let{mockOutput:a}=await r.default.prompt([{type:`input`,name:`mockOutput`,message:`Mock 数据输出目录:`,default:`mocks/`}]);await m(`api-mock`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,MOCK_OUTPUT:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(` - `)},e,n,i)}async function _(){console.log(o.default.bold.blue(` 🛡️ an skill - Agent Skill 初始化工具 `));let e=process.cwd(),n=d(e);if(!n){t.log.error(`未找到配置文件,请先在项目根目录配置 an.config.ts 或 an.config.json`);return}let i=f(n);if(i.apiFiles.length===0){t.log.error(`an.config.json 中未找到 swaggerConfig 配置`);return}let{skills:a}=await r.default.prompt([{type:`checkbox`,name:`skills`,message:`选择要初始化的 Skill(可多选):`,choices:c,pageSize:10}]);if(a.length===0){t.log.warning(`未选择任何 Skill,已退出`);return}let{platform:s}=await r.default.prompt([{type:`list`,name:`platform`,message:`Skill 输出目标:`,choices:[{name:`.cursor/skills (Cursor Skill)`,value:`cursor`},{name:`.claude/commands (Claude Code /command)`,value:`claude`},{name:`自定义路径...`,value:`__custom__`}]}]),l,u;if(s===`cursor`)l=`.cursor/skills`,u=`skill`;else if(s===`claude`)l=`.claude/commands`,u=`command`;else{let{customDir:e}=await r.default.prompt([{type:`input`,name:`customDir`,message:`请输入自定义输出目录:`,validate:e=>e.trim().length>0||`路径不能为空`}]),{customMode:t}=await r.default.prompt([{type:`list`,name:`customMode`,message:`文件组织方式:`,choices:[{name:`<name>/SKILL.md (Cursor 风格)`,value:`skill`},{name:`<name>.md (Claude Code 风格)`,value:`command`}]}]);l=e.trim(),u=t}console.log(o.default.dim(`\n目标项目目录: ${e}`)),console.log(o.default.cyan(` 📋 已从 an.config.json 读取配置:`)),console.log(o.default.dim(` - API 目录: ${i.apiDir}`)),console.log(o.default.dim(` - API 文件: ${i.apiFiles.join(`, `)}`)),console.log(o.default.dim(` - 类型目录: ${i.typesDir}`)),console.log(o.default.dim(` - 输出目录: ${l} (${u===`command`?`/command 模式`:`Skill 模式`})\n`));for(let t of a)t===`api-report`?await h(e,i,l,u):t===`api-mock`&&await g(e,i,l,u);let p=u===`command`?`在 Claude Code 中使用 /api-report 或 /api-mock 命令调用。`:`在 Cursor 中即可使用该 Skill。`;console.log(o.default.bold.green(` ✅ Skill 初始化完成!`),o.default.dim(`\n${p}\n`))}exports.skillHandle=_;