@democratize-quality/mcp-server 1.1.7 → 1.1.8
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/README.md +154 -4
- package/package.json +1 -1
- package/src/skills/test-execution/SKILL.md +728 -0
- package/src/utils/agentInstaller.js +68 -3
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ npx @democratize-quality/mcp-server@latest --agents
|
|
|
18
18
|
|
|
19
19
|
**What this does:**
|
|
20
20
|
- ✅ Installs the MCP server
|
|
21
|
-
- ✅ Sets up
|
|
21
|
+
- ✅ Sets up 4 AI-powered testing skills
|
|
22
22
|
- ✅ Configures VS Code integration automatically
|
|
23
23
|
- ✅ Creates project folders (`.agents/skills/`, `.github/skills/`, `.claude/skills/`, `.vscode/`)
|
|
24
24
|
- ✅ Works with: GitHub Copilot, Codex CLI, Claude Code, Cursor, and 10+ other tools
|
|
@@ -292,7 +292,7 @@ This MCP server provides **7 powerful tools** for comprehensive API testing:
|
|
|
292
292
|
|
|
293
293
|
## 🌐 Agent Skills (Universal AI Capabilities)
|
|
294
294
|
|
|
295
|
-
When you install with `--agents`, you get
|
|
295
|
+
When you install with `--agents`, you get 4 intelligent testing skills that work across all major AI coding tools:
|
|
296
296
|
|
|
297
297
|
### 1. 📋 /api-planning - The Strategist
|
|
298
298
|
|
|
@@ -378,7 +378,114 @@ Sample Collection includes:
|
|
|
378
378
|
Import into Postman and start testing!
|
|
379
379
|
```
|
|
380
380
|
|
|
381
|
-
### 3.
|
|
381
|
+
### 3. ⚡ /test-execution - The Runner
|
|
382
|
+
|
|
383
|
+
**What it does:** Executes API tests directly from test plans without code
|
|
384
|
+
|
|
385
|
+
**Best for:**
|
|
386
|
+
- Running tests immediately after planning
|
|
387
|
+
- Quick API validation without writing code
|
|
388
|
+
- Executing specific test sections
|
|
389
|
+
- Generating comprehensive HTML test reports
|
|
390
|
+
|
|
391
|
+
**Example: Execute Tests from Plan**
|
|
392
|
+
```
|
|
393
|
+
1. After creating a test plan, type /test-execution or mention test execution
|
|
394
|
+
|
|
395
|
+
You: Execute tests from section 1 of the test plan
|
|
396
|
+
|
|
397
|
+
2. Skill: I'll execute the tests from section 1 of your test plan using the api_request tool with a unique session ID. After execution, I'll generate an HTML report with all results.
|
|
398
|
+
|
|
399
|
+
3. When prompted, allow the tool call "Run api_request democratize-quality (MCP Server)"
|
|
400
|
+
|
|
401
|
+
Execution Results:
|
|
402
|
+
✅ GET /api/v1/Books - List all books (200 OK, 145ms)
|
|
403
|
+
✅ GET /api/v1/Books/1 - Get book by ID (200 OK, 98ms)
|
|
404
|
+
✅ POST /api/v1/Books - Create new book (201 Created, 203ms)
|
|
405
|
+
✅ PUT /api/v1/Books/1 - Update book (200 OK, 156ms)
|
|
406
|
+
✅ DELETE /api/v1/Books/1 - Delete book (204 No Content, 87ms)
|
|
407
|
+
|
|
408
|
+
Test Summary:
|
|
409
|
+
- Total: 5 tests
|
|
410
|
+
- Passed: 5 (100%)
|
|
411
|
+
- Failed: 0 (0%)
|
|
412
|
+
- Total Time: 689ms
|
|
413
|
+
|
|
414
|
+
📊 HTML Report: ./api-test-reports/test-execution-1739597400000-report.html
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
**Example: Execute Full Test Plan**
|
|
418
|
+
```
|
|
419
|
+
You: /test-execution run all tests from the test plan and generate a report
|
|
420
|
+
|
|
421
|
+
Skill: Executing entire test plan...
|
|
422
|
+
|
|
423
|
+
Progress:
|
|
424
|
+
📋 Section 1: Books API (5 tests)
|
|
425
|
+
✅ GET /api/v1/Books
|
|
426
|
+
✅ GET /api/v1/Books/{id}
|
|
427
|
+
✅ POST /api/v1/Books
|
|
428
|
+
✅ PUT /api/v1/Books/{id}
|
|
429
|
+
✅ DELETE /api/v1/Books/{id}
|
|
430
|
+
|
|
431
|
+
📋 Section 2: Authors API (4 tests)
|
|
432
|
+
✅ GET /api/v1/Authors
|
|
433
|
+
✅ GET /api/v1/Authors/{id}
|
|
434
|
+
✅ POST /api/v1/Authors
|
|
435
|
+
✅ DELETE /api/v1/Authors/{id}
|
|
436
|
+
|
|
437
|
+
📋 Section 3: Users API (4 tests)
|
|
438
|
+
✅ GET /api/v1/Users
|
|
439
|
+
✅ POST /api/v1/Users
|
|
440
|
+
❌ PUT /api/v1/Users/{id} - 404 Not Found
|
|
441
|
+
✅ DELETE /api/v1/Users/{id}
|
|
442
|
+
|
|
443
|
+
Final Summary:
|
|
444
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
445
|
+
Total: 13 tests
|
|
446
|
+
Passed: 12 (92.3%)
|
|
447
|
+
Failed: 1 (7.7%)
|
|
448
|
+
Total Time: 1.8s
|
|
449
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
450
|
+
|
|
451
|
+
📊 Comprehensive HTML Report Generated:
|
|
452
|
+
./api-test-reports/full-plan-execution-report.html
|
|
453
|
+
|
|
454
|
+
Open in browser for:
|
|
455
|
+
- Detailed request/response logs
|
|
456
|
+
- Timing analysis and charts
|
|
457
|
+
- Visual pass/fail indicators
|
|
458
|
+
- Validation results
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
**Example: Execute with CRUD Workflow**
|
|
462
|
+
```
|
|
463
|
+
You: /test-execution run the Books CRUD tests with request chaining
|
|
464
|
+
|
|
465
|
+
Skill: Executing CRUD workflow with request chaining...
|
|
466
|
+
|
|
467
|
+
Step 1: CREATE book
|
|
468
|
+
✅ POST /api/v1/Books
|
|
469
|
+
📌 Extracted: bookId = 42
|
|
470
|
+
|
|
471
|
+
Step 2: READ created book
|
|
472
|
+
✅ GET /api/v1/Books/42
|
|
473
|
+
📌 Verified: Book exists with correct data
|
|
474
|
+
|
|
475
|
+
Step 3: UPDATE book
|
|
476
|
+
✅ PUT /api/v1/Books/42
|
|
477
|
+
📌 Verified: Book updated successfully
|
|
478
|
+
|
|
479
|
+
Step 4: DELETE book
|
|
480
|
+
✅ DELETE /api/v1/Books/42
|
|
481
|
+
📌 Verified: Book deleted (204 No Content)
|
|
482
|
+
|
|
483
|
+
Workflow Complete: All 4 operations successful! ✅
|
|
484
|
+
|
|
485
|
+
📊 Report: ./api-test-reports/crud-workflow-report.html
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### 4. 🔬 /test-healing - The Fixer
|
|
382
489
|
|
|
383
490
|
**What it does:** Automatically diagnoses and repairs failing tests
|
|
384
491
|
|
|
@@ -540,13 +647,56 @@ Import the generated collection into Postman and start testing!
|
|
|
540
647
|
|
|
541
648
|
**Result:** Professional Postman collection ready to share with your team
|
|
542
649
|
|
|
650
|
+
### Scenario 3: Quick API Validation Without Code
|
|
651
|
+
|
|
652
|
+
**Goal:** Execute API tests immediately without generating code files
|
|
653
|
+
|
|
654
|
+
```
|
|
655
|
+
Step 1:
|
|
656
|
+
/api-planning create test plan from
|
|
657
|
+
https://fakerestapi.azurewebsites.net/swagger/v1/swagger.json
|
|
658
|
+
focusing on Books and Users endpoints
|
|
659
|
+
|
|
660
|
+
Step 2:
|
|
661
|
+
/test-execution run all tests from the test plan and generate HTML report
|
|
662
|
+
|
|
663
|
+
Step 3:
|
|
664
|
+
Open the generated HTML report to see detailed results!
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
**What you get:**
|
|
668
|
+
- ⚡ Instant test execution without writing code
|
|
669
|
+
- 📊 Interactive HTML report with:
|
|
670
|
+
- Pass/fail indicators for each endpoint
|
|
671
|
+
- Request/response details
|
|
672
|
+
- Response timing analysis
|
|
673
|
+
- Visual charts and statistics
|
|
674
|
+
- ✅ Quick validation of API before writing automated tests
|
|
675
|
+
- 🔄 Easy to re-run for regression testing
|
|
676
|
+
|
|
677
|
+
**Use cases:**
|
|
678
|
+
- Quick API health checks
|
|
679
|
+
- Validating API after deployments
|
|
680
|
+
- API exploration and documentation
|
|
681
|
+
- Testing APIs before committing to test code
|
|
682
|
+
- Sharing test results with non-technical stakeholders
|
|
683
|
+
|
|
684
|
+
**Alternative workflow with specific sections:**
|
|
685
|
+
```
|
|
686
|
+
You: /test-execution execute section 1 (Books API) from the test plan
|
|
687
|
+
|
|
688
|
+
Result:
|
|
689
|
+
✅ 5/5 tests passed
|
|
690
|
+
📊 Report: ./api-test-reports/books-section-report.html
|
|
691
|
+
```
|
|
692
|
+
|
|
543
693
|
---
|
|
544
694
|
|
|
545
695
|
## 🔧 Calling Individual Tools
|
|
546
696
|
|
|
547
697
|
### When to Use Individual Tools
|
|
548
698
|
|
|
549
|
-
**Use skills (/api-planning, /test-generation, /test-healing) when:**
|
|
699
|
+
**Use skills (/api-planning, /test-generation, /test-execution, /test-healing) when:**
|
|
550
700
|
- You want AI assistance and recommendations
|
|
551
701
|
- You're working on complex, multi-step workflows
|
|
552
702
|
- You need explanations and best practices
|
package/package.json
CHANGED
|
@@ -0,0 +1,728 @@
|
|
|
1
|
+
````skill
|
|
2
|
+
---
|
|
3
|
+
name: test-execution
|
|
4
|
+
description: Execute API tests directly from test plans using actual API requests. Run tests section-by-section or entirely, validate responses, chain requests, and generate comprehensive HTML reports. Use when user wants to run tests, execute API calls from test plan, validate endpoints, or create test execution reports.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# API Test Execution Skill
|
|
8
|
+
|
|
9
|
+
Use this skill to execute API tests directly from test plans without writing code. Run comprehensive test sequences, validate responses, and generate visual HTML reports.
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
- User has a test plan and wants to execute tests immediately
|
|
14
|
+
- User mentions running tests without generating code
|
|
15
|
+
- User needs to validate API endpoints from test plan
|
|
16
|
+
- User wants to execute specific sections of a test plan
|
|
17
|
+
- User requests test execution reports or validation results
|
|
18
|
+
- User needs quick API testing without setup
|
|
19
|
+
|
|
20
|
+
## Core Workflow
|
|
21
|
+
|
|
22
|
+
### Step 1: Load Test Plan
|
|
23
|
+
|
|
24
|
+
**Read the test plan file** that was generated by `api_planner`:
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
// User provides test plan path
|
|
28
|
+
const testPlanPath = "./api-test-reports/api-test-plan.md";
|
|
29
|
+
|
|
30
|
+
// Read the test plan content
|
|
31
|
+
const testPlanContent = await readFile(testPlanPath);
|
|
32
|
+
|
|
33
|
+
// Parse sections using markdown headers (##)
|
|
34
|
+
// Each section represents a testable API endpoint or feature
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 2: Select Section or Full Execution
|
|
38
|
+
|
|
39
|
+
**Ask user what to execute** (if not specified):
|
|
40
|
+
|
|
41
|
+
```javascript
|
|
42
|
+
// Parse test plan sections
|
|
43
|
+
const sections = parseTestPlanSections(testPlanContent);
|
|
44
|
+
|
|
45
|
+
// User can specify:
|
|
46
|
+
// - "Execute section 1" or "Run tests for GET /api/v1/Books"
|
|
47
|
+
// - "Execute all sections" or "Run entire test plan"
|
|
48
|
+
// - "Run sections 1, 3, and 5"
|
|
49
|
+
|
|
50
|
+
// Section structure example:
|
|
51
|
+
// ## 1. GET /api/v1/Books - Retrieve all books
|
|
52
|
+
// - Endpoint: GET /api/v1/Books
|
|
53
|
+
// - Expected Status: 200
|
|
54
|
+
// - Sample Request: [details]
|
|
55
|
+
// - Expected Response: [structure]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Section Selection Examples:**
|
|
59
|
+
- Section number: "Execute section 1"
|
|
60
|
+
- Endpoint match: "Run tests for Books API"
|
|
61
|
+
- Multiple sections: "Execute sections 1, 2, and 4"
|
|
62
|
+
- Full plan: "Run all tests" or "Execute entire test plan"
|
|
63
|
+
|
|
64
|
+
### Step 3: Parse Test Data from Section
|
|
65
|
+
|
|
66
|
+
**Extract test information** from the selected section(s):
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
// For each test section, extract:
|
|
70
|
+
const testData = {
|
|
71
|
+
method: "GET", // HTTP method
|
|
72
|
+
endpoint: "/api/v1/Books", // API endpoint
|
|
73
|
+
baseUrl: "https://api.example.com", // From test plan overview
|
|
74
|
+
expectedStatus: 200, // Expected HTTP status
|
|
75
|
+
headers: { // Authentication and headers
|
|
76
|
+
"Content-Type": "application/json",
|
|
77
|
+
"Authorization": "Bearer token-if-needed"
|
|
78
|
+
},
|
|
79
|
+
data: { // Request body (for POST/PUT/PATCH)
|
|
80
|
+
// Parsed from sample request in test plan
|
|
81
|
+
},
|
|
82
|
+
expectedResponse: { // Expected response structure
|
|
83
|
+
// Parsed from expected response section
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Parsing Rules:**
|
|
89
|
+
- Extract HTTP method from section title or endpoint line
|
|
90
|
+
- Get endpoint URL from "Endpoint:" line
|
|
91
|
+
- Parse expected status from "Expected Status:" or "Status Code:" line
|
|
92
|
+
- Extract request body from "Sample Request:" or "Request Body:" section
|
|
93
|
+
- Get expected response from "Expected Response:" or "Response Structure:" section
|
|
94
|
+
- Identify authentication requirements from test plan
|
|
95
|
+
|
|
96
|
+
### Step 4: Execute Tests with Unique Session ID
|
|
97
|
+
|
|
98
|
+
**Create a unique session** and execute tests:
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
// Generate unique session ID
|
|
102
|
+
const sessionId = `test-execution-${Date.now()}`;
|
|
103
|
+
// Or use meaningful name: `test-execution-books-api-${Date.now()}`
|
|
104
|
+
|
|
105
|
+
// Execute each test in the section
|
|
106
|
+
for (const test of testsInSection) {
|
|
107
|
+
await tools.api_request({
|
|
108
|
+
sessionId: sessionId,
|
|
109
|
+
method: test.method,
|
|
110
|
+
url: `${test.baseUrl}${test.endpoint}`,
|
|
111
|
+
headers: test.headers,
|
|
112
|
+
data: test.data, // Only for POST/PUT/PATCH/DELETE
|
|
113
|
+
expect: {
|
|
114
|
+
status: test.expectedStatus,
|
|
115
|
+
// Optional: Add response validation
|
|
116
|
+
body: {
|
|
117
|
+
// Expected fields from test plan
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
extract: {
|
|
121
|
+
// Extract data for chained requests
|
|
122
|
+
// Example: { "bookId": "id" } to use in next request
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
console.log(`✅ Test passed: ${test.method} ${test.endpoint}`);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Request Chaining Example:**
|
|
131
|
+
```javascript
|
|
132
|
+
// Step 1: Create a book and extract its ID
|
|
133
|
+
await tools.api_request({
|
|
134
|
+
sessionId: sessionId,
|
|
135
|
+
method: "POST",
|
|
136
|
+
url: "https://api.example.com/api/v1/Books",
|
|
137
|
+
data: {
|
|
138
|
+
title: "Test Book",
|
|
139
|
+
author: "Test Author"
|
|
140
|
+
},
|
|
141
|
+
expect: { status: 201 },
|
|
142
|
+
extract: { "bookId": "id" } // Save book ID for next request
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
// Step 2: Use extracted bookId in next request
|
|
146
|
+
await tools.api_request({
|
|
147
|
+
sessionId: sessionId,
|
|
148
|
+
method: "GET",
|
|
149
|
+
url: "https://api.example.com/api/v1/Books/{{bookId}}", // Uses extracted ID
|
|
150
|
+
expect: { status: 200 }
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
// Step 3: Update the book
|
|
154
|
+
await tools.api_request({
|
|
155
|
+
sessionId: sessionId,
|
|
156
|
+
method: "PUT",
|
|
157
|
+
url: "https://api.example.com/api/v1/Books/{{bookId}}",
|
|
158
|
+
data: {
|
|
159
|
+
title: "Updated Test Book",
|
|
160
|
+
author: "Test Author"
|
|
161
|
+
},
|
|
162
|
+
expect: { status: 200 }
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
// Step 4: Delete the book
|
|
166
|
+
await tools.api_request({
|
|
167
|
+
sessionId: sessionId,
|
|
168
|
+
method: "DELETE",
|
|
169
|
+
url: "https://api.example.com/api/v1/Books/{{bookId}}",
|
|
170
|
+
expect: { status: 204 }
|
|
171
|
+
})
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Step 5: Generate HTML Test Report
|
|
175
|
+
|
|
176
|
+
**After all tests execute**, generate comprehensive report:
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
await tools.api_session_report({
|
|
180
|
+
sessionId: sessionId,
|
|
181
|
+
outputPath: `./api-test-reports/${sessionId}-report.html`
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
// Optionally check final status
|
|
185
|
+
await tools.api_session_status({
|
|
186
|
+
sessionId: sessionId
|
|
187
|
+
})
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Execution Modes
|
|
191
|
+
|
|
192
|
+
### Mode 1: Single Section Execution
|
|
193
|
+
```javascript
|
|
194
|
+
// User: "Execute section 1 from the test plan"
|
|
195
|
+
|
|
196
|
+
// 1. Parse test plan
|
|
197
|
+
// 2. Extract section 1
|
|
198
|
+
// 3. Execute all tests in section 1
|
|
199
|
+
// 4. Generate report
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Mode 2: Multiple Sections Execution
|
|
203
|
+
```javascript
|
|
204
|
+
// User: "Run tests for sections 1, 3, and 5"
|
|
205
|
+
|
|
206
|
+
// 1. Parse test plan
|
|
207
|
+
// 2. Extract sections 1, 3, and 5
|
|
208
|
+
// 3. Execute tests sequentially
|
|
209
|
+
// 4. Generate single comprehensive report
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Mode 3: Full Plan Execution
|
|
213
|
+
```javascript
|
|
214
|
+
// User: "Execute all tests from the test plan"
|
|
215
|
+
|
|
216
|
+
// 1. Parse entire test plan
|
|
217
|
+
// 2. Execute all sections in order
|
|
218
|
+
// 3. Handle dependencies between tests
|
|
219
|
+
// 4. Generate comprehensive report with all results
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Mode 4: Filtered Execution
|
|
223
|
+
```javascript
|
|
224
|
+
// User: "Run only GET and POST tests"
|
|
225
|
+
|
|
226
|
+
// 1. Parse test plan
|
|
227
|
+
// 2. Filter tests by HTTP method
|
|
228
|
+
// 3. Execute filtered tests
|
|
229
|
+
// 4. Generate filtered report
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Test Plan Parsing
|
|
233
|
+
|
|
234
|
+
### Expected Test Plan Structure
|
|
235
|
+
|
|
236
|
+
```markdown
|
|
237
|
+
# API Test Plan
|
|
238
|
+
|
|
239
|
+
## Overview
|
|
240
|
+
- Base URL: https://api.example.com
|
|
241
|
+
- Authentication: Bearer Token
|
|
242
|
+
- API Version: v1
|
|
243
|
+
|
|
244
|
+
## 1. GET /api/v1/Books - Retrieve all books
|
|
245
|
+
|
|
246
|
+
### Endpoint
|
|
247
|
+
GET /api/v1/Books
|
|
248
|
+
|
|
249
|
+
### Expected Status
|
|
250
|
+
200 OK
|
|
251
|
+
|
|
252
|
+
### Request Headers
|
|
253
|
+
- Content-Type: application/json
|
|
254
|
+
- Authorization: Bearer {{authToken}}
|
|
255
|
+
|
|
256
|
+
### Sample Request
|
|
257
|
+
No request body required
|
|
258
|
+
|
|
259
|
+
### Expected Response
|
|
260
|
+
```json
|
|
261
|
+
[
|
|
262
|
+
{
|
|
263
|
+
"id": 1,
|
|
264
|
+
"title": "Book Title",
|
|
265
|
+
"author": "Author Name",
|
|
266
|
+
"isbn": "978-3-16-148410-0"
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Validation Criteria
|
|
272
|
+
- Response is an array
|
|
273
|
+
- Each book has id, title, author fields
|
|
274
|
+
- Status code is 200
|
|
275
|
+
|
|
276
|
+
## 2. POST /api/v1/Books - Create new book
|
|
277
|
+
|
|
278
|
+
### Endpoint
|
|
279
|
+
POST /api/v1/Books
|
|
280
|
+
|
|
281
|
+
### Expected Status
|
|
282
|
+
201 Created
|
|
283
|
+
|
|
284
|
+
### Request Headers
|
|
285
|
+
- Content-Type: application/json
|
|
286
|
+
- Authorization: Bearer {{authToken}}
|
|
287
|
+
|
|
288
|
+
### Sample Request
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"title": "New Book Title",
|
|
292
|
+
"author": "Author Name",
|
|
293
|
+
"isbn": "978-3-16-148410-0",
|
|
294
|
+
"publishedDate": "2026-02-15"
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Expected Response
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"id": 42,
|
|
302
|
+
"title": "New Book Title",
|
|
303
|
+
"author": "Author Name",
|
|
304
|
+
"isbn": "978-3-16-148410-0",
|
|
305
|
+
"publishedDate": "2026-02-15",
|
|
306
|
+
"createdAt": "2026-02-15T10:30:00Z"
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Parsing Strategy
|
|
312
|
+
|
|
313
|
+
**1. Extract Base Configuration:**
|
|
314
|
+
- Find "Base URL" or "API Base URL" in overview section
|
|
315
|
+
- Extract authentication method and headers
|
|
316
|
+
- Identify API version
|
|
317
|
+
|
|
318
|
+
**2. Identify Test Sections:**
|
|
319
|
+
- Look for markdown headers (##) that contain HTTP methods
|
|
320
|
+
- Pattern: `## N. METHOD /endpoint - Description`
|
|
321
|
+
- Examples: `## 1. GET /api/v1/Books`, `## 2. POST /api/v1/Users`
|
|
322
|
+
|
|
323
|
+
**3. Parse Section Content:**
|
|
324
|
+
- Extract endpoint URL
|
|
325
|
+
- Parse expected status code
|
|
326
|
+
- Find request headers
|
|
327
|
+
- Extract request body from code blocks
|
|
328
|
+
- Parse expected response from code blocks
|
|
329
|
+
- Identify validation criteria
|
|
330
|
+
|
|
331
|
+
**4. Handle Code Blocks:**
|
|
332
|
+
```javascript
|
|
333
|
+
// JSON code blocks contain sample data
|
|
334
|
+
// Look for: ```json [content] ```
|
|
335
|
+
// Parse as JSON for request/response data
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Error Handling and Validation
|
|
339
|
+
|
|
340
|
+
### Test Failure Handling
|
|
341
|
+
|
|
342
|
+
```javascript
|
|
343
|
+
try {
|
|
344
|
+
await tools.api_request({
|
|
345
|
+
sessionId: sessionId,
|
|
346
|
+
method: "GET",
|
|
347
|
+
url: "https://api.example.com/api/v1/Books",
|
|
348
|
+
expect: { status: 200 }
|
|
349
|
+
})
|
|
350
|
+
console.log(`✅ Test passed: GET /api/v1/Books`);
|
|
351
|
+
} catch (error) {
|
|
352
|
+
console.error(`❌ Test failed: GET /api/v1/Books`);
|
|
353
|
+
console.error(` Error: ${error.message}`);
|
|
354
|
+
// Continue with remaining tests
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Validation Options
|
|
359
|
+
|
|
360
|
+
**Basic Status Validation:**
|
|
361
|
+
```javascript
|
|
362
|
+
expect: { status: 200 }
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**Expected vs Actual Validation:**
|
|
366
|
+
```javascript
|
|
367
|
+
expect: {
|
|
368
|
+
status: 200,
|
|
369
|
+
body: {
|
|
370
|
+
"items": expectedResponseFromTestPlan,
|
|
371
|
+
"count": "{{any}}" // Allow any value
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Flexible Validation:**
|
|
377
|
+
```javascript
|
|
378
|
+
expect: {
|
|
379
|
+
status: [200, 201], // Accept either status
|
|
380
|
+
body: {
|
|
381
|
+
"id": "{{number}}", // Must be a number
|
|
382
|
+
"title": "{{string}}", // Must be a string
|
|
383
|
+
"items": "{{array}}" // Must be an array
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Session Management
|
|
389
|
+
|
|
390
|
+
### Tracking Test Execution
|
|
391
|
+
|
|
392
|
+
```javascript
|
|
393
|
+
// Check test progress
|
|
394
|
+
await tools.api_session_status({
|
|
395
|
+
sessionId: sessionId
|
|
396
|
+
})
|
|
397
|
+
|
|
398
|
+
// Output includes:
|
|
399
|
+
// - Total requests made
|
|
400
|
+
// - Successful requests
|
|
401
|
+
// - Failed requests
|
|
402
|
+
// - Extracted variables
|
|
403
|
+
// - Request history
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Session Naming Conventions
|
|
407
|
+
|
|
408
|
+
**Descriptive Session IDs:**
|
|
409
|
+
```javascript
|
|
410
|
+
// Format: test-execution-<feature>-<timestamp>
|
|
411
|
+
const sessionId = `test-execution-books-api-${Date.now()}`;
|
|
412
|
+
const sessionId = `test-execution-full-plan-${Date.now()}`;
|
|
413
|
+
const sessionId = `test-execution-section-1-${Date.now()}`;
|
|
414
|
+
|
|
415
|
+
// Benefits:
|
|
416
|
+
// - Easy to identify in reports
|
|
417
|
+
// - Helps organize multiple test runs
|
|
418
|
+
// - Clear audit trail
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## Report Generation
|
|
422
|
+
|
|
423
|
+
### HTML Report Features
|
|
424
|
+
|
|
425
|
+
The `api_session_report` tool generates:
|
|
426
|
+
|
|
427
|
+
- **Test Summary**
|
|
428
|
+
- Total tests executed
|
|
429
|
+
- Pass/fail statistics
|
|
430
|
+
- Execution duration
|
|
431
|
+
- Success rate percentage
|
|
432
|
+
|
|
433
|
+
- **Request Details**
|
|
434
|
+
- Each API call made
|
|
435
|
+
- Request method, URL, headers, body
|
|
436
|
+
- Response status, headers, body
|
|
437
|
+
- Timing information (response time)
|
|
438
|
+
|
|
439
|
+
- **Validation Results**
|
|
440
|
+
- Expected vs Actual comparisons
|
|
441
|
+
- Detailed failure messages
|
|
442
|
+
- Status code validation
|
|
443
|
+
- Response body validation
|
|
444
|
+
|
|
445
|
+
- **Visual Elements**
|
|
446
|
+
- Color-coded pass/fail indicators (✅/❌)
|
|
447
|
+
- Expandable request/response sections
|
|
448
|
+
- Timing charts
|
|
449
|
+
- Interactive HTML with filtering
|
|
450
|
+
|
|
451
|
+
### Report Example
|
|
452
|
+
|
|
453
|
+
```javascript
|
|
454
|
+
// Generate comprehensive report
|
|
455
|
+
await tools.api_session_report({
|
|
456
|
+
sessionId: "test-execution-books-api-1739597400000",
|
|
457
|
+
outputPath: "./api-test-reports/books-api-execution-report.html"
|
|
458
|
+
})
|
|
459
|
+
|
|
460
|
+
// Report file created at:
|
|
461
|
+
// ./api-test-reports/books-api-execution-report.html
|
|
462
|
+
|
|
463
|
+
// Open in browser to view:
|
|
464
|
+
// - 15 total requests
|
|
465
|
+
// - 13 passed (86.7%)
|
|
466
|
+
// - 2 failed (13.3%)
|
|
467
|
+
// - Average response time: 145ms
|
|
468
|
+
// - Total execution time: 2.3s
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## Advanced Scenarios
|
|
472
|
+
|
|
473
|
+
### Scenario 1: Testing with Authentication
|
|
474
|
+
|
|
475
|
+
```javascript
|
|
476
|
+
// Step 1: Authenticate first
|
|
477
|
+
await tools.api_request({
|
|
478
|
+
sessionId: sessionId,
|
|
479
|
+
method: "POST",
|
|
480
|
+
url: "https://api.example.com/auth/login",
|
|
481
|
+
data: {
|
|
482
|
+
email: "test@example.com",
|
|
483
|
+
password: "password123"
|
|
484
|
+
},
|
|
485
|
+
expect: { status: 200 },
|
|
486
|
+
extract: { "authToken": "access_token" }
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
// Step 2: Use token in subsequent requests
|
|
490
|
+
await tools.api_request({
|
|
491
|
+
sessionId: sessionId,
|
|
492
|
+
method: "GET",
|
|
493
|
+
url: "https://api.example.com/api/v1/protected-resource",
|
|
494
|
+
headers: {
|
|
495
|
+
"Authorization": "Bearer {{authToken}}" // Uses extracted token
|
|
496
|
+
},
|
|
497
|
+
expect: { status: 200 }
|
|
498
|
+
})
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Scenario 2: Testing CRUD Operations
|
|
502
|
+
|
|
503
|
+
```javascript
|
|
504
|
+
const sessionId = `test-execution-crud-${Date.now()}`;
|
|
505
|
+
|
|
506
|
+
// CREATE
|
|
507
|
+
await tools.api_request({
|
|
508
|
+
sessionId: sessionId,
|
|
509
|
+
method: "POST",
|
|
510
|
+
url: "https://api.example.com/api/v1/Books",
|
|
511
|
+
data: { title: "Test Book", author: "Test Author" },
|
|
512
|
+
expect: { status: 201 },
|
|
513
|
+
extract: { "newBookId": "id" }
|
|
514
|
+
})
|
|
515
|
+
|
|
516
|
+
// READ
|
|
517
|
+
await tools.api_request({
|
|
518
|
+
sessionId: sessionId,
|
|
519
|
+
method: "GET",
|
|
520
|
+
url: "https://api.example.com/api/v1/Books/{{newBookId}}",
|
|
521
|
+
expect: { status: 200 }
|
|
522
|
+
})
|
|
523
|
+
|
|
524
|
+
// UPDATE
|
|
525
|
+
await tools.api_request({
|
|
526
|
+
sessionId: sessionId,
|
|
527
|
+
method: "PUT",
|
|
528
|
+
url: "https://api.example.com/api/v1/Books/{{newBookId}}",
|
|
529
|
+
data: { title: "Updated Book", author: "Test Author" },
|
|
530
|
+
expect: { status: 200 }
|
|
531
|
+
})
|
|
532
|
+
|
|
533
|
+
// DELETE
|
|
534
|
+
await tools.api_request({
|
|
535
|
+
sessionId: sessionId,
|
|
536
|
+
method: "DELETE",
|
|
537
|
+
url: "https://api.example.com/api/v1/Books/{{newBookId}}",
|
|
538
|
+
expect: { status: 204 }
|
|
539
|
+
})
|
|
540
|
+
|
|
541
|
+
// Generate report showing complete CRUD workflow
|
|
542
|
+
await tools.api_session_report({
|
|
543
|
+
sessionId: sessionId,
|
|
544
|
+
outputPath: "./api-test-reports/crud-test-report.html"
|
|
545
|
+
})
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### Scenario 3: Parallel Execution (Multiple Sessions)
|
|
549
|
+
|
|
550
|
+
```javascript
|
|
551
|
+
// Execute different sections in parallel
|
|
552
|
+
const session1 = `test-execution-books-${Date.now()}`;
|
|
553
|
+
const session2 = `test-execution-users-${Date.now()}`;
|
|
554
|
+
const session3 = `test-execution-orders-${Date.now()}`;
|
|
555
|
+
|
|
556
|
+
// Run tests for different sections independently
|
|
557
|
+
// Note: These should be awaited sequentially or use Promise.all if truly parallel
|
|
558
|
+
|
|
559
|
+
// Generate individual reports
|
|
560
|
+
await tools.api_session_report({
|
|
561
|
+
sessionId: session1,
|
|
562
|
+
outputPath: "./api-test-reports/books-report.html"
|
|
563
|
+
})
|
|
564
|
+
|
|
565
|
+
await tools.api_session_report({
|
|
566
|
+
sessionId: session2,
|
|
567
|
+
outputPath: "./api-test-reports/users-report.html"
|
|
568
|
+
})
|
|
569
|
+
|
|
570
|
+
await tools.api_session_report({
|
|
571
|
+
sessionId: session3,
|
|
572
|
+
outputPath: "./api-test-reports/orders-report.html"
|
|
573
|
+
})
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
## Best Practices
|
|
577
|
+
|
|
578
|
+
### DO:
|
|
579
|
+
- Use unique, descriptive session IDs for each test run
|
|
580
|
+
- Parse test plan systematically (base URL, auth, sections)
|
|
581
|
+
- Execute tests in logical order (auth first, dependencies second)
|
|
582
|
+
- Use request chaining for dependent tests (extract/reuse IDs)
|
|
583
|
+
- Generate comprehensive HTML reports after execution
|
|
584
|
+
- Handle test failures gracefully (continue with remaining tests)
|
|
585
|
+
- Provide clear progress updates to user during execution
|
|
586
|
+
- Validate responses using expect parameters
|
|
587
|
+
- Use consistent session naming conventions
|
|
588
|
+
|
|
589
|
+
### DON'T:
|
|
590
|
+
- Don't reuse session IDs across different test runs
|
|
591
|
+
- Don't skip authentication if test plan requires it
|
|
592
|
+
- Don't execute dependent tests out of order
|
|
593
|
+
- Don't forget to generate the final HTML report
|
|
594
|
+
- Don't stop execution on first failure (unless critical)
|
|
595
|
+
- Don't ignore validation criteria from test plan
|
|
596
|
+
- Don't execute tests without parsing test plan structure first
|
|
597
|
+
- Don't forget to extract base URL from test plan
|
|
598
|
+
|
|
599
|
+
## Expected Output
|
|
600
|
+
|
|
601
|
+
After successful test execution, provide user with:
|
|
602
|
+
|
|
603
|
+
1. **Execution Summary:**
|
|
604
|
+
```
|
|
605
|
+
Test Execution Summary:
|
|
606
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
607
|
+
Session ID: test-execution-books-api-1739597400000
|
|
608
|
+
Total Tests: 15
|
|
609
|
+
Passed: 13 (86.7%)
|
|
610
|
+
Failed: 2 (13.3%)
|
|
611
|
+
Execution Time: 2.3s
|
|
612
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
613
|
+
|
|
614
|
+
Test Results:
|
|
615
|
+
✅ GET /api/v1/Books - List all books
|
|
616
|
+
✅ GET /api/v1/Books/{id} - Get book by ID
|
|
617
|
+
✅ POST /api/v1/Books - Create new book
|
|
618
|
+
❌ PUT /api/v1/Books/{id} - Update book (404 Not Found)
|
|
619
|
+
✅ DELETE /api/v1/Books/{id} - Delete book
|
|
620
|
+
...
|
|
621
|
+
|
|
622
|
+
📊 HTML Report Generated:
|
|
623
|
+
./api-test-reports/books-api-execution-report.html
|
|
624
|
+
|
|
625
|
+
Open this file in a browser for detailed analysis!
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
2. **Failed Test Details:**
|
|
629
|
+
```
|
|
630
|
+
Failed Tests:
|
|
631
|
+
|
|
632
|
+
❌ PUT /api/v1/Books/{id}
|
|
633
|
+
Expected: 200 OK
|
|
634
|
+
Actual: 404 Not Found
|
|
635
|
+
Response: {"error": "Book not found"}
|
|
636
|
+
|
|
637
|
+
Possible causes:
|
|
638
|
+
- Book ID may have been deleted
|
|
639
|
+
- Endpoint URL may have changed
|
|
640
|
+
- Authentication may have expired
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
3. **Next Steps:**
|
|
644
|
+
```
|
|
645
|
+
Next Steps:
|
|
646
|
+
1. Open HTML report for detailed analysis
|
|
647
|
+
2. Review failed tests and fix issues
|
|
648
|
+
3. Re-run failed tests or use /test-healing skill
|
|
649
|
+
4. Update test plan if API has changed
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
## Integration with Other Skills
|
|
653
|
+
|
|
654
|
+
### After API Planning → Execute Tests
|
|
655
|
+
```
|
|
656
|
+
1. User: /api-planning create test plan for API
|
|
657
|
+
→ Test plan generated
|
|
658
|
+
|
|
659
|
+
2. User: /test-execution run tests from section 1
|
|
660
|
+
→ Tests executed, report generated
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
### Execute → Heal → Re-execute
|
|
664
|
+
```
|
|
665
|
+
1. User: /test-execution run all tests
|
|
666
|
+
→ Some tests fail
|
|
667
|
+
|
|
668
|
+
2. User: /test-healing fix failed tests
|
|
669
|
+
→ Tests updated with fixes
|
|
670
|
+
|
|
671
|
+
3. User: /test-execution re-run failed tests
|
|
672
|
+
→ All tests pass now
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### Execute → Generate Code → Execute Again
|
|
676
|
+
```
|
|
677
|
+
1. User: /test-execution run quick validation
|
|
678
|
+
→ Quick API validation completed
|
|
679
|
+
|
|
680
|
+
2. User: /test-generation create Playwright tests
|
|
681
|
+
→ Executable test code generated
|
|
682
|
+
|
|
683
|
+
3. User: Run generated Playwright tests
|
|
684
|
+
→ Automated test suite running
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
## Troubleshooting
|
|
688
|
+
|
|
689
|
+
### Issue: Base URL not found in test plan
|
|
690
|
+
- Check test plan overview section
|
|
691
|
+
- Ask user to provide base URL
|
|
692
|
+
- Look for API URL in first few sections
|
|
693
|
+
|
|
694
|
+
### Issue: Cannot parse test sections
|
|
695
|
+
- Verify test plan uses markdown headers (##)
|
|
696
|
+
- Check section titles include HTTP method
|
|
697
|
+
- Ensure sections have required fields (endpoint, status)
|
|
698
|
+
|
|
699
|
+
### Issue: Authentication failures (401/403)
|
|
700
|
+
- Extract auth requirements from test plan
|
|
701
|
+
- Execute auth endpoint first
|
|
702
|
+
- Use extracted tokens in subsequent requests
|
|
703
|
+
|
|
704
|
+
### Issue: Request chaining not working
|
|
705
|
+
- Verify extract parameter is used correctly
|
|
706
|
+
- Check variable naming matches between requests
|
|
707
|
+
- Ensure extracted data exists in response
|
|
708
|
+
|
|
709
|
+
### Issue: Tests fail with timeouts
|
|
710
|
+
- Check API availability
|
|
711
|
+
- Verify network connectivity
|
|
712
|
+
- Consider increasing timeout in api_request
|
|
713
|
+
|
|
714
|
+
### Issue: Report not generated
|
|
715
|
+
- Ensure session ID is correct
|
|
716
|
+
- Verify api_session_report is called after all tests
|
|
717
|
+
- Check output path is valid
|
|
718
|
+
|
|
719
|
+
## Additional Tools Available
|
|
720
|
+
|
|
721
|
+
Use these tools as needed:
|
|
722
|
+
- `api_request` - Execute individual API requests
|
|
723
|
+
- `api_session_status` - Check test execution progress
|
|
724
|
+
- `api_session_report` - Generate HTML test reports
|
|
725
|
+
- `search/readFile` - Read test plan files
|
|
726
|
+
- `search/listDirectory` - Find test plan files
|
|
727
|
+
|
|
728
|
+
````
|
|
@@ -32,10 +32,13 @@ class AgentInstaller {
|
|
|
32
32
|
// Step 1: Install Agent Skills
|
|
33
33
|
await this.installSkills();
|
|
34
34
|
|
|
35
|
-
// Step 2:
|
|
35
|
+
// Step 2: Install Chat Modes
|
|
36
|
+
await this.installChatModes();
|
|
37
|
+
|
|
38
|
+
// Step 3: Setup MCP configuration
|
|
36
39
|
await this.setupMCPConfiguration();
|
|
37
40
|
|
|
38
|
-
// Step
|
|
41
|
+
// Step 4: Show completion message
|
|
39
42
|
this.showCompletionMessage();
|
|
40
43
|
|
|
41
44
|
} catch (error) {
|
|
@@ -180,6 +183,62 @@ class AgentInstaller {
|
|
|
180
183
|
console.log('');
|
|
181
184
|
}
|
|
182
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Install Chat Modes to .github/agents/
|
|
188
|
+
*/
|
|
189
|
+
async installChatModes() {
|
|
190
|
+
console.log('💬 Installing Chat Modes...');
|
|
191
|
+
|
|
192
|
+
const sourceChatModesDir = path.join(this.sourceDir, 'src', 'chatmodes');
|
|
193
|
+
const targetAgentsDir = path.join(this.targetDir, '.github', 'agents');
|
|
194
|
+
|
|
195
|
+
// Create .github/agents directory
|
|
196
|
+
try {
|
|
197
|
+
await mkdir(targetAgentsDir, { recursive: true });
|
|
198
|
+
} catch (error) {
|
|
199
|
+
if (error.code !== 'EEXIST') {
|
|
200
|
+
throw new Error(`Failed to create .github/agents directory: ${error.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Get list of chatmode files
|
|
205
|
+
let chatModeFiles;
|
|
206
|
+
try {
|
|
207
|
+
const allItems = await readdir(sourceChatModesDir);
|
|
208
|
+
// Filter for .chatmode.md files only
|
|
209
|
+
chatModeFiles = allItems.filter(item => item.endsWith('.chatmode.md'));
|
|
210
|
+
} catch (error) {
|
|
211
|
+
if (error.code === 'ENOENT') {
|
|
212
|
+
console.log(' ⚠️ No chatmodes directory found, skipping...');
|
|
213
|
+
console.log('');
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
throw new Error(`Failed to read source chatmodes directory: ${error.message}`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (chatModeFiles.length === 0) {
|
|
220
|
+
console.log(' ⚠️ No chatmode files found to install');
|
|
221
|
+
console.log('');
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Copy each chatmode file
|
|
226
|
+
for (const chatModeFile of chatModeFiles) {
|
|
227
|
+
const sourcePath = path.join(sourceChatModesDir, chatModeFile);
|
|
228
|
+
const targetPath = path.join(targetAgentsDir, chatModeFile);
|
|
229
|
+
|
|
230
|
+
try {
|
|
231
|
+
await copyFile(sourcePath, targetPath);
|
|
232
|
+
console.log(` ✅ ${chatModeFile}`);
|
|
233
|
+
} catch (error) {
|
|
234
|
+
console.error(` ❌ Failed to copy ${chatModeFile}: ${error.message}`);
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
console.log('');
|
|
240
|
+
}
|
|
241
|
+
|
|
183
242
|
/**
|
|
184
243
|
* Setup MCP configuration in .vscode/mcp.json
|
|
185
244
|
*/
|
|
@@ -316,10 +375,16 @@ class AgentInstaller {
|
|
|
316
375
|
console.log('📁 Agent Skills installed to:');
|
|
317
376
|
console.log(' → .agents/skills/api-planning/');
|
|
318
377
|
console.log(' → .agents/skills/test-generation/');
|
|
378
|
+
console.log(' → .agents/skills/test-execution/');
|
|
319
379
|
console.log(' → .agents/skills/test-healing/');
|
|
320
380
|
console.log(' → .github/skills/ (symlink for GitHub Copilot)');
|
|
321
381
|
console.log(' → .claude/skills/ (symlink for Claude Code)\n');
|
|
322
382
|
|
|
383
|
+
console.log('💬 Chat Modes installed to:');
|
|
384
|
+
console.log(' → .github/agents/🌐 api-planner.chatmode.md');
|
|
385
|
+
console.log(' → .github/agents/🌐 api-generator.chatmode.md');
|
|
386
|
+
console.log(' → .github/agents/🌐 api-healer.chatmode.md\n');
|
|
387
|
+
|
|
323
388
|
console.log('⚙️ MCP configuration updated:');
|
|
324
389
|
console.log(' → .vscode/mcp.json (democratize-quality server added/updated)\n');
|
|
325
390
|
|
|
@@ -328,6 +393,7 @@ class AgentInstaller {
|
|
|
328
393
|
console.log(' 2. Use skills in your AI coding assistant:');
|
|
329
394
|
console.log(' • /api-planning - Create comprehensive API test plans');
|
|
330
395
|
console.log(' • /test-generation - Generate executable API tests');
|
|
396
|
+
console.log(' • /test-execution - Execute API tests from test plans');
|
|
331
397
|
console.log(' • /test-healing - Debug and fix failing API tests');
|
|
332
398
|
console.log(' 3. Skills work automatically when you mention relevant tasks!');
|
|
333
399
|
console.log(' 4. Example: "Help me create an API test plan for my REST API"\n');
|
|
@@ -336,7 +402,6 @@ class AgentInstaller {
|
|
|
336
402
|
console.log(' • GitHub Copilot (VS Code, CLI)');
|
|
337
403
|
console.log(' • Codex CLI (OpenAI)');
|
|
338
404
|
console.log(' • Claude Code');
|
|
339
|
-
console.log(' • Cursor, Roo Code, and 10+ other tools\n');
|
|
340
405
|
|
|
341
406
|
console.log('📚 For more information, visit: https://github.com/uppadhyayraj/democratize-quality-mcp-server');
|
|
342
407
|
}
|