@devflow-tools/cli 0.12.5 → 0.13.0
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/plugin-files/.claude-plugin/plugin.json +28 -19
- package/dist/plugin-files/dist/command-registry.json +84 -19
- package/dist/plugin-files/dist/skills/devflow:animation/SKILL.md +63 -0
- package/dist/plugin-files/dist/skills/devflow:context/SKILL.md +3 -1
- package/dist/plugin-files/dist/skills/devflow:css/SKILL.md +63 -0
- package/dist/plugin-files/dist/skills/devflow:docker/SKILL.md +4 -4
- package/dist/plugin-files/dist/skills/devflow:electron/SKILL.md +4 -4
- package/dist/plugin-files/dist/skills/devflow:git/SKILL.md +67 -0
- package/dist/plugin-files/dist/skills/devflow:graph/SKILL.md +1 -1
- package/dist/plugin-files/dist/skills/devflow:graphql/SKILL.md +8 -8
- package/dist/plugin-files/dist/skills/devflow:knowledge/SKILL.md +1 -1
- package/dist/plugin-files/dist/skills/devflow:memory/SKILL.md +2 -2
- package/dist/plugin-files/dist/skills/devflow:nest/SKILL.md +8 -8
- package/dist/plugin-files/dist/skills/devflow:nextjs/SKILL.md +7 -7
- package/dist/plugin-files/dist/skills/devflow:performance/SKILL.md +4 -4
- package/dist/plugin-files/dist/skills/devflow:react/SKILL.md +12 -12
- package/dist/plugin-files/dist/skills/devflow:tailwind/SKILL.md +7 -5
- package/dist/plugin-files/dist/skills/devflow:taro/SKILL.md +4 -4
- package/dist/plugin-files/dist/skills/devflow:ui-layout/SKILL.md +63 -0
- package/dist/plugin-files/dist/skills/devflow:vue/SKILL.md +9 -9
- package/dist/plugin-files/dist/skills/devflow:workflow/SKILL.md +1 -1
- package/dist/plugin-files/package.json +2 -2
- package/package.json +27 -27
- package/dist/lib/dashboard-cache.d.ts +0 -3
- package/dist/lib/dashboard-cache.d.ts.map +0 -1
- package/dist/lib/dashboard-cache.js +0 -97
- package/dist/lib/dashboard-cache.js.map +0 -1
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
"name": "devflow",
|
|
3
|
+
"description": "DevFlow \u2014 Developer Intelligence Platform: project context, code graph, knowledge base, memory engine, and workflow automation with 14 domain plugins",
|
|
4
|
+
"version": "0.12.6",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "DevFlow"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/shilongfeicool/dev-flow",
|
|
9
|
+
"repository": "https://github.com/shilongfeicool/dev-flow",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"devflow",
|
|
13
|
+
"context",
|
|
14
|
+
"knowledge-base",
|
|
15
|
+
"code-graph",
|
|
16
|
+
"memory",
|
|
17
|
+
"workflow",
|
|
18
|
+
"development"
|
|
19
|
+
],
|
|
20
|
+
"mcpServers": {
|
|
21
|
+
"devflow": {
|
|
22
|
+
"command": "node",
|
|
23
|
+
"args": ["/Users/shilongfei/Desktop/dev-flow/apps/mcp-server/dist/index.js"],
|
|
24
|
+
"env": {
|
|
25
|
+
"DEVFLOW_PROJECT_ROOT": "/Users/shilongfei/Desktop/dev-flow"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -64,11 +64,11 @@
|
|
|
64
64
|
"devflow:react": {
|
|
65
65
|
"mcpTools": [
|
|
66
66
|
"react_diagnose_bug",
|
|
67
|
-
"react_new_feature",
|
|
68
67
|
"react_audit_performance",
|
|
68
|
+
"react_new_component",
|
|
69
69
|
"react_review_hooks",
|
|
70
70
|
"react_refactor_component",
|
|
71
|
-
"
|
|
71
|
+
"react_new_feature"
|
|
72
72
|
],
|
|
73
73
|
"blockedNative": [
|
|
74
74
|
"grep",
|
|
@@ -85,8 +85,8 @@
|
|
|
85
85
|
"devflow:vue": {
|
|
86
86
|
"mcpTools": [
|
|
87
87
|
"vue_diagnose_bug",
|
|
88
|
-
"
|
|
89
|
-
"
|
|
88
|
+
"vue_debug_reactivity",
|
|
89
|
+
"vue_new_component"
|
|
90
90
|
],
|
|
91
91
|
"blockedNative": [
|
|
92
92
|
"grep",
|
|
@@ -100,9 +100,10 @@
|
|
|
100
100
|
"WebFetch"
|
|
101
101
|
]
|
|
102
102
|
},
|
|
103
|
-
"devflow:
|
|
103
|
+
"devflow:nest": {
|
|
104
104
|
"mcpTools": [
|
|
105
|
-
"
|
|
105
|
+
"nest_diagnose_bug",
|
|
106
|
+
"nest_new_module"
|
|
106
107
|
],
|
|
107
108
|
"blockedNative": [
|
|
108
109
|
"grep",
|
|
@@ -116,9 +117,10 @@
|
|
|
116
117
|
"WebFetch"
|
|
117
118
|
]
|
|
118
119
|
},
|
|
119
|
-
"devflow:
|
|
120
|
+
"devflow:nextjs": {
|
|
120
121
|
"mcpTools": [
|
|
121
|
-
"
|
|
122
|
+
"nextjs_diagnose_bug",
|
|
123
|
+
"nextjs_new_page"
|
|
122
124
|
],
|
|
123
125
|
"blockedNative": [
|
|
124
126
|
"grep",
|
|
@@ -132,10 +134,10 @@
|
|
|
132
134
|
"WebFetch"
|
|
133
135
|
]
|
|
134
136
|
},
|
|
135
|
-
"devflow:
|
|
137
|
+
"devflow:graphql": {
|
|
136
138
|
"mcpTools": [
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
+
"graphql_diagnose_bug",
|
|
140
|
+
"graphql_new_graphql_type"
|
|
139
141
|
],
|
|
140
142
|
"blockedNative": [
|
|
141
143
|
"grep",
|
|
@@ -149,10 +151,25 @@
|
|
|
149
151
|
"WebFetch"
|
|
150
152
|
]
|
|
151
153
|
},
|
|
152
|
-
"devflow:
|
|
154
|
+
"devflow:git": {
|
|
155
|
+
"mcpTools": [
|
|
156
|
+
"git_analyze_repo"
|
|
157
|
+
],
|
|
158
|
+
"blockedNative": [
|
|
159
|
+
"grep",
|
|
160
|
+
"find",
|
|
161
|
+
"rg",
|
|
162
|
+
"ag",
|
|
163
|
+
"Grep",
|
|
164
|
+
"Glob",
|
|
165
|
+
"Explore",
|
|
166
|
+
"WebSearch",
|
|
167
|
+
"WebFetch"
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
"devflow:electron": {
|
|
153
171
|
"mcpTools": [
|
|
154
|
-
"
|
|
155
|
-
"graphql_diagnose_bug"
|
|
172
|
+
"electron_diagnose_bug"
|
|
156
173
|
],
|
|
157
174
|
"blockedNative": [
|
|
158
175
|
"grep",
|
|
@@ -198,10 +215,9 @@
|
|
|
198
215
|
"WebFetch"
|
|
199
216
|
]
|
|
200
217
|
},
|
|
201
|
-
"devflow:
|
|
218
|
+
"devflow:animation": {
|
|
202
219
|
"mcpTools": [
|
|
203
|
-
"
|
|
204
|
-
"nextjs_diagnose_bug"
|
|
220
|
+
"animation_suggest"
|
|
205
221
|
],
|
|
206
222
|
"blockedNative": [
|
|
207
223
|
"grep",
|
|
@@ -215,9 +231,58 @@
|
|
|
215
231
|
"WebFetch"
|
|
216
232
|
]
|
|
217
233
|
},
|
|
218
|
-
"devflow:
|
|
234
|
+
"devflow:css": {
|
|
219
235
|
"mcpTools": [
|
|
220
|
-
"
|
|
236
|
+
"css_audit_selectors"
|
|
237
|
+
],
|
|
238
|
+
"blockedNative": [
|
|
239
|
+
"grep",
|
|
240
|
+
"find",
|
|
241
|
+
"rg",
|
|
242
|
+
"ag",
|
|
243
|
+
"Grep",
|
|
244
|
+
"Glob",
|
|
245
|
+
"Explore",
|
|
246
|
+
"WebSearch",
|
|
247
|
+
"WebFetch"
|
|
248
|
+
]
|
|
249
|
+
},
|
|
250
|
+
"devflow:tailwind": {
|
|
251
|
+
"mcpTools": [
|
|
252
|
+
"tailwind_new_component",
|
|
253
|
+
"tailwind_optimize_classes"
|
|
254
|
+
],
|
|
255
|
+
"blockedNative": [
|
|
256
|
+
"grep",
|
|
257
|
+
"find",
|
|
258
|
+
"rg",
|
|
259
|
+
"ag",
|
|
260
|
+
"Grep",
|
|
261
|
+
"Glob",
|
|
262
|
+
"Explore",
|
|
263
|
+
"WebSearch",
|
|
264
|
+
"WebFetch"
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
"devflow:taro": {
|
|
268
|
+
"mcpTools": [
|
|
269
|
+
"taro_new_page"
|
|
270
|
+
],
|
|
271
|
+
"blockedNative": [
|
|
272
|
+
"grep",
|
|
273
|
+
"find",
|
|
274
|
+
"rg",
|
|
275
|
+
"ag",
|
|
276
|
+
"Grep",
|
|
277
|
+
"Glob",
|
|
278
|
+
"Explore",
|
|
279
|
+
"WebSearch",
|
|
280
|
+
"WebFetch"
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
"devflow:ui-layout": {
|
|
284
|
+
"mcpTools": [
|
|
285
|
+
"ui_layout_generate"
|
|
221
286
|
],
|
|
222
287
|
"blockedNative": [
|
|
223
288
|
"grep",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow:animation
|
|
3
|
+
description: Animation 动画专家 — CSS 动画、Framer Motion、GSAP、Lottie、性能优化
|
|
4
|
+
required_mcp_tools:
|
|
5
|
+
- animation_suggest
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<HARD-GATE>
|
|
9
|
+
收到 devflow:animation 时,必须先调用以下 MCP 工具之一:
|
|
10
|
+
animation_suggest
|
|
11
|
+
</HARD-GATE>
|
|
12
|
+
|
|
13
|
+
## MANDATORY FIRST STEP - Skill Registration
|
|
14
|
+
|
|
15
|
+
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:animation","required_mcp_tools":["animation_suggest"],"description":"devflow:animation skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
22
|
+
- `mcp__devflow__animation_suggest`
|
|
23
|
+
|
|
24
|
+
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
25
|
+
|
|
26
|
+
When the skill execution is complete, clean up:
|
|
27
|
+
```bash
|
|
28
|
+
rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
# ✨ ANIMATION
|
|
32
|
+
|
|
33
|
+
你是一个动画专家。精通 CSS Animation、Framer Motion、GSAP。动画必须 60fps 且支持 prefers-reduced-motion。
|
|
34
|
+
|
|
35
|
+
## 适用场景
|
|
36
|
+
|
|
37
|
+
**动画审计:性能检查 → 可访问性 → 实现质量**
|
|
38
|
+
|
|
39
|
+
**新建动画:需求分析 → 选型建议 → 实现 → 性能验证**
|
|
40
|
+
|
|
41
|
+
**动画 GPU 迁移:扫描 → 替换为 GPU 属性 → 验证**
|
|
42
|
+
|
|
43
|
+
## 核心规则
|
|
44
|
+
|
|
45
|
+
- 动画属性只使用 transform 和 opacity(GPU 加速)
|
|
46
|
+
- 过渡动画 200-300ms,入场 300-500ms
|
|
47
|
+
- 使用 ease-out 入场、ease-in 退场
|
|
48
|
+
- 尊重 prefers-reduced-motion,提供减弱方案
|
|
49
|
+
- 避免同时动画过多元素(批量编排使用 staggerChildren)
|
|
50
|
+
- 使用 AnimatePresence 处理 React 组件退出动画
|
|
51
|
+
- Lottie 动画控制文件大小 < 50KB
|
|
52
|
+
|
|
53
|
+
## 当前版本
|
|
54
|
+
|
|
55
|
+
- animation-docs: 2024 — https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations
|
|
56
|
+
|
|
57
|
+
## 工作流
|
|
58
|
+
|
|
59
|
+
| 场景 | 触发方式 |
|
|
60
|
+
|------|----------|
|
|
61
|
+
| 动画审计:性能检查 → 可访问性 → 实现质量 | 调用 MCP 工具 `mcp__devflow__animation_audit:animation` |
|
|
62
|
+
| 新建动画:需求分析 → 选型建议 → 实现 → 性能验证 | 调用 MCP 工具 `mcp__devflow__animation_new:animation` |
|
|
63
|
+
| 动画 GPU 迁移:扫描 → 替换为 GPU 属性 → 验证 | 调用 MCP 工具 `mcp__devflow__animation_migrate:gpu-animation` |
|
|
@@ -35,7 +35,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
35
35
|
## 执行
|
|
36
36
|
|
|
37
37
|
1. 如果用户的查询包含中文,先将其中的中文关键词翻译为英文代码术语(空格分隔)
|
|
38
|
-
2. 调用 `
|
|
38
|
+
2. 调用 `mcp__devflow__get_project_context` MCP 工具:
|
|
39
39
|
|
|
40
40
|
```
|
|
41
41
|
query = 用户的原始查询内容(包含中文)
|
|
@@ -43,6 +43,8 @@ expandedTerms = 你翻译的英文关键词(如 "code review audit module")
|
|
|
43
43
|
mode = "fast" (首次调用;如需更深入结果,再改用 "deep")
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
+
也可以使用 `mcp__devflow__search_symbol` 按符号名搜索代码。
|
|
47
|
+
|
|
46
48
|
示例:
|
|
47
49
|
- 用户查询 "代码审核模块的流程" → expandedTerms = "code review audit module workflow pipeline process"
|
|
48
50
|
- 用户查询 "用户登录认证逻辑" → expandedTerms = "user login authentication auth logic service handler"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow:css
|
|
3
|
+
description: CSS 专家 — 布局调试、响应式审查、BEM 规范、性能优化
|
|
4
|
+
required_mcp_tools:
|
|
5
|
+
- css_audit_selectors
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<HARD-GATE>
|
|
9
|
+
收到 devflow:css 时,必须先调用以下 MCP 工具之一:
|
|
10
|
+
css_audit_selectors
|
|
11
|
+
</HARD-GATE>
|
|
12
|
+
|
|
13
|
+
## MANDATORY FIRST STEP - Skill Registration
|
|
14
|
+
|
|
15
|
+
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:css","required_mcp_tools":["css_audit_selectors"],"description":"devflow:css skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
22
|
+
- `mcp__devflow__css_audit_selectors`
|
|
23
|
+
|
|
24
|
+
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
25
|
+
|
|
26
|
+
When the skill execution is complete, clean up:
|
|
27
|
+
```bash
|
|
28
|
+
rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
# 🎨 CSS
|
|
32
|
+
|
|
33
|
+
你是一个 CSS 专家。使用现代布局方案(Flexbox/Grid),遵循 BEM 命名,移动优先响应式设计。遇到问题先查 MDN 文档。
|
|
34
|
+
|
|
35
|
+
## 适用场景
|
|
36
|
+
|
|
37
|
+
**布局调试:检查元素定位 → 弹性/网格属性 → 修复**
|
|
38
|
+
|
|
39
|
+
**响应式审查:断点检查 → 媒体查询 → 流体方案**
|
|
40
|
+
|
|
41
|
+
**BEM 命名审查:扫描类名 → 规范检查 → 修复建议**
|
|
42
|
+
|
|
43
|
+
## 核心规则
|
|
44
|
+
|
|
45
|
+
- 使用 BEM 命名规范
|
|
46
|
+
- 优先使用 Flexbox 和 Grid 布局
|
|
47
|
+
- 移动优先响应式设计
|
|
48
|
+
- 使用 CSS 变量管理主题
|
|
49
|
+
- 避免 !important 和深层嵌套
|
|
50
|
+
- 使用 rem/em 做相对单位
|
|
51
|
+
- 不确定属性行为时先查 MDN 文档确认
|
|
52
|
+
|
|
53
|
+
## 当前版本
|
|
54
|
+
|
|
55
|
+
- mdn-css: 2024 — https://developer.mozilla.org/en-US/docs/Web/CSS
|
|
56
|
+
|
|
57
|
+
## 工作流
|
|
58
|
+
|
|
59
|
+
| 场景 | 触发方式 |
|
|
60
|
+
|------|----------|
|
|
61
|
+
| 布局调试:检查元素定位 → 弹性/网格属性 → 修复 | 调用 MCP 工具 `mcp__devflow__css_debug:layout` |
|
|
62
|
+
| 响应式审查:断点检查 → 媒体查询 → 流体方案 | 调用 MCP 工具 `mcp__devflow__css_audit:responsive` |
|
|
63
|
+
| BEM 命名审查:扫描类名 → 规范检查 → 修复建议 | 调用 MCP 工具 `mcp__devflow__css_review:bem` |
|
|
@@ -61,7 +61,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
61
61
|
|
|
62
62
|
| 场景 | 触发方式 |
|
|
63
63
|
|------|----------|
|
|
64
|
-
| 项目 Docker 化:分析项目 → 多阶段 Dockerfile → Compose → 构建验证 | 调用 MCP 工具 `
|
|
65
|
-
| 镜像优化:体积分析 → 层优化 → 多阶段重构 | 调用 MCP 工具 `
|
|
66
|
-
| 安全扫描:漏洞检测 → 配置审查 → 修复建议 | 调用 MCP 工具 `
|
|
67
|
-
| 多服务 Compose 编排:依赖分析 → 网络设计 → 环境管理 | 调用 MCP 工具 `
|
|
64
|
+
| 项目 Docker 化:分析项目 → 多阶段 Dockerfile → Compose → 构建验证 | 调用 MCP 工具 `mcp__devflow__docker_dockerize_project` |
|
|
65
|
+
| 镜像优化:体积分析 → 层优化 → 多阶段重构 | 调用 MCP 工具 `mcp__devflow__docker_optimize:image` |
|
|
66
|
+
| 安全扫描:漏洞检测 → 配置审查 → 修复建议 | 调用 MCP 工具 `mcp__devflow__docker_scan:security` |
|
|
67
|
+
| 多服务 Compose 编排:依赖分析 → 网络设计 → 环境管理 | 调用 MCP 工具 `mcp__devflow__docker_setup:compose` |
|
|
@@ -61,7 +61,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
61
61
|
|
|
62
62
|
| 场景 | 触发方式 |
|
|
63
63
|
|------|----------|
|
|
64
|
-
| 新建 IPC 通道:定义 API → Preload 暴露 → 主进程处理 | 调用 MCP 工具 `
|
|
65
|
-
| 安全审计:配置检查 → IPC 暴露面 → CSP → 第三方依赖 | 调用 MCP 工具 `
|
|
66
|
-
| 自动更新配置:electron-updater → 发布渠道 → 更新 UI | 调用 MCP 工具 `
|
|
67
|
-
| Electron Bug 诊断:进程分类 → IPC 追踪 → 原生调试 | 调用 MCP 工具 `
|
|
64
|
+
| 新建 IPC 通道:定义 API → Preload 暴露 → 主进程处理 | 调用 MCP 工具 `mcp__devflow__electron_new:ipc` |
|
|
65
|
+
| 安全审计:配置检查 → IPC 暴露面 → CSP → 第三方依赖 | 调用 MCP 工具 `mcp__devflow__electron_audit:security` |
|
|
66
|
+
| 自动更新配置:electron-updater → 发布渠道 → 更新 UI | 调用 MCP 工具 `mcp__devflow__electron_setup:auto-update` |
|
|
67
|
+
| Electron Bug 诊断:进程分类 → IPC 追踪 → 原生调试 | 调用 MCP 工具 `mcp__devflow__electron_diagnose_bug` |
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow:git
|
|
3
|
+
description: Git 专家 — 提交规范、分支审查、Changelog 生成、冲突解决
|
|
4
|
+
required_mcp_tools:
|
|
5
|
+
- git_analyze_repo
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<HARD-GATE>
|
|
9
|
+
收到 devflow:git 时,必须先调用以下 MCP 工具之一:
|
|
10
|
+
git_analyze_repo
|
|
11
|
+
</HARD-GATE>
|
|
12
|
+
|
|
13
|
+
## MANDATORY FIRST STEP - Skill Registration
|
|
14
|
+
|
|
15
|
+
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:git","required_mcp_tools":["git_analyze_repo"],"description":"devflow:git skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
22
|
+
- `mcp__devflow__git_analyze_repo`
|
|
23
|
+
|
|
24
|
+
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
25
|
+
|
|
26
|
+
When the skill execution is complete, clean up:
|
|
27
|
+
```bash
|
|
28
|
+
rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
# 🔀 GIT
|
|
32
|
+
|
|
33
|
+
你是一个 Git 工作流专家。遵循 Conventional Commits 规范和 GitFlow 分支策略。
|
|
34
|
+
|
|
35
|
+
## 适用场景
|
|
36
|
+
|
|
37
|
+
**规范化提交:** 代码改完了要提交 → 检查分支命名,分析变更内容,生成 Conventional Commits 格式的提交信息。
|
|
38
|
+
|
|
39
|
+
**发布流程:** 从提交历史确定版本号,生成 Changelog,创建 Tag 并推送。
|
|
40
|
+
|
|
41
|
+
**分支清理:** 分支太多太乱 → 列出所有分支,检查命名规范、合并状态、过期分支,生成清理建议。
|
|
42
|
+
|
|
43
|
+
**冲突解决:** merge/rebase 冲突 → 检测所有冲突文件和类型,分析冲突来源(两边最后修改者),建议解决策略。
|
|
44
|
+
|
|
45
|
+
## 核心规则
|
|
46
|
+
|
|
47
|
+
- 提交信息使用 Conventional Commits 格式:type(scope): description
|
|
48
|
+
- 功能分支从 develop 拉出,完成后合并回 develop
|
|
49
|
+
- 提交信息主题行不超过 50 字符
|
|
50
|
+
- 每个提交是逻辑上独立的变更
|
|
51
|
+
- 公共分支禁止 force push 和 rebase
|
|
52
|
+
- PR 必须关联 Issue
|
|
53
|
+
- 解决冲突前先理解两边变更的意图
|
|
54
|
+
|
|
55
|
+
## 当前版本
|
|
56
|
+
|
|
57
|
+
- conventional-commits: 1.0.0 — https://www.conventionalcommits.org/en/v1.0.0/
|
|
58
|
+
- git-scm-docs: 2.45.0 — https://git-scm.com/docs
|
|
59
|
+
|
|
60
|
+
## 工作流
|
|
61
|
+
|
|
62
|
+
| 场景 | 触发方式 |
|
|
63
|
+
|------|----------|
|
|
64
|
+
| 规范化提交: | 调用 MCP 工具 `mcp__devflow__git_commit` |
|
|
65
|
+
| 发布流程: | 调用 MCP 工具 `mcp__devflow__git_release` |
|
|
66
|
+
| 分支清理: | 调用 MCP 工具 `mcp__devflow__git_audit:branches` |
|
|
67
|
+
| 冲突解决: | 调用 MCP 工具 `mcp__devflow__git_resolve:conflicts` |
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
name: devflow:graphql
|
|
3
3
|
description: GraphQL 专家 — Schema 设计、N+1 检测、Resolver 优化、安全审计
|
|
4
4
|
required_mcp_tools:
|
|
5
|
-
- graphql_new_graphql_type
|
|
6
5
|
- graphql_diagnose_bug
|
|
6
|
+
- graphql_new_graphql_type
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
<HARD-GATE>
|
|
10
10
|
收到 devflow:graphql 时,必须先调用以下 MCP 工具之一:
|
|
11
|
-
|
|
11
|
+
graphql_diagnose_bug / graphql_new_graphql_type
|
|
12
12
|
</HARD-GATE>
|
|
13
13
|
|
|
14
14
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -16,12 +16,12 @@ graphql_new_graphql_type / graphql_diagnose_bug
|
|
|
16
16
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:graphql","required_mcp_tools":["
|
|
19
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:graphql","required_mcp_tools":["graphql_diagnose_bug","graphql_new_graphql_type"],"description":"devflow:graphql skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
23
|
-
- `mcp__devflow__graphql_new_graphql_type`
|
|
24
23
|
- `mcp__devflow__graphql_diagnose_bug`
|
|
24
|
+
- `mcp__devflow__graphql_new_graphql_type`
|
|
25
25
|
|
|
26
26
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
27
27
|
|
|
@@ -62,7 +62,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
62
62
|
|
|
63
63
|
| 场景 | 触发方式 |
|
|
64
64
|
|------|----------|
|
|
65
|
-
| 新建 GraphQL Type + Resolver + DataLoader | 调用 MCP 工具 `
|
|
66
|
-
| N+1 检测与修复:扫描 Resolver → 识别批量模式 → 加 DataLoader | 调用 MCP 工具 `
|
|
67
|
-
| Schema 设计审查:类型设计 → 分页模式 → 安全风险评估 | 调用 MCP 工具 `
|
|
68
|
-
| GraphQL Bug 诊断:查询分析 → Resolver 链追踪 → 修复 | 调用 MCP 工具 `
|
|
65
|
+
| 新建 GraphQL Type + Resolver + DataLoader | 调用 MCP 工具 `mcp__devflow__graphql_new_graphql_type` |
|
|
66
|
+
| N+1 检测与修复:扫描 Resolver → 识别批量模式 → 加 DataLoader | 调用 MCP 工具 `mcp__devflow__graphql_fix:n+1` |
|
|
67
|
+
| Schema 设计审查:类型设计 → 分页模式 → 安全风险评估 | 调用 MCP 工具 `mcp__devflow__graphql_review:schema` |
|
|
68
|
+
| GraphQL Bug 诊断:查询分析 → Resolver 链追踪 → 修复 | 调用 MCP 工具 `mcp__devflow__graphql_diagnose_bug` |
|
|
@@ -32,10 +32,10 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
32
32
|
|
|
33
33
|
## 执行
|
|
34
34
|
|
|
35
|
-
调用 `
|
|
35
|
+
调用 `mcp__devflow__get_memory` MCP 工具(无需参数):
|
|
36
36
|
|
|
37
37
|
```
|
|
38
38
|
(无参数 — 返回技术栈、约定、偏好、历史决策)
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
项目记忆存储在 DevFlow 结构化数据库中,只有通过 MCP
|
|
41
|
+
项目记忆存储在 DevFlow 结构化数据库中,只有通过 MCP 工具才能获取完整数据。
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
name: devflow:nest
|
|
3
3
|
description: NestJS 专家 — 模块架构、守卫调试、微服务配置、Swagger 生成
|
|
4
4
|
required_mcp_tools:
|
|
5
|
-
- nest_new_module
|
|
6
5
|
- nest_diagnose_bug
|
|
6
|
+
- nest_new_module
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
<HARD-GATE>
|
|
10
10
|
收到 devflow:nest 时,必须先调用以下 MCP 工具之一:
|
|
11
|
-
|
|
11
|
+
nest_diagnose_bug / nest_new_module
|
|
12
12
|
</HARD-GATE>
|
|
13
13
|
|
|
14
14
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -16,12 +16,12 @@ nest_new_module / nest_diagnose_bug
|
|
|
16
16
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:nest","required_mcp_tools":["
|
|
19
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:nest","required_mcp_tools":["nest_diagnose_bug","nest_new_module"],"description":"devflow:nest skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
23
|
-
- `mcp__devflow__nest_new_module`
|
|
24
23
|
- `mcp__devflow__nest_diagnose_bug`
|
|
24
|
+
- `mcp__devflow__nest_new_module`
|
|
25
25
|
|
|
26
26
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
27
27
|
|
|
@@ -62,7 +62,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
62
62
|
|
|
63
63
|
| 场景 | 触发方式 |
|
|
64
64
|
|------|----------|
|
|
65
|
-
| 新建 NestJS 模块(Controller + Service + Module + DTO + 测试) | 调用 MCP 工具 `
|
|
66
|
-
| Bug 排查: | 调用 MCP 工具 `
|
|
67
|
-
| Swagger 文档生成:扫描 API → 补充装饰器 → 验证 | 调用 MCP 工具 `
|
|
68
|
-
| 微服务端点配置:消息模式 → 传输层 → 客户端代理 | 调用 MCP 工具 `
|
|
65
|
+
| 新建 NestJS 模块(Controller + Service + Module + DTO + 测试) | 调用 MCP 工具 `mcp__devflow__nest_new_module` |
|
|
66
|
+
| Bug 排查: | 调用 MCP 工具 `mcp__devflow__nest_diagnose_bug` |
|
|
67
|
+
| Swagger 文档生成:扫描 API → 补充装饰器 → 验证 | 调用 MCP 工具 `mcp__devflow__nest_generate:swagger` |
|
|
68
|
+
| 微服务端点配置:消息模式 → 传输层 → 客户端代理 | 调用 MCP 工具 `mcp__devflow__nest_setup:microservice` |
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
name: devflow:nextjs
|
|
3
3
|
description: Next.js 专家 — App Router、SSR/SSG/ISR、Server Components、Middleware、部署
|
|
4
4
|
required_mcp_tools:
|
|
5
|
-
- nextjs_new_page
|
|
6
5
|
- nextjs_diagnose_bug
|
|
6
|
+
- nextjs_new_page
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
<HARD-GATE>
|
|
10
10
|
收到 devflow:nextjs 时,必须先调用以下 MCP 工具之一:
|
|
11
|
-
|
|
11
|
+
nextjs_diagnose_bug / nextjs_new_page
|
|
12
12
|
</HARD-GATE>
|
|
13
13
|
|
|
14
14
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -16,12 +16,12 @@ nextjs_new_page / nextjs_diagnose_bug
|
|
|
16
16
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:nextjs","required_mcp_tools":["
|
|
19
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:nextjs","required_mcp_tools":["nextjs_diagnose_bug","nextjs_new_page"],"description":"devflow:nextjs skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
23
|
-
- `mcp__devflow__nextjs_new_page`
|
|
24
23
|
- `mcp__devflow__nextjs_diagnose_bug`
|
|
24
|
+
- `mcp__devflow__nextjs_new_page`
|
|
25
25
|
|
|
26
26
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
27
27
|
|
|
@@ -60,6 +60,6 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
60
60
|
|
|
61
61
|
| 场景 | 触发方式 |
|
|
62
62
|
|------|----------|
|
|
63
|
-
| 新建 Next.js 页面(路由 + 数据获取 + 渲染策略) | 调用 MCP 工具 `
|
|
64
|
-
| Pages Router → App Router 迁移:路由映射 → 数据获取 → 渐进迁移 | 调用 MCP 工具 `
|
|
65
|
-
| Bug 排查: | 调用 MCP 工具 `
|
|
63
|
+
| 新建 Next.js 页面(路由 + 数据获取 + 渲染策略) | 调用 MCP 工具 `mcp__devflow__nextjs_new_page` |
|
|
64
|
+
| Pages Router → App Router 迁移:路由映射 → 数据获取 → 渐进迁移 | 调用 MCP 工具 `mcp__devflow__nextjs_migrate:app-router` |
|
|
65
|
+
| Bug 排查: | 调用 MCP 工具 `mcp__devflow__nextjs_diagnose_bug` |
|
|
@@ -61,7 +61,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
61
61
|
|
|
62
62
|
| 场景 | 触发方式 |
|
|
63
63
|
|------|----------|
|
|
64
|
-
| 性能审计:Lighthouse → Web Vitals → Bundle → 优化方案 | 调用 MCP 工具 `
|
|
65
|
-
| Bundle 优化:分析 → 代码分割 → Tree Shaking → 验证 | 调用 MCP 工具 `
|
|
66
|
-
| 加载速度优化:资源加载策略 → 预加载 → 缓存 | 调用 MCP 工具 `
|
|
67
|
-
| 运行时性能优化:长任务 → 渲染卡顿 → 内存泄漏 | 调用 MCP 工具 `
|
|
64
|
+
| 性能审计:Lighthouse → Web Vitals → Bundle → 优化方案 | 调用 MCP 工具 `mcp__devflow__performance_audit_performance` |
|
|
65
|
+
| Bundle 优化:分析 → 代码分割 → Tree Shaking → 验证 | 调用 MCP 工具 `mcp__devflow__performance_optimize:bundle` |
|
|
66
|
+
| 加载速度优化:资源加载策略 → 预加载 → 缓存 | 调用 MCP 工具 `mcp__devflow__performance_optimize:load-speed` |
|
|
67
|
+
| 运行时性能优化:长任务 → 渲染卡顿 → 内存泄漏 | 调用 MCP 工具 `mcp__devflow__performance_optimize:runtime` |
|
|
@@ -3,16 +3,16 @@ name: devflow:react
|
|
|
3
3
|
description: React 18 专家能力 — Bug 诊断、组件重构、性能优化、Hooks 审查
|
|
4
4
|
required_mcp_tools:
|
|
5
5
|
- react_diagnose_bug
|
|
6
|
-
- react_new_feature
|
|
7
6
|
- react_audit_performance
|
|
7
|
+
- react_new_component
|
|
8
8
|
- react_review_hooks
|
|
9
9
|
- react_refactor_component
|
|
10
|
-
-
|
|
10
|
+
- react_new_feature
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
<HARD-GATE>
|
|
14
14
|
收到 devflow:react 时,必须先调用以下 MCP 工具之一:
|
|
15
|
-
react_diagnose_bug /
|
|
15
|
+
react_diagnose_bug / react_audit_performance / react_new_component / react_review_hooks / react_refactor_component / react_new_feature
|
|
16
16
|
</HARD-GATE>
|
|
17
17
|
|
|
18
18
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -20,16 +20,16 @@ react_diagnose_bug / react_new_feature / react_audit_performance / react_review_
|
|
|
20
20
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:react","required_mcp_tools":["react_diagnose_bug","
|
|
23
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:react","required_mcp_tools":["react_diagnose_bug","react_audit_performance","react_new_component","react_review_hooks","react_refactor_component","react_new_feature"],"description":"devflow:react skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
27
27
|
- `mcp__devflow__react_diagnose_bug`
|
|
28
|
-
- `mcp__devflow__react_new_feature`
|
|
29
28
|
- `mcp__devflow__react_audit_performance`
|
|
29
|
+
- `mcp__devflow__react_new_component`
|
|
30
30
|
- `mcp__devflow__react_review_hooks`
|
|
31
31
|
- `mcp__devflow__react_refactor_component`
|
|
32
|
-
- `
|
|
32
|
+
- `mcp__devflow__react_new_feature`
|
|
33
33
|
|
|
34
34
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
35
35
|
|
|
@@ -77,9 +77,9 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
77
77
|
|
|
78
78
|
| 场景 | 触发方式 |
|
|
79
79
|
|------|----------|
|
|
80
|
-
| Bug 排查: | 调用 MCP 工具 `
|
|
81
|
-
| 新功能开发: | 调用 MCP 工具 `
|
|
82
|
-
| 性能卡顿: | 调用 MCP 工具 `
|
|
83
|
-
| Hooks 审查: | 调用 MCP 工具 `
|
|
84
|
-
| 组件拆分: | 调用 MCP 工具 `
|
|
85
|
-
| 新建组件: | 调用 MCP 工具 `
|
|
80
|
+
| Bug 排查: | 调用 MCP 工具 `mcp__devflow__react_diagnose_bug` |
|
|
81
|
+
| 新功能开发: | 调用 MCP 工具 `mcp__devflow__react_new_feature` |
|
|
82
|
+
| 性能卡顿: | 调用 MCP 工具 `mcp__devflow__react_audit_performance` |
|
|
83
|
+
| Hooks 审查: | 调用 MCP 工具 `mcp__devflow__react_review_hooks` |
|
|
84
|
+
| 组件拆分: | 调用 MCP 工具 `mcp__devflow__react_refactor_component` |
|
|
85
|
+
| 新建组件: | 调用 MCP 工具 `mcp__devflow__react_new_component` |
|
|
@@ -3,11 +3,12 @@ name: devflow:tailwind
|
|
|
3
3
|
description: Tailwind 专家 — 响应式设计、主题定制、Purge 检查、Utility 审查
|
|
4
4
|
required_mcp_tools:
|
|
5
5
|
- tailwind_new_component
|
|
6
|
+
- tailwind_optimize_classes
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
<HARD-GATE>
|
|
9
10
|
收到 devflow:tailwind 时,必须先调用以下 MCP 工具之一:
|
|
10
|
-
tailwind_new_component
|
|
11
|
+
tailwind_new_component / tailwind_optimize_classes
|
|
11
12
|
</HARD-GATE>
|
|
12
13
|
|
|
13
14
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -15,11 +16,12 @@ tailwind_new_component
|
|
|
15
16
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
16
17
|
|
|
17
18
|
```bash
|
|
18
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:tailwind","required_mcp_tools":["tailwind_new_component"],"description":"devflow:tailwind skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:tailwind","required_mcp_tools":["tailwind_new_component","tailwind_optimize_classes"],"description":"devflow:tailwind skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
20
|
```
|
|
20
21
|
|
|
21
22
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
22
23
|
- `mcp__devflow__tailwind_new_component`
|
|
24
|
+
- `mcp__devflow__tailwind_optimize_classes`
|
|
23
25
|
|
|
24
26
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
25
27
|
|
|
@@ -58,6 +60,6 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
58
60
|
|
|
59
61
|
| 场景 | 触发方式 |
|
|
60
62
|
|------|----------|
|
|
61
|
-
| 新建 Tailwind 组件:语义结构 → 样式 → 响应式 → 暗色模式 | 调用 MCP 工具 `
|
|
62
|
-
| Utility 审查:清除自定义 CSS → 统一为 Tailwind utility | 调用 MCP 工具 `
|
|
63
|
-
| 主题迁移:分析现有设计 → 提取 Design Token → 生成配置 | 调用 MCP 工具 `
|
|
63
|
+
| 新建 Tailwind 组件:语义结构 → 样式 → 响应式 → 暗色模式 | 调用 MCP 工具 `mcp__devflow__tailwind_new_component` |
|
|
64
|
+
| Utility 审查:清除自定义 CSS → 统一为 Tailwind utility | 调用 MCP 工具 `mcp__devflow__tailwind_audit:utility` |
|
|
65
|
+
| 主题迁移:分析现有设计 → 提取 Design Token → 生成配置 | 调用 MCP 工具 `mcp__devflow__tailwind_migrate:theme` |
|
|
@@ -60,7 +60,7 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
60
60
|
|
|
61
61
|
| 场景 | 触发方式 |
|
|
62
62
|
|------|----------|
|
|
63
|
-
| 新建页面: | 调用 MCP 工具 `
|
|
64
|
-
| 跨端兼容检查:扫描平台 API → 识别风险点 → 建议兼容方案 | 调用 MCP 工具 `
|
|
65
|
-
| 小程序调试:错误排查 → 包体积分析 → 性能检测 | 调用 MCP 工具 `
|
|
66
|
-
| 小程序性能优化:包体积 → 渲染优化 → 加载速度 | 调用 MCP 工具 `
|
|
63
|
+
| 新建页面: | 调用 MCP 工具 `mcp__devflow__taro_new_page` |
|
|
64
|
+
| 跨端兼容检查:扫描平台 API → 识别风险点 → 建议兼容方案 | 调用 MCP 工具 `mcp__devflow__taro_check:cross-platform` |
|
|
65
|
+
| 小程序调试:错误排查 → 包体积分析 → 性能检测 | 调用 MCP 工具 `mcp__devflow__taro_debug:miniapp` |
|
|
66
|
+
| 小程序性能优化:包体积 → 渲染优化 → 加载速度 | 调用 MCP 工具 `mcp__devflow__taro_optimize:performance` |
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow:ui-layout
|
|
3
|
+
description: UI Layout 专家 — 布局模式、组件组合、响应式架构、设计系统
|
|
4
|
+
required_mcp_tools:
|
|
5
|
+
- ui_layout_generate
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<HARD-GATE>
|
|
9
|
+
收到 devflow:ui-layout 时,必须先调用以下 MCP 工具之一:
|
|
10
|
+
ui_layout_generate
|
|
11
|
+
</HARD-GATE>
|
|
12
|
+
|
|
13
|
+
## MANDATORY FIRST STEP - Skill Registration
|
|
14
|
+
|
|
15
|
+
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:ui-layout","required_mcp_tools":["ui_layout_generate"],"description":"devflow:ui-layout skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
22
|
+
- `mcp__devflow__ui_layout_generate`
|
|
23
|
+
|
|
24
|
+
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
25
|
+
|
|
26
|
+
When the skill execution is complete, clean up:
|
|
27
|
+
```bash
|
|
28
|
+
rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
# 📐 UI-LAYOUT
|
|
32
|
+
|
|
33
|
+
你是一个 UI Layout 专家。精通 CSS Grid、Flexbox 和响应式设计。使用 Design Token 体系管理样式变量。
|
|
34
|
+
|
|
35
|
+
## 适用场景
|
|
36
|
+
|
|
37
|
+
**布局审计:一致性检查 → 响应式问题 → 可访问性评估**
|
|
38
|
+
|
|
39
|
+
**响应式改造:断点分析 → 移动适配 → Container Queries**
|
|
40
|
+
|
|
41
|
+
**Design Token 体系建设:提取 → 分层 → 代码化**
|
|
42
|
+
|
|
43
|
+
## 核心规则
|
|
44
|
+
|
|
45
|
+
- 优先使用 CSS Grid 做页面布局,Flexbox 做组件内排列
|
|
46
|
+
- 使用容器查询实现组件级响应式
|
|
47
|
+
- 间距遵循 4px 倍数的 Scale 体系
|
|
48
|
+
- 使用语义化 HTML(header/nav/main/aside/footer)
|
|
49
|
+
- 移动优先设计,渐进增强
|
|
50
|
+
- 使用 CSS 变量管理 Design Token
|
|
51
|
+
- 确保触控目标 ≥ 44×44px,对比度 ≥ 4.5:1
|
|
52
|
+
|
|
53
|
+
## 当前版本
|
|
54
|
+
|
|
55
|
+
- web-dev-layout: 2024 — https://web.dev/learn/design/
|
|
56
|
+
|
|
57
|
+
## 工作流
|
|
58
|
+
|
|
59
|
+
| 场景 | 触发方式 |
|
|
60
|
+
|------|----------|
|
|
61
|
+
| 布局审计:一致性检查 → 响应式问题 → 可访问性评估 | 调用 MCP 工具 `mcp__devflow__ui-layout_audit:layout` |
|
|
62
|
+
| 响应式改造:断点分析 → 移动适配 → Container Queries | 调用 MCP 工具 `mcp__devflow__ui-layout_design:responsive` |
|
|
63
|
+
| Design Token 体系建设:提取 → 分层 → 代码化 | 调用 MCP 工具 `mcp__devflow__ui-layout_setup:design-tokens` |
|
|
@@ -3,13 +3,13 @@ name: devflow:vue
|
|
|
3
3
|
description: Vue 3 专家 — Bug 诊断、Composition API、响应式调试、组件重构
|
|
4
4
|
required_mcp_tools:
|
|
5
5
|
- vue_diagnose_bug
|
|
6
|
-
- vue_new_component
|
|
7
6
|
- vue_debug_reactivity
|
|
7
|
+
- vue_new_component
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
<HARD-GATE>
|
|
11
11
|
收到 devflow:vue 时,必须先调用以下 MCP 工具之一:
|
|
12
|
-
vue_diagnose_bug /
|
|
12
|
+
vue_diagnose_bug / vue_debug_reactivity / vue_new_component
|
|
13
13
|
</HARD-GATE>
|
|
14
14
|
|
|
15
15
|
## MANDATORY FIRST STEP - Skill Registration
|
|
@@ -17,13 +17,13 @@ vue_diagnose_bug / vue_new_component / vue_debug_reactivity
|
|
|
17
17
|
> **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
mkdir -p ~/.devflow && echo '{"name":"devflow:vue","required_mcp_tools":["vue_diagnose_bug","
|
|
20
|
+
mkdir -p ~/.devflow && echo '{"name":"devflow:vue","required_mcp_tools":["vue_diagnose_bug","vue_debug_reactivity","vue_new_component"],"description":"devflow:vue skill","registeredAt":'"$(date +%s)000"'}' > ~/.devflow/current-skill.json
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
|
|
24
24
|
- `mcp__devflow__vue_diagnose_bug`
|
|
25
|
-
- `mcp__devflow__vue_new_component`
|
|
26
25
|
- `mcp__devflow__vue_debug_reactivity`
|
|
26
|
+
- `mcp__devflow__vue_new_component`
|
|
27
27
|
|
|
28
28
|
**Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
|
|
29
29
|
|
|
@@ -67,8 +67,8 @@ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
|
|
|
67
67
|
|
|
68
68
|
| 场景 | 触发方式 |
|
|
69
69
|
|------|----------|
|
|
70
|
-
| Bug 排查: | 调用 MCP 工具 `
|
|
71
|
-
| 新建组件: | 调用 MCP 工具 `
|
|
72
|
-
| 响应式调试:追踪数据流 → 定位问题 → 修复 | 调用 MCP 工具 `
|
|
73
|
-
| 提取 Composable:识别重复逻辑 → 抽取 → 替换引用 | 调用 MCP 工具 `
|
|
74
|
-
| Pinia Store 重构:结构审查 → 拆分/合并 → 类型安全 | 调用 MCP 工具 `
|
|
70
|
+
| Bug 排查: | 调用 MCP 工具 `mcp__devflow__vue_diagnose_bug` |
|
|
71
|
+
| 新建组件: | 调用 MCP 工具 `mcp__devflow__vue_new_component` |
|
|
72
|
+
| 响应式调试:追踪数据流 → 定位问题 → 修复 | 调用 MCP 工具 `mcp__devflow__vue_debug_reactivity` |
|
|
73
|
+
| 提取 Composable:识别重复逻辑 → 抽取 → 替换引用 | 调用 MCP 工具 `mcp__devflow__vue_extract:composable` |
|
|
74
|
+
| Pinia Store 重构:结构审查 → 拆分/合并 → 类型安全 | 调用 MCP 工具 `mcp__devflow__vue_refactor:pinia` |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/claude-code-plugin",
|
|
3
|
-
"version": "0.12.
|
|
4
|
-
"description": "DevFlow
|
|
3
|
+
"version": "0.12.6",
|
|
4
|
+
"description": "DevFlow \u2014 Developer Intelligence Platform for Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "npx tsx scripts/inject-gates.ts",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,31 +12,31 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@colbymchenry/codegraph": "^1.1.1",
|
|
15
|
-
"@devflow-tools/adapters": "^0.
|
|
16
|
-
"@devflow-tools/benchmark": "^0.
|
|
17
|
-
"@devflow-tools/context-engine": "^0.
|
|
18
|
-
"@devflow-tools/database": "^0.
|
|
19
|
-
"@devflow-tools/knowledge-engine": "^0.
|
|
20
|
-
"@devflow-tools/mcp-server": "^0.
|
|
21
|
-
"@devflow-tools/memory-engine": "^0.
|
|
22
|
-
"@devflow-tools/plugin-animation": "^0.
|
|
23
|
-
"@devflow-tools/plugin-css": "^0.
|
|
24
|
-
"@devflow-tools/plugin-docker": "^0.
|
|
25
|
-
"@devflow-tools/plugin-electron": "^0.
|
|
26
|
-
"@devflow-tools/plugin-git": "^0.
|
|
27
|
-
"@devflow-tools/plugin-graphql": "^0.
|
|
28
|
-
"@devflow-tools/plugin-nest": "^0.
|
|
29
|
-
"@devflow-tools/plugin-nextjs": "^0.
|
|
30
|
-
"@devflow-tools/plugin-performance": "^0.
|
|
31
|
-
"@devflow-tools/plugin-react": "^0.
|
|
32
|
-
"@devflow-tools/plugin-tailwind": "^0.
|
|
33
|
-
"@devflow-tools/plugin-taro": "^0.
|
|
34
|
-
"@devflow-tools/plugin-ui-layout": "^0.
|
|
35
|
-
"@devflow-tools/plugin-vue": "^0.
|
|
36
|
-
"@devflow-tools/sdk": "^0.
|
|
37
|
-
"@devflow-tools/server": "^0.
|
|
38
|
-
"@devflow-tools/telemetry": "^0.
|
|
39
|
-
"@devflow-tools/workflow-engine": "^0.
|
|
15
|
+
"@devflow-tools/adapters": "^0.13.0",
|
|
16
|
+
"@devflow-tools/benchmark": "^0.13.0",
|
|
17
|
+
"@devflow-tools/context-engine": "^0.13.0",
|
|
18
|
+
"@devflow-tools/database": "^0.13.0",
|
|
19
|
+
"@devflow-tools/knowledge-engine": "^0.13.0",
|
|
20
|
+
"@devflow-tools/mcp-server": "^0.13.0",
|
|
21
|
+
"@devflow-tools/memory-engine": "^0.13.0",
|
|
22
|
+
"@devflow-tools/plugin-animation": "^0.13.0",
|
|
23
|
+
"@devflow-tools/plugin-css": "^0.13.0",
|
|
24
|
+
"@devflow-tools/plugin-docker": "^0.13.0",
|
|
25
|
+
"@devflow-tools/plugin-electron": "^0.13.0",
|
|
26
|
+
"@devflow-tools/plugin-git": "^0.13.0",
|
|
27
|
+
"@devflow-tools/plugin-graphql": "^0.13.0",
|
|
28
|
+
"@devflow-tools/plugin-nest": "^0.13.0",
|
|
29
|
+
"@devflow-tools/plugin-nextjs": "^0.13.0",
|
|
30
|
+
"@devflow-tools/plugin-performance": "^0.13.0",
|
|
31
|
+
"@devflow-tools/plugin-react": "^0.13.0",
|
|
32
|
+
"@devflow-tools/plugin-tailwind": "^0.13.0",
|
|
33
|
+
"@devflow-tools/plugin-taro": "^0.13.0",
|
|
34
|
+
"@devflow-tools/plugin-ui-layout": "^0.13.0",
|
|
35
|
+
"@devflow-tools/plugin-vue": "^0.13.0",
|
|
36
|
+
"@devflow-tools/sdk": "^0.13.0",
|
|
37
|
+
"@devflow-tools/server": "^0.13.0",
|
|
38
|
+
"@devflow-tools/telemetry": "^0.13.0",
|
|
39
|
+
"@devflow-tools/workflow-engine": "^0.13.0",
|
|
40
40
|
"@inquirer/prompts": "^7.10.1",
|
|
41
41
|
"chalk": "^5.3.0",
|
|
42
42
|
"commander": "^12.0.0"
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"dist",
|
|
50
50
|
"bin"
|
|
51
51
|
],
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "6e5878a1ab2bba3a21bd42a5f7e236d4f7375d4f"
|
|
53
53
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-cache.d.ts","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"AAiCA,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CASjE;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6DpE"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { execSync } from "child_process";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from "fs";
|
|
3
|
-
import { join, dirname } from "path";
|
|
4
|
-
import { createRequire } from "module";
|
|
5
|
-
const require = createRequire(import.meta.url);
|
|
6
|
-
function getDashboardDir(projectRoot) {
|
|
7
|
-
return join(projectRoot, ".devflow", "dashboard");
|
|
8
|
-
}
|
|
9
|
-
function getVersionFile(projectRoot) {
|
|
10
|
-
return join(getDashboardDir(projectRoot), "version.txt");
|
|
11
|
-
}
|
|
12
|
-
function getCliVersion() {
|
|
13
|
-
try {
|
|
14
|
-
const pkg = require("../package.json");
|
|
15
|
-
return pkg.version ?? "0.0.0";
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return "0.0.0";
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function getTarGzPath() {
|
|
22
|
-
try {
|
|
23
|
-
const pkgJson = require.resolve("@devflow-tools/devflow/package.json");
|
|
24
|
-
const tarGz = join(dirname(pkgJson), "dist", "dashboard-standalone.tar.gz");
|
|
25
|
-
if (existsSync(tarGz))
|
|
26
|
-
return tarGz;
|
|
27
|
-
}
|
|
28
|
-
catch { }
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
export function isDashboardInstalled(projectRoot) {
|
|
32
|
-
const versionFile = getVersionFile(projectRoot);
|
|
33
|
-
if (!existsSync(versionFile))
|
|
34
|
-
return false;
|
|
35
|
-
try {
|
|
36
|
-
const cachedVersion = readFileSync(versionFile, "utf-8").trim();
|
|
37
|
-
return cachedVersion === getCliVersion() && existsSync(join(getDashboardDir(projectRoot), "apps", "dashboard", "server.js"));
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export function ensureDashboardExtracted(projectRoot) {
|
|
44
|
-
const dashDir = getDashboardDir(projectRoot);
|
|
45
|
-
const versionFile = getVersionFile(projectRoot);
|
|
46
|
-
const cliVersion = getCliVersion();
|
|
47
|
-
if (isDashboardInstalled(projectRoot)) {
|
|
48
|
-
return dashDir;
|
|
49
|
-
}
|
|
50
|
-
// Clean old cache
|
|
51
|
-
if (existsSync(dashDir)) {
|
|
52
|
-
rmSync(dashDir, { recursive: true, force: true });
|
|
53
|
-
}
|
|
54
|
-
mkdirSync(dashDir, { recursive: true });
|
|
55
|
-
// Try to extract from npm package tar.gz
|
|
56
|
-
const tarGz = getTarGzPath();
|
|
57
|
-
if (tarGz) {
|
|
58
|
-
execSync(`tar -xzf "${tarGz}" -C "${dashDir}"`, { stdio: "pipe" });
|
|
59
|
-
writeFileSync(versionFile, cliVersion);
|
|
60
|
-
return dashDir;
|
|
61
|
-
}
|
|
62
|
-
// Monorepo dev fallback: symlink next.js standalone build output
|
|
63
|
-
try {
|
|
64
|
-
const pkgJson = require.resolve("@devflow-tools/devflow/package.json");
|
|
65
|
-
const repoRoot = join(dirname(pkgJson), "..", "..");
|
|
66
|
-
const standaloneDir = join(repoRoot, "apps", "dashboard", ".next", "standalone");
|
|
67
|
-
const staticDir = join(repoRoot, "apps", "dashboard", ".next", "static");
|
|
68
|
-
const publicDir = join(repoRoot, "apps", "dashboard", "public");
|
|
69
|
-
const serverPath = join(standaloneDir, "apps", "dashboard", "server.js");
|
|
70
|
-
if (!existsSync(serverPath)) {
|
|
71
|
-
throw new Error(`Dashboard build not found.\n` +
|
|
72
|
-
` Expected: ${serverPath}\n` +
|
|
73
|
-
` Run: npm run build:dist (requires Node >= 18)\n` +
|
|
74
|
-
` Or install from npm: npm install @devflow-tools/devflow@${cliVersion}`);
|
|
75
|
-
}
|
|
76
|
-
// Copy standalone output to cache
|
|
77
|
-
execSync(`cp -r "${standaloneDir}/"* "${dashDir}/"`, { stdio: "pipe" });
|
|
78
|
-
if (existsSync(staticDir)) {
|
|
79
|
-
const destStatic = join(dashDir, "apps", "dashboard", ".next");
|
|
80
|
-
mkdirSync(destStatic, { recursive: true });
|
|
81
|
-
execSync(`cp -r "${staticDir}" "${destStatic}/"`, { stdio: "pipe" });
|
|
82
|
-
}
|
|
83
|
-
if (existsSync(publicDir)) {
|
|
84
|
-
execSync(`cp -r "${publicDir}" "${dashDir}/"`, { stdio: "pipe" });
|
|
85
|
-
}
|
|
86
|
-
writeFileSync(versionFile, cliVersion);
|
|
87
|
-
return dashDir;
|
|
88
|
-
}
|
|
89
|
-
catch (e) {
|
|
90
|
-
// Clean up partial cache
|
|
91
|
-
if (existsSync(dashDir)) {
|
|
92
|
-
rmSync(dashDir, { recursive: true, force: true });
|
|
93
|
-
}
|
|
94
|
-
throw e;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=dashboard-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-cache.js","sourceRoot":"","sources":["../../src/lib/dashboard-cache.ts"],"names":[],"mappings":"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"}
|