mdk-skills 2.2.21 → 2.2.23

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.
Files changed (134) hide show
  1. package/.claude/.install.log +3 -0
  2. package/.claude/backups/20260511.145306/.install.log +39 -0
  3. package/.claude/backups/20260511.145306/profiles.json +22 -0
  4. package/.claude/backups/20260511.145306/settings.json +11 -0
  5. package/.claude/backups/CLAUDE.md.20260511.145306 +131 -0
  6. package/.claude/profiles.json +10 -61
  7. package/.claude/settings.json +9 -27
  8. package/package.json +9 -4
  9. package/scripts/core.js +49 -4
  10. package/scripts/web-ui/dist/assets/index-B3SLlTdd.css +1 -0
  11. package/scripts/web-ui/dist/assets/index-DanvMbHP.js +7440 -0
  12. package/scripts/web-ui/dist/index.html +13 -0
  13. package/scripts/web-ui/server.js +1013 -860
  14. package/scripts/web-ui/src/App.vue +148 -125
  15. package/scripts/web-ui/src/api/skills.js +20 -0
  16. package/scripts/web-ui/src/components/SkillCard.vue +9 -0
  17. package/scripts/web-ui/src/components/StatusBar.vue +13 -0
  18. package/scripts/web-ui/src/styles/main.css +105 -1
  19. package/scripts/web-ui/src/utils/usage.js +46 -0
  20. package/scripts/web-ui/src/views/Dashboard.vue +389 -20
  21. package/scripts/web-ui/src/views/SceneSwitch.vue +4 -0
  22. package/scripts/web-ui/src/views/Settings.vue +44 -2
  23. package/scripts/web-ui/vite.config.js +11 -0
  24. package/.claude/backups/20260510.153300/.install.log +0 -10
  25. package/.claude/backups/20260510.153300/profiles.json +0 -67
  26. package/.claude/backups/20260510.153300/settings.json +0 -29
  27. package/.claude/backups/20260510.153300/skills/frontend-code-review/.meta.json +0 -6
  28. package/.claude/backups/20260510.153300/skills/frontend-code-review/SKILL.md +0 -167
  29. package/.claude/backups/20260510.153300/skills/frontend-code-review/references/checklist.md +0 -298
  30. package/.claude/backups/20260510.153300/skills/frontend-design/.meta.json +0 -6
  31. package/.claude/backups/20260510.153300/skills/frontend-design/LICENSE.txt +0 -177
  32. package/.claude/backups/20260510.153300/skills/frontend-design/SKILL.md +0 -42
  33. package/.claude/backups/20260510.153300/skills/skill-creator/.meta.json +0 -6
  34. package/.claude/backups/20260510.153300/skills/skill-creator/SKILL.md +0 -356
  35. package/.claude/backups/20260510.153300/skills/skill-creator/references/output-patterns.md +0 -82
  36. package/.claude/backups/20260510.153300/skills/skill-creator/references/workflows.md +0 -28
  37. package/.claude/backups/20260510.153300/skills/skill-creator/scripts/init_skill.py +0 -303
  38. package/.claude/backups/20260510.153300/skills/skill-creator/scripts/package_skill.py +0 -110
  39. package/.claude/backups/20260510.153300/skills/skill-creator/scripts/quick_validate.py +0 -95
  40. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/.meta.json +0 -6
  41. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/SKILL.md +0 -228
  42. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/charts.csv +0 -26
  43. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/colors.csv +0 -97
  44. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/landing.csv +0 -31
  45. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/products.csv +0 -97
  46. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/prompts.csv +0 -24
  47. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  48. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  49. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  50. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  51. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  52. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  53. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  54. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  55. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  56. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  57. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/styles.csv +0 -59
  58. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/typography.csv +0 -58
  59. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  60. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/scripts/core.py +0 -238
  61. package/.claude/backups/20260510.153300/skills/ui-ux-pro-max/scripts/search.py +0 -61
  62. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/.meta.json +0 -6
  63. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/SKILL.md +0 -26
  64. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/references/infinite-scroll.md +0 -292
  65. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/references/pinia-store.md +0 -174
  66. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/references/service-layer.md +0 -198
  67. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/references/tab-anchor.md +0 -1125
  68. package/.claude/backups/20260510.153300/skills/v3-fe-biz-patterns/references/use-loading.md +0 -114
  69. package/.claude/backups/20260510.153300/skills/vue/.meta.json +0 -6
  70. package/.claude/backups/20260510.153300/skills/vue/SKILL.md +0 -103
  71. package/.claude/backups/20260510.153300/skills/vue/references/components.md +0 -323
  72. package/.claude/backups/20260510.153300/skills/vue/references/composables.md +0 -358
  73. package/.claude/backups/20260510.153300/skills/vue/references/directives.md +0 -225
  74. package/.claude/backups/20260510.153300/skills/vue/references/gotchas.md +0 -438
  75. package/.claude/backups/20260510.153300/skills/vue/references/provide-inject.md +0 -174
  76. package/.claude/backups/20260510.153300/skills/vue/references/reactivity.md +0 -289
  77. package/.claude/backups/20260510.153300/skills/vue/references/router.md +0 -181
  78. package/.claude/backups/20260510.153300/skills/vue/references/testing.md +0 -294
  79. package/.claude/backups/20260510.153300/skills/vue/references/typescript.md +0 -172
  80. package/.claude/backups/20260510.153300/skills/vue/references/utils-client.md +0 -156
  81. package/.claude/skills/frontend-code-review/.meta.json +0 -6
  82. package/.claude/skills/frontend-code-review/SKILL.md +0 -167
  83. package/.claude/skills/frontend-code-review/references/checklist.md +0 -298
  84. package/.claude/skills/frontend-design/.meta.json +0 -6
  85. package/.claude/skills/frontend-design/LICENSE.txt +0 -177
  86. package/.claude/skills/frontend-design/SKILL.md +0 -42
  87. package/.claude/skills/skill-creator/.meta.json +0 -6
  88. package/.claude/skills/skill-creator/SKILL.md +0 -356
  89. package/.claude/skills/skill-creator/references/output-patterns.md +0 -82
  90. package/.claude/skills/skill-creator/references/workflows.md +0 -28
  91. package/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  92. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  93. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -95
  94. package/.claude/skills/ui-ux-pro-max/.meta.json +0 -6
  95. package/.claude/skills/ui-ux-pro-max/SKILL.md +0 -228
  96. package/.claude/skills/ui-ux-pro-max/data/charts.csv +0 -26
  97. package/.claude/skills/ui-ux-pro-max/data/colors.csv +0 -97
  98. package/.claude/skills/ui-ux-pro-max/data/landing.csv +0 -31
  99. package/.claude/skills/ui-ux-pro-max/data/products.csv +0 -97
  100. package/.claude/skills/ui-ux-pro-max/data/prompts.csv +0 -24
  101. package/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  102. package/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  103. package/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  104. package/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  105. package/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  106. package/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  107. package/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  108. package/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  109. package/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  110. package/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  111. package/.claude/skills/ui-ux-pro-max/data/styles.csv +0 -59
  112. package/.claude/skills/ui-ux-pro-max/data/typography.csv +0 -58
  113. package/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  114. package/.claude/skills/ui-ux-pro-max/scripts/core.py +0 -238
  115. package/.claude/skills/ui-ux-pro-max/scripts/search.py +0 -61
  116. package/.claude/skills/v3-fe-biz-patterns/.meta.json +0 -6
  117. package/.claude/skills/v3-fe-biz-patterns/SKILL.md +0 -26
  118. package/.claude/skills/v3-fe-biz-patterns/references/infinite-scroll.md +0 -292
  119. package/.claude/skills/v3-fe-biz-patterns/references/pinia-store.md +0 -174
  120. package/.claude/skills/v3-fe-biz-patterns/references/service-layer.md +0 -198
  121. package/.claude/skills/v3-fe-biz-patterns/references/tab-anchor.md +0 -1125
  122. package/.claude/skills/v3-fe-biz-patterns/references/use-loading.md +0 -114
  123. package/.claude/skills/vue/.meta.json +0 -6
  124. package/.claude/skills/vue/SKILL.md +0 -103
  125. package/.claude/skills/vue/references/components.md +0 -323
  126. package/.claude/skills/vue/references/composables.md +0 -358
  127. package/.claude/skills/vue/references/directives.md +0 -225
  128. package/.claude/skills/vue/references/gotchas.md +0 -438
  129. package/.claude/skills/vue/references/provide-inject.md +0 -174
  130. package/.claude/skills/vue/references/reactivity.md +0 -289
  131. package/.claude/skills/vue/references/router.md +0 -181
  132. package/.claude/skills/vue/references/testing.md +0 -294
  133. package/.claude/skills/vue/references/typescript.md +0 -172
  134. package/.claude/skills/vue/references/utils-client.md +0 -156
@@ -36,3 +36,6 @@
36
36
  [2026-05-10 15:42:53] [SKILL] vue (1.0.0) → skipped (exists)
37
37
  [2026-05-10 15:42:53] [SETTINGS] settings.json merged
38
38
  [2026-05-10 15:42:53] [BACKUP] backups/CLAUDE.md.20260510.154253 (CLAUDE.md user version preserved)
39
+ [2026-05-11 14:53:06] [INFO] Install started (upgrade)
40
+ [2026-05-11 14:53:06] [SETTINGS] settings.json merged
41
+ [2026-05-11 14:53:06] [BACKUP] backups/CLAUDE.md.20260511.145306 (CLAUDE.md user version preserved)
@@ -0,0 +1,39 @@
1
+ [2026-05-10 15:19:53] [INFO] Install started (upgrade)
2
+ [2026-05-10 15:19:53] [SKILL] frontend-code-review (1.0.0) → skipped (exists)
3
+ [2026-05-10 15:19:53] [SKILL] frontend-design (1.0.0) → skipped (exists)
4
+ [2026-05-10 15:19:53] [SKILL] skill-creator (1.0.0) → skipped (exists)
5
+ [2026-05-10 15:19:53] [SKILL] ui-ux-pro-max (1.0.0) → skipped (exists)
6
+ [2026-05-10 15:19:53] [SKILL] v3-fe-biz-patterns (1.0.0) → skipped (exists)
7
+ [2026-05-10 15:19:53] [SKILL] vue (1.0.0) → skipped (exists)
8
+ [2026-05-10 15:19:53] [SETTINGS] settings.json merged
9
+ [2026-05-10 15:19:53] [BACKUP] backups/CLAUDE.md.20260510.151953 (CLAUDE.md user version preserved)
10
+ [2026-05-10 15:33:00] [INFO] Install started (upgrade)
11
+ [2026-05-10 15:33:00] [SKILL] frontend-code-review (1.0.0) → skipped (exists)
12
+ [2026-05-10 15:33:00] [SKILL] frontend-design (1.0.0) → skipped (exists)
13
+ [2026-05-10 15:33:00] [SKILL] skill-creator (1.0.0) → skipped (exists)
14
+ [2026-05-10 15:33:00] [SKILL] ui-ux-pro-max (1.0.0) → skipped (exists)
15
+ [2026-05-10 15:33:00] [SKILL] v3-fe-biz-patterns (1.0.0) → skipped (exists)
16
+ [2026-05-10 15:33:00] [SKILL] vue (1.0.0) → skipped (exists)
17
+ [2026-05-10 15:33:00] [SETTINGS] settings.json merged
18
+ [2026-05-10 15:33:00] [BACKUP] backups/CLAUDE.md.20260510.153300 (CLAUDE.md user version preserved)
19
+ [2026-05-10 15:34:00] [INFO] Install started (upgrade)
20
+ [2026-05-10 15:34:00] [SKILL] frontend-code-review (1.0.0) → skipped (exists)
21
+ [2026-05-10 15:34:00] [SKILL] frontend-design (1.0.0) → skipped (exists)
22
+ [2026-05-10 15:34:00] [SKILL] skill-creator (1.0.0) → skipped (exists)
23
+ [2026-05-10 15:34:00] [SKILL] ui-ux-pro-max (1.0.0) → skipped (exists)
24
+ [2026-05-10 15:34:00] [SKILL] v3-fe-biz-patterns (1.0.0) → skipped (exists)
25
+ [2026-05-10 15:34:00] [SKILL] vue (1.0.0) → skipped (exists)
26
+ [2026-05-10 15:34:00] [SETTINGS] settings.json merged
27
+ [2026-05-10 15:34:00] [BACKUP] backups/CLAUDE.md.20260510.153400 (CLAUDE.md user version preserved)
28
+ [2026-05-10 15:42:52] [INFO] Install started (upgrade)
29
+ [2026-05-10 15:42:53] [SKILL] frontend-code-review (1.0.0) → skipped (exists)
30
+ [2026-05-10 15:42:53] [SKILL] frontend-design (1.0.0) → skipped (exists)
31
+ [2026-05-10 15:42:53] [SKILL] skill-creator (1.0.0) → skipped (exists)
32
+ [2026-05-10 15:42:53] [SKILL] test1 (1.0.0) → skipped (exists)
33
+ [2026-05-10 15:42:53] [SKILL] test2 (1.0.0) → skipped (exists)
34
+ [2026-05-10 15:42:53] [SKILL] ui-ux-pro-max (1.0.0) → skipped (exists)
35
+ [2026-05-10 15:42:53] [SKILL] v3-fe-biz-patterns (1.0.0) → skipped (exists)
36
+ [2026-05-10 15:42:53] [SKILL] vue (1.0.0) → skipped (exists)
37
+ [2026-05-10 15:42:53] [SETTINGS] settings.json merged
38
+ [2026-05-10 15:42:53] [BACKUP] backups/CLAUDE.md.20260510.154253 (CLAUDE.md user version preserved)
39
+ [2026-05-11 14:53:06] [INFO] Install started (upgrade)
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": 1,
3
+ "profiles": [
4
+ {
5
+ "id": "custom",
6
+ "name": "自定义技能组合",
7
+ "description": "自由勾选技能项,按需个性化配置",
8
+ "skills": null
9
+ },
10
+ {
11
+ "id": "profile_mp0p1swf",
12
+ "name": "test",
13
+ "description": "test",
14
+ "skills": [
15
+ "algorithmic-art",
16
+ "brand-guidelines",
17
+ "canvas-design"
18
+ ],
19
+ "always_apply": []
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "skills": {},
3
+ "always_apply_skills": [
4
+ "vue",
5
+ "frontend-design",
6
+ "frontend-code-review",
7
+ "ui-ux-pro-max"
8
+ ],
9
+ "_active_profile": "vue3-frontend",
10
+ "_skill_source": "D:\\软件\\test-skills"
11
+ }
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: dk-engineer
3
+ description: 沉稳靠谱助手,专注于高质量代码输出和清晰的任务执行。
4
+ ---
5
+
6
+ # 开发助手配置说明
7
+
8
+ ## 基本设定
9
+
10
+ ### 交流与称呼
11
+
12
+ - 使用中文交流
13
+ - 称呼用户为"老马"
14
+ - 语气幽默又不失沉稳,专业靠谱中带点俏皮
15
+
16
+ ### 代码著作权标识
17
+
18
+ - 文件著作名标注为 **XiaoMa**
19
+
20
+ ## 核心工作规范
21
+
22
+ ### 需求确认流程
23
+
24
+ 1. 收到需求后先思考实现方案
25
+ 2. 复述需求确认理解是否正确
26
+ 3. 待用户同意后执行
27
+
28
+ ### 决策权限分级
29
+
30
+ | 级别 | 范围 | 策略 |
31
+ | ----------------- | ------------------------------------------- | ---------- |
32
+ | **L1 自主执行** | 读文件、搜索代码、启停 dev server、查看日志 | 直接执行 |
33
+ | **L2 告知后执行** | 编辑文件、安装依赖、运行测试 | 告知后执行 |
34
+ | **L3 必须确认** | 删文件/目录、git 操作、改系统配置 | 等待确认 |
35
+
36
+ ### 文件删除规范
37
+
38
+ - 删除前必须说明原因并指明具体文件
39
+ - 用户同意后方可删除
40
+
41
+ ### 项目初始化流程
42
+
43
+ 接手新任务时先摸底:
44
+
45
+ 1. 读 `package.json`/`pom.xml`/`requirements.txt` 确认技术栈
46
+ 2. 检查目录结构和模块划分
47
+ 3. 确认 dev server 状态和启动命令
48
+ 4. 查看当前 git 分支和未提交变更
49
+ 5. 先读 `CLAUDE.md` / `README.md`
50
+
51
+ ## 代码开发原则
52
+
53
+ ### 基本原则
54
+
55
+ - **KISS**:追求简洁,拒绝不必要的复杂性
56
+ - **YAGNI**:只实现当前所需功能,不做过度设计
57
+ - **DRY**:识别重复代码,合理抽象复用
58
+ - **SOLID**:单一职责、开闭原则、里氏替换、接口隔离、依赖反转
59
+
60
+ ### 实践要求
61
+
62
+ - 灵活使用 Pinia 状态管理
63
+ - 合理封装组件
64
+ - 代码简洁、可维护、可读性好
65
+ - 复用项目现有架构
66
+ - **不生成测试文件或使用文档**(除非明确要求)
67
+ - **不主动执行 git 操作**(除非用户要求)
68
+
69
+ ### 注释规范
70
+
71
+ - 函数注释说明作用
72
+ - 复杂参数添加说明
73
+ - 关键逻辑添加注释
74
+ - 禁止:作者标注、修改记录、TODO/FIXME、显而易见代码的注释
75
+
76
+ ## Bash 命令执行规范(Windows)
77
+
78
+ ### 默认终端策略
79
+
80
+ | 命令类型 | 执行方式 |
81
+ | ------------------------------------ | ------------------------------- |
82
+ | Unix 工具(ls/grep/find/cat) | `bash -c "命令"` |
83
+ | Git 操作 | `bash -c "git status"` |
84
+ | Node/PNPM(非交互式) | 直接调用 `pnpm install` |
85
+ | Node/PNPM(交互式) | `pwsh.exe -Command "pnpm init"` |
86
+ | PowerShell 专有(Test-Path/where等) | 直接执行 |
87
+ | Python | `bash -c "python script.py"` |
88
+
89
+ ### 路径规范
90
+
91
+ - 路径用双引号包裹,使用 `/` 分隔符
92
+ - 工具优先级:ripgrep > grep,专用工具 > 系统命令
93
+
94
+ ### 危险操作确认机制
95
+
96
+ 以下操作必须获得明确确认:
97
+
98
+ | 类别 | 具体操作 |
99
+ | -------- | ---------------------------- |
100
+ | 文件系统 | 删除/批量修改/移动文件或目录 |
101
+ | 代码提交 | git commit/push/reset |
102
+ | 系统配置 | 环境变量/系统设置/权限变更 |
103
+ | 数据操作 | 数据库删除/结构变更/批量更新 |
104
+ | 网络请求 | 敏感数据发送/生产环境API调用 |
105
+ | 包管理 | 全局安装卸载/核心依赖更新 |
106
+
107
+ 确认格式:
108
+
109
+ ```
110
+ ⚠️ 检测到危险操作
111
+ 操作类型:[具体操作]
112
+ 影响范围:[详细说明]
113
+ 风险评估:[潜在后果]
114
+ 请确认是否继续?
115
+ ```
116
+
117
+ ## 任务执行框架
118
+
119
+ 1. **理解确认**:复述任务目标,确认理解一致
120
+ 2. **检索现有代码**:查找相关模块,避免重复造轮子
121
+ 3. **提出方案**:复杂任务先给思路,简单任务直接执行
122
+ 4. **执行实现**:改动最小化,保持代码风格一致
123
+ 5. **自查验证**:检查是否引入新问题
124
+
125
+ ## 严格禁止
126
+
127
+ - 重复造轮子
128
+ - 容忍代码报错和不规范代码
129
+ - 低质量的技术输出
130
+ - 过度设计和未来特性预留
131
+ - 未被要求的 git 提交和分支操作
@@ -2,72 +2,21 @@
2
2
  "version": 1,
3
3
  "profiles": [
4
4
  {
5
- "id": "vue3-frontend",
6
- "name": "Vue3 前端专项",
7
- "description": "Vue3 技术栈 | 业务架构 | 界面设计 | 代码规范评审",
8
- "skills": [
9
- "vue",
10
- "v3-fe-biz-patterns",
11
- "frontend-design",
12
- "frontend-code-review",
13
- "ui-ux-pro-max",
14
- "skill-creator"
15
- ],
16
- "always_apply": [
17
- "vue",
18
- "frontend-design",
19
- "frontend-code-review",
20
- "ui-ux-pro-max"
21
- ]
22
- },
23
- {
24
- "id": "react-frontend",
25
- "name": "React 前端专项",
26
- "description": "React 技术栈 | 界面设计 | 代码评审 | 通用前端能力",
27
- "skills": [
28
- "frontend-design",
29
- "frontend-code-review",
30
- "ui-ux-pro-max",
31
- "skill-creator"
32
- ],
33
- "always_apply": [
34
- "frontend-design",
35
- "frontend-code-review",
36
- "ui-ux-pro-max"
37
- ]
38
- },
39
- {
40
- "id": "backend-java",
41
- "name": "Java 后端开发",
42
- "description": "接口架构设计 | 数据库建模 | Java 后端体系能力",
43
- "skills": [
44
- "skill-creator"
45
- ],
46
- "always_apply": []
47
- },
48
- {
49
- "id": "backend-python",
50
- "name": "Python 后端开发",
51
- "description": "接口架构设计 | 数据层设计 | Python 后端体系能力",
52
- "skills": [
53
- "skill-creator"
54
- ],
55
- "always_apply": []
5
+ "id": "custom",
6
+ "name": "自定义技能组合",
7
+ "description": "自由勾选技能项,按需个性化配置",
8
+ "skills": null
56
9
  },
57
10
  {
58
- "id": "backend-node",
59
- "name": "Node.js 后端开发",
60
- "description": "接口架构设计 | 服务端架构 | Node 后端体系能力",
11
+ "id": "profile_mp0p1swf",
12
+ "name": "test",
13
+ "description": "test",
61
14
  "skills": [
62
- "skill-creator"
15
+ "algorithmic-art",
16
+ "brand-guidelines",
17
+ "canvas-design"
63
18
  ],
64
19
  "always_apply": []
65
- },
66
- {
67
- "id": "custom",
68
- "name": "自定义技能组合",
69
- "description": "自由勾选技能项,按需个性化配置",
70
- "skills": null
71
20
  }
72
21
  ]
73
22
  }
@@ -1,29 +1,11 @@
1
1
  {
2
- "skills": {
3
- "frontend-code-review": {
4
- "enabled": true,
5
- "description": "前端代码全面审查"
6
- },
7
- "frontend-design": {
8
- "enabled": true,
9
- "description": "创意前端界面设计,落地页/品牌页/营销页"
10
- },
11
- "skill-creator": {
12
- "enabled": true,
13
- "description": "创建和更新技能指令"
14
- },
15
- "ui-ux-pro-max": {
16
- "enabled": true,
17
- "description": "UI/UX 设计智能系统,50 种样式,21 种配色方案"
18
- },
19
- "vue": {
20
- "enabled": true,
21
- "description": "Vue 3 组件/组合式函数开发,提供 Composition API 最佳实践"
22
- },
23
- "v3-fe-biz-patterns": {
24
- "enabled": true,
25
- "description": "前端业务模式库,loading/滚动加载/导入导出/批量操作/表单联动/大列表渲染/Service层封装/Pinia Store模式/分页数据管理等常见业务场景"
26
- }
27
- },
28
- "always_apply_skills": []
2
+ "skills": {},
3
+ "always_apply_skills": [
4
+ "vue",
5
+ "frontend-design",
6
+ "frontend-code-review",
7
+ "ui-ux-pro-max"
8
+ ],
9
+ "_active_profile": "vue3-frontend",
10
+ "_skill_source": "D:\\软件\\test-skills"
29
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdk-skills",
3
- "version": "2.2.21",
3
+ "version": "2.2.23",
4
4
  "description": "mdk-engineer - 沉稳靠谱的前端开发助手 Claude Skills 配置包,一键注入 .claude/ 技能目录和 CLAUDE.md 人设配置",
5
5
  "author": "XiaoMa",
6
6
  "license": "MIT",
@@ -8,19 +8,24 @@
8
8
  "files": [
9
9
  ".claude/",
10
10
  "CLAUDE.md",
11
- "scripts/"
11
+ "scripts/",
12
+ "scripts/web-ui/dist/"
12
13
  ],
13
14
  "bin": {
14
15
  "mdk-skills": "./scripts/cli.js"
15
16
  },
16
17
  "scripts": {
17
- "postinstall": "node scripts/copy-skills.js"
18
+ "postinstall": "node scripts/copy-skills.js",
19
+ "build:ui": "cd scripts/web-ui && npx vite build",
20
+ "start": "node scripts/web-ui/server.js"
18
21
  },
19
22
  "dependencies": {
20
23
  "@inquirer/prompts": "^8.4.2",
24
+ "chalk": "^5.6.2"
25
+ },
26
+ "devDependencies": {
21
27
  "@vicons/ionicons5": "^0.13.0",
22
28
  "@vitejs/plugin-vue": "^6.0.6",
23
- "chalk": "^5.6.2",
24
29
  "highlight.js": "^11.11.1",
25
30
  "marked": "^18.0.3",
26
31
  "naive-ui": "^2.44.1",
package/scripts/core.js CHANGED
@@ -121,16 +121,60 @@ function listSkillDirs(skillsPath) {
121
121
  }
122
122
 
123
123
  /**
124
- * 读取技能目录下的 .meta.json,没有则返回 null
124
+ * 解析 SKILL.md 的 YAML frontmatter
125
+ * 返回 { name?, description?, version?, tags? },解析失败返回 null
126
+ */
127
+ function parseFrontmatter(skillDir) {
128
+ const mdPath = path.join(skillDir, "SKILL.md");
129
+ if (!fs.existsSync(mdPath)) return null;
130
+ let content;
131
+ try { content = fs.readFileSync(mdPath, "utf-8"); } catch { return null; }
132
+ content = content.replace(/\r\n/g, "\n");
133
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
134
+ if (!match) return null;
135
+ const result = {};
136
+ const lines = match[1].split("\n");
137
+ let currentKey = null;
138
+ for (const line of lines) {
139
+ const kv = line.match(/^(\w+):\s*(.*)/);
140
+ if (kv) {
141
+ currentKey = kv[1];
142
+ let val = kv[2].trim();
143
+ if (currentKey === "tags") {
144
+ if (val.startsWith("[")) {
145
+ result[currentKey] = val.slice(1, -1).split(",").map(t => t.trim().replace(/['"]/g, "")).filter(Boolean);
146
+ } else {
147
+ result[currentKey] = [];
148
+ }
149
+ } else {
150
+ result[currentKey] = val.replace(/^['"]|['"]$/g, "");
151
+ }
152
+ } else if (currentKey && Array.isArray(result[currentKey]) && line.match(/^\s*-\s/)) {
153
+ const tag = line.replace(/^\s*-\s*/, "").trim().replace(/['"]/g, "");
154
+ if (tag) result[currentKey].push(tag);
155
+ }
156
+ }
157
+ return result;
158
+ }
159
+
160
+ /**
161
+ * 读取技能元信息。
162
+ * 优先从 .meta.json 读取;没有或解析失败时,从 SKILL.md frontmatter 兜底。
125
163
  */
126
164
  function readMeta(skillDir) {
127
165
  const metaPath = path.join(skillDir, ".meta.json");
128
166
  if (fs.existsSync(metaPath)) {
129
167
  try {
130
168
  return JSON.parse(fs.readFileSync(metaPath, "utf-8"));
131
- } catch {
132
- return null;
133
- }
169
+ } catch {}
170
+ }
171
+ const fm = parseFrontmatter(skillDir);
172
+ if (fm) {
173
+ return {
174
+ version: fm.version || "1.0.0",
175
+ description: fm.description || "",
176
+ tags: fm.tags || [],
177
+ };
134
178
  }
135
179
  return null;
136
180
  }
@@ -281,6 +325,7 @@ module.exports = {
281
325
  deepMerge,
282
326
  listSkillDirs,
283
327
  readMeta,
328
+ parseFrontmatter,
284
329
  installSkills,
285
330
  installSettings,
286
331
  getPackageSkills,
@@ -0,0 +1 @@
1
+ .status-bar[data-v-bc9519f9]{background:#fff;border-bottom:1px solid #e5e7eb;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 24px;display:flex}.status-item[data-v-bc9519f9]{color:#555;align-items:center;gap:6px;font-size:13px;display:flex}.status-item.clickable[data-v-bc9519f9]{cursor:pointer}.status-item.clickable[data-v-bc9519f9]:hover{color:#2080f0}.status-divider[data-v-bc9519f9]{background:#e0e0e0;width:1px;height:20px}[data-theme=dark] .status-bar{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .status-item{color:#aaa}[data-theme=dark] .status-divider{background:#333}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{background:#f5f7fa;height:100%}body{overflow-y:auto}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}.app-layout{flex-direction:column;min-height:100vh;padding-top:56px;display:flex}.app-header{z-index:100;background:#fff;border-bottom:1px solid #e5e7eb;align-items:center;height:56px;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0}.header-inner{justify-content:space-between;align-items:center;width:100%;display:flex}.header-left{align-items:center;gap:32px;display:flex}.logo{color:#1a1a1a;white-space:nowrap;font-size:18px;font-weight:700}.app-content{flex:1;width:100%;max-width:1000px;margin:0 auto;padding:24px}.markdown-content{color:#333;word-wrap:break-word;font-size:14px;line-height:1.7}.markdown-content h1{border-bottom:1px solid #eee;margin:20px 0 12px;padding-bottom:8px;font-size:22px;font-weight:700}.markdown-content h2{border-bottom:1px solid #eee;margin:18px 0 10px;padding-bottom:6px;font-size:18px;font-weight:700}.markdown-content h3{margin:16px 0 8px;font-size:16px;font-weight:600}.markdown-content h4{margin:14px 0 6px;font-size:14px;font-weight:600}.markdown-content h5,.markdown-content h6{margin:12px 0 6px;font-size:13px;font-weight:600}.markdown-content p{margin:8px 0}.markdown-content ul,.markdown-content ol{margin:8px 0;padding-left:24px}.markdown-content li{margin:4px 0}.markdown-content blockquote{color:#555;background:#f0f7ff;border-left:4px solid #2080f0;margin:10px 0;padding:8px 16px}.markdown-content blockquote p{margin:4px 0}.markdown-content a{color:#2080f0;text-decoration:none}.markdown-content a:hover{text-decoration:underline}.markdown-content hr{border:none;border-top:1px solid #e0e0e0;margin:16px 0}.markdown-content table{border-collapse:collapse;width:100%;margin:12px 0;font-size:13px}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #e0e0e0;padding:8px 12px}.markdown-content th{background:#f5f7fa;font-weight:600}.markdown-content tr:nth-child(2n) td{background:#fafafa}.markdown-content img{border-radius:4px;max-width:100%;margin:8px 0}.markdown-content code{color:#d63384;background:#f0f0f0;border-radius:3px;padding:2px 6px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:13px}.markdown-content pre{border:1px solid #e8e8e8;border-radius:6px;margin:12px 0;padding:0;position:relative;overflow:hidden}.markdown-content pre code{color:#333;tab-size:2;background:#f8f9fa;padding:14px 16px;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.markdown-content pre .copy-btn{color:#999;cursor:pointer;opacity:0;background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:3px 8px;font-size:11px;transition:opacity .2s;position:absolute;top:6px;right:6px}.readme-fold{border:1px solid #e5e7eb;border-radius:6px;margin-bottom:20px;overflow:hidden}.fold-header{cursor:pointer;-webkit-user-select:none;user-select:none;background:#fafafa;align-items:center;gap:6px;padding:10px 16px;font-size:14px;font-weight:600;display:flex}.fold-header:hover{background:#f0f0f0}.fold-arrow{color:#999;font-size:11px;transition:transform .2s}.fold-arrow.open{transform:rotate(90deg)}.fold-body{padding:0 16px 16px}.markdown-content pre:hover .copy-btn{opacity:1}.markdown-content pre .copy-btn:hover{color:#2080f0;border-color:#2080f0}.header-right{align-items:center;gap:8px;display:flex}[data-theme=dark] html,[data-theme=dark] body,[data-theme=dark] #app{background:#1a1a2e}[data-theme=dark] .app-header{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .app-content{background:0 0}[data-theme=dark] .readme-fold{border-color:#333}[data-theme=dark] .fold-header{color:#e0e0e0;background:#252538}[data-theme=dark] .fold-header:hover{background:#2a2a40}[data-theme=dark] .fold-body{background:#1e1e32}[data-theme=dark] .fold-arrow{color:#888}[data-theme=dark] .markdown-content{color:#ccc}[data-theme=dark] .markdown-content h1,[data-theme=dark] .markdown-content h2{color:#eee;border-bottom-color:#333}[data-theme=dark] .markdown-content h3,[data-theme=dark] .markdown-content h4{color:#eee}[data-theme=dark] .markdown-content code{color:#e06c9f;background:#2a2a40}[data-theme=dark] .markdown-content pre{border-color:#333}[data-theme=dark] .markdown-content pre code{color:#d4d4d4;background:#1e1e2e}[data-theme=dark] .markdown-content blockquote{color:#bbb;background:#252538;border-left-color:#4a6cf7}[data-theme=dark] .markdown-content a{color:#6a8cff}[data-theme=dark] .markdown-content th{background:#252538}[data-theme=dark] .markdown-content td{border-color:#333}[data-theme=dark] .markdown-content tr:nth-child(2n) td{background:#222238}[data-theme=dark] .markdown-content hr{border-top-color:#333}[data-theme=dark] .markdown-content img{filter:brightness(.85)}[data-theme=dark] .page-header h2{color:#e0e0e0}[data-theme=dark] .scene-desc{color:#aaa}.fade-enter-active,.fade-leave-active{transition:opacity .9s,transform .9s}.fade-enter-from{opacity:0;transform:translateY(6px)}.fade-leave-to{opacity:0}.skill-card[data-v-a11339d4]{cursor:pointer;margin-bottom:12px;transition:box-shadow .2s}.skill-card[data-v-a11339d4]:hover{box-shadow:0 2px 8px #00000014}.skill-meta[data-v-a11339d4]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.skill-version[data-v-a11339d4]{color:#888;font-family:monospace;font-size:12px}.skill-desc[data-v-a11339d4]{color:#666;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;overflow:hidden}.page-header[data-v-773c62ae]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;display:flex}.page-header h2[data-v-773c62ae]{font-size:20px;font-weight:600}.header-actions[data-v-773c62ae]{align-items:center;gap:8px;display:flex}.tag-filter[data-v-773c62ae]{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:16px;display:flex}.detail-status[data-v-773c62ae]{justify-content:center;padding:40px 0;display:flex}.detail-body[data-v-773c62ae]{max-height:65vh;padding:16px 24px;overflow-y:auto}.edit-panel[data-v-773c62ae]{margin-bottom:4px}.edit-row[data-v-773c62ae]{align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.edit-label[data-v-773c62ae]{color:#888;flex-shrink:0;width:50px;font-size:13px;line-height:30px}.pull-modal-body[data-v-773c62ae]{min-height:100px}.pull-section[data-v-773c62ae]{margin-top:12px}.pull-input-row[data-v-773c62ae]{gap:8px;margin-bottom:8px;display:flex}.pull-input-row .n-input[data-v-773c62ae]{flex:1}.pull-error[data-v-773c62ae]{margin-bottom:8px}.pull-result[data-v-773c62ae]{margin-top:8px}.pull-result-line[data-v-773c62ae]{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:8px;font-size:13px;display:flex}.pull-result-label[data-v-773c62ae]{color:#888;flex-shrink:0}.pull-result-hint[data-v-773c62ae]{color:#999;font-size:12px}.install-panel[data-v-773c62ae]{background:#00000005;border-radius:6px;margin-top:12px;padding:12px}.install-panel-label[data-v-773c62ae]{color:#666;margin-bottom:8px;font-size:13px}.install-check-list[data-v-773c62ae]{margin-bottom:10px}.install-btn[data-v-773c62ae]{float:right}.edit-actions[data-v-773c62ae]{justify-content:flex-end;gap:8px;display:flex}.page-header[data-v-1736a530]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-1736a530]{font-size:20px;font-weight:600}.scene-grid[data-v-1736a530]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:2px;display:grid}.scene-card[data-v-1736a530]{transition:box-shadow .2s}.scene-card.active[data-v-1736a530]{box-shadow:0 0 0 2px #2080f0}.scene-desc[data-v-1736a530]{color:#666;margin:0;font-size:13px}.scene-footer[data-v-1736a530]{justify-content:space-between;align-items:center;display:flex}.hint-text[data-v-1736a530]{color:#999;font-size:12px}.page-header[data-v-5f659620]{margin-bottom:20px}.page-header h2[data-v-5f659620]{font-size:20px;font-weight:600}.section[data-v-5f659620]{margin-bottom:20px}.init-alert[data-v-5f659620]{margin-bottom:12px}.missing-list[data-v-5f659620]{flex-direction:column;gap:4px;display:flex}.missing-item[data-v-5f659620]{font-size:13px;line-height:1.6}.missing-item code[data-v-5f659620]{background:#0000000f;border-radius:3px;padding:1px 6px;font-size:12px}.skill-tag[data-v-5f659620]{margin:1px 2px;display:inline-block}.missing-hint[data-v-5f659620]{opacity:.7;margin-top:4px;font-size:12px}.source-status[data-v-5f659620]{margin-bottom:16px}.source-actions[data-v-5f659620]{flex-direction:column;gap:12px;display:flex}.action-buttons[data-v-5f659620]{gap:8px;display:flex}.healthy-text[data-v-5f659620]{color:#18a058;font-size:13px}.issue-text[data-v-5f659620]{color:#d03050;font-size:13px}.readme-dialog-desc[data-v-5f659620]{color:#555;margin-bottom:16px;font-size:14px}.readme-checkbox[data-v-5f659620]{align-items:flex-start;margin-bottom:12px;display:flex}.readme-checkbox-content[data-v-5f659620]{flex-direction:column;gap:2px;display:flex}.readme-checkbox-title[data-v-5f659620]{font-size:14px;font-weight:500}.readme-checkbox-desc[data-v-5f659620]{color:#999;font-size:12px}.page-header[data-v-97d38fe1]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-97d38fe1]{font-size:20px;font-weight:600}.fade-enter-active[data-v-97d38fe1],.fade-leave-active[data-v-97d38fe1]{transition:opacity .2s}.fade-enter-from[data-v-97d38fe1],.fade-leave-to[data-v-97d38fe1]{opacity:0}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}