mcp-probe-kit 1.0.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.
Files changed (51) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +607 -0
  3. package/build/index.d.ts +2 -0
  4. package/build/index.js +553 -0
  5. package/build/tools/check_deps.d.ts +13 -0
  6. package/build/tools/check_deps.js +204 -0
  7. package/build/tools/code_review.d.ts +13 -0
  8. package/build/tools/code_review.js +138 -0
  9. package/build/tools/convert.d.ts +13 -0
  10. package/build/tools/convert.js +575 -0
  11. package/build/tools/debug.d.ts +13 -0
  12. package/build/tools/debug.js +78 -0
  13. package/build/tools/detect_shell.d.ts +6 -0
  14. package/build/tools/detect_shell.js +138 -0
  15. package/build/tools/explain.d.ts +13 -0
  16. package/build/tools/explain.js +369 -0
  17. package/build/tools/fix.d.ts +13 -0
  18. package/build/tools/fix.js +290 -0
  19. package/build/tools/genapi.d.ts +13 -0
  20. package/build/tools/genapi.js +152 -0
  21. package/build/tools/genchangelog.d.ts +13 -0
  22. package/build/tools/genchangelog.js +227 -0
  23. package/build/tools/gencommit.d.ts +13 -0
  24. package/build/tools/gencommit.js +95 -0
  25. package/build/tools/gendoc.d.ts +13 -0
  26. package/build/tools/gendoc.js +208 -0
  27. package/build/tools/genpr.d.ts +13 -0
  28. package/build/tools/genpr.js +173 -0
  29. package/build/tools/genreadme.d.ts +13 -0
  30. package/build/tools/genreadme.js +613 -0
  31. package/build/tools/gensql.d.ts +13 -0
  32. package/build/tools/gensql.js +307 -0
  33. package/build/tools/gentest.d.ts +13 -0
  34. package/build/tools/gentest.js +155 -0
  35. package/build/tools/genui.d.ts +13 -0
  36. package/build/tools/genui.js +781 -0
  37. package/build/tools/index.d.ts +22 -0
  38. package/build/tools/index.js +22 -0
  39. package/build/tools/init_project.d.ts +13 -0
  40. package/build/tools/init_project.js +142 -0
  41. package/build/tools/init_setting.d.ts +13 -0
  42. package/build/tools/init_setting.js +47 -0
  43. package/build/tools/perf.d.ts +13 -0
  44. package/build/tools/perf.js +359 -0
  45. package/build/tools/refactor.d.ts +13 -0
  46. package/build/tools/refactor.js +318 -0
  47. package/build/tools/resolve_conflict.d.ts +13 -0
  48. package/build/tools/resolve_conflict.js +338 -0
  49. package/build/tools/split.d.ts +13 -0
  50. package/build/tools/split.js +577 -0
  51. package/package.json +66 -0
@@ -0,0 +1,307 @@
1
+ // gensql 工具实现
2
+ export async function gensql(args) {
3
+ try {
4
+ const description = args?.description || "";
5
+ const dialect = args?.dialect || "postgres"; // postgres, mysql, sqlite
6
+ const message = `请根据以下需求生成 SQL:
7
+
8
+ 📝 **需求描述**:
9
+ ${description || "请描述需要查询/操作的数据"}
10
+
11
+ 🗄️ **数据库类型**:${dialect}
12
+
13
+ ---
14
+
15
+ ## SQL 生成指南
16
+
17
+ ### 第一步:理解需求
18
+
19
+ **需求类型**:
20
+ - 查询(SELECT)
21
+ - 插入(INSERT)
22
+ - 更新(UPDATE)
23
+ - 删除(DELETE)
24
+ - 建表(CREATE TABLE)
25
+ - 修改表结构(ALTER TABLE)
26
+ - 创建索引(CREATE INDEX)
27
+
28
+ ### 第二步:生成 SQL
29
+
30
+ **查询示例:**
31
+
32
+ **1️⃣ 简单查询**
33
+ \`\`\`sql
34
+ -- 查询所有用户
35
+ SELECT * FROM users;
36
+
37
+ -- 按条件查询
38
+ SELECT id, name, email
39
+ FROM users
40
+ WHERE status = 'active'
41
+ AND created_at > '2024-01-01';
42
+ \`\`\`
43
+
44
+ **2️⃣ 复杂查询**
45
+ \`\`\`sql
46
+ -- JOIN 查询
47
+ SELECT
48
+ u.id,
49
+ u.name,
50
+ u.email,
51
+ COUNT(o.id) as order_count,
52
+ SUM(o.total) as total_spent
53
+ FROM users u
54
+ LEFT JOIN orders o ON u.id = o.user_id
55
+ WHERE u.status = 'active'
56
+ GROUP BY u.id, u.name, u.email
57
+ HAVING COUNT(o.id) > 0
58
+ ORDER BY total_spent DESC
59
+ LIMIT 10;
60
+ \`\`\`
61
+
62
+ **3️⃣ 子查询**
63
+ \`\`\`sql
64
+ -- 查找购买金额超过平均值的用户
65
+ SELECT
66
+ u.name,
67
+ SUM(o.total) as total_spent
68
+ FROM users u
69
+ JOIN orders o ON u.id = o.user_id
70
+ GROUP BY u.id, u.name
71
+ HAVING SUM(o.total) > (
72
+ SELECT AVG(total_per_user)
73
+ FROM (
74
+ SELECT SUM(total) as total_per_user
75
+ FROM orders
76
+ GROUP BY user_id
77
+ ) avg_calc
78
+ );
79
+ \`\`\`
80
+
81
+ **4️⃣ 窗口函数**
82
+ \`\`\`sql
83
+ -- 每个用户的订单排名
84
+ SELECT
85
+ user_id,
86
+ order_id,
87
+ total,
88
+ ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) as rank,
89
+ SUM(total) OVER (PARTITION BY user_id) as user_total
90
+ FROM orders;
91
+ \`\`\`
92
+
93
+ ---
94
+
95
+ ### 建表示例
96
+
97
+ **完整的表定义:**
98
+ \`\`\`sql
99
+ CREATE TABLE users (
100
+ id BIGSERIAL PRIMARY KEY,
101
+ email VARCHAR(255) UNIQUE NOT NULL,
102
+ name VARCHAR(100) NOT NULL,
103
+ password_hash VARCHAR(255) NOT NULL,
104
+ status VARCHAR(20) DEFAULT 'active',
105
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
106
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
107
+
108
+ -- 约束
109
+ CONSTRAINT valid_email CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$'),
110
+ CONSTRAINT valid_status CHECK (status IN ('active', 'inactive', 'suspended'))
111
+ );
112
+
113
+ -- 索引
114
+ CREATE INDEX idx_users_email ON users(email);
115
+ CREATE INDEX idx_users_status ON users(status);
116
+ CREATE INDEX idx_users_created_at ON users(created_at);
117
+
118
+ -- 注释
119
+ COMMENT ON TABLE users IS '用户表';
120
+ COMMENT ON COLUMN users.email IS '用户邮箱(唯一)';
121
+ \`\`\`
122
+
123
+ ---
124
+
125
+ ### 索引优化
126
+
127
+ **索引建议:**
128
+ \`\`\`sql
129
+ -- 单列索引
130
+ CREATE INDEX idx_users_email ON users(email);
131
+
132
+ -- 复合索引(顺序很重要!)
133
+ CREATE INDEX idx_orders_user_status ON orders(user_id, status, created_at);
134
+
135
+ -- 唯一索引
136
+ CREATE UNIQUE INDEX idx_users_email_unique ON users(email);
137
+
138
+ -- 部分索引(条件索引)
139
+ CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';
140
+
141
+ -- 全文索引(PostgreSQL)
142
+ CREATE INDEX idx_posts_title_fulltext ON posts USING GIN (to_tsvector('english', title));
143
+ \`\`\`
144
+
145
+ ---
146
+
147
+ ## 查询优化技巧
148
+
149
+ ### 1️⃣ 使用 EXPLAIN ANALYZE
150
+ \`\`\`sql
151
+ EXPLAIN ANALYZE
152
+ SELECT * FROM orders WHERE user_id = 123;
153
+ \`\`\`
154
+
155
+ ### 2️⃣ 避免 SELECT *
156
+ \`\`\`sql
157
+ -- ❌ Bad
158
+ SELECT * FROM users;
159
+
160
+ -- ✅ Good
161
+ SELECT id, name, email FROM users;
162
+ \`\`\`
163
+
164
+ ### 3️⃣ 使用 EXISTS 替代 IN(大数据量)
165
+ \`\`\`sql
166
+ -- ❌ Slow
167
+ SELECT * FROM users
168
+ WHERE id IN (SELECT user_id FROM orders);
169
+
170
+ -- ✅ Faster
171
+ SELECT * FROM users u
172
+ WHERE EXISTS (
173
+ SELECT 1 FROM orders o WHERE o.user_id = u.id
174
+ );
175
+ \`\`\`
176
+
177
+ ### 4️⃣ 避免在 WHERE 中使用函数
178
+ \`\`\`sql
179
+ -- ❌ Bad (无法使用索引)
180
+ SELECT * FROM users WHERE LOWER(email) = 'test@example.com';
181
+
182
+ -- ✅ Good
183
+ SELECT * FROM users WHERE email = 'test@example.com';
184
+ \`\`\`
185
+
186
+ ### 5️⃣ 分页优化
187
+ \`\`\`sql
188
+ -- ❌ Slow (大 OFFSET)
189
+ SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 10000;
190
+
191
+ -- ✅ Faster (游标分页)
192
+ SELECT * FROM posts
193
+ WHERE created_at < '2024-01-01 00:00:00'
194
+ ORDER BY created_at DESC
195
+ LIMIT 10;
196
+ \`\`\`
197
+
198
+ ---
199
+
200
+ ## 常用查询模板
201
+
202
+ ### 去重查询
203
+ \`\`\`sql
204
+ SELECT DISTINCT email FROM users;
205
+
206
+ -- 或使用 GROUP BY
207
+ SELECT email FROM users GROUP BY email;
208
+ \`\`\`
209
+
210
+ ### 统计分析
211
+ \`\`\`sql
212
+ SELECT
213
+ DATE_TRUNC('day', created_at) as date,
214
+ COUNT(*) as count,
215
+ COUNT(DISTINCT user_id) as unique_users,
216
+ SUM(total) as revenue,
217
+ AVG(total) as avg_order_value
218
+ FROM orders
219
+ WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
220
+ GROUP BY DATE_TRUNC('day', created_at)
221
+ ORDER BY date DESC;
222
+ \`\`\`
223
+
224
+ ### 排名查询
225
+ \`\`\`sql
226
+ -- Top N per group
227
+ SELECT * FROM (
228
+ SELECT
229
+ *,
230
+ ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY sales DESC) as rank
231
+ FROM products
232
+ ) ranked
233
+ WHERE rank <= 10;
234
+ \`\`\`
235
+
236
+ ### 递归查询(树形结构)
237
+ \`\`\`sql
238
+ WITH RECURSIVE category_tree AS (
239
+ -- 根节点
240
+ SELECT id, name, parent_id, 1 as level
241
+ FROM categories
242
+ WHERE parent_id IS NULL
243
+
244
+ UNION ALL
245
+
246
+ -- 递归部分
247
+ SELECT c.id, c.name, c.parent_id, ct.level + 1
248
+ FROM categories c
249
+ JOIN category_tree ct ON c.parent_id = ct.id
250
+ )
251
+ SELECT * FROM category_tree ORDER BY level, name;
252
+ \`\`\`
253
+
254
+ ---
255
+
256
+ ## 数据库特定语法
257
+
258
+ ### PostgreSQL
259
+ \`\`\`sql
260
+ -- JSON 查询
261
+ SELECT data->>'name' as name FROM users WHERE data @> '{"active": true}';
262
+
263
+ -- 数组操作
264
+ SELECT * FROM posts WHERE tags && ARRAY['sql', 'database'];
265
+
266
+ -- 全文搜索
267
+ SELECT * FROM articles WHERE to_tsvector(content) @@ to_tsquery('postgresql');
268
+ \`\`\`
269
+
270
+ ### MySQL
271
+ \`\`\`sql
272
+ -- JSON 查询
273
+ SELECT JSON_EXTRACT(data, '$.name') as name FROM users;
274
+
275
+ -- 全文搜索
276
+ SELECT * FROM articles WHERE MATCH(title, content) AGAINST('database' IN NATURAL LANGUAGE MODE);
277
+ \`\`\`
278
+
279
+ ---
280
+
281
+ 现在请根据需求生成优化的 SQL 语句,并提供:
282
+ 1. 完整的 SQL 代码
283
+ 2. 执行计划分析(如需要)
284
+ 3. 索引建议
285
+ 4. 性能优化建议`;
286
+ return {
287
+ content: [
288
+ {
289
+ type: "text",
290
+ text: message,
291
+ },
292
+ ],
293
+ };
294
+ }
295
+ catch (error) {
296
+ const errorMessage = error instanceof Error ? error.message : String(error);
297
+ return {
298
+ content: [
299
+ {
300
+ type: "text",
301
+ text: `❌ 生成 SQL 失败: ${errorMessage}`,
302
+ },
303
+ ],
304
+ isError: true,
305
+ };
306
+ }
307
+ }
@@ -0,0 +1,13 @@
1
+ export declare function gentest(args: any): Promise<{
2
+ content: {
3
+ type: string;
4
+ text: string;
5
+ }[];
6
+ isError?: undefined;
7
+ } | {
8
+ content: {
9
+ type: string;
10
+ text: string;
11
+ }[];
12
+ isError: boolean;
13
+ }>;
@@ -0,0 +1,155 @@
1
+ // gentest 工具实现
2
+ export async function gentest(args) {
3
+ try {
4
+ const code = args?.code || "";
5
+ const framework = args?.framework || "jest"; // jest, vitest, mocha
6
+ const message = `请为以下代码生成完整的测试用例:
7
+
8
+ 📝 **代码内容**:
9
+ ${code || "请提供需要测试的代码"}
10
+
11
+ 🧪 **测试框架**:${framework}
12
+
13
+ ---
14
+
15
+ ## 测试用例生成指南
16
+
17
+ ### 1️⃣ 测试策略
18
+
19
+ **测试类型**:
20
+ - **单元测试**:测试单个函数/方法
21
+ - **集成测试**:测试模块间交互
22
+ - **边界测试**:测试极端情况
23
+ - **异常测试**:测试错误处理
24
+
25
+ **覆盖维度**:
26
+ - ✅ 正常情况(Happy Path)
27
+ - ✅ 边界条件(Boundary Conditions)
28
+ - ✅ 异常情况(Error Cases)
29
+ - ✅ 空值/特殊值(Null/Special Values)
30
+
31
+ ### 2️⃣ 测试用例模板
32
+
33
+ **测试结构(AAA 模式)**:
34
+ \`\`\`typescript
35
+ describe('函数/模块名称', () => {
36
+ // Arrange - 准备测试数据
37
+ // Act - 执行被测试的代码
38
+ // Assert - 验证结果
39
+
40
+ test('描述测试场景', () => {
41
+ // Arrange
42
+ const input = ...;
43
+ const expected = ...;
44
+
45
+ // Act
46
+ const result = functionUnderTest(input);
47
+
48
+ // Assert
49
+ expect(result).toBe(expected);
50
+ });
51
+ });
52
+ \`\`\`
53
+
54
+ ### 3️⃣ 测试用例清单
55
+
56
+ **正常情况测试**:
57
+ - [ ] 基本功能正常工作
58
+ - [ ] 返回值类型正确
59
+ - [ ] 副作用符合预期
60
+
61
+ **边界条件测试**:
62
+ - [ ] 空输入(null, undefined, "", [], {})
63
+ - [ ] 最小值/最大值
64
+ - [ ] 边界临界值
65
+
66
+ **异常情况测试**:
67
+ - [ ] 无效输入
68
+ - [ ] 类型错误
69
+ - [ ] 超出范围
70
+ - [ ] 异常抛出正确
71
+
72
+ **性能测试(可选)**:
73
+ - [ ] 大数据量处理
74
+ - [ ] 时间复杂度验证
75
+
76
+ ### 4️⃣ Mock 和 Stub
77
+
78
+ **需要 Mock 的场景**:
79
+ - API 调用
80
+ - 数据库操作
81
+ - 文件系统操作
82
+ - 时间相关函数
83
+ - 随机数生成
84
+ - 外部依赖
85
+
86
+ **Mock 示例**:
87
+ \`\`\`typescript
88
+ // Mock 函数
89
+ const mockFetch = jest.fn();
90
+
91
+ // Mock 模块
92
+ jest.mock('./api', () => ({
93
+ fetchUser: jest.fn().mockResolvedValue({ id: 1, name: 'Test' })
94
+ }));
95
+
96
+ // Mock 时间
97
+ jest.useFakeTimers();
98
+ \`\`\`
99
+
100
+ ### 5️⃣ 测试数据
101
+
102
+ **测试数据原则**:
103
+ - 使用有意义的测试数据
104
+ - 避免硬编码,使用工厂函数
105
+ - 覆盖各种数据类型
106
+ - 准备充分的边界数据
107
+
108
+ **数据工厂示例**:
109
+ \`\`\`typescript
110
+ const createUser = (overrides = {}) => ({
111
+ id: 1,
112
+ name: 'Test User',
113
+ email: 'test@example.com',
114
+ ...overrides
115
+ });
116
+ \`\`\`
117
+
118
+ ---
119
+
120
+ ## 测试文件命名规范
121
+
122
+ - **单元测试**:\`functionName.test.ts\` 或 \`functionName.spec.ts\`
123
+ - **集成测试**:\`moduleName.integration.test.ts\`
124
+ - **E2E 测试**:\`feature.e2e.test.ts\`
125
+
126
+ ---
127
+
128
+ 现在请生成完整的测试代码,包括:
129
+ 1. describe 块组织
130
+ 2. 所有必要的测试用例
131
+ 3. Mock/Stub 设置
132
+ 4. 测试数据准备
133
+ 5. 清晰的注释说明`;
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: message,
139
+ },
140
+ ],
141
+ };
142
+ }
143
+ catch (error) {
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ return {
146
+ content: [
147
+ {
148
+ type: "text",
149
+ text: `❌ 生成测试用例失败: ${errorMessage}`,
150
+ },
151
+ ],
152
+ isError: true,
153
+ };
154
+ }
155
+ }
@@ -0,0 +1,13 @@
1
+ export declare function genui(args: any): Promise<{
2
+ content: {
3
+ type: string;
4
+ text: string;
5
+ }[];
6
+ isError?: undefined;
7
+ } | {
8
+ content: {
9
+ type: string;
10
+ text: string;
11
+ }[];
12
+ isError: boolean;
13
+ }>;