mdk-skills 2.1.8 → 2.1.9
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/package.json +1 -1
- package/scripts/cli.js +44 -32
- package/scripts/core.js +3 -3
package/package.json
CHANGED
package/scripts/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const fs = require("fs");
|
|
4
4
|
const path = require("path");
|
|
5
|
-
const { getPackageSkills, getUserSkills, getSkillsSource } = require("./core");
|
|
5
|
+
const { getPackageSkills, getUserSkills, getSkillsSource, backupDir } = require("./core");
|
|
6
6
|
|
|
7
7
|
// npx 运行时:process.cwd() 是用户项目目录
|
|
8
8
|
// __dirname 是包内 scripts/ 目录
|
|
@@ -394,54 +394,66 @@ function cmdConnect(repoPath) {
|
|
|
394
394
|
writeSettings(settings);
|
|
395
395
|
|
|
396
396
|
console.log(` ✅ 已绑定技能源: ${repoPath}\n`);
|
|
397
|
-
console.log(` 💡 运行 npx mdk-skills
|
|
397
|
+
console.log(` 💡 运行 npx mdk-skills 选择场景\n`);
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
-
|
|
400
|
+
function cmdSync() {
|
|
401
401
|
const settings = readSettings();
|
|
402
402
|
const sourcePath = settings._skill_source;
|
|
403
403
|
|
|
404
404
|
if (!sourcePath) {
|
|
405
|
-
console.log(" ⚠️
|
|
405
|
+
console.log(" ⚠️ 尚未绑定技能源\n");
|
|
406
406
|
return;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
-
if (!fs.existsSync(path.join(sourcePath, ".claude"
|
|
410
|
-
console.log(` ❌ 绑定的路径 "${sourcePath}"
|
|
409
|
+
if (!fs.existsSync(path.join(sourcePath, ".claude"))) {
|
|
410
|
+
console.log(` ❌ 绑定的路径 "${sourcePath}" 已失效\n`);
|
|
411
411
|
return;
|
|
412
412
|
}
|
|
413
413
|
|
|
414
|
-
|
|
415
|
-
const
|
|
414
|
+
// 备份仓库旧内容
|
|
415
|
+
const repoClaude = path.join(sourcePath, ".claude");
|
|
416
|
+
if (fs.existsSync(repoClaude)) {
|
|
417
|
+
backupDir(repoClaude);
|
|
418
|
+
}
|
|
416
419
|
|
|
417
|
-
|
|
418
|
-
|
|
420
|
+
// 技能 → 反推到仓库
|
|
421
|
+
const repoSkills = path.join(sourcePath, ".claude", "skills");
|
|
422
|
+
if (!fs.existsSync(repoSkills)) {
|
|
423
|
+
fs.mkdirSync(repoSkills, { recursive: true });
|
|
424
|
+
}
|
|
425
|
+
for (const name of fs.readdirSync(skillsDest)) {
|
|
426
|
+
const src = path.join(skillsDest, name);
|
|
427
|
+
const dest = path.join(repoSkills, name);
|
|
428
|
+
if (fs.existsSync(dest)) {
|
|
429
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
430
|
+
}
|
|
431
|
+
copyDirSync(src, dest);
|
|
419
432
|
}
|
|
420
433
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
434
|
+
// profiles.json → 反推
|
|
435
|
+
const projectProfiles = path.join(claudeDest, "profiles.json");
|
|
436
|
+
if (fs.existsSync(projectProfiles)) {
|
|
437
|
+
fs.copyFileSync(projectProfiles, path.join(sourcePath, ".claude", "profiles.json"));
|
|
438
|
+
}
|
|
426
439
|
|
|
427
|
-
|
|
440
|
+
// settings.json → 反推(过滤掉 _skill_source 和 _active_profile)
|
|
441
|
+
const cleanSettings = { ...settings };
|
|
442
|
+
delete cleanSettings._skill_source;
|
|
443
|
+
delete cleanSettings._active_profile;
|
|
444
|
+
fs.writeFileSync(
|
|
445
|
+
path.join(sourcePath, ".claude", "settings.json"),
|
|
446
|
+
JSON.stringify(cleanSettings, null, 2) + "\n",
|
|
447
|
+
"utf-8",
|
|
448
|
+
);
|
|
428
449
|
|
|
429
|
-
//
|
|
430
|
-
const
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
fs.copyFileSync(mdSource, mdDest);
|
|
450
|
+
// CLAUDE.md → 反推
|
|
451
|
+
const projectMd = path.join(projectRoot, "CLAUDE.md");
|
|
452
|
+
if (fs.existsSync(projectMd)) {
|
|
453
|
+
fs.copyFileSync(projectMd, path.join(sourcePath, "CLAUDE.md"));
|
|
434
454
|
}
|
|
435
455
|
|
|
436
|
-
|
|
437
|
-
const updated = results.filter((r) => r.action === "updated").length;
|
|
438
|
-
const skipped = results.filter((r) => r.action === "skipped").length;
|
|
439
|
-
|
|
440
|
-
console.log(`\n ✅ 技能同步完成`);
|
|
441
|
-
if (installed > 0) console.log(` 新装 ${installed} 个`);
|
|
442
|
-
if (updated > 0) console.log(` 更新 ${updated} 个`);
|
|
443
|
-
if (skipped > 0) console.log(` 跳过 ${skipped} 个(无变化)`);
|
|
444
|
-
console.log("");
|
|
456
|
+
console.log(" ✅ 已同步到仓库\n");
|
|
445
457
|
}
|
|
446
458
|
|
|
447
459
|
function cmdDisconnect() {
|
|
@@ -483,7 +495,7 @@ async function main() {
|
|
|
483
495
|
npx mdk-skills 场景选择 → 一键安装对应技能
|
|
484
496
|
npx mdk-skills list 查看已安装的技能
|
|
485
497
|
npx mdk-skills connect 绑定本地技能源仓库路径
|
|
486
|
-
npx mdk-skills sync
|
|
498
|
+
npx mdk-skills sync 将项目中的技能修改推送到仓库
|
|
487
499
|
npx mdk-skills disconnect 解绑本地源,恢复使用 npm 包内置技能
|
|
488
500
|
npx mdk-skills --help 显示帮助
|
|
489
501
|
|
|
@@ -502,7 +514,7 @@ async function main() {
|
|
|
502
514
|
} else if (command === "connect") {
|
|
503
515
|
cmdConnect(args[0]);
|
|
504
516
|
} else if (command === "sync") {
|
|
505
|
-
|
|
517
|
+
cmdSync();
|
|
506
518
|
} else if (command === "disconnect") {
|
|
507
519
|
cmdDisconnect();
|
|
508
520
|
} else {
|
package/scripts/core.js
CHANGED
|
@@ -209,9 +209,6 @@ function getPackageSkills(packageDir) {
|
|
|
209
209
|
});
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
/**
|
|
213
|
-
* 获取用户已安装的技能及其 settings 中的 enabled 状态
|
|
214
|
-
*/
|
|
215
212
|
/**
|
|
216
213
|
* 解析技能源路径:
|
|
217
214
|
* 优先从 settings.json 的 _skill_source 字段读取(本地开发模式)
|
|
@@ -228,6 +225,9 @@ function getSkillsSource(projectRoot, fallbackDir) {
|
|
|
228
225
|
return fallbackDir;
|
|
229
226
|
}
|
|
230
227
|
|
|
228
|
+
/**
|
|
229
|
+
* 获取用户已安装的技能及其 settings 中的 enabled 状态
|
|
230
|
+
*/
|
|
231
231
|
function getUserSkills(claudeDest) {
|
|
232
232
|
const skillsDest = path.join(claudeDest, "skills");
|
|
233
233
|
if (!fs.existsSync(skillsDest)) return [];
|