skill-base-cli
Advanced tools
+11
-6
@@ -14,5 +14,14 @@ #!/usr/bin/env node | ||
| import { pickMessage } from '../lib/i18n.js'; | ||
| import { getSupportedIdeIds } from '../lib/ide.js'; | ||
| const program = new Command(); | ||
| function installIdeOptionDescription() { | ||
| const ids = getSupportedIdeIds().join(' / '); | ||
| return pickMessage({ | ||
| zh: `目标 Agent(${ids})`, | ||
| en: `Target Agent (${ids})` | ||
| }); | ||
| } | ||
| const S = { | ||
@@ -51,6 +60,2 @@ rootDesc: { | ||
| }, | ||
| installIde: { | ||
| zh: '目标 Agent (universal / cursor / copilot / windsurf / qoder / claude-code / qoderwork / opencode / trae / trae-cn)', | ||
| en: 'Target Agent (universal / cursor / copilot / windsurf / qoder / claude-code / qoderwork / opencode / trae / trae-cn)' | ||
| }, | ||
| installGlobal: { | ||
@@ -140,4 +145,4 @@ zh: '安装到全局 Agent 配置目录', | ||
| .option('-d, --dir <directory>', pickMessage(S.installDir)) | ||
| .option('-i, --ide <agent>', pickMessage(S.installIde)) | ||
| .option('-a, --agent <agent>', pickMessage(S.installIde)) | ||
| .option('-i, --ide <agent>', installIdeOptionDescription()) | ||
| .option('-a, --agent <agent>', installIdeOptionDescription()) | ||
| .option('-g, --global', pickMessage(S.installGlobal), false) | ||
@@ -144,0 +149,0 @@ .action((target, options) => { |
@@ -38,3 +38,7 @@ import fs from 'node:fs'; | ||
| tipLatestSuffix: { zh: '` 安装最新版本', en: '` to install the latest' }, | ||
| installFailed: { zh: '安装失败: ', en: 'Install failed: ' } | ||
| installFailed: { zh: '安装失败: ', en: 'Install failed: ' }, | ||
| overwriteAsk: { | ||
| zh: (p) => `目标已存在同名目录,是否覆盖?\n${p}`, | ||
| en: (p) => `A folder with the same skill name already exists. Overwrite?\n${p}` | ||
| } | ||
| }; | ||
@@ -155,2 +159,22 @@ | ||
| const installPathCandidate = path.join(path.resolve(targetDir), skillId); | ||
| if (fs.existsSync(installPathCandidate)) { | ||
| const displayConflict = path.relative(process.cwd(), installPathCandidate) || installPathCandidate; | ||
| const { confirm: overwrite } = await prompts({ | ||
| type: 'confirm', | ||
| name: 'confirm', | ||
| message: pickFn(M.overwriteAsk, displayConflict), | ||
| initial: false | ||
| }); | ||
| if (overwrite === undefined) { | ||
| console.log(chalk.yellow(pickMessage(M.cancelled))); | ||
| process.exit(0); | ||
| } | ||
| if (!overwrite) { | ||
| console.log(chalk.yellow(pickMessage(M.cancelled))); | ||
| process.exit(0); | ||
| } | ||
| fs.rmSync(installPathCandidate, { recursive: true, force: true }); | ||
| } | ||
| const verLabel = version !== 'latest' ? `@${version}` : ''; | ||
@@ -157,0 +181,0 @@ const spinner = ora(`${pickMessage(M.downloading)}${skillId}${verLabel}...`).start(); |
+63
-0
@@ -81,2 +81,65 @@ import fs from 'node:fs'; | ||
| }, | ||
| openclaw: { | ||
| id: 'openclaw', | ||
| name: 'OpenClaw', | ||
| projectPath: 'skills', | ||
| globalPath: '.openclaw/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| codebuddy: { | ||
| id: 'codebuddy', | ||
| name: 'CodeBuddy', | ||
| projectPath: '.codebuddy/skills', | ||
| globalPath: '.codebuddy/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| codex: { | ||
| id: 'codex', | ||
| name: 'Codex', | ||
| projectPath: '.agents/skills', | ||
| globalPath: '.codex/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| 'iflow-cli': { | ||
| id: 'iflow-cli', | ||
| name: 'iFlow CLI', | ||
| projectPath: '.iflow/skills', | ||
| globalPath: '.iflow/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| kilo: { | ||
| id: 'kilo', | ||
| name: 'Kilo Code', | ||
| projectPath: '.kilocode/skills', | ||
| globalPath: '.kilocode/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| 'kiro-cli': { | ||
| id: 'kiro-cli', | ||
| name: 'Kiro CLI', | ||
| projectPath: '.kiro/skills', | ||
| globalPath: '.kiro/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| pi: { | ||
| id: 'pi', | ||
| name: 'Pi', | ||
| projectPath: '.pi/skills', | ||
| globalPath: '.pi/agent/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| 'qwen-code': { | ||
| id: 'qwen-code', | ||
| name: 'Qwen Code', | ||
| projectPath: '.qwen/skills', | ||
| globalPath: '.qwen/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| roo: { | ||
| id: 'roo', | ||
| name: 'Roo Code', | ||
| projectPath: '.roo/skills', | ||
| globalPath: '.roo/skills', | ||
| supportsGlobal: true, | ||
| }, | ||
| }; | ||
@@ -83,0 +146,0 @@ |
+1
-1
| { | ||
| "name": "skill-base-cli", | ||
| "version": "1.0.10", | ||
| "version": "1.0.11", | ||
| "description": "Skill Base CLI - 命令行工具,用于搜索、安装、更新和发布 AI Agent Skills", | ||
@@ -5,0 +5,0 @@ "type": "module", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
69972
3.29%1906
4.96%