@devflow-tools/plugin-nest 0.1.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.
@@ -0,0 +1,3 @@
1
+ import type { DevFlowPlugin } from "@devflow-tools/sdk";
2
+ export declare const nestPlugin: DevFlowPlugin;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,eAAO,MAAM,UAAU,EAAE,aAkJxB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,143 @@
1
+ export const nestPlugin = {
2
+ meta: {
3
+ name: "nest",
4
+ version: "0.1.0",
5
+ description: "NestJS 专家 — 模块架构、守卫调试、微服务配置、Swagger 生成",
6
+ icon: "🐱",
7
+ tags: ["backend", "nestjs", "typescript", "microservices"],
8
+ },
9
+ knowledge: {
10
+ sources: [
11
+ {
12
+ name: "nestjs-docs",
13
+ urls: [
14
+ "https://docs.nestjs.com/",
15
+ "https://docs.nestjs.com/providers",
16
+ "https://docs.nestjs.com/guards",
17
+ "https://docs.nestjs.com/microservices/basics",
18
+ ],
19
+ pluginName: "nest",
20
+ version: "10.3.0",
21
+ },
22
+ ],
23
+ },
24
+ memory: {
25
+ project: {
26
+ stack: ["NestJS 10", "TypeScript", "Prisma", "PostgreSQL"],
27
+ conventions: [
28
+ { key: "modules", value: "每个功能封装为独立 Module", source: "manual", confidence: 0.95 },
29
+ { key: "di", value: "使用构造函数依赖注入,通过 interface 解耦", source: "manual", confidence: 0.9 },
30
+ { key: "validation", value: "使用 class-validator + ValidationPipe 校验请求", source: "manual", confidence: 0.9 },
31
+ { key: "exception", value: "使用 NestJS 内置异常层,统一错误响应格式", source: "manual", confidence: 0.85 },
32
+ ],
33
+ },
34
+ global: [
35
+ {
36
+ id: "nest:module-architecture",
37
+ source: "nest",
38
+ title: "Module 架构设计",
39
+ content: "NestJS 应用由 Module 组成。每个 Module 使用 @Module() 装饰器定义 controllers、providers、imports、exports。使用 exports 暴露可共享的 Provider。",
40
+ embedding: [],
41
+ },
42
+ {
43
+ id: "nest:guards-interceptors",
44
+ source: "nest",
45
+ title: "守卫与拦截器执行链",
46
+ content: "Guard → Interceptor(前) → Pipe → Handler → Interceptor(后) → Filter。Guards 用于认证授权,Interceptors 用于请求前后处理,Pipes 用于数据验证,Filters 用于异常处理。",
47
+ embedding: [],
48
+ },
49
+ {
50
+ id: "nest:microservices",
51
+ source: "nest",
52
+ title: "微服务传输层",
53
+ content: "支持 TCP、Redis、MQTT、Kafka、RabbitMQ、NATS、gRPC。@MessagePattern() 处理请求-响应,@EventPattern() 处理事件广播。ClientProxy 用于服务间通信。",
54
+ embedding: [],
55
+ },
56
+ {
57
+ id: "nest:prisma-integration",
58
+ source: "nest",
59
+ title: "Prisma 集成最佳实践",
60
+ content: "将 PrismaService 封装为全局 Module。使用 OnModuleInit 生命周期连接数据库。使用 Prisma Client 类型生成 DTO。事务使用 prisma.$transaction。",
61
+ embedding: [],
62
+ },
63
+ ],
64
+ },
65
+ workflow: {
66
+ steps: [],
67
+ templates: [
68
+ {
69
+ name: "new-module",
70
+ description: "新建 NestJS 模块(Controller + Service + Module + DTO + 测试)",
71
+ version: "1.0.0",
72
+ steps: [
73
+ { id: "analyze-domain", description: "分析业务领域确定模块边界", type: "llm", timeout: 10000 },
74
+ { id: "define-dtos", description: "定义 DTO 和验证规则(class-validator + Swagger 装饰器)", type: "llm", timeout: 15000 },
75
+ { id: "create-service", description: "创建 Service(业务逻辑 + Prisma 查询)", type: "llm", depends: ["define-dtos"], timeout: 15000 },
76
+ { id: "create-controller", description: "创建 Controller(路由 + 守卫 + 拦截器)", type: "llm", depends: ["define-dtos"], timeout: 10000 },
77
+ { id: "create-module", description: "创建 Module 并注册依赖", type: "simple", depends: ["create-service", "create-controller"], timeout: 5000 },
78
+ { id: "register-parent", description: "在父模块中注册新模块", type: "simple", depends: ["create-module"], timeout: 5000 },
79
+ { id: "create-tests", description: "生成单元测试和 E2E 测试", type: "llm", depends: ["create-controller", "create-service"], timeout: 20000 },
80
+ { id: "run-tests", description: "运行测试验证", type: "simple", depends: ["create-tests"], timeout: 30000 },
81
+ ],
82
+ triggers: [{ type: "cli", command: "new:module" }, { type: "mcp", tool: "new_module" }],
83
+ },
84
+ {
85
+ name: "bug-diagnosis",
86
+ description: "NestJS Bug 诊断:异常定位 → 依赖链追踪 → 修复",
87
+ version: "1.0.0",
88
+ steps: [
89
+ { id: "capture-exception", description: "收集异常信息(HTTP 状态码、异常类型、堆栈)", type: "simple", timeout: 5000 },
90
+ { id: "trace-module-chain", description: "追踪请求经过的 Module/Guard/Interceptor/Pipe 链", type: "simple", depends: ["capture-exception"], timeout: 10000 },
91
+ { id: "check-di", description: "检查依赖注入是否正确(Provider 是否在 Module 中注册)", type: "simple", depends: ["trace-module-chain"], timeout: 10000 },
92
+ { id: "check-db", description: "检查数据库查询和事务是否正确", type: "simple", depends: ["capture-exception"], timeout: 15000 },
93
+ { id: "search-docs", description: "搜索 NestJS 官方文档中相关概念", type: "simple", timeout: 10000 },
94
+ { id: "generate-fix", description: "生成修复方案", type: "llm", depends: ["trace-module-chain", "check-di", "check-db", "search-docs"], timeout: 20000 },
95
+ { id: "verify-build", description: "构建检查确认无编译错误", type: "simple", depends: ["generate-fix"], timeout: 15000 },
96
+ { id: "e2e-test", description: "运行 E2E 测试验证接口", type: "simple", depends: ["verify-build"], timeout: 60000 },
97
+ { id: "approve", description: "人工确认修复方案", type: "manual", depends: ["e2e-test"], timeout: 120000 },
98
+ ],
99
+ triggers: [{ type: "cli", command: "bug" }, { type: "mcp", tool: "diagnose_bug" }],
100
+ },
101
+ {
102
+ name: "swagger-generate",
103
+ description: "Swagger 文档生成:扫描 API → 补充装饰器 → 验证",
104
+ version: "1.0.0",
105
+ steps: [
106
+ { id: "scan-controllers", description: "扫描所有 Controller 和 DTO", type: "simple", timeout: 10000 },
107
+ { id: "audit-decorators", description: "检查缺失的 @ApiTags/@ApiOperation/@ApiResponse 装饰器", type: "simple", depends: ["scan-controllers"], timeout: 10000 },
108
+ { id: "supplement-docs", description: "补充缺失的 Swagger 装饰器", type: "llm", depends: ["audit-decorators"], timeout: 20000 },
109
+ { id: "generate-spec", description: "生成 OpenAPI 规范文件", type: "simple", depends: ["supplement-docs"], timeout: 15000 },
110
+ { id: "validate-spec", description: "验证生成的 Swagger 文档完整性", type: "simple", depends: ["generate-spec"], timeout: 10000 },
111
+ ],
112
+ triggers: [{ type: "cli", command: "generate:swagger" }],
113
+ },
114
+ {
115
+ name: "microservice-setup",
116
+ description: "微服务端点配置:消息模式 → 传输层 → 客户端代理",
117
+ version: "1.0.0",
118
+ steps: [
119
+ { id: "define-patterns", description: "定义 MessagePattern 和 EventPattern", type: "llm", timeout: 10000 },
120
+ { id: "setup-transport", description: "配置传输层(TCP/Redis/Kafka 选型建议)", type: "llm", depends: ["define-patterns"], timeout: 15000 },
121
+ { id: "create-client", description: "创建 ClientProxy 代理服务", type: "llm", depends: ["setup-transport"], timeout: 10000 },
122
+ { id: "add-error-handling", description: "添加异常过滤器和重试逻辑", type: "llm", depends: ["create-client"], timeout: 10000 },
123
+ { id: "integration-test", description: "集成测试验证消息收发", type: "simple", depends: ["add-error-handling"], timeout: 30000 },
124
+ ],
125
+ triggers: [{ type: "cli", command: "setup:microservice" }],
126
+ },
127
+ ],
128
+ },
129
+ prompt: {
130
+ system: "你是一个 NestJS 专家。使用装饰器模式、依赖注入和模块化架构。遵循 SOLID 原则。",
131
+ rules: [
132
+ "每个功能封装为独立 Module(Controller + Service + Module + DTO + Spec)",
133
+ "使用构造函数依赖注入,通过 interface 解耦",
134
+ "使用 class-validator + ValidationPipe 校验请求",
135
+ "Controller 只处理路由和参数解析,业务逻辑在 Service 中",
136
+ "遇到问题先查 NestJS 官方文档再给方案",
137
+ "修复 Bug 前先追踪 DI 链和 Module 注册",
138
+ "使用 Prisma 作为 ORM,事务使用 $transaction",
139
+ ],
140
+ },
141
+ tools: [],
142
+ };
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@devflow-tools/plugin-nest",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "tsc -b",
15
+ "test": "vitest run",
16
+ "typecheck": "tsc --noEmit",
17
+ "clean": "rm -rf dist"
18
+ },
19
+ "dependencies": {
20
+ "@devflow-tools/sdk": "*"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0",
24
+ "vitest": "^2.0.0"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "gitHead": "4cede97fc7fc673f929427fac169acab100ca8ed"
30
+ }