skill-atlas-cli 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # Skill-Atlas CLI
2
+
3
+ 虾小宝 SkillAtlas 命令行工具,用于从 [skillatlas.cn](https://skillatlas.cn) 搜索并安装 skill 到各类 AI 编程助手(Cursor、OpenClaw、Claude Code、Cline 等)。
4
+
5
+ ## 环境要求
6
+
7
+ - Node.js >= 20.19
8
+
9
+ ## 安装
10
+
11
+ ```bash
12
+
13
+ # 或通过 npm 全局安装
14
+ npm install -g skill-atlas
15
+
16
+ ```
17
+
18
+ ## 命令
19
+
20
+ ### `search <keyword>`
21
+
22
+ 从 SkillAtlas 搜索 skill(按名称或描述匹配)。
23
+
24
+ ```bash
25
+ skill-atlas search deploy
26
+ ```
27
+
28
+ ### `install [name]`
29
+
30
+ 从 SkillAtlas 安装 skill。支持指定 skill 名称(slug),或进入交互式输入。
31
+
32
+ ```bash
33
+ # 直接指定 skill 安装
34
+ skill-atlas install [name]
35
+
36
+ # 交互式输入(无参数时)
37
+ skill-atlas install
38
+
39
+ # 非交互模式,默认安装到全局(跳过 Agent 与范围选择)
40
+ skill-atlas install [name] -y
41
+
42
+ # 显式安装到全局目录
43
+ skill-atlas install [name] --global
44
+ ```
45
+
46
+ **选项:**
47
+
48
+ - `-y, --yes` - 非交互模式,默认安装到全局(使用默认 Agent:Claude Code、OpenClaw)
49
+ - `-g, --global` - 安装到全局目录
50
+
51
+ 无 `-y` 时会提示选择目标 Agent(Cursor、OpenClaw、Claude Code 等)以及安装范围(项目级 / 全局)。
52
+
53
+ ### 全局选项
54
+
55
+ - `-h, --help` - 显示帮助
56
+ - `-v, --version` - 显示版本
57
+
58
+ ## 支持的 Agent
59
+
60
+ | Agent | 项目目录 | 全局目录 |
61
+ | -------------- | ---------------- | -------------------------------------- |
62
+ | Cursor | `.agents/skills` | `~/.cursor/skills` |
63
+ | OpenClaw | `skills` | `~/.openclaw/skills` |
64
+ | Claude Code | `.claude/skills` | `~/.claude/skills` |
65
+ | Cline | `.agents/skills` | `~/.agents/skills` |
66
+ | Codex | `.agents/skills` | `~/.codex/skills` |
67
+ | Gemini CLI | `.agents/skills` | `~/.gemini/skills` |
68
+ | Qwen Code | `.qwen/skills` | `~/.qwen/skills` |
69
+ | GitHub Copilot | `.agents/skills` | `~/.copilot/skills` |
70
+ | iFlow CLI | `.iflow/skills` | `~/.iflow/skills` |
71
+ | Kimi Code CLI | `.agents/skills` | `~/.config/agents/skills` |
72
+ | Qoder | `.qoder/skills` | `~/.qoder/skills` |
73
+ | Trae / Trae CN | `.trae/skills` | `~/.trae/skills` / `~/.trae-cn/skills` |
74
+ | Antigravity | `.agent/skills` | `~/.gemini/antigravity/skills` |
75
+
76
+ ## 别名
77
+
78
+ 可通过以下任一命令名调用:
79
+
80
+ - `skill-atlas`
81
+ - `skill-atlas-cli`
82
+ - `skillatlas`
package/bin/cli.js ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { cac } from "cac";
4
+ import { checkForUpdate, install, logger, runSearch } from "../lib/index.js";
5
+ //#region src/bin/cli.ts
6
+ function getPackageJson() {
7
+ try {
8
+ return JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
9
+ } catch {
10
+ return {
11
+ name: "skill-atlas",
12
+ version: "1.0.0"
13
+ };
14
+ }
15
+ }
16
+ const LOGO_LINES = [
17
+ " _ _ _ _ _ _ ",
18
+ " ___| | _(_) | | __ _| |_| | __ _ ___ ",
19
+ " / __| |/ / | | |_____ / _` | __| |/ _` / __|",
20
+ " \\__ \\ <| | | |_____| (_| | |_| | (_| \\__ \\",
21
+ " |___/_|\\_\\_|_|_| \\__,_|\\__|_|\\__,_|___/"
22
+ ];
23
+ function showLogo() {
24
+ LOGO_LINES.forEach((line) => {
25
+ console.log(`${line}`);
26
+ });
27
+ console.log();
28
+ }
29
+ const PKG = getPackageJson();
30
+ const VERSION = PKG.version;
31
+ async function main() {
32
+ checkForUpdate(PKG);
33
+ showLogo();
34
+ const parseArgv = process.argv.slice(2).length === 0 ? [...process.argv.slice(0, 2), "--help"] : process.argv;
35
+ const cli = cac("skill-atlas");
36
+ cli.command("search [keyword]", "搜索 skill(按名称或描述匹配)").action(async (keyword) => {
37
+ if (!keyword?.trim()) {
38
+ logger.error("请提供搜索关键词");
39
+ logger.info("提示: skill-atlas search <关键词>");
40
+ process.exit(1);
41
+ }
42
+ await runSearch({ keyword: keyword.trim() });
43
+ });
44
+ cli.command("install [name]", "安装 skill(支持 skill 名称)").option("-y, --yes", "非交互模式,默认安装到全局").option("-g, --global", "安装到全局目录").action(async (name, options) => {
45
+ await install.run(name ? [name] : [], {
46
+ yes: options.yes,
47
+ global: options.global
48
+ });
49
+ });
50
+ cli.help();
51
+ cli.version(VERSION);
52
+ cli.parse(parseArgv);
53
+ }
54
+ main();
55
+ //#endregion
56
+ export {};
package/lib/index.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ //#region src/core/update-notifier.d.ts
2
+ /**
3
+ * 检查更新,有新版本时输出提示(无需重装,直接 update)
4
+ */
5
+ declare function checkForUpdate(pkg: {
6
+ name: string;
7
+ version: string;
8
+ }): void;
9
+ //#endregion
10
+ //#region src/commands/install.d.ts
11
+ interface AddOptions {
12
+ global?: boolean;
13
+ agent?: string[];
14
+ yes?: boolean;
15
+ skill?: string[];
16
+ list?: boolean;
17
+ all?: boolean;
18
+ fullDepth?: boolean;
19
+ copy?: boolean;
20
+ }
21
+ declare const _default: {
22
+ run: (args: string[], options?: AddOptions) => Promise<void>;
23
+ };
24
+ //#endregion
25
+ //#region src/commands/search.d.ts
26
+ /**
27
+ * 根据接口文档 /api/v1/skills 搜索 skill
28
+ * q 有值时执行搜索;q 为空时按热度排序返回列表
29
+ */
30
+ interface SearchOptions {
31
+ /** 搜索关键词 */
32
+ keyword: string;
33
+ }
34
+ declare function runSearch(options: SearchOptions): Promise<void>;
35
+ //#endregion
36
+ //#region src/core/logger.d.ts
37
+ /**
38
+ * 设置 verbose 模式(启用 debug 输出)
39
+ * consola level: 3=info, 4=debug
40
+ */
41
+ declare function setVerbose(enabled: boolean): void;
42
+ /**
43
+ * 检查是否启用 verbose
44
+ */
45
+ declare function isVerbose(): boolean;
46
+ /**
47
+ * 错误别名(兼容 err 调用)
48
+ */
49
+ declare function err(...args: unknown[]): void;
50
+ type LogFn = (...a: unknown[]) => void;
51
+ declare const _default$1: {
52
+ setVerbose: typeof setVerbose;
53
+ isVerbose: typeof isVerbose;
54
+ info: LogFn;
55
+ success: LogFn;
56
+ warn: LogFn;
57
+ error: LogFn;
58
+ err: typeof err;
59
+ debug: LogFn;
60
+ log: LogFn;
61
+ };
62
+ //#endregion
63
+ export { checkForUpdate, _default as install, _default$1 as logger, runSearch };