cli-calctool 0.3.3 → 0.3.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 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
- ### 更新感知(check)
100
- 安装器写入 `install-meta.json`(来源/版本/时间)到每个 skill 目录;SKILL.md 注入版本横幅,
101
- IDE 每次读取即可见版本与更新入口。主动检查:
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
- print(`将安装 ${skills.length} skills ${targets.length} 个目标`)
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
- print('完成。各 IDE 会自动发现各自用户级根中的新目录(可立即在新会话中调用)。')
411
- if (updated) {
412
- print(`提示:${updated} 个 skill 有更新。以后可用 node install.mjs check 检查新版本。`)
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,7 +1,7 @@
1
1
  {
2
2
  "name": "cli-calctool",
3
- "version": "0.3.3",
4
- "description": "Calctool + Blueprint + Swarm 多 IDE 安装器:从 cli.tax 自动拉取并分发到本机所有已装 IDE(Codex/DSH/Claude/Cursor/…)。支持 check 更新检测。",
3
+ "version": "0.3.4",
4
+ "description": "Calctool + Blueprint + Swarm 多 IDE 安装器:从 cli.tax 自动拉取并分发到本机所有已装 IDE。支持 check 更新检测与 --silent 静默升级。",
5
5
  "type": "module",
6
6
  "bin": { "cli-calctool": "install.mjs" },
7
7
  "files": ["install.mjs", "sources.json", "skills"],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "source": "KKyA6xljUX",
3
3
  "slug": "calctool",
4
- "version": "v0.3.0",
4
+ "version": "v0.4.0",
5
5
  "endpoint": "https://cli.tax/api/public/skills/KKyA6xljUX",
6
6
  "installedAt": "2026-08-17T00:00:00.000Z"
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "source": "zj7fTPVh4p",
3
3
  "slug": "swarm",
4
- "version": "v0.1.0",
4
+ "version": "v0.2.0",
5
5
  "endpoint": "https://cli.tax/api/public/skills/zj7fTPVh4p",
6
6
  "installedAt": "2026-08-17T00:00:00.000Z"
7
7
  }