harveyz-skill 0.3.0 → 0.4.0
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 +18 -29
- package/bin/cli.js +75 -16
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Harvey 的个人 Claude Code 技能仓库。
|
|
|
4
4
|
|
|
5
5
|
## 技能清单
|
|
6
6
|
|
|
7
|
-
按 bundle 分组,`
|
|
7
|
+
按 bundle 分组,`hskill install --bundle <bundle>` 安装对应分组。
|
|
8
8
|
|
|
9
9
|
### analysis — 分析工具
|
|
10
10
|
|
|
@@ -63,7 +63,7 @@ Harvey 的个人 Claude Code 技能仓库。
|
|
|
63
63
|
|
|
64
64
|
## 工具清单
|
|
65
65
|
|
|
66
|
-
Shell 工具,通过 `
|
|
66
|
+
Shell 工具,通过 `hskill install --tool p-launch` 安装。
|
|
67
67
|
|
|
68
68
|
| 工具 | 说明 |
|
|
69
69
|
|------|------|
|
|
@@ -74,50 +74,39 @@ Shell 工具,通过 `npx harveyz-skill --bundle shell-tools` 安装。
|
|
|
74
74
|
|
|
75
75
|
## 安装
|
|
76
76
|
|
|
77
|
-
### 推荐:npx 一键安装
|
|
78
|
-
|
|
79
77
|
```bash
|
|
80
|
-
|
|
78
|
+
npm install -g harveyz-skill
|
|
81
79
|
```
|
|
82
80
|
|
|
83
|
-
|
|
81
|
+
安装后使用 `hskill` 命令管理 skills。
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
npx harveyz-skill --bundle brainstorming --target claude
|
|
88
|
-
npx harveyz-skill --bundle brainstorming,dev --target all
|
|
89
|
-
```
|
|
83
|
+
### 常用命令
|
|
90
84
|
|
|
91
|
-
**查看可用 bundle:**
|
|
92
85
|
```bash
|
|
93
|
-
|
|
86
|
+
hskill # 交互式选择安装
|
|
87
|
+
hskill install --bundle dev --target claude # 安装指定 bundle
|
|
88
|
+
hskill install --skill git-workflow-init # 安装指定 skill
|
|
89
|
+
hskill install --tool p-launch # 安装 shell 工具
|
|
90
|
+
hskill list # 查看可用 skill
|
|
91
|
+
hskill update # 更新到最新版
|
|
92
|
+
hskill --help # 查看帮助
|
|
94
93
|
```
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
Skills 安装到 `~/.claude/skills/`,shell 工具安装到 `~/.local/bin/`。
|
|
97
96
|
|
|
98
|
-
|
|
97
|
+
### 本地源码开发
|
|
99
98
|
|
|
100
99
|
```bash
|
|
101
|
-
# 交互式选择 bundle 和目标工具
|
|
102
|
-
node bin/cli.js
|
|
103
|
-
|
|
104
100
|
# 安装指定 skill
|
|
105
|
-
node bin/cli.js --skill mermaid-diagram --target claude
|
|
106
|
-
node bin/cli.js --skill brainstorming,writing-plans --target claude
|
|
107
|
-
|
|
108
|
-
# 安装整个 skill bundle
|
|
109
|
-
node bin/cli.js --bundle dev --target claude
|
|
101
|
+
node bin/cli.js install --skill mermaid-diagram --target claude
|
|
110
102
|
|
|
111
|
-
#
|
|
112
|
-
node bin/cli.js --
|
|
103
|
+
# 安装整个 bundle
|
|
104
|
+
node bin/cli.js install --bundle dev --target claude
|
|
113
105
|
|
|
114
106
|
# 覆盖已有安装
|
|
115
|
-
node bin/cli.js --skill mermaid-diagram --target claude --force
|
|
116
|
-
node bin/cli.js --tool p-launch --force
|
|
107
|
+
node bin/cli.js install --skill mermaid-diagram --target claude --force
|
|
117
108
|
```
|
|
118
109
|
|
|
119
|
-
Skills 安装到 `~/.claude/skills/`,shell 工具安装到 `~/.local/bin/`。
|
|
120
|
-
|
|
121
110
|
## Skill 开发指南
|
|
122
111
|
|
|
123
112
|
### 命名规范
|
package/bin/cli.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { checkbox } from '@inquirer/prompts'
|
|
3
3
|
import chalk from 'chalk'
|
|
4
|
+
import { execSync } from 'child_process'
|
|
5
|
+
import { createRequire } from 'module'
|
|
4
6
|
import {
|
|
5
7
|
buildAllChoices, getAllSkillItems, getAllToolItems,
|
|
6
8
|
resolveSkills, resolveSkillsByName, resolveTools, resolveToolsByName,
|
|
@@ -9,21 +11,64 @@ import {
|
|
|
9
11
|
import { TARGET_CHOICES, resolveTargets, TARGETS } from '../lib/targets.js'
|
|
10
12
|
import { installSkills, installTools } from '../lib/installer.js'
|
|
11
13
|
|
|
14
|
+
const require = createRequire(import.meta.url)
|
|
15
|
+
const { version } = require('../package.json')
|
|
16
|
+
|
|
12
17
|
const args = process.argv.slice(2)
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
const subcommand = args[0]
|
|
19
|
+
|
|
20
|
+
// ── Help ─────────────────────────────────────────────────────────────────────
|
|
21
|
+
function printHelp() {
|
|
22
|
+
console.log(`
|
|
23
|
+
${chalk.bold('hskill')} — skill manager for Claude Code, Cursor, and Codex v${version}
|
|
24
|
+
|
|
25
|
+
${chalk.cyan('Usage:')}
|
|
26
|
+
hskill interactive install
|
|
27
|
+
hskill install interactive install (explicit)
|
|
28
|
+
hskill install --bundle <b> install a skill bundle
|
|
29
|
+
hskill install --skill <s> install specific skill(s)
|
|
30
|
+
hskill install --tool <t> install shell tool(s)
|
|
31
|
+
hskill install --target <t> set target (claude/cursor/codex/all)
|
|
32
|
+
hskill install --force overwrite existing installs
|
|
33
|
+
hskill list list available skills and bundles
|
|
34
|
+
hskill update update hskill to the latest version
|
|
35
|
+
hskill --version show version
|
|
36
|
+
hskill --help show this help
|
|
37
|
+
|
|
38
|
+
${chalk.cyan('Examples:')}
|
|
39
|
+
hskill install --bundle dev --target claude
|
|
40
|
+
hskill install --skill git-workflow-init,mermaid-diagram --target claude
|
|
41
|
+
hskill install --tool p-launch
|
|
42
|
+
hskill update
|
|
43
|
+
`)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (args[0] === '--help' || args[0] === '-h') {
|
|
47
|
+
printHelp()
|
|
48
|
+
process.exit(0)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (args[0] === '--version' || args[0] === '-v') {
|
|
52
|
+
console.log(version)
|
|
53
|
+
process.exit(0)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ── Update ───────────────────────────────────────────────────────────────────
|
|
57
|
+
if (subcommand === 'update') {
|
|
58
|
+
console.log(chalk.dim(' · Updating hskill…'))
|
|
59
|
+
try {
|
|
60
|
+
execSync('npm update -g harveyz-skill', { stdio: 'inherit' })
|
|
61
|
+
console.log(chalk.green(' ✔ hskill updated'))
|
|
62
|
+
} catch {
|
|
63
|
+
console.error(chalk.red(' ✗ Update failed. Try: npm update -g harveyz-skill'))
|
|
64
|
+
process.exit(1)
|
|
65
|
+
}
|
|
66
|
+
process.exit(0)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// ── List ─────────────────────────────────────────────────────────────────────
|
|
70
|
+
if (subcommand === 'list') {
|
|
71
|
+
const { bundleMeta, skills, tools = [] } = require('../skills-index.json')
|
|
27
72
|
const byBundle = {}
|
|
28
73
|
for (const s of skills) {
|
|
29
74
|
if (!byBundle[s.bundle]) byBundle[s.bundle] = []
|
|
@@ -41,6 +86,20 @@ if (args[0] === 'list') {
|
|
|
41
86
|
process.exit(0)
|
|
42
87
|
}
|
|
43
88
|
|
|
89
|
+
// ── Install ───────────────────────────────────────────────────────────────────
|
|
90
|
+
// subcommand is 'install' or omitted (default behavior)
|
|
91
|
+
const installArgs = subcommand === 'install' ? args.slice(1) : args
|
|
92
|
+
|
|
93
|
+
const forceFlag = installArgs.includes('--force')
|
|
94
|
+
const bundleIdx = installArgs.indexOf('--bundle')
|
|
95
|
+
const targetIdx = installArgs.indexOf('--target')
|
|
96
|
+
const toolIdx = installArgs.indexOf('--tool')
|
|
97
|
+
const skillIdx = installArgs.indexOf('--skill')
|
|
98
|
+
const bundleArg = bundleIdx !== -1 ? installArgs[bundleIdx + 1] : undefined
|
|
99
|
+
const targetArg = targetIdx !== -1 ? installArgs[targetIdx + 1] : undefined
|
|
100
|
+
const toolArg = toolIdx !== -1 ? installArgs[toolIdx + 1] : undefined
|
|
101
|
+
const skillArg = skillIdx !== -1 ? installArgs[skillIdx + 1] : undefined
|
|
102
|
+
|
|
44
103
|
const TOOL_BUNDLE_VALUES = new Set(TOOL_BUNDLE_CHOICES.map(c => c.value))
|
|
45
104
|
|
|
46
105
|
function buildInteractiveChoices() {
|
|
@@ -103,7 +162,7 @@ try {
|
|
|
103
162
|
process.exit(0)
|
|
104
163
|
}
|
|
105
164
|
|
|
106
|
-
// ── Install skills
|
|
165
|
+
// ── Install skills ──────────────────────────────────────────────────────────
|
|
107
166
|
if (skillItems.length > 0) {
|
|
108
167
|
let selectedTargets
|
|
109
168
|
if (targetArg) {
|
|
@@ -134,7 +193,7 @@ try {
|
|
|
134
193
|
}
|
|
135
194
|
}
|
|
136
195
|
|
|
137
|
-
// ── Install shell tools
|
|
196
|
+
// ── Install shell tools ─────────────────────────────────────────────────────
|
|
138
197
|
if (toolItems.length > 0) {
|
|
139
198
|
console.log('')
|
|
140
199
|
const installed = await installTools(
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harveyz-skill",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Skill manager for Claude Code, Cursor, and Codex",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"
|
|
7
|
+
"hskill": "bin/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"prepack": "node scripts/generate-npmignore.js"
|