test-genie-mcp 2.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 (102) hide show
  1. package/README.md +219 -0
  2. package/dist/analyzers/astAnalyzer.d.ts +108 -0
  3. package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
  4. package/dist/analyzers/astAnalyzer.js +800 -0
  5. package/dist/analyzers/astAnalyzer.js.map +1 -0
  6. package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
  7. package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
  8. package/dist/analyzers/performanceAnalyzer.js +647 -0
  9. package/dist/analyzers/performanceAnalyzer.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +683 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/platforms/android/index.d.ts +90 -0
  15. package/dist/platforms/android/index.d.ts.map +1 -0
  16. package/dist/platforms/android/index.js +519 -0
  17. package/dist/platforms/android/index.js.map +1 -0
  18. package/dist/platforms/flutter/index.d.ts +105 -0
  19. package/dist/platforms/flutter/index.d.ts.map +1 -0
  20. package/dist/platforms/flutter/index.js +533 -0
  21. package/dist/platforms/flutter/index.js.map +1 -0
  22. package/dist/platforms/ios/index.d.ts +79 -0
  23. package/dist/platforms/ios/index.d.ts.map +1 -0
  24. package/dist/platforms/ios/index.js +393 -0
  25. package/dist/platforms/ios/index.js.map +1 -0
  26. package/dist/platforms/react-native/index.d.ts +160 -0
  27. package/dist/platforms/react-native/index.d.ts.map +1 -0
  28. package/dist/platforms/react-native/index.js +602 -0
  29. package/dist/platforms/react-native/index.js.map +1 -0
  30. package/dist/platforms/web/index.d.ts +177 -0
  31. package/dist/platforms/web/index.d.ts.map +1 -0
  32. package/dist/platforms/web/index.js +637 -0
  33. package/dist/platforms/web/index.js.map +1 -0
  34. package/dist/storage/index.d.ts +35 -0
  35. package/dist/storage/index.d.ts.map +1 -0
  36. package/dist/storage/index.js +351 -0
  37. package/dist/storage/index.js.map +1 -0
  38. package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
  39. package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
  40. package/dist/tools/analysis/analyzeAppStructure.js +289 -0
  41. package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
  42. package/dist/tools/analysis/createTestPlan.d.ts +21 -0
  43. package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
  44. package/dist/tools/analysis/createTestPlan.js +214 -0
  45. package/dist/tools/analysis/createTestPlan.js.map +1 -0
  46. package/dist/tools/analysis/generateScenarios.d.ts +21 -0
  47. package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
  48. package/dist/tools/analysis/generateScenarios.js +567 -0
  49. package/dist/tools/analysis/generateScenarios.js.map +1 -0
  50. package/dist/tools/automation/cicdIntegration.d.ts +41 -0
  51. package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
  52. package/dist/tools/automation/cicdIntegration.js +825 -0
  53. package/dist/tools/automation/cicdIntegration.js.map +1 -0
  54. package/dist/tools/automation/generateReport.d.ts +16 -0
  55. package/dist/tools/automation/generateReport.d.ts.map +1 -0
  56. package/dist/tools/automation/generateReport.js +406 -0
  57. package/dist/tools/automation/generateReport.js.map +1 -0
  58. package/dist/tools/automation/runFullAutomation.d.ts +25 -0
  59. package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
  60. package/dist/tools/automation/runFullAutomation.js +296 -0
  61. package/dist/tools/automation/runFullAutomation.js.map +1 -0
  62. package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
  63. package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
  64. package/dist/tools/detection/detectLogicErrors.js +470 -0
  65. package/dist/tools/detection/detectLogicErrors.js.map +1 -0
  66. package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
  67. package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
  68. package/dist/tools/detection/detectMemoryLeaks.js +453 -0
  69. package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
  70. package/dist/tools/execution/runScenarioTest.d.ts +34 -0
  71. package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
  72. package/dist/tools/execution/runScenarioTest.js +334 -0
  73. package/dist/tools/execution/runScenarioTest.js.map +1 -0
  74. package/dist/tools/execution/runSimulation.d.ts +17 -0
  75. package/dist/tools/execution/runSimulation.d.ts.map +1 -0
  76. package/dist/tools/execution/runSimulation.js +250 -0
  77. package/dist/tools/execution/runSimulation.js.map +1 -0
  78. package/dist/tools/execution/runStressTest.d.ts +52 -0
  79. package/dist/tools/execution/runStressTest.d.ts.map +1 -0
  80. package/dist/tools/execution/runStressTest.js +176 -0
  81. package/dist/tools/execution/runStressTest.js.map +1 -0
  82. package/dist/tools/fixing/applyFix.d.ts +44 -0
  83. package/dist/tools/fixing/applyFix.d.ts.map +1 -0
  84. package/dist/tools/fixing/applyFix.js +399 -0
  85. package/dist/tools/fixing/applyFix.js.map +1 -0
  86. package/dist/tools/fixing/confirmFix.d.ts +31 -0
  87. package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
  88. package/dist/tools/fixing/confirmFix.js +136 -0
  89. package/dist/tools/fixing/confirmFix.js.map +1 -0
  90. package/dist/tools/fixing/suggestFixes.d.ts +23 -0
  91. package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
  92. package/dist/tools/fixing/suggestFixes.js +349 -0
  93. package/dist/tools/fixing/suggestFixes.js.map +1 -0
  94. package/dist/types.d.ts +322 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/codeParser.d.ts +12 -0
  99. package/dist/utils/codeParser.d.ts.map +1 -0
  100. package/dist/utils/codeParser.js +487 -0
  101. package/dist/utils/codeParser.js.map +1 -0
  102. package/package.json +68 -0
package/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # Test Genie MCP
2
+
3
+ AI-powered App Test Automation MCP Server
4
+
5
+ 앱 테스트 자동화를 위한 MCP 서버입니다. 시나리오 생성부터 테스트 실행, 문제 검출, 수정 제안 및 적용까지 전체 테스트 파이프라인을 자동화합니다.
6
+
7
+ ## Features
8
+
9
+ ### Phase 1: Analysis & Scenario Generation
10
+ - **analyze_app_structure**: 앱 코드베이스 분석 (화면, 컴포넌트, API, 상태관리)
11
+ - **generate_scenarios**: AI 기반 테스트 시나리오 자동 생성
12
+ - **create_test_plan**: 테스트 계획 수립 및 스케줄링
13
+
14
+ ### Phase 2: Test Execution
15
+ - **run_scenario_test**: 개별 시나리오 테스트 실행
16
+ - **run_simulation**: 사용자 행동 시뮬레이션 (랜덤/패턴 기반)
17
+ - **run_stress_test**: 스트레스/부하 테스트
18
+
19
+ ### Phase 3: Issue Detection
20
+ - **detect_memory_leaks**: 메모리 릭 감지 (힙 분석, 순환 참조)
21
+ - **detect_logic_errors**: 논리적 오류 검출 (레이스 컨디션, 상태 불일치)
22
+
23
+ ### Phase 4: Fix Suggestions & Application
24
+ - **suggest_fixes**: AI 기반 수정 방안 제안
25
+ - **confirm_fix**: 수정 사항 사용자 확인
26
+ - **apply_fix**: 확인된 수정 사항 적용
27
+ - **rollback_fix**: 적용된 수정 롤백
28
+
29
+ ### Phase 5: Full Automation
30
+ - **run_full_automation**: 전체 파이프라인 자동 실행
31
+ - **generate_report**: 상세 보고서 생성 (Markdown, HTML, JSON)
32
+
33
+ ### Enhanced Analysis (v2.0)
34
+ - **analyze_performance**: 성능 심층 분석 (렌더링, 연산, 네트워크, 번들)
35
+ - **analyze_code_deep**: AST 기반 코드 분석 (복잡도, 훅, 의존성)
36
+ - **generate_cicd_config**: CI/CD 설정 자동 생성 (GitHub Actions, Jenkins, GitLab CI)
37
+
38
+ ## Supported Platforms
39
+
40
+ | Platform | Language | Test Framework |
41
+ |----------|----------|----------------|
42
+ | iOS | Swift, Objective-C | XCTest, XCUITest |
43
+ | Android | Kotlin, Java | Espresso, UI Automator |
44
+ | Flutter | Dart | flutter_test |
45
+ | React Native | TypeScript, JavaScript | Detox, Jest |
46
+ | Web | TypeScript, JavaScript | Playwright, Puppeteer |
47
+
48
+ ## Installation
49
+
50
+ ```bash
51
+ npm install -g test-genie-mcp
52
+ ```
53
+
54
+ Or install from source:
55
+
56
+ ```bash
57
+ git clone https://github.com/MUSE-CODE-SPACE/test-genie-mcp.git
58
+ cd test-genie-mcp
59
+ npm install
60
+ npm run build
61
+ ```
62
+
63
+ ## Usage with Claude Desktop
64
+
65
+ Add to your Claude Desktop config (`~/.config/claude/claude_desktop_config.json`):
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "test-genie": {
71
+ "command": "npx",
72
+ "args": ["test-genie-mcp"]
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ ## Example Usage
79
+
80
+ ### Full Automation
81
+ ```
82
+ User: "자동화 테스트해줘"
83
+
84
+ Claude will:
85
+ 1. Analyze your app structure
86
+ 2. Generate test scenarios
87
+ 3. Execute tests
88
+ 4. Detect issues (memory leaks, logic errors)
89
+ 5. Suggest fixes
90
+ 6. Wait for your confirmation
91
+ 7. Apply approved fixes
92
+ 8. Generate report
93
+ ```
94
+
95
+ ### Step-by-Step
96
+
97
+ ```
98
+ # Analyze app
99
+ analyze_app_structure(projectPath: "/path/to/app")
100
+
101
+ # Generate scenarios
102
+ generate_scenarios(projectPath: "/path/to/app", testTypes: ["e2e", "unit"])
103
+
104
+ # Detect memory leaks
105
+ detect_memory_leaks(projectPath: "/path/to/app")
106
+
107
+ # Get fix suggestions
108
+ suggest_fixes(projectPath: "/path/to/app")
109
+
110
+ # Confirm and apply fix
111
+ confirm_fix(fixId: "xxx", action: "approve")
112
+ apply_fix(fixId: "xxx")
113
+ ```
114
+
115
+ ## Fix Confirmation Workflow
116
+
117
+ When issues are detected, Test Genie will:
118
+
119
+ 1. **Suggest Fixes**: Generate AI-powered fix suggestions with confidence scores
120
+ 2. **Show Diff**: Display exactly what will change
121
+ 3. **Await Confirmation**: Wait for user approval
122
+ 4. **Apply Fix**: Only apply after explicit approval
123
+ 5. **Backup**: Automatically create backups before applying
124
+
125
+ Example confirmation prompt:
126
+
127
+ ```
128
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
129
+ 🔧 Fix Suggestion #abc123
130
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
131
+
132
+ 📁 File: src/screens/HomeScreen.tsx:45
133
+ 📝 Title: Fix: useEffect missing cleanup
134
+ 🎯 Confidence: 90%
135
+
136
+ 📄 Current Code:
137
+ ┌──────────────────────────────────────────
138
+ │ useEffect(() => {
139
+ │ const subscription = api.subscribe();
140
+ │ }, []);
141
+ └──────────────────────────────────────────
142
+
143
+ ✨ Suggested Fix:
144
+ ┌──────────────────────────────────────────
145
+ │ useEffect(() => {
146
+ │ const subscription = api.subscribe();
147
+ │ return () => subscription.unsubscribe();
148
+ │ }, []);
149
+ └──────────────────────────────────────────
150
+
151
+ Actions: [✅ Approve] [❌ Reject] [✏️ Modify]
152
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
153
+ ```
154
+
155
+ ## Tools Reference
156
+
157
+ | Tool | Description |
158
+ |------|-------------|
159
+ | `analyze_app_structure` | Analyze codebase structure |
160
+ | `generate_scenarios` | Generate test scenarios |
161
+ | `create_test_plan` | Create test plan |
162
+ | `run_scenario_test` | Run single scenario |
163
+ | `run_simulation` | Run user simulation |
164
+ | `run_stress_test` | Run stress test |
165
+ | `detect_memory_leaks` | Detect memory leaks |
166
+ | `detect_logic_errors` | Detect logic errors |
167
+ | `suggest_fixes` | Generate fix suggestions |
168
+ | `confirm_fix` | Confirm/reject fix |
169
+ | `apply_fix` | Apply confirmed fix |
170
+ | `rollback_fix` | Rollback applied fix |
171
+ | `run_full_automation` | Run full automation pipeline |
172
+ | `generate_report` | Generate test report |
173
+ | `get_pending_fixes` | Get pending confirmations |
174
+ | `get_test_history` | Get test history |
175
+ | `analyze_performance` | Deep performance analysis |
176
+ | `analyze_code_deep` | AST-based code analysis |
177
+ | `generate_cicd_config` | Generate CI/CD configuration |
178
+
179
+ ## Platform-Specific Features
180
+
181
+ ### iOS
182
+ - XCTest, XCUITest integration
183
+ - Instruments profiling (Time Profiler, Allocations, Leaks)
184
+ - Simulator management
185
+ - Screenshot & video recording
186
+
187
+ ### Android
188
+ - Gradle test integration
189
+ - Espresso, UI Automator support
190
+ - Android Profiler (CPU, Memory, Network)
191
+ - LeakCanary integration
192
+ - ADB device management
193
+
194
+ ### Flutter
195
+ - flutter_test, integration_test
196
+ - Golden tests (snapshot testing)
197
+ - Performance profiling
198
+ - Memory analysis
199
+
200
+ ### React Native
201
+ - Jest, React Native Testing Library
202
+ - Detox E2E testing
203
+ - Performance monitoring
204
+ - Memory leak detection
205
+
206
+ ### Web
207
+ - Playwright, Cypress support
208
+ - Lighthouse performance audits
209
+ - Accessibility testing (axe-core)
210
+ - Visual regression testing
211
+ - Load testing (K6 integration)
212
+
213
+ ## License
214
+
215
+ MIT
216
+
217
+ ## Author
218
+
219
+ Yoonkyoung Gong
@@ -0,0 +1,108 @@
1
+ import { Platform, ComponentInfo, ApiInfo } from '../types.js';
2
+ export interface FunctionInfo {
3
+ name: string;
4
+ path: string;
5
+ line: number;
6
+ parameters: {
7
+ name: string;
8
+ type: string;
9
+ optional: boolean;
10
+ }[];
11
+ returnType: string;
12
+ async: boolean;
13
+ complexity: number;
14
+ linesOfCode: number;
15
+ dependencies: string[];
16
+ calls: string[];
17
+ isExported: boolean;
18
+ }
19
+ export interface ClassInfo {
20
+ name: string;
21
+ path: string;
22
+ line: number;
23
+ extends?: string;
24
+ implements: string[];
25
+ properties: {
26
+ name: string;
27
+ type: string;
28
+ visibility: string;
29
+ static: boolean;
30
+ }[];
31
+ methods: FunctionInfo[];
32
+ isExported: boolean;
33
+ }
34
+ export interface ImportInfo {
35
+ module: string;
36
+ imports: {
37
+ name: string;
38
+ alias?: string;
39
+ }[];
40
+ isDefault: boolean;
41
+ isNamespace: boolean;
42
+ line: number;
43
+ }
44
+ export interface CodeAnalysisResult {
45
+ functions: FunctionInfo[];
46
+ classes: ClassInfo[];
47
+ imports: ImportInfo[];
48
+ exports: string[];
49
+ hooks: HookInfo[];
50
+ components: ComponentInfo[];
51
+ apis: ApiInfo[];
52
+ complexity: {
53
+ average: number;
54
+ max: number;
55
+ total: number;
56
+ };
57
+ issues: CodeIssue[];
58
+ metrics: {
59
+ totalLines: number;
60
+ codeLines: number;
61
+ commentLines: number;
62
+ blankLines: number;
63
+ functionCount: number;
64
+ classCount: number;
65
+ };
66
+ }
67
+ export interface HookInfo {
68
+ type: 'useState' | 'useEffect' | 'useCallback' | 'useMemo' | 'useRef' | 'useContext' | 'custom';
69
+ name: string;
70
+ line: number;
71
+ dependencies?: string[];
72
+ hasCleanup?: boolean;
73
+ initialValue?: string;
74
+ }
75
+ export interface CodeIssue {
76
+ type: 'error' | 'warning' | 'info';
77
+ category: 'memory' | 'performance' | 'security' | 'style' | 'logic';
78
+ message: string;
79
+ line: number;
80
+ column?: number;
81
+ file: string;
82
+ suggestion?: string;
83
+ }
84
+ export declare function analyzeTypeScript(filePath: string, content: string): CodeAnalysisResult;
85
+ export declare function analyzeProject(projectPath: string, platform: Platform): Promise<{
86
+ files: {
87
+ path: string;
88
+ analysis: CodeAnalysisResult;
89
+ }[];
90
+ summary: {
91
+ totalFiles: number;
92
+ totalFunctions: number;
93
+ totalClasses: number;
94
+ totalComponents: number;
95
+ avgComplexity: number;
96
+ issueCount: {
97
+ error: number;
98
+ warning: number;
99
+ info: number;
100
+ };
101
+ };
102
+ }>;
103
+ declare const _default: {
104
+ analyzeTypeScript: typeof analyzeTypeScript;
105
+ analyzeProject: typeof analyzeProject;
106
+ };
107
+ export default _default;
108
+ //# sourceMappingURL=astAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/astAnalyzer.ts"],"names":[],"mappings":"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"}