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
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ // ============================================
3
+ // Run Scenario Test Tool
4
+ // ============================================
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runScenarioTest = runScenarioTest;
40
+ exports.runScenarios = runScenarios;
41
+ const uuid_1 = require("uuid");
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const child_process_1 = require("child_process");
45
+ const util_1 = require("util");
46
+ const index_js_1 = require("../../storage/index.js");
47
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
48
+ async function runScenarioTest(params) {
49
+ const { scenarioId, projectPath, platform, device, options = {}, } = params;
50
+ const { timeout = 60000, retries = 1, screenshots = true, verbose = false } = options;
51
+ // Get scenario
52
+ let scenario = params.scenario;
53
+ if (!scenario && scenarioId) {
54
+ const stored = (0, index_js_1.getScenarioById)(scenarioId);
55
+ if (!stored) {
56
+ throw new Error(`Scenario not found: ${scenarioId}`);
57
+ }
58
+ scenario = stored.scenario;
59
+ }
60
+ if (!scenario) {
61
+ throw new Error('Scenario is required');
62
+ }
63
+ const startTime = Date.now();
64
+ const stepResults = [];
65
+ const logs = [];
66
+ const screenshotPaths = [];
67
+ let error;
68
+ let overallStatus = 'passed';
69
+ // Execute each step
70
+ for (let attempt = 1; attempt <= retries; attempt++) {
71
+ if (attempt > 1) {
72
+ logs.push(`Retry attempt ${attempt}/${retries}`);
73
+ }
74
+ for (const step of scenario.steps) {
75
+ const stepStartTime = Date.now();
76
+ let stepStatus = 'passed';
77
+ let stepError;
78
+ let actualOutput;
79
+ try {
80
+ if (verbose) {
81
+ logs.push(`Step ${step.order}: ${step.action} - ${step.target || ''}`);
82
+ }
83
+ // Execute step based on action type
84
+ const result = await executeStep(step, platform, projectPath, device, timeout);
85
+ actualOutput = result.output;
86
+ // Verify expected output
87
+ if (step.expectedOutput && result.output) {
88
+ if (!result.output.toLowerCase().includes(step.expectedOutput.toLowerCase())) {
89
+ stepStatus = 'failed';
90
+ stepError = `Expected: ${step.expectedOutput}, Got: ${result.output}`;
91
+ }
92
+ }
93
+ // Take screenshot if enabled
94
+ if (screenshots && platform !== 'web') {
95
+ const screenshotPath = await takeScreenshot(platform, projectPath, step.order);
96
+ if (screenshotPath) {
97
+ screenshotPaths.push(screenshotPath);
98
+ }
99
+ }
100
+ }
101
+ catch (err) {
102
+ stepStatus = 'failed';
103
+ stepError = err instanceof Error ? err.message : String(err);
104
+ if (!error) {
105
+ error = {
106
+ type: 'StepExecutionError',
107
+ message: stepError,
108
+ stackTrace: err instanceof Error ? err.stack : undefined,
109
+ };
110
+ }
111
+ }
112
+ const stepDuration = Date.now() - stepStartTime;
113
+ stepResults.push({
114
+ order: step.order,
115
+ action: step.action,
116
+ status: stepStatus,
117
+ duration: stepDuration,
118
+ actualOutput,
119
+ error: stepError,
120
+ });
121
+ if (stepStatus === 'failed') {
122
+ overallStatus = 'failed';
123
+ break; // Stop on first failure
124
+ }
125
+ }
126
+ if (overallStatus === 'passed') {
127
+ break; // Success, no need to retry
128
+ }
129
+ }
130
+ const duration = Date.now() - startTime;
131
+ const result = {
132
+ id: (0, uuid_1.v4)(),
133
+ scenarioId: scenario.id,
134
+ scenarioName: scenario.name,
135
+ status: overallStatus,
136
+ duration,
137
+ steps: stepResults,
138
+ logs,
139
+ screenshots: screenshotPaths.length > 0 ? screenshotPaths : undefined,
140
+ error,
141
+ executedAt: new Date().toISOString(),
142
+ };
143
+ // Save result
144
+ (0, index_js_1.saveTestResult)(result, projectPath);
145
+ return {
146
+ result,
147
+ success: overallStatus === 'passed',
148
+ duration,
149
+ summary: generateTestSummary(result, scenario),
150
+ };
151
+ }
152
+ async function executeStep(step, platform, projectPath, device, defaultTimeout) {
153
+ const timeout = step.timeout || defaultTimeout || 30000;
154
+ // Simulate step execution based on action type
155
+ // In a real implementation, this would integrate with actual test frameworks
156
+ switch (step.action) {
157
+ case 'navigate':
158
+ return await simulateNavigation(step.target || '', platform, projectPath, device);
159
+ case 'tap':
160
+ case 'click':
161
+ return await simulateTap(step.target || '', platform, projectPath, device);
162
+ case 'type':
163
+ case 'input':
164
+ return await simulateInput(step.target || '', step.input || '', platform, projectPath, device);
165
+ case 'verify':
166
+ return await simulateVerify(step.target || '', step.expectedOutput || '', platform, projectPath, device);
167
+ case 'wait':
168
+ await sleep(parseInt(step.input || '1000'));
169
+ return { output: 'Wait completed', success: true };
170
+ case 'scroll':
171
+ return await simulateScroll(step.target || '', step.input || 'down', platform, projectPath, device);
172
+ case 'mock':
173
+ return { output: `Mocked ${step.target}`, success: true };
174
+ case 'snapshot':
175
+ case 'measure':
176
+ case 'compare':
177
+ return { output: `${step.action} completed for ${step.target}`, success: true };
178
+ case 'render':
179
+ case 'mount':
180
+ case 'unmount':
181
+ return { output: `${step.action} ${step.target} completed`, success: true };
182
+ default:
183
+ return { output: `Unknown action: ${step.action}`, success: false };
184
+ }
185
+ }
186
+ async function simulateNavigation(target, platform, projectPath, device) {
187
+ // Simulate navigation delay
188
+ await sleep(500 + Math.random() * 500);
189
+ // In real implementation, this would use platform-specific tools:
190
+ // - iOS: xcrun simctl / XCUITest
191
+ // - Android: adb / Espresso
192
+ // - Flutter: flutter drive
193
+ // - React Native: Detox
194
+ return {
195
+ output: `Navigated to ${target}`,
196
+ success: true,
197
+ };
198
+ }
199
+ async function simulateTap(target, platform, projectPath, device) {
200
+ await sleep(200 + Math.random() * 300);
201
+ return {
202
+ output: `Tapped ${target}`,
203
+ success: true,
204
+ };
205
+ }
206
+ async function simulateInput(target, text, platform, projectPath, device) {
207
+ await sleep(100 * text.length);
208
+ return {
209
+ output: `Entered "${text}" into ${target}`,
210
+ success: true,
211
+ };
212
+ }
213
+ async function simulateVerify(target, expected, platform, projectPath, device) {
214
+ await sleep(300 + Math.random() * 200);
215
+ // Simulate verification (in real implementation, would check actual UI state)
216
+ const success = Math.random() > 0.1; // 90% success rate for simulation
217
+ return {
218
+ output: success ? expected : 'Element not found or mismatch',
219
+ success,
220
+ };
221
+ }
222
+ async function simulateScroll(target, direction, platform, projectPath, device) {
223
+ await sleep(300 + Math.random() * 200);
224
+ return {
225
+ output: `Scrolled ${direction} on ${target}`,
226
+ success: true,
227
+ };
228
+ }
229
+ async function takeScreenshot(platform, projectPath, stepNumber) {
230
+ const screenshotsDir = path.join(projectPath, '.test-genie', 'screenshots');
231
+ try {
232
+ if (!fs.existsSync(screenshotsDir)) {
233
+ fs.mkdirSync(screenshotsDir, { recursive: true });
234
+ }
235
+ const filename = `step_${stepNumber}_${Date.now()}.png`;
236
+ const filepath = path.join(screenshotsDir, filename);
237
+ // In real implementation, would capture actual screenshot
238
+ // For now, just return the path that would be used
239
+ return filepath;
240
+ }
241
+ catch {
242
+ return null;
243
+ }
244
+ }
245
+ function sleep(ms) {
246
+ return new Promise(resolve => setTimeout(resolve, ms));
247
+ }
248
+ function generateTestSummary(result, scenario) {
249
+ const lines = [];
250
+ const statusEmoji = result.status === 'passed' ? '✅' : result.status === 'failed' ? '❌' : '⏭️';
251
+ lines.push(`${statusEmoji} ${scenario.name}`);
252
+ lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
253
+ lines.push(`Status: ${result.status.toUpperCase()}`);
254
+ lines.push(`Duration: ${result.duration}ms`);
255
+ lines.push(`Steps: ${result.steps.filter(s => s.status === 'passed').length}/${result.steps.length} passed`);
256
+ if (result.error) {
257
+ lines.push(`\nError: ${result.error.message}`);
258
+ }
259
+ const failedSteps = result.steps.filter(s => s.status === 'failed');
260
+ if (failedSteps.length > 0) {
261
+ lines.push(`\nFailed Steps:`);
262
+ for (const step of failedSteps) {
263
+ lines.push(` - Step ${step.order}: ${step.action} - ${step.error}`);
264
+ }
265
+ }
266
+ return lines.join('\n');
267
+ }
268
+ // Run multiple scenarios
269
+ async function runScenarios(scenarios, projectPath, platform, options) {
270
+ const { parallel = false, maxParallel = 3, stopOnFailure = false } = options || {};
271
+ const results = [];
272
+ const startTime = Date.now();
273
+ if (parallel) {
274
+ // Run scenarios in parallel batches
275
+ for (let i = 0; i < scenarios.length; i += maxParallel) {
276
+ const batch = scenarios.slice(i, i + maxParallel);
277
+ const batchResults = await Promise.all(batch.map(scenario => runScenarioTest({ scenario, projectPath, platform })
278
+ .then(r => r.result)
279
+ .catch(err => ({
280
+ id: (0, uuid_1.v4)(),
281
+ scenarioId: scenario.id,
282
+ scenarioName: scenario.name,
283
+ status: 'error',
284
+ duration: 0,
285
+ steps: [],
286
+ logs: [],
287
+ error: { type: 'ExecutionError', message: err.message },
288
+ executedAt: new Date().toISOString(),
289
+ }))));
290
+ results.push(...batchResults);
291
+ if (stopOnFailure && batchResults.some(r => r.status === 'failed' || r.status === 'error')) {
292
+ break;
293
+ }
294
+ }
295
+ }
296
+ else {
297
+ // Run scenarios sequentially
298
+ for (const scenario of scenarios) {
299
+ try {
300
+ const { result } = await runScenarioTest({ scenario, projectPath, platform });
301
+ results.push(result);
302
+ if (stopOnFailure && (result.status === 'failed' || result.status === 'error')) {
303
+ break;
304
+ }
305
+ }
306
+ catch (err) {
307
+ results.push({
308
+ id: (0, uuid_1.v4)(),
309
+ scenarioId: scenario.id,
310
+ scenarioName: scenario.name,
311
+ status: 'error',
312
+ duration: 0,
313
+ steps: [],
314
+ logs: [],
315
+ error: { type: 'ExecutionError', message: err instanceof Error ? err.message : String(err) },
316
+ executedAt: new Date().toISOString(),
317
+ });
318
+ if (stopOnFailure) {
319
+ break;
320
+ }
321
+ }
322
+ }
323
+ }
324
+ const duration = Date.now() - startTime;
325
+ return {
326
+ results,
327
+ passed: results.filter(r => r.status === 'passed').length,
328
+ failed: results.filter(r => r.status === 'failed').length,
329
+ skipped: results.filter(r => r.status === 'skipped').length,
330
+ duration,
331
+ };
332
+ }
333
+ exports.default = runScenarioTest;
334
+ //# sourceMappingURL=runScenarioTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScenarioTest.js","sourceRoot":"","sources":["../../../src/tools/execution/runScenarioTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { SimulationResult, AppStructure } from '../../types.js';
2
+ interface RunSimulationParams {
3
+ appStructure: AppStructure;
4
+ duration: number;
5
+ userPatterns?: ('random' | 'sequential' | 'stress' | 'idle')[];
6
+ intensity?: 'low' | 'medium' | 'high';
7
+ monitorMetrics?: ('memory' | 'cpu' | 'network' | 'render')[];
8
+ }
9
+ interface RunSimulationResult {
10
+ result: SimulationResult;
11
+ issuesFound: number;
12
+ recommendations: string[];
13
+ summary: string;
14
+ }
15
+ export declare function runSimulation(params: RunSimulationParams): Promise<RunSimulationResult>;
16
+ export default runSimulation;
17
+ //# sourceMappingURL=runSimulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runSimulation.d.ts","sourceRoot":"","sources":["../../../src/tools/execution/runSimulation.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,UAAU,mBAAmB;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/D,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;CAC9D;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+H7F;AAuKD,eAAe,aAAa,CAAC"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ // ============================================
3
+ // Run Simulation Tool
4
+ // ============================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runSimulation = runSimulation;
7
+ const uuid_1 = require("uuid");
8
+ async function runSimulation(params) {
9
+ const { appStructure, duration, userPatterns = ['random'], intensity = 'medium', monitorMetrics = ['memory', 'cpu', 'render'], } = params;
10
+ const startTime = Date.now();
11
+ const crashes = [];
12
+ const anomalies = [];
13
+ let userActions = 0;
14
+ let memoryPeakMB = 0;
15
+ let cpuPeakPercent = 0;
16
+ // Determine action interval based on intensity
17
+ const actionInterval = intensity === 'high' ? 500 : intensity === 'medium' ? 1000 : 2000;
18
+ const totalActions = Math.floor((duration * 1000) / actionInterval);
19
+ // Simulate user session
20
+ for (let i = 0; i < totalActions; i++) {
21
+ const pattern = userPatterns[i % userPatterns.length] || 'random';
22
+ try {
23
+ // Simulate user action based on pattern
24
+ await simulateUserAction(pattern, appStructure, i);
25
+ userActions++;
26
+ // Monitor metrics
27
+ if (monitorMetrics.includes('memory')) {
28
+ const currentMemory = simulateMemoryUsage(i, totalActions, appStructure);
29
+ memoryPeakMB = Math.max(memoryPeakMB, currentMemory);
30
+ if (currentMemory > 500) {
31
+ anomalies.push({
32
+ type: 'memory_spike',
33
+ timestamp: new Date().toISOString(),
34
+ details: `Memory usage spiked to ${currentMemory}MB`,
35
+ severity: currentMemory > 800 ? 'critical' : 'high',
36
+ });
37
+ }
38
+ }
39
+ if (monitorMetrics.includes('cpu')) {
40
+ const currentCpu = simulateCpuUsage(i, totalActions);
41
+ cpuPeakPercent = Math.max(cpuPeakPercent, currentCpu);
42
+ if (currentCpu > 80) {
43
+ anomalies.push({
44
+ type: 'cpu_spike',
45
+ timestamp: new Date().toISOString(),
46
+ details: `CPU usage spiked to ${currentCpu}%`,
47
+ severity: currentCpu > 95 ? 'critical' : 'high',
48
+ });
49
+ }
50
+ }
51
+ if (monitorMetrics.includes('render')) {
52
+ const frameTime = simulateFrameTime(intensity);
53
+ if (frameTime > 16.67) { // 60fps threshold
54
+ anomalies.push({
55
+ type: 'slow_render',
56
+ timestamp: new Date().toISOString(),
57
+ details: `Frame time ${frameTime.toFixed(2)}ms (target: 16.67ms)`,
58
+ severity: frameTime > 33.33 ? 'high' : 'medium',
59
+ });
60
+ }
61
+ }
62
+ // Simulate random crash (rare)
63
+ if (Math.random() < 0.001 && intensity === 'high') {
64
+ crashes.push({
65
+ timestamp: new Date().toISOString(),
66
+ type: 'SimulatedCrash',
67
+ message: 'Simulated crash during stress testing',
68
+ stackTrace: generateMockStackTrace(appStructure),
69
+ screen: appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)]?.name,
70
+ });
71
+ }
72
+ // State inconsistency check (occasional)
73
+ if (Math.random() < 0.01) {
74
+ const hasInconsistency = checkStateConsistency(appStructure);
75
+ if (!hasInconsistency.consistent) {
76
+ anomalies.push({
77
+ type: 'state_inconsistency',
78
+ timestamp: new Date().toISOString(),
79
+ details: hasInconsistency.reason,
80
+ severity: 'medium',
81
+ });
82
+ }
83
+ }
84
+ }
85
+ catch (error) {
86
+ crashes.push({
87
+ timestamp: new Date().toISOString(),
88
+ type: 'UnhandledException',
89
+ message: error instanceof Error ? error.message : String(error),
90
+ stackTrace: error instanceof Error ? error.stack || '' : '',
91
+ });
92
+ }
93
+ // Small delay to simulate real-time execution
94
+ await sleep(10);
95
+ }
96
+ const actualDuration = (Date.now() - startTime) / 1000;
97
+ const result = {
98
+ id: (0, uuid_1.v4)(),
99
+ duration: actualDuration,
100
+ userActions,
101
+ errorsFound: crashes.length + anomalies.filter(a => a.severity === 'critical' || a.severity === 'high').length,
102
+ memoryPeakMB,
103
+ cpuPeakPercent,
104
+ crashes,
105
+ anomalies,
106
+ executedAt: new Date().toISOString(),
107
+ };
108
+ return {
109
+ result,
110
+ issuesFound: crashes.length + anomalies.length,
111
+ recommendations: generateRecommendations(result, appStructure),
112
+ summary: generateSimulationSummary(result),
113
+ };
114
+ }
115
+ async function simulateUserAction(pattern, appStructure, actionIndex) {
116
+ // Simulate different user patterns
117
+ switch (pattern) {
118
+ case 'random':
119
+ // Random navigation and interactions
120
+ const randomScreen = appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)];
121
+ // Simulate tap/scroll/type
122
+ break;
123
+ case 'sequential':
124
+ // Navigate through screens in order
125
+ const screenIndex = actionIndex % appStructure.screens.length;
126
+ // Navigate to screen at index
127
+ break;
128
+ case 'stress':
129
+ // Rapid interactions
130
+ // Multiple taps, fast scrolling, quick navigation
131
+ break;
132
+ case 'idle':
133
+ // Minimal interaction, just monitoring
134
+ break;
135
+ }
136
+ await sleep(1);
137
+ }
138
+ function simulateMemoryUsage(actionIndex, totalActions, appStructure) {
139
+ // Simulate memory growth with occasional spikes
140
+ const baseMemory = 50 + appStructure.screens.length * 5;
141
+ const growth = (actionIndex / totalActions) * 100;
142
+ const noise = Math.random() * 50;
143
+ const spike = Math.random() < 0.05 ? Math.random() * 200 : 0;
144
+ return Math.round(baseMemory + growth + noise + spike);
145
+ }
146
+ function simulateCpuUsage(actionIndex, totalActions) {
147
+ // Simulate CPU usage with occasional spikes
148
+ const baseCpu = 20;
149
+ const noise = Math.random() * 30;
150
+ const spike = Math.random() < 0.1 ? Math.random() * 50 : 0;
151
+ return Math.min(100, Math.round(baseCpu + noise + spike));
152
+ }
153
+ function simulateFrameTime(intensity) {
154
+ // Target is 16.67ms for 60fps
155
+ const baseTime = intensity === 'high' ? 15 : intensity === 'medium' ? 12 : 10;
156
+ const variance = Math.random() * 10;
157
+ const spike = Math.random() < 0.05 ? Math.random() * 20 : 0;
158
+ return baseTime + variance + spike;
159
+ }
160
+ function checkStateConsistency(appStructure) {
161
+ // Simulate state consistency check
162
+ if (Math.random() < 0.1) {
163
+ const reasons = [
164
+ 'UI state does not match data model',
165
+ 'Cached data is stale',
166
+ 'Navigation state mismatch',
167
+ 'Form state lost after navigation',
168
+ ];
169
+ return {
170
+ consistent: false,
171
+ reason: reasons[Math.floor(Math.random() * reasons.length)] || reasons[0],
172
+ };
173
+ }
174
+ return { consistent: true, reason: '' };
175
+ }
176
+ function generateMockStackTrace(appStructure) {
177
+ const randomScreen = appStructure.screens[Math.floor(Math.random() * appStructure.screens.length)];
178
+ const randomComponent = appStructure.components[Math.floor(Math.random() * appStructure.components.length)];
179
+ return `
180
+ at ${randomComponent?.name || 'Component'}.render (${randomComponent?.path || 'component.tsx'}:42)
181
+ at ${randomScreen?.name || 'Screen'}.componentDidMount (${randomScreen?.path || 'screen.tsx'}:85)
182
+ at commitLifeCycles (react-native.js:1234)
183
+ at commitRoot (react-native.js:5678)
184
+ `.trim();
185
+ }
186
+ function generateRecommendations(result, appStructure) {
187
+ const recommendations = [];
188
+ // Memory recommendations
189
+ if (result.memoryPeakMB > 300) {
190
+ recommendations.push('Consider implementing lazy loading for heavy components');
191
+ recommendations.push('Review image caching strategy - memory usage is high');
192
+ }
193
+ if (result.anomalies.some(a => a.type === 'memory_spike')) {
194
+ recommendations.push('Investigate memory spikes - possible memory leak');
195
+ recommendations.push('Add cleanup functions to useEffect hooks');
196
+ }
197
+ // CPU recommendations
198
+ if (result.cpuPeakPercent > 70) {
199
+ recommendations.push('Optimize heavy computations - consider Web Workers or background threads');
200
+ }
201
+ // Render recommendations
202
+ const slowRenders = result.anomalies.filter(a => a.type === 'slow_render').length;
203
+ if (slowRenders > 5) {
204
+ recommendations.push('Multiple slow renders detected - review component re-render logic');
205
+ recommendations.push('Consider using React.memo or useMemo for expensive components');
206
+ }
207
+ // State recommendations
208
+ const stateIssues = result.anomalies.filter(a => a.type === 'state_inconsistency').length;
209
+ if (stateIssues > 0) {
210
+ recommendations.push('State inconsistencies found - review state management logic');
211
+ }
212
+ // Crash recommendations
213
+ if (result.crashes.length > 0) {
214
+ recommendations.push(`${result.crashes.length} crash(es) detected - prioritize crash investigation`);
215
+ }
216
+ return recommendations;
217
+ }
218
+ function generateSimulationSummary(result) {
219
+ const lines = [];
220
+ lines.push('Simulation Summary');
221
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
222
+ lines.push(`Duration: ${result.duration.toFixed(1)}s`);
223
+ lines.push(`User Actions: ${result.userActions}`);
224
+ lines.push(`Errors Found: ${result.errorsFound}`);
225
+ lines.push('');
226
+ lines.push('Metrics:');
227
+ lines.push(` Memory Peak: ${result.memoryPeakMB}MB`);
228
+ lines.push(` CPU Peak: ${result.cpuPeakPercent}%`);
229
+ lines.push('');
230
+ lines.push('Issues:');
231
+ lines.push(` Crashes: ${result.crashes.length}`);
232
+ lines.push(` Anomalies: ${result.anomalies.length}`);
233
+ if (result.anomalies.length > 0) {
234
+ const byType = {};
235
+ for (const a of result.anomalies) {
236
+ byType[a.type] = (byType[a.type] || 0) + 1;
237
+ }
238
+ lines.push('');
239
+ lines.push('Anomaly Breakdown:');
240
+ for (const [type, count] of Object.entries(byType)) {
241
+ lines.push(` - ${type}: ${count}`);
242
+ }
243
+ }
244
+ return lines.join('\n');
245
+ }
246
+ function sleep(ms) {
247
+ return new Promise(resolve => setTimeout(resolve, ms));
248
+ }
249
+ exports.default = runSimulation;
250
+ //# sourceMappingURL=runSimulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runSimulation.js","sourceRoot":"","sources":["../../../src/tools/execution/runSimulation.ts"],"names":[],"mappings":"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"}