@devflow-tools/devflow 0.7.5 → 0.7.6

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.
@@ -1,2 +1,2 @@
1
- import {existsSync,readFileSync,mkdirSync,writeFileSync,unlinkSync,readdirSync}from'fs';import {join}from'path';import {homedir}from'os';var g=1e4,D=300*1e3,l=class{constructor(e){this.retryScheduled=false;this.apiUrl=e?.apiUrl??process.env.DEVFLOW_API_URL??"http://localhost:13337",this.apiKey=e?.apiKey??process.env.DEVFLOW_API_KEY??"dev-key-000000",this.cacheDir=e?.cacheDir??join(homedir(),".devflow","telemetry-cache");}async sendEvent(e){let t=this.truncateInput(e.input),o={...e,input:t};try{let r=await fetch(`${this.apiUrl}/api/telemetry/tool-call`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(o)});if(!r.ok)throw new Error(`Server responded ${r.status}`)}catch{this.cacheEvent({type:"tool_call",payload:o});}}async sendExecutionStart(e,t,o){let r={executionId:e,skillName:t,startedAt:o};try{let n=await fetch(`${this.apiUrl}/api/telemetry/skill-execution/start`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(r)});if(!n.ok)throw new Error(`Server responded ${n.status}`)}catch{this.cacheEvent({type:"execution_start",payload:r});}}async flushCache(){if(!existsSync(this.cacheDir))return;let e=readdirSync(this.cacheDir).filter(t=>t.endsWith(".json"));for(let t of e)try{let o=join(this.cacheDir,t),r=readFileSync(o,"utf8"),n=JSON.parse(r),u=n.type==="execution_start"?"/api/telemetry/skill-execution/start":"/api/telemetry/tool-call";(await fetch(`${this.apiUrl}${u}`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(n.payload)})).ok&&unlinkSync(o);}catch{}}cacheEvent(e){try{existsSync(this.cacheDir)||mkdirSync(this.cacheDir,{recursive:!0});let t=join(this.cacheDir,`${Date.now()}_${Math.random().toString(36).slice(2,11)}.json`);writeFileSync(t,JSON.stringify(e,null,2)),this.scheduleRetry();}catch{}}scheduleRetry(){this.retryScheduled||(this.retryScheduled=true,setTimeout(()=>{this.retryScheduled=false,this.flushCache().catch(()=>{});},D).unref());}truncateInput(e){let t=JSON.stringify(e);return t.length<=g?e:{_truncated:true,_original_size:t.length,_preview:t.substring(0,g)+"..."}}};var p=class{constructor(e){this.projectRoot=e;}detect(){let e=join(this.projectRoot,".devflow","current-skill.json");if(!existsSync(e))return null;try{let t=readFileSync(e,"utf8");return JSON.parse(t)}catch{return null}}startExecution(e,t){let o=join(this.projectRoot,".devflow");existsSync(o)||mkdirSync(o,{recursive:true});let r=this.getCurrentExecutionId();if(r)return r;let n=`exec_${Date.now()}_${Math.random().toString(36).slice(2,11)}`;return writeFileSync(join(o,"current-execution-id"),n),writeFileSync(join(o,"current-skill.json"),JSON.stringify({name:e,required_mcp_tools:t?.required_mcp_tools??[]})),n}getCurrentExecutionId(){let e=join(this.projectRoot,".devflow","current-execution-id");if(!existsSync(e))return null;try{return readFileSync(e,"utf8").trim()}catch{return null}}endExecution(){let e=join(this.projectRoot,".devflow"),t=join(e,"current-skill.json"),o=join(e,"current-execution-id");try{existsSync(t)&&unlinkSync(t);}catch{}try{existsSync(o)&&unlinkSync(o);}catch{}}};async function P(i){try{if(!i||i.trim()==="")return {decision:"allow"};let e=JSON.parse(i),t=process.cwd(),o=new p(t),r=o.detect(),n=e.tool_name.startsWith("mcp__devflow__"),u=n?e.tool_name.replace("mcp__devflow__",""):void 0,d=r?.required_mcp_tools??[],h=d.length>0,y=h&&!n,a;y?a={decision:"block",reason:`Skill "${r?.name||"unknown"}" requires MCP tools. Use one of: ${d.join(", ")}`}:a={decision:"allow"};let S=o.getCurrentExecutionId()??`exec_orphan_${Date.now()}`,w=new l,x={eventId:`evt_${Date.now()}_${Math.random().toString(36).slice(2,11)}`,executionId:S,timestamp:Date.now(),toolName:e.tool_name,toolType:n?"mcp":e.tool_name==="Agent"?"subagent":"direct",isMcpTool:n,mcpToolName:u,mcpEnforced:n&&h,mcpFallback:!n&&!h,input:e.tool_input,tokensUsed:0,duration:0,blocked:y,blockReason:y?a.reason:void 0};return w.sendEvent(x).catch(()=>{}),a}catch{return {decision:"allow"}}}if(process.argv[1]?.endsWith("pre-tool-use")||process.argv[1]?.endsWith("pre-tool-use.js")){let i="";process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{i+=e;}),process.stdin.on("end",async()=>{let e=await P(i);console.log(JSON.stringify(e));}),process.stdin.on("error",()=>{console.log(JSON.stringify({decision:"allow"})),process.exit(0);}),setTimeout(()=>{console.log(JSON.stringify({decision:"allow"})),process.exit(0);},4e3).unref();}
2
- export{P as handlePreToolUse};
1
+ import {existsSync,readFileSync,mkdirSync,writeFileSync,unlinkSync,readdirSync}from'fs';import {join}from'path';import {homedir}from'os';var f=1e4,O=300*1e3,p=class{constructor(t){this.retryScheduled=false;this.apiUrl=t?.apiUrl??process.env.DEVFLOW_API_URL??"http://localhost:13337",this.apiKey=t?.apiKey??process.env.DEVFLOW_API_KEY??"dev-key-000000",this.cacheDir=t?.cacheDir??join(homedir(),".devflow","telemetry-cache");}async sendEvent(t){let e=this.truncateInput(t.input),r={...t,input:e};try{let n=await fetch(`${this.apiUrl}/api/telemetry/tool-call`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(r)});if(!n.ok)throw new Error(`Server responded ${n.status}`)}catch{this.cacheEvent({type:"tool_call",payload:r});}}async sendExecutionStart(t,e,r){let n={executionId:t,skillName:e,startedAt:r};try{let i=await fetch(`${this.apiUrl}/api/telemetry/skill-execution/start`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(n)});if(!i.ok)throw new Error(`Server responded ${i.status}`)}catch{this.cacheEvent({type:"execution_start",payload:n});}}async flushCache(){if(!existsSync(this.cacheDir))return;let t=readdirSync(this.cacheDir).filter(e=>e.endsWith(".json"));for(let e of t)try{let r=join(this.cacheDir,e),n=readFileSync(r,"utf8"),i=JSON.parse(n),a=i.type==="execution_start"?"/api/telemetry/skill-execution/start":"/api/telemetry/tool-call";(await fetch(`${this.apiUrl}${a}`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(i.payload)})).ok&&unlinkSync(r);}catch{}}cacheEvent(t){try{existsSync(this.cacheDir)||mkdirSync(this.cacheDir,{recursive:!0});let e=join(this.cacheDir,`${Date.now()}_${Math.random().toString(36).slice(2,11)}.json`);writeFileSync(e,JSON.stringify(t,null,2)),this.scheduleRetry();}catch{}}scheduleRetry(){this.retryScheduled||(this.retryScheduled=true,setTimeout(()=>{this.retryScheduled=false,this.flushCache().catch(()=>{});},O).unref());}truncateInput(t){let e=JSON.stringify(t);return e.length<=f?t:{_truncated:true,_original_size:e.length,_preview:e.substring(0,f)+"..."}}};function F(){return process.env.DEVFLOW_STATE_DIR??join(homedir(),".devflow")}var d=class{constructor(t){this.stateDir=F();}detect(){let t=join(this.stateDir,"current-skill.json");if(!existsSync(t))return null;try{let e=readFileSync(t,"utf8");return JSON.parse(e)}catch{return null}}startExecution(t,e){existsSync(this.stateDir)||mkdirSync(this.stateDir,{recursive:true});let r=this.getCurrentExecutionId();if(r)return r;let n=`exec_${Date.now()}_${Math.random().toString(36).slice(2,11)}`;return writeFileSync(join(this.stateDir,"current-execution-id"),n),writeFileSync(join(this.stateDir,"current-skill.json"),JSON.stringify({name:t,required_mcp_tools:e?.required_mcp_tools??[]})),n}getCurrentExecutionId(){let t=join(this.stateDir,"current-execution-id");if(!existsSync(t))return null;try{return readFileSync(t,"utf8").trim()}catch{return null}}endExecution(){let t=join(this.stateDir,"current-skill.json"),e=join(this.stateDir,"current-execution-id");try{existsSync(t)&&unlinkSync(t);}catch{}try{existsSync(e)&&unlinkSync(e);}catch{}}};async function M(o){try{if(!o||o.trim()==="")return {decision:"allow"};let t=JSON.parse(o),e=new d,r=e.detect(),n=t.tool_name.startsWith("mcp__devflow__"),i=n?t.tool_name.replace("mcp__devflow__",""):void 0,a=r?.required_mcp_tools??[],l=a.length>0,h=l&&!n,u;h?u={decision:"block",reason:`Skill "${r?.name||"unknown"}" requires MCP tools. Use one of: ${a.join(", ")}`}:u={decision:"allow"};let v=e.getCurrentExecutionId()??`exec_orphan_${Date.now()}`,S=new p,w={eventId:`evt_${Date.now()}_${Math.random().toString(36).slice(2,11)}`,executionId:v,timestamp:Date.now(),toolName:t.tool_name,toolType:n?"mcp":t.tool_name==="Agent"?"subagent":"direct",isMcpTool:n,mcpToolName:i,mcpEnforced:n&&l,mcpFallback:!n&&!l,input:t.tool_input,tokensUsed:0,duration:0,blocked:h,blockReason:h?u.reason:void 0};return S.sendEvent(w).catch(()=>{}),u}catch{return {decision:"allow"}}}if(process.argv[1]?.endsWith("pre-tool-use")||process.argv[1]?.endsWith("pre-tool-use.js")){let o="";process.stdin.setEncoding("utf8"),process.stdin.on("data",t=>{o+=t;}),process.stdin.on("end",async()=>{let t=await M(o);console.log(JSON.stringify(t));}),process.stdin.on("error",()=>{console.log(JSON.stringify({decision:"allow"})),process.exit(0);}),setTimeout(()=>{console.log(JSON.stringify({decision:"allow"})),process.exit(0);},4e3).unref();}
2
+ export{M as handlePreToolUse};
@@ -1,20 +1,20 @@
1
1
  {
2
- "name": "@devflow-tools/claude-code-plugin",
3
- "description": "DevFlow — Developer Intelligence Platform: project context, code graph, knowledge base, memory engine, and workflow automation with 14 domain plugins",
4
- "version": "0.7.3",
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
- }
2
+ "name": "@devflow-tools/claude-code-plugin",
3
+ "description": "DevFlow — Developer Intelligence Platform: project context, code graph, knowledge base, memory engine, and workflow automation with 14 domain plugins",
4
+ "version": "0.7.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
+ }
@@ -5,6 +5,25 @@ required_mcp_tools:
5
5
  - get_project_context
6
6
  - search_symbol
7
7
  ---
8
+ ## MANDATORY FIRST STEP - Skill Registration
9
+
10
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
11
+
12
+ ```bash
13
+ mkdir -p ~/.devflow && echo '{"name":"devflow:context","required_mcp_tools":["get_project_context","search_symbol"],"description":"devflow:context skill"}' > ~/.devflow/current-skill.json
14
+ ```
15
+
16
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
17
+ - `mcp__devflow__get_project_context`
18
+ - `mcp__devflow__search_symbol`
19
+
20
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
21
+
22
+ When the skill execution is complete, clean up:
23
+ ```bash
24
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
25
+ ```
26
+
8
27
 
9
28
  # /devflow:context
10
29
 
@@ -4,6 +4,24 @@ description: Docker 专家 — 镜像优化、Compose 编排、安全扫描、
4
4
  required_mcp_tools:
5
5
  - docker_dockerize_project
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:docker","required_mcp_tools":["docker_dockerize_project"],"description":"devflow:docker skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__docker_dockerize_project`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # 🐳 DOCKER
9
27
 
@@ -4,6 +4,24 @@ description: Electron 专家 — IPC 通信、窗口管理、原生模块、自
4
4
  required_mcp_tools:
5
5
  - electron_diagnose_bug
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:electron","required_mcp_tools":["electron_diagnose_bug"],"description":"devflow:electron skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__electron_diagnose_bug`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # ⚛️ ELECTRON
9
27
 
@@ -4,6 +4,24 @@ description: 查看项目模块图谱 — 架构分层、文件分组、依赖
4
4
  required_mcp_tools:
5
5
  - get_dependency_graph
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:graph","required_mcp_tools":["get_dependency_graph"],"description":"devflow:graph skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__get_dependency_graph`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # /devflow:graph
9
27
 
@@ -5,6 +5,25 @@ required_mcp_tools:
5
5
  - graphql_new_graphql_type
6
6
  - graphql_diagnose_bug
7
7
  ---
8
+ ## MANDATORY FIRST STEP - Skill Registration
9
+
10
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
11
+
12
+ ```bash
13
+ mkdir -p ~/.devflow && echo '{"name":"devflow:graphql","required_mcp_tools":["graphql_new_graphql_type","graphql_diagnose_bug"],"description":"devflow:graphql skill"}' > ~/.devflow/current-skill.json
14
+ ```
15
+
16
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
17
+ - `mcp__devflow__graphql_new_graphql_type`
18
+ - `mcp__devflow__graphql_diagnose_bug`
19
+
20
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
21
+
22
+ When the skill execution is complete, clean up:
23
+ ```bash
24
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
25
+ ```
26
+
8
27
 
9
28
  # ◈ GRAPHQL
10
29
 
@@ -4,6 +4,24 @@ description: 搜索技术文档知识库 — React、Vue、Nest、TypeScript 等
4
4
  required_mcp_tools:
5
5
  - get_knowledge
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:knowledge","required_mcp_tools":["get_knowledge"],"description":"devflow:knowledge skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__get_knowledge`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # /devflow:knowledge
9
27
 
@@ -4,6 +4,24 @@ description: 项目记忆 — 技术栈、编码约定、历史决策、用户
4
4
  required_mcp_tools:
5
5
  - get_memory
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:memory","required_mcp_tools":["get_memory"],"description":"devflow:memory skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__get_memory`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # /devflow:memory
9
27
 
@@ -5,6 +5,25 @@ required_mcp_tools:
5
5
  - nest_new_module
6
6
  - nest_diagnose_bug
7
7
  ---
8
+ ## MANDATORY FIRST STEP - Skill Registration
9
+
10
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
11
+
12
+ ```bash
13
+ mkdir -p ~/.devflow && echo '{"name":"devflow:nest","required_mcp_tools":["nest_new_module","nest_diagnose_bug"],"description":"devflow:nest skill"}' > ~/.devflow/current-skill.json
14
+ ```
15
+
16
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
17
+ - `mcp__devflow__nest_new_module`
18
+ - `mcp__devflow__nest_diagnose_bug`
19
+
20
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
21
+
22
+ When the skill execution is complete, clean up:
23
+ ```bash
24
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
25
+ ```
26
+
8
27
 
9
28
  # 🐱 NEST
10
29
 
@@ -5,6 +5,25 @@ required_mcp_tools:
5
5
  - nextjs_new_page
6
6
  - nextjs_diagnose_bug
7
7
  ---
8
+ ## MANDATORY FIRST STEP - Skill Registration
9
+
10
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
11
+
12
+ ```bash
13
+ mkdir -p ~/.devflow && echo '{"name":"devflow:nextjs","required_mcp_tools":["nextjs_new_page","nextjs_diagnose_bug"],"description":"devflow:nextjs skill"}' > ~/.devflow/current-skill.json
14
+ ```
15
+
16
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
17
+ - `mcp__devflow__nextjs_new_page`
18
+ - `mcp__devflow__nextjs_diagnose_bug`
19
+
20
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
21
+
22
+ When the skill execution is complete, clean up:
23
+ ```bash
24
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
25
+ ```
26
+
8
27
 
9
28
  # ▲ NEXTJS
10
29
 
@@ -4,6 +4,24 @@ description: Web 性能专家 — Core Web Vitals、Bundle 优化、加载策略
4
4
  required_mcp_tools:
5
5
  - performance_audit_performance
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:performance","required_mcp_tools":["performance_audit_performance"],"description":"devflow:performance skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__performance_audit_performance`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # ⚡ PERFORMANCE
9
27
 
@@ -9,6 +9,29 @@ required_mcp_tools:
9
9
  - react_refactor_component
10
10
  - react_new_component
11
11
  ---
12
+ ## MANDATORY FIRST STEP - Skill Registration
13
+
14
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
15
+
16
+ ```bash
17
+ mkdir -p ~/.devflow && echo '{"name":"devflow:react","required_mcp_tools":["react_diagnose_bug","react_new_feature","react_audit_performance","react_review_hooks","react_refactor_component","react_new_component"],"description":"devflow:react skill"}' > ~/.devflow/current-skill.json
18
+ ```
19
+
20
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
21
+ - `mcp__devflow__react_diagnose_bug`
22
+ - `mcp__devflow__react_new_feature`
23
+ - `mcp__devflow__react_audit_performance`
24
+ - `mcp__devflow__react_review_hooks`
25
+ - `mcp__devflow__react_refactor_component`
26
+ - `mcp__devflow__react_new_component`
27
+
28
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
29
+
30
+ When the skill execution is complete, clean up:
31
+ ```bash
32
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
33
+ ```
34
+
12
35
 
13
36
  # ⚛️ REACT
14
37
 
@@ -4,6 +4,24 @@ description: Tailwind 专家 — 响应式设计、主题定制、Purge 检查
4
4
  required_mcp_tools:
5
5
  - tailwind_new_component
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:tailwind","required_mcp_tools":["tailwind_new_component"],"description":"devflow:tailwind skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__tailwind_new_component`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # 🌊 TAILWIND
9
27
 
@@ -4,6 +4,24 @@ description: Taro 跨端专家 — 多端适配、小程序调试、性能优化
4
4
  required_mcp_tools:
5
5
  - taro_new_page
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:taro","required_mcp_tools":["taro_new_page"],"description":"devflow:taro skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__taro_new_page`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # 🛠️ TARO
9
27
 
@@ -6,6 +6,26 @@ required_mcp_tools:
6
6
  - vue_new_component
7
7
  - vue_debug_reactivity
8
8
  ---
9
+ ## MANDATORY FIRST STEP - Skill Registration
10
+
11
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
12
+
13
+ ```bash
14
+ mkdir -p ~/.devflow && echo '{"name":"devflow:vue","required_mcp_tools":["vue_diagnose_bug","vue_new_component","vue_debug_reactivity"],"description":"devflow:vue skill"}' > ~/.devflow/current-skill.json
15
+ ```
16
+
17
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
18
+ - `mcp__devflow__vue_diagnose_bug`
19
+ - `mcp__devflow__vue_new_component`
20
+ - `mcp__devflow__vue_debug_reactivity`
21
+
22
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
23
+
24
+ When the skill execution is complete, clean up:
25
+ ```bash
26
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
27
+ ```
28
+
9
29
 
10
30
  # 💚 VUE
11
31
 
@@ -4,6 +4,24 @@ description: 执行标准化开发工作流 — Bug 修复、功能开发、代
4
4
  required_mcp_tools:
5
5
  - run_workflow
6
6
  ---
7
+ ## MANDATORY FIRST STEP - Skill Registration
8
+
9
+ > **IMPORTANT: Before ANY other action, execute the registration command below. This is NON-NEGOTIABLE.**
10
+
11
+ ```bash
12
+ mkdir -p ~/.devflow && echo '{"name":"devflow:workflow","required_mcp_tools":["run_workflow"],"description":"devflow:workflow skill"}' > ~/.devflow/current-skill.json
13
+ ```
14
+
15
+ After registration, you **MUST** use ONLY these MCP tools for all work in this skill:
16
+ - `mcp__devflow__run_workflow`
17
+
18
+ **Never use direct tools** (Read, Write, Edit, Bash, Grep, etc.) for tasks that can be handled by the MCP tools above.
19
+
20
+ When the skill execution is complete, clean up:
21
+ ```bash
22
+ rm -f ~/.devflow/current-skill.json ~/.devflow/current-execution-id
23
+ ```
24
+
7
25
 
8
26
  # /devflow:workflow
9
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/devflow",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
4
4
  "type": "module",
5
5
  "description": "DevFlow - Developer Intelligence Platform (Distribution Package)",
6
6
  "bin": {
@@ -15,16 +15,16 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@colbymchenry/codegraph": "^1.1.1",
18
- "@devflow-tools/adapters": "^0.7.5",
19
- "@devflow-tools/benchmark": "^0.7.5",
20
- "@devflow-tools/context-engine": "^0.7.5",
21
- "@devflow-tools/database": "^0.7.5",
22
- "@devflow-tools/knowledge-engine": "^0.7.5",
23
- "@devflow-tools/mcp-server": "^0.7.5",
24
- "@devflow-tools/memory-engine": "^0.7.5",
25
- "@devflow-tools/sdk": "^0.7.5",
26
- "@devflow-tools/telemetry": "^0.7.5",
27
- "@devflow-tools/workflow-engine": "^0.7.5",
18
+ "@devflow-tools/adapters": "^0.7.6",
19
+ "@devflow-tools/benchmark": "^0.7.6",
20
+ "@devflow-tools/context-engine": "^0.7.6",
21
+ "@devflow-tools/database": "^0.7.6",
22
+ "@devflow-tools/knowledge-engine": "^0.7.6",
23
+ "@devflow-tools/mcp-server": "^0.7.6",
24
+ "@devflow-tools/memory-engine": "^0.7.6",
25
+ "@devflow-tools/sdk": "^0.7.6",
26
+ "@devflow-tools/telemetry": "^0.7.6",
27
+ "@devflow-tools/workflow-engine": "^0.7.6",
28
28
  "@inquirer/prompts": "^7.10.1",
29
29
  "@modelcontextprotocol/sdk": "^1.0.0",
30
30
  "@nestjs/common": "^10.4.0",
@@ -51,5 +51,5 @@
51
51
  "plugin-registry.json",
52
52
  "scripts/postinstall.js"
53
53
  ],
54
- "gitHead": "c9055f06bb1db49bef3c241f9223893711425e57"
54
+ "gitHead": "4be4f56186b7ddf99e1870372ecd681ae0294585"
55
55
  }