@qx-wz/create-qx-agw-skill 1.0.2 → 1.0.3

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 (3) hide show
  1. package/README.md +10 -10
  2. package/dist/index.js +7 -9
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # create-qx-agw-skill
2
2
 
3
- 一键同步 AI Skill 配置到各平台的 CLI 工具。
3
+ 一键安装qx-agw skill到各平台的 CLI 工具。
4
4
 
5
5
  ## 安装
6
6
 
@@ -26,15 +26,15 @@ npx create-qx-agw-skill --platforms=cursor,claude
26
26
 
27
27
  ## 支持的平台
28
28
 
29
- | 平台 ID | 平台名称 | 目标路径 |
30
- |------------|----------------|-----------------------------------|
31
- | cursor | Cursor | ~/.cursor/rules |
32
- | windsurf | Windsurf | ~/.windsurf/rules |
33
- | trae | Trae | ~/.trae/rules |
34
- | claude | Claude Desktop | ~/Library/Application Support/Claude/skills (macOS) |
35
- | qwenpaw | Qwenpaw | ~/.qwenpaw/skills |
36
- | hermes | Hermes Agent | ~/.hermes/skills |
37
- | codex | Codex | ~/.codex/skills |
29
+ | 平台 ID | 平台名称 | 目标路径 |
30
+ | -------- | -------------- | --------------------------------------------------- |
31
+ | cursor | Cursor | ~/.cursor/rules |
32
+ | windsurf | Windsurf | ~/.windsurf/rules |
33
+ | trae | Trae | ~/.trae/rules |
34
+ | claude | Claude Desktop | ~/Library/Application Support/Claude/skills (macOS) |
35
+ | qwenpaw | Qwenpaw | ~/.qwenpaw/skills |
36
+ | hermes | Hermes Agent | ~/.hermes/skills |
37
+ | codex | Codex | ~/.codex/skills |
38
38
 
39
39
  ## 备份
40
40
 
package/dist/index.js CHANGED
@@ -1,15 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import le from"react";import{render as ce}from"ink";import ae from"meow";import E from"chalk";import{Box as A,Newline as ie,Text as x,useApp as ne}from"ink";import M from"ink-spinner";import n,{useCallback as Q,useEffect as se,useState as b}from"react";import m,{useState as L,useCallback as I}from"react";import{Box as v,Text as h,useInput as W,useApp as X}from"ink";import O from"chalk";function F({platforms:e,onSelect:r}){let[t,l]=L(0),[o,c]=L(new Set),{exit:k}=X(),g=o.size,w=I(()=>{let i=e[t];c(a=>{let s=new Set(a);return s.has(i.id)?s.delete(i.id):s.add(i.id),s})},[t,e]),p=I(()=>{o.size===e.length?c(new Set):c(new Set(e.map(i=>i.id)))},[o.size,e]),D=I(()=>{o.size>0&&r(Array.from(o))},[o,r]);return W((i,a)=>{a.upArrow?l(s=>s>0?s-1:e.length-1):a.downArrow?l(s=>s<e.length-1?s+1:0):i===" "?w():i.toLowerCase()==="a"?p():a.return?D():(i.toLowerCase()==="q"||a.escape)&&k()},{isActive:!0}),m.createElement(v,{flexDirection:"column",padding:1},m.createElement(v,{marginBottom:1},m.createElement(h,{color:"green"},"v","1.0.2"),m.createElement(h,null," "),m.createElement(h,{bold:!0},"\u8BF7\u9009\u62E9\u8981\u5B89\u88C5\u7684\u5E73\u53F0\uFF1A")),e.map((i,a)=>{let s=o.has(i.id),f=a===t,d=s?O.green("\u25C9"):"\u25CB",S=f?O.cyan.bold(`> ${d} ${i.name}`):` ${d} ${i.name}`;return m.createElement(v,{key:i.id},m.createElement(h,null,S))}),m.createElement(v,{marginTop:1,flexDirection:"column"},m.createElement(h,{dimColor:!0},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),m.createElement(h,{dimColor:!0},"\u2191/\u2193 \u5BFC\u822A | \u7A7A\u683C\u9009\u62E9 | a \u5168\u9009 | \u56DE\u8F66\u786E\u8BA4 | q \u9000\u51FA"),m.createElement(h,{dimColor:!0},"\u5DF2\u9009\u62E9: ",g," \u4E2A\u5E73\u53F0")))}import{Box as $,Newline as Y,Text as j}from"ink";import y from"react";function G({results:e}){return y.createElement($,{flexDirection:"column",padding:1},y.createElement($,{marginBottom:1},y.createElement(j,{bold:!0,color:"green"},"\u2713 \u5B89\u88C5\u5B8C\u6210\uFF01")),y.createElement(Y,null),e.map(r=>y.createElement($,{key:r.platform,flexDirection:"column",marginBottom:1},y.createElement(j,{bold:!0},r.platform," (",r.filesCopied," \u4E2A\u6587\u4EF6)"),y.createElement(j,{dimColor:!0}," \u76EE\u6807: ",r.targetDir))))}import C from"os";import P from"path";var B="qx-agw",T=[{id:"claude",name:"Claude Code",getTargetDir:()=>P.join(C.homedir(),".Claude","skills",B)},{id:"qwenpaw",name:"Qwenpaw",getTargetDir:()=>P.join(C.homedir(),".copaw","workspaces","default","skills",B)},{id:"hermes",name:"Hermes Agent",getTargetDir:()=>P.join(C.homedir(),".hermes","skills",B)},{id:"codex",name:"Codex",getTargetDir:()=>P.join(C.homedir(),".codex","skills",B)}],z=()=>P.join(C.homedir(),".agents","skills",B),N=e=>T.find(r=>r.id===e);import{execa as Z}from"execa";import R from"os";import ee from"path";var re="https://code.wz-inc.com/sd-fe/qx-agw-skill.git";async function _(e){let r=ee.join(R.tmpdir(),`qx-agw-skill-${Date.now()}`);e?.("\u6B63\u5728\u5B89\u88C5\u4E2D...");try{await Z("git",["clone","--depth","1","--filter=blob:none",re,r])}catch(t){throw new Error(`\u514B\u9686\u4ED3\u5E93\u5931\u8D25: ${t instanceof Error?t.message:"\u672A\u77E5\u9519\u8BEF"}
3
- \u8BF7\u68C0\u67E5 Git \u51ED\u8BC1\u662F\u5426\u914D\u7F6E\u6B63\u786E`)}return r}import oe from"path";import u from"fs-extra";async function U(e,r,t){let l=[],o=z(),c=!1;for(let k of r){let g=N(k);if(!g){console.warn(`\u8B66\u544A: \u672A\u627E\u5230\u5E73\u53F0 ${k}`);continue}t?.(`\u6B63\u5728\u5B89\u88C5 ${g.name}...`);let w=e,p=g.getTargetDir();await u.remove(p),await u.ensureDir(p),await u.copy(w,p,{filter:i=>!i.includes(".git")}),c||(await u.remove(o),await u.ensureDir(o),await u.copy(w,o,{filter:i=>!i.includes(".git")}),c=!0);let D=await H(p);l.push({platform:g.name,targetDir:p,backupDir:o,filesCopied:D})}return l}async function H(e){let r=0,t=await u.readdir(e,{withFileTypes:!0});for(let l of t)l.isDirectory()?r+=await H(oe.join(e,l.name)):r++;return r}async function q(e){await u.remove(e)}import{execaSync as te}from"execa";function K(){let e=[],r=!1;try{te("git",["--version"]),r=!0}catch{e.push("Git \u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u5B89\u88C5 Git: https://git-scm.com/downloads")}return parseInt(process.version.slice(1).split(".")[0],10)<18&&e.push(`Node.js \u7248\u672C\u8FC7\u4F4E: ${process.version}\uFF0C\u9700\u8981 >= 18`),{git:r,nodeVersion:process.version,isValid:e.length===0,errors:e}}function J({cliPlatforms:e}){let[r,t]=b("checking"),[l,o]=b(e||[]),[c,k]=b([]),[g,w]=b(""),[p,D]=b(""),{exit:i}=ne();se(()=>{let f=K();if(!f.isValid){w(f.errors.join(`
4
- `)),t("error");return}e&&e.length>0?a(e):t("selecting")},[]);let a=Q(async f=>{o(f),t("cloning");let d="";try{d=await _(D),t("copying");let S=await U(d,f,D);await q(d),k(S),t("done"),setTimeout(()=>i(),100)}catch(S){d&&await q(d).catch(()=>{}),w(S instanceof Error?S.message:"\u672A\u77E5\u9519\u8BEF"),t("error")}},[]),s=Q(f=>{a(f)},[a]);return r==="error"?n.createElement(A,{flexDirection:"column",padding:1},n.createElement(x,{bold:!0,color:"red"},"\u2717 \u5B89\u88C5\u5931\u8D25"),n.createElement(ie,null),n.createElement(x,{color:"red"},g)):r==="checking"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(M,{type:"dots"}))," ","\u68C0\u67E5\u73AF\u5883...")):r==="selecting"?n.createElement(F,{platforms:T,onSelect:s}):r==="cloning"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(M,{type:"dots"}))," ",p||"\u6B63\u5728\u5B89\u88C5\u4E2D...")):r==="copying"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(M,{type:"dots"}))," ",p||"\u6B63\u5728\u5B89\u88C5\u6587\u4EF6...")):r==="done"?n.createElement(G,{results:c}):null}var V=ae(`
2
+ import E from"chalk";import{render as le}from"ink";import ce from"meow";import ae from"react";import{Box as A,Newline as ie,Text as x,useApp as ne}from"ink";import q from"ink-spinner";import n,{useCallback as Q,useEffect as se,useState as b}from"react";import m,{useState as L,useCallback as I}from"react";import{Box as v,Text as h,useInput as W,useApp as X}from"ink";import O from"chalk";function F({platforms:e,onSelect:r}){let[t,l]=L(0),[o,c]=L(new Set),{exit:D}=X(),d=o.size,w=I(()=>{let i=e[t];c(a=>{let s=new Set(a);return s.has(i.id)?s.delete(i.id):s.add(i.id),s})},[t,e]),p=I(()=>{o.size===e.length?c(new Set):c(new Set(e.map(i=>i.id)))},[o.size,e]),S=I(()=>{o.size>0&&r(Array.from(o))},[o,r]);return W((i,a)=>{a.upArrow?l(s=>s>0?s-1:e.length-1):a.downArrow?l(s=>s<e.length-1?s+1:0):i===" "?w():i.toLowerCase()==="a"?p():a.return?S():(i.toLowerCase()==="q"||a.escape)&&D()},{isActive:!0}),m.createElement(v,{flexDirection:"column",padding:1},m.createElement(v,{marginBottom:1},m.createElement(h,{color:"green"},"v","1.0.3"),m.createElement(h,null," "),m.createElement(h,{bold:!0},"\u8BF7\u9009\u62E9\u8981\u5B89\u88C5\u7684\u5E73\u53F0\uFF1A")),e.map((i,a)=>{let s=o.has(i.id),f=a===t,g=s?O.green("\u25C9"):"\u25CB",k=f?O.cyan.bold(`> ${g} ${i.name}`):` ${g} ${i.name}`;return m.createElement(v,{key:i.id},m.createElement(h,null,k))}),m.createElement(v,{marginTop:1,flexDirection:"column"},m.createElement(h,{dimColor:!0},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),m.createElement(h,{dimColor:!0},"\u2191/\u2193 \u5BFC\u822A | \u7A7A\u683C\u9009\u62E9 | a \u5168\u9009 | \u56DE\u8F66\u786E\u8BA4 | q \u9000\u51FA"),m.createElement(h,{dimColor:!0},"\u5DF2\u9009\u62E9: ",d," \u4E2A\u5E73\u53F0")))}import{Box as j,Newline as Y,Text as $}from"ink";import y from"react";function G({results:e}){return y.createElement(j,{flexDirection:"column",padding:1},y.createElement(j,{marginBottom:1},y.createElement($,{bold:!0,color:"green"},"\u2713 \u5B89\u88C5\u5B8C\u6210\uFF01")),y.createElement(Y,null),e.map(r=>y.createElement(j,{key:r.platform,flexDirection:"column",marginBottom:1},y.createElement($,{bold:!0},r.platform," (",r.filesCopied," \u4E2A\u6587\u4EF6)"),y.createElement($,{dimColor:!0}," \u76EE\u6807: ",r.targetDir))))}import C from"os";import P from"path";var B="qx-agw",T=[{id:"claude",name:"Claude Code",getTargetDir:()=>P.join(C.homedir(),".Claude","skills",B)},{id:"qwenpaw",name:"Qwenpaw",getTargetDir:()=>P.join(C.homedir(),".copaw","workspaces","default","skills",B)},{id:"hermes",name:"Hermes Agent",getTargetDir:()=>P.join(C.homedir(),".hermes","skills",B)},{id:"codex",name:"Codex",getTargetDir:()=>P.join(C.homedir(),".codex","skills",B)}],z=()=>P.join(C.homedir(),".agents","skills",B),N=e=>T.find(r=>r.id===e);import{execa as Z}from"execa";import R from"os";import ee from"path";var re="https://code.wz-inc.com/sd-fe/qx-agw-skill.git";async function _(e){let r=ee.join(R.tmpdir(),`qx-agw-skill-${Date.now()}`);e?.("\u6B63\u5728\u5B89\u88C5\u4E2D...");try{await Z("git",["clone","--depth","1","--filter=blob:none",re,r])}catch(t){throw new Error(`\u514B\u9686\u4ED3\u5E93\u5931\u8D25: ${t instanceof Error?t.message:"\u672A\u77E5\u9519\u8BEF"}
3
+ \u8BF7\u68C0\u67E5 Git \u51ED\u8BC1\u662F\u5426\u914D\u7F6E\u6B63\u786E`)}return r}import oe from"path";import u from"fs-extra";async function U(e,r,t){let l=[],o=z(),c=!1;for(let D of r){let d=N(D);if(!d){console.warn(`\u8B66\u544A: \u672A\u627E\u5230\u5E73\u53F0 ${D}`);continue}t?.(`\u6B63\u5728\u5B89\u88C5 ${d.name}...`);let w=e,p=d.getTargetDir();await u.remove(p),await u.ensureDir(p),await u.copy(w,p,{filter:i=>!i.includes(".git")}),c||(await u.remove(o),await u.ensureDir(o),await u.copy(w,o,{filter:i=>!i.includes(".git")}),c=!0);let S=await H(p);l.push({platform:d.name,targetDir:p,backupDir:o,filesCopied:S})}return l}async function H(e){let r=0,t=await u.readdir(e,{withFileTypes:!0});for(let l of t)l.isDirectory()?r+=await H(oe.join(e,l.name)):r++;return r}async function M(e){await u.remove(e)}import{execaSync as te}from"execa";function K(){let e=[],r=!1;try{te("git",["--version"]),r=!0}catch{e.push("Git \u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u5B89\u88C5 Git: https://git-scm.com/downloads")}return parseInt(process.version.slice(1).split(".")[0],10)<18&&e.push(`Node.js \u7248\u672C\u8FC7\u4F4E: ${process.version}\uFF0C\u9700\u8981 >= 18`),{git:r,nodeVersion:process.version,isValid:e.length===0,errors:e}}function J({cliPlatforms:e}){let[r,t]=b("checking"),[l,o]=b(e||[]),[c,D]=b([]),[d,w]=b(""),[p,S]=b(""),{exit:i}=ne();se(()=>{let f=K();if(!f.isValid){w(f.errors.join(`
4
+ `)),t("error");return}e&&e.length>0?a(e):t("selecting")},[]);let a=Q(async f=>{o(f),t("cloning");let g="";try{g=await _(S),t("copying");let k=await U(g,f,S);await M(g),D(k),t("done"),setTimeout(()=>i(),100)}catch(k){g&&await M(g).catch(()=>{}),w(k instanceof Error?k.message:"\u672A\u77E5\u9519\u8BEF"),t("error")}},[]),s=Q(f=>{a(f)},[a]);return r==="error"?n.createElement(A,{flexDirection:"column",padding:1},n.createElement(x,{bold:!0,color:"red"},"\u2717 \u5B89\u88C5\u5931\u8D25"),n.createElement(ie,null),n.createElement(x,{color:"red"},d)):r==="checking"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(q,{type:"dots"}))," ","\u68C0\u67E5\u73AF\u5883...")):r==="selecting"?n.createElement(F,{platforms:T,onSelect:s}):r==="cloning"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(q,{type:"dots"}))," ",p||"\u6B63\u5728\u5B89\u88C5\u4E2D...")):r==="copying"?n.createElement(A,{padding:1},n.createElement(x,null,n.createElement(x,{color:"cyan"},n.createElement(q,{type:"dots"}))," ",p||"\u6B63\u5728\u5B89\u88C5\u6587\u4EF6...")):r==="done"?n.createElement(G,{results:c}):null}var V=ce(`
5
5
  Usage
6
- $ npx create-qx-agw-skill
7
- $ npx create-qx-agw-skill --platforms=cursor,claude
6
+ $ npx create-qx-agw-skill --platforms=xxx
8
7
 
9
8
  Options
10
- --platforms \u9017\u53F7\u5206\u9694\u7684\u5E73\u53F0\u5217\u8868\uFF0C\u8DF3\u8FC7\u4EA4\u4E92\u754C\u9762
9
+ --platforms \u9017\u53F7\u5206\u9694\u7684\u5E73\u53F0\u5217\u8868\uFF0C\u8DF3\u8FC7\u4EA4\u4E92\u754C\u9762 \u652F\u6301[claude/qwenpaw/hermes/codex], \u8BF7\u786E\u8BA4\u4F60\u8981\u5B89\u88C5\u5230\u7684agent
11
10
 
12
11
  Examples
13
- $ npx create-qx-agw-skill
14
- $ npx create-qx-agw-skill --platforms=cursor,windsurf
15
- `,{importMeta:import.meta,flags:{platforms:{type:"string",shortFlag:"p"}}});function me(e){if(!e)return null;let r=e.split(",").map(o=>o.trim().toLowerCase()).filter(o=>o.length>0);if(r.length===0)return null;let t=r.filter(o=>T.some(c=>c.id===o)),l=r.filter(o=>!T.some(c=>c.id===o));return l.length>0&&(console.error(E.yellow(`\u8B66\u544A: \u65E0\u6548\u7684\u5E73\u53F0 ID: ${l.join(", ")}`)),console.error(E.dim(`\u6709\u6548\u5E73\u53F0: ${T.map(o=>o.id).join(", ")}`))),t.length>0?t:null}async function pe(){let e=me(V.flags.platforms);if(V.flags.platforms&&!e){console.error(E.red("\u9519\u8BEF: \u6CA1\u6709\u6709\u6548\u7684\u5E73\u53F0")),V.showHelp(1);return}ce(le.createElement(J,{cliPlatforms:e||void 0}))}pe().catch(e=>{console.error(E.red("\u53D1\u751F\u9519\u8BEF:")),console.error(e),process.exit(1)});
12
+ $ npx create-qx-agw-skill --platforms=claude
13
+ `,{importMeta:import.meta,flags:{platforms:{type:"string",shortFlag:"p"}}});function me(e){if(!e)return null;let r=e.split(",").map(o=>o.trim().toLowerCase()).filter(o=>o.length>0);if(r.length===0)return null;let t=r.filter(o=>T.some(c=>c.id===o)),l=r.filter(o=>!T.some(c=>c.id===o));return l.length>0&&(console.error(E.yellow(`\u8B66\u544A: \u65E0\u6548\u7684\u5E73\u53F0 ID: ${l.join(", ")}`)),console.error(E.dim(`\u6709\u6548\u5E73\u53F0: ${T.map(o=>o.id).join(", ")}`))),t.length>0?t:null}async function pe(){let e=me(V.flags.platforms);if(V.flags.platforms&&!e){console.error(E.red("\u9519\u8BEF: \u6CA1\u6709\u6709\u6548\u7684\u5E73\u53F0")),V.showHelp(1);return}le(ae.createElement(J,{cliPlatforms:e||void 0}))}pe().catch(e=>{console.error(E.red("\u53D1\u751F\u9519\u8BEF:")),console.error(e),process.exit(1)});
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@qx-wz/create-qx-agw-skill",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
- "description": "一键同步 AI Skill 配置到各平台",
5
+ "description": "一键安装qx-agw skill到各平台",
6
6
  "bin": {
7
7
  "create-qx-agw-skill": "./dist/index.js"
8
8
  },