@delta-infra/cli 1.0.45 → 1.0.47
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 +24 -2
- package/checksums.txt +5 -5
- package/package.json +1 -1
- package/scripts/install-wizard.js +68 -9
package/README.md
CHANGED
|
@@ -28,6 +28,24 @@ npx @delta-infra/cli@latest uninstall
|
|
|
28
28
|
|
|
29
29
|
清理全局包、AI Skills 和配置文件。
|
|
30
30
|
|
|
31
|
+
### 升级
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# 升级 CLI + AI Skills
|
|
35
|
+
delta-cli upgrade
|
|
36
|
+
|
|
37
|
+
# 只检查是否有更新(不执行升级)
|
|
38
|
+
delta-cli upgrade --check
|
|
39
|
+
|
|
40
|
+
# 只升级 CLI 二进制
|
|
41
|
+
delta-cli upgrade --cli-only
|
|
42
|
+
|
|
43
|
+
# 只升级 AI Skills
|
|
44
|
+
delta-cli upgrade --skills-only
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
升级 CLI 时会通过 `npm install -g @delta-infra/cli@latest` 拉取最新版本;升级 Skills 时会通过 `npx skills add` 重新安装 AI Skills。
|
|
48
|
+
|
|
31
49
|
### 方式二:直接下载 Binary
|
|
32
50
|
|
|
33
51
|
从 [GitHub Releases](https://github.com/yzailab/delta-infra-cli/releases) 下载对应平台的压缩包(以下使用 `latest` 指向最新版):
|
|
@@ -175,8 +193,12 @@ delta-cli sandbox kill <sandbox_id>
|
|
|
175
193
|
| `delta-cli auth login` | 交互式登录 |
|
|
176
194
|
| `delta-cli auth login --token <token>` | Token 认证 |
|
|
177
195
|
| `delta-cli auth status` | 查看认证状态 |
|
|
178
|
-
| `delta-cli update check` |
|
|
179
|
-
| `delta-cli update` |
|
|
196
|
+
| `delta-cli update check` | 检查更新(deprecated,请用 `upgrade --check`) |
|
|
197
|
+
| `delta-cli update` | 安装最新版本(deprecated,请用 `upgrade`) |
|
|
198
|
+
| `delta-cli upgrade` | 升级 CLI 和 AI Skills 到最新版本 |
|
|
199
|
+
| `delta-cli upgrade --check` | 检查是否有可用更新 |
|
|
200
|
+
| `delta-cli upgrade --cli-only` | 只升级 CLI 二进制 |
|
|
201
|
+
| `delta-cli upgrade --skills-only` | 只升级 AI Skills |
|
|
180
202
|
| `delta-cli --version` | 显示版本 |
|
|
181
203
|
|
|
182
204
|
### Sandbox 命令
|
package/checksums.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
abfbd8a22e5fb5e193d6ef63f4f49db195ceb635bb08a19ae550555f4d8da1ed delta-cli-darwin-amd64.tar.gz
|
|
2
|
+
90e3b9e1b7784b3e84a8e34adb7be975cf84a768ec01c2d6c11de0c6bca2ff8d delta-cli-darwin-arm64.tar.gz
|
|
3
|
+
7897fcec1be3468ec15e3d2f2771cd1e7837fe148ff1fbae4ca3dbb0f733b838 delta-cli-linux-amd64.tar.gz
|
|
4
|
+
6d69f17806ff1a6a42d530fa6ef78c7fbc49aa88242cc95482708a6097b9d13e delta-cli-linux-arm64.tar.gz
|
|
5
|
+
0f6b1274ed8cf3113d1f49b3c526a756bed0e343aa186af623ab5aecf993619f delta-cli-windows-amd64.zip
|
package/package.json
CHANGED
|
@@ -232,12 +232,45 @@ async function stepInstallGlobally(msg) {
|
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
async function skillsAlreadyInstalled() {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
const agentsDir = path.join(osHomedir(), ".agents", "skills");
|
|
236
|
+
return fs.existsSync(path.join(agentsDir, "delta-sandbox", "SKILL.md")) &&
|
|
237
|
+
fs.existsSync(path.join(agentsDir, "delta-shared", "SKILL.md"));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function installSkillsFromLocalPackage() {
|
|
241
|
+
const npmRoot = runSilent("npm", ["root", "-g"], { timeout: 10000 })
|
|
242
|
+
.toString().trim();
|
|
243
|
+
const pkgSkillsDir = path.join(npmRoot, PKG, "skills");
|
|
244
|
+
if (!fs.existsSync(path.join(pkgSkillsDir, "delta-sandbox", "SKILL.md"))) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const home = osHomedir();
|
|
249
|
+
const agentsDir = path.join(home, ".agents", "skills");
|
|
250
|
+
fs.mkdirSync(agentsDir, { recursive: true });
|
|
251
|
+
|
|
252
|
+
for (const skill of ["delta-sandbox", "delta-shared"]) {
|
|
253
|
+
const src = path.join(pkgSkillsDir, skill);
|
|
254
|
+
if (!fs.existsSync(src)) continue;
|
|
255
|
+
const dst = path.join(agentsDir, skill);
|
|
256
|
+
fs.rmSync(dst, { recursive: true, force: true });
|
|
257
|
+
fs.cpSync(src, dst, { recursive: true });
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const claudeDir = path.join(home, ".claude", "skills");
|
|
261
|
+
if (fs.existsSync(path.dirname(claudeDir))) {
|
|
262
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
263
|
+
for (const skill of ["delta-sandbox", "delta-shared"]) {
|
|
264
|
+
const linkPath = path.join(claudeDir, skill);
|
|
265
|
+
const targetPath = path.join(agentsDir, skill);
|
|
266
|
+
try {
|
|
267
|
+
fs.rmSync(linkPath, { force: true });
|
|
268
|
+
fs.symlinkSync(path.relative(path.dirname(linkPath), targetPath), linkPath);
|
|
269
|
+
} catch { /* symlink may fail on some platforms */ }
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return true;
|
|
241
274
|
}
|
|
242
275
|
|
|
243
276
|
async function stepInstallSkills(msg) {
|
|
@@ -248,17 +281,24 @@ async function stepInstallSkills(msg) {
|
|
|
248
281
|
s.stop(msg.step2Skip);
|
|
249
282
|
return;
|
|
250
283
|
}
|
|
284
|
+
|
|
285
|
+
try {
|
|
286
|
+
if (installSkillsFromLocalPackage()) {
|
|
287
|
+
s.stop(msg.step2Done);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
} catch { }
|
|
291
|
+
|
|
251
292
|
const GH_PROXY = "https://gh-proxy.com/https://github.com";
|
|
252
293
|
const urls = [
|
|
253
294
|
`${GH_PROXY}/${SKILLS_REPO}`,
|
|
254
|
-
SKILLS_REPO,
|
|
255
295
|
`https://github.com/${SKILLS_REPO}`,
|
|
256
296
|
];
|
|
257
297
|
let lastErr;
|
|
258
298
|
for (const url of urls) {
|
|
259
299
|
try {
|
|
260
300
|
await runSilentAsync("npx", ["-y", "skills", "add", url, "-y", "-g"], {
|
|
261
|
-
timeout:
|
|
301
|
+
timeout: 60000,
|
|
262
302
|
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
|
|
263
303
|
});
|
|
264
304
|
s.stop(msg.step2Done);
|
|
@@ -342,9 +382,28 @@ async function stepAuthLogin(msg) {
|
|
|
342
382
|
async function stepUninstallSkills(msg) {
|
|
343
383
|
const s = createSpinner();
|
|
344
384
|
s.start("Removing AI skills...");
|
|
385
|
+
|
|
386
|
+
const home = osHomedir();
|
|
387
|
+
const agentsDir = path.join(home, ".agents", "skills");
|
|
388
|
+
const claudeDir = path.join(home, ".claude", "skills");
|
|
389
|
+
let removedLocally = false;
|
|
390
|
+
|
|
391
|
+
for (const skill of ["delta-sandbox", "delta-shared"]) {
|
|
392
|
+
try {
|
|
393
|
+
fs.rmSync(path.join(agentsDir, skill), { recursive: true, force: true });
|
|
394
|
+
fs.rmSync(path.join(claudeDir, skill), { force: true });
|
|
395
|
+
removedLocally = true;
|
|
396
|
+
} catch { }
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if (removedLocally) {
|
|
400
|
+
s.stop("AI skills removed");
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
|
|
345
404
|
try {
|
|
346
405
|
await runSilentAsync("npx", ["-y", "skills", "remove", "delta-sandbox", "delta-shared", "-g"], {
|
|
347
|
-
timeout:
|
|
406
|
+
timeout: 60000,
|
|
348
407
|
});
|
|
349
408
|
s.stop("AI skills removed");
|
|
350
409
|
} catch {
|