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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdk-skills",
3
- "version": "2.1.8",
3
+ "version": "2.1.9",
4
4
  "description": "mdk-engineer - 沉稳靠谱的前端开发助手 Claude Skills 配置包,一键注入 .claude/ 技能目录和 CLAUDE.md 人设配置",
5
5
  "author": "XiaoMa",
6
6
  "license": "MIT",
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 sync 同步技能\n`);
397
+ console.log(` 💡 运行 npx mdk-skills 选择场景\n`);
398
398
  }
399
399
 
400
- async function cmdSync() {
400
+ function cmdSync() {
401
401
  const settings = readSettings();
402
402
  const sourcePath = settings._skill_source;
403
403
 
404
404
  if (!sourcePath) {
405
- console.log(" ⚠️ 尚未绑定技能源,请先运行 npx mdk-skills connect <路径>\n");
405
+ console.log(" ⚠️ 尚未绑定技能源\n");
406
406
  return;
407
407
  }
408
408
 
409
- if (!fs.existsSync(path.join(sourcePath, ".claude", "skills"))) {
410
- console.log(` ❌ 绑定的路径 "${sourcePath}" 已失效或已移动\n`);
409
+ if (!fs.existsSync(path.join(sourcePath, ".claude"))) {
410
+ console.log(` ❌ 绑定的路径 "${sourcePath}" 已失效\n`);
411
411
  return;
412
412
  }
413
413
 
414
- const { backupDir, installSkills, installSettings } = require("./core");
415
- const logFile = path.join(claudeDest, ".install.log");
414
+ // 备份仓库旧内容
415
+ const repoClaude = path.join(sourcePath, ".claude");
416
+ if (fs.existsSync(repoClaude)) {
417
+ backupDir(repoClaude);
418
+ }
416
419
 
417
- if (fs.existsSync(claudeDest)) {
418
- backupDir(claudeDest);
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
- const results = installSkills(
422
- path.join(sourcePath, ".claude", "skills"),
423
- skillsDest,
424
- logFile,
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
- installSettings(path.join(sourcePath, ".claude"), claudeDest, logFile);
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
- // 复制 CLAUDE.md
430
- const mdSource = path.join(sourcePath, "CLAUDE.md");
431
- const mdDest = path.join(projectRoot, "CLAUDE.md");
432
- if (fs.existsSync(mdSource)) {
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
- const installed = results.filter((r) => r.action === "installed").length;
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
- await cmdSync();
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 [];