cli-blueprint 0.2.5 → 1.0.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 +22 -4
- package/install.mjs +13 -9
- package/package.json +23 -7
- package/skills/calctool/install-meta.json +1 -1
- package/skills/swarm/install-meta.json +1 -1
package/README.md
CHANGED
|
@@ -96,14 +96,32 @@ node install.mjs install
|
|
|
96
96
|
```
|
|
97
97
|
更新:`git pull && node install.mjs update`(install/update 会对比已装版本与 cli.tax 最新版本并提示)。
|
|
98
98
|
|
|
99
|
-
###
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
### 更新感知(自动升级 + check)
|
|
100
|
+
|
|
101
|
+
**自动升级**:每次发布新版本到 npm / cli.tax 后,已安装用户只需重跑一次安装命令,
|
|
102
|
+
安装器会自动对比本地已装版本与远端最新版本,**有新版本直接覆盖升级到最新**(无需先卸载):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npx cli-blueprint@latest install # 自动拉取最新并覆盖升级(blueprint/calctool/swarm)
|
|
106
|
+
node install.mjs install # 源码方式同理
|
|
107
|
+
```
|
|
108
|
+
升级时输出 `⤴ 已更新 <skill> 旧版本 → 新版本`。
|
|
109
|
+
|
|
110
|
+
**静默自动更新(--silent / --yes)**:不想看到任何安装/升级输出,直接覆盖到最新:
|
|
111
|
+
```bash
|
|
112
|
+
npx cli-blueprint@latest install --silent # 静默升级,无任何提示
|
|
113
|
+
node install.mjs install --yes # 源码方式静默升级
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**主动检查(check)**:不确定是否有新版本时,可随时主动检查(不写盘):
|
|
102
117
|
```bash
|
|
103
118
|
node install.mjs check # 遍历本机已装 IDE,对比 cli.tax 最新版本
|
|
104
|
-
npx cli-blueprint@latest check # 单包检查(calctool 同理)
|
|
119
|
+
npx cli-blueprint@latest check # 单包检查(calctool / swarm 同理)
|
|
105
120
|
```
|
|
106
121
|
|
|
122
|
+
安装器写入 `install-meta.json`(来源/版本/时间)到每个 skill 目录;SKILL.md 注入版本横幅,
|
|
123
|
+
IDE 每次读取即可见当前版本与更新命令。
|
|
124
|
+
|
|
107
125
|
### 方式 C:直接用 clitaxio(只装单个 IDE,作为对照)
|
|
108
126
|
```bash
|
|
109
127
|
npx clitaxio@latest install wvz6zmRWmX
|
package/install.mjs
CHANGED
|
@@ -128,7 +128,7 @@ async function listSkills() {
|
|
|
128
128
|
return skills.sort()
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
async function syncOne(name, targetRoot, { remove = false } = {}) {
|
|
131
|
+
async function syncOne(name, targetRoot, { remove = false, silent = false } = {}) {
|
|
132
132
|
const dest = join(targetRoot, name)
|
|
133
133
|
if (remove) {
|
|
134
134
|
if (existsSync(dest)) { await rm(dest, { recursive: true, force: true }); print(` ✓ 已移除 ${name} ← ${targetRoot}`) }
|
|
@@ -148,6 +148,7 @@ async function syncOne(name, targetRoot, { remove = false } = {}) {
|
|
|
148
148
|
await writeMeta(dest, { ...srcMeta, installedAt: new Date().toISOString() })
|
|
149
149
|
}
|
|
150
150
|
const upgrade = destMeta && srcMeta && destMeta.version && srcMeta.version && destMeta.version !== srcMeta.version
|
|
151
|
+
if (silent) return
|
|
151
152
|
if (upgrade) {
|
|
152
153
|
print(` ⤴ 已更新 ${name} ${destMeta.version} → ${srcMeta.version} → ${dest}`)
|
|
153
154
|
} else {
|
|
@@ -155,12 +156,12 @@ async function syncOne(name, targetRoot, { remove = false } = {}) {
|
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
async function syncAll(targetRoot, { remove = false, reportUpdated } = {}) {
|
|
159
|
+
async function syncAll(targetRoot, { remove = false, reportUpdated, silent = false } = {}) {
|
|
159
160
|
const skills = await listSkills()
|
|
160
161
|
if (!remove) await mkdir(targetRoot, { recursive: true })
|
|
161
162
|
for (const s of skills) {
|
|
162
163
|
const before = reportUpdated ? readMeta(join(targetRoot, s)) : null
|
|
163
|
-
await syncOne(s, targetRoot, { remove })
|
|
164
|
+
await syncOne(s, targetRoot, { remove, silent })
|
|
164
165
|
if (reportUpdated && before && before.version) {
|
|
165
166
|
const after = readMeta(join(targetRoot, s))
|
|
166
167
|
if (after && after.version && after.version !== before.version) reportUpdated(1)
|
|
@@ -398,18 +399,21 @@ if (cmd === 'list') {
|
|
|
398
399
|
const skills = await listSkills()
|
|
399
400
|
if (!skills.length) { print('skills/ 目录为空,无法安装'); process.exit(1) }
|
|
400
401
|
if (rest.includes('--agents') && !targets.some((t) => t.path === AGENTS.path)) targets.push(AGENTS)
|
|
401
|
-
|
|
402
|
+
const silent = rest.includes('--silent') || rest.includes('--yes')
|
|
403
|
+
if (!silent) print(`将安装 ${skills.length} 个 skills → ${targets.length} 个目标`)
|
|
402
404
|
let updated = 0
|
|
403
405
|
for (const t of targets) {
|
|
404
|
-
print(`[${t.label}] ${t.path}`)
|
|
405
|
-
await syncAll(t.path, { reportUpdated: (n) => { updated += n } })
|
|
406
|
+
if (!silent) print(`[${t.label}] ${t.path}`)
|
|
407
|
+
await syncAll(t.path, { reportUpdated: (n) => { updated += n }, silent })
|
|
406
408
|
}
|
|
407
409
|
if (rest.includes('--agents')) {
|
|
408
410
|
print('⚠ 已安装到共享 ~/.agents/skills:该目录会被 Codex/Gemini/Zed/OpenCode/Cursor 等同时扫描,同一 skill 可能被重复发现。')
|
|
409
411
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
412
|
+
if (!silent) {
|
|
413
|
+
print('完成。各 IDE 会自动发现各自用户级根中的新目录(可立即在新会话中调用)。')
|
|
414
|
+
if (updated) {
|
|
415
|
+
print(`提示:${updated} 个 skill 有更新。以后可用 node install.mjs check 检查新版本。`)
|
|
416
|
+
}
|
|
413
417
|
}
|
|
414
418
|
} else if (cmd === 'check') {
|
|
415
419
|
const targets = parseTargets(rest)
|
package/package.json
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cli-blueprint",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Blueprint + Calctool + Swarm 多 IDE 安装器:从 cli.tax 自动拉取并分发到本机所有已装 IDE
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Blueprint + Calctool + Swarm 多 IDE 安装器:从 cli.tax 自动拉取并分发到本机所有已装 IDE。支持 check 更新检测与 --silent 静默升级。",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
"bin": {
|
|
7
|
+
"cli-blueprint": "install.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"install.mjs",
|
|
11
|
+
"sources.json",
|
|
12
|
+
"skills"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
9
17
|
"license": "MIT",
|
|
10
|
-
"keywords": [
|
|
11
|
-
|
|
18
|
+
"keywords": [
|
|
19
|
+
"blueprint",
|
|
20
|
+
"skill",
|
|
21
|
+
"cli.tax",
|
|
22
|
+
"clitax",
|
|
23
|
+
"codex",
|
|
24
|
+
"agent",
|
|
25
|
+
"installer"
|
|
26
|
+
]
|
|
27
|
+
}
|