@okclaw-build/cli 1.0.0-beta.38 → 1.0.0-beta.39
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/dist/installers/skill.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, rmSync, statSync } from 'node:fs';
|
|
2
2
|
import { shell, shellCapture } from '../utils/shell.js';
|
|
3
3
|
import { checkDiskSpace, ensureCommand } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
5
5
|
import { OKCLAW_TMP_DIR, OPENCLAW_WORKSPACE } from '../utils/constants.js';
|
|
6
6
|
const SKILLS_DIR = `${OPENCLAW_WORKSPACE}/skills`;
|
|
7
|
+
// 与 okclaw-skill-api SkillUploadServiceImpl.hasSkillMdAtAcceptedRoot 对齐:上传端接受
|
|
8
|
+
// (a) SKILL.md 在 zip 根;(b) SKILL.md 在唯一顶层目录下。CLI 解压必须同样支持,
|
|
9
|
+
// 否则 ClawHub-style 包会落到 ~/.openclaw/skills/<name>/<name>/SKILL.md,openclaw 找不到。
|
|
10
|
+
export function findEffectiveSkillRoot(extractDir) {
|
|
11
|
+
const entries = readdirSync(extractDir);
|
|
12
|
+
if (entries.length === 1) {
|
|
13
|
+
const candidate = `${extractDir}/${entries[0]}`;
|
|
14
|
+
if (statSync(candidate).isDirectory() && existsSync(`${candidate}/SKILL.md`)) {
|
|
15
|
+
return candidate;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return extractDir;
|
|
19
|
+
}
|
|
7
20
|
export class SkillInstaller {
|
|
8
21
|
skillName;
|
|
9
22
|
constructor(skillName) {
|
|
@@ -37,13 +50,20 @@ export class SkillInstaller {
|
|
|
37
50
|
info(`Overwriting existing skill at ${skillDir}...`);
|
|
38
51
|
rmSync(skillDir, { recursive: true, force: true });
|
|
39
52
|
}
|
|
40
|
-
// Extract
|
|
41
|
-
|
|
53
|
+
// Extract to staging dir, then move effective root into skillDir
|
|
54
|
+
// (handles ClaudeCode-style 和 ClawHub-style 两种布局,与后端上传接受范围一致)
|
|
55
|
+
const stageDir = `${OKCLAW_TMP_DIR}/${this.skillName}-extract`;
|
|
56
|
+
rmSync(stageDir, { recursive: true, force: true });
|
|
57
|
+
mkdirSync(stageDir, { recursive: true });
|
|
42
58
|
info(`Extracting skill to ${skillDir}...`);
|
|
43
|
-
const unzipResult = await shellCapture(`unzip -o "${archive}" -d "${
|
|
59
|
+
const unzipResult = await shellCapture(`unzip -o "${archive}" -d "${stageDir}"`);
|
|
44
60
|
if (unzipResult.code > 1) {
|
|
45
61
|
throw new Error(`unzip failed (exit ${unzipResult.code}): ${unzipResult.stderr}`);
|
|
46
62
|
}
|
|
63
|
+
const sourceDir = findEffectiveSkillRoot(stageDir);
|
|
64
|
+
mkdirSync(skillDir, { recursive: true });
|
|
65
|
+
await shell(`find "${sourceDir}" -mindepth 1 -maxdepth 1 -exec mv {} "${skillDir}/" \\;`);
|
|
66
|
+
rmSync(stageDir, { recursive: true, force: true });
|
|
47
67
|
// Cleanup
|
|
48
68
|
await shell(`rm -f "${archive}"`).catch(() => { });
|
|
49
69
|
info(`Skill ${this.skillName} installed at ${skillDir}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/installers/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/installers/skill.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED