playwright-ai-insights 1.2.4 → 1.2.6
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/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/locatorSuggester.d.ts +21 -0
- package/dist/agents/locatorSuggester.d.ts.map +1 -0
- package/dist/agents/locatorSuggester.js +126 -0
- package/dist/agents/locatorSuggester.js.map +1 -0
- package/dist/core/reportGenerator.d.ts +8 -0
- package/dist/core/reportGenerator.d.ts.map +1 -1
- package/dist/core/reportGenerator.js +39 -4
- package/dist/core/reportGenerator.js.map +1 -1
- package/package.json +1 -1
package/dist/agents/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/agents/index.js
CHANGED
package/dist/agents/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Locator Suggestion Agent
|
|
3
|
+
* Suggests improved locators for failed Playwright tests
|
|
4
|
+
*/
|
|
5
|
+
interface LocatorSuggestion {
|
|
6
|
+
failedLocator: string;
|
|
7
|
+
suggestedLocator: string;
|
|
8
|
+
confidence: number;
|
|
9
|
+
reason: string;
|
|
10
|
+
decision: 'SAFE_TO_APPLY' | 'NEEDS_REVIEW' | 'NOT_RECOMMENDED';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Suggest improved locator for failed test
|
|
14
|
+
*/
|
|
15
|
+
export declare function suggestLocator(testName: string, error: string, dom: string): Promise<LocatorSuggestion>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if failure is a locator/timeout issue
|
|
18
|
+
*/
|
|
19
|
+
export declare function isLocatorTimeoutFailure(error: string): boolean;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=locatorSuggester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locatorSuggester.d.ts","sourceRoot":"","sources":["../../src/agents/locatorSuggester.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,UAAU,iBAAiB;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,eAAe,GAAG,cAAc,GAAG,iBAAiB,CAAC;CAChE;AAwDD;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAsD5B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAU9D"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Locator Suggestion Agent
|
|
3
|
+
* Suggests improved locators for failed Playwright tests
|
|
4
|
+
*/
|
|
5
|
+
import OpenAI from 'openai';
|
|
6
|
+
import { getConfig } from '../utils/config.js';
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
let cachedClient = null;
|
|
9
|
+
function getOpenAIClient() {
|
|
10
|
+
if (!cachedClient) {
|
|
11
|
+
const config = getConfig();
|
|
12
|
+
cachedClient = new OpenAI({ apiKey: config.openaiApiKey });
|
|
13
|
+
}
|
|
14
|
+
return cachedClient;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Derive decision based on confidence score
|
|
18
|
+
*/
|
|
19
|
+
function deriveDecision(confidence) {
|
|
20
|
+
if (confidence >= 85)
|
|
21
|
+
return 'SAFE_TO_APPLY';
|
|
22
|
+
if (confidence >= 70)
|
|
23
|
+
return 'NEEDS_REVIEW';
|
|
24
|
+
return 'NOT_RECOMMENDED';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build specialized prompt for locator suggestions
|
|
28
|
+
*/
|
|
29
|
+
function buildLocatorPrompt(testName, error, dom) {
|
|
30
|
+
return `You are a Playwright automation expert specializing in locator strategies.
|
|
31
|
+
|
|
32
|
+
Test Information:
|
|
33
|
+
- Test: ${testName}
|
|
34
|
+
- Error: ${error}
|
|
35
|
+
|
|
36
|
+
DOM Snapshot (partial):
|
|
37
|
+
${dom.slice(0, 4000)}
|
|
38
|
+
|
|
39
|
+
Your Task:
|
|
40
|
+
1. Identify the likely failed locator/selector
|
|
41
|
+
2. Suggest ONE more stable Playwright locator using best practices
|
|
42
|
+
3. Confidence (0-100 scale)
|
|
43
|
+
4. Brief explanation
|
|
44
|
+
|
|
45
|
+
Use these Playwright locators:
|
|
46
|
+
- page.getByRole('heading', { name: /Pattern/i })
|
|
47
|
+
- page.getByTestId('elementId')
|
|
48
|
+
- page.getByLabel('Label')
|
|
49
|
+
- page.locator('h1:has-text("Text")')
|
|
50
|
+
- page.locator('[data-testid="id"]')
|
|
51
|
+
|
|
52
|
+
Respond ONLY with JSON (no markdown, no backticks):
|
|
53
|
+
{
|
|
54
|
+
"failedLocator": "likely failed selector",
|
|
55
|
+
"suggestedLocator": "new stable selector",
|
|
56
|
+
"confidence": 75,
|
|
57
|
+
"reason": "why this locator is better"
|
|
58
|
+
}`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Suggest improved locator for failed test
|
|
62
|
+
*/
|
|
63
|
+
export async function suggestLocator(testName, error, dom) {
|
|
64
|
+
try {
|
|
65
|
+
const config = getConfig();
|
|
66
|
+
const prompt = buildLocatorPrompt(testName, error, dom);
|
|
67
|
+
const client = getOpenAIClient();
|
|
68
|
+
const response = await client.chat.completions.create({
|
|
69
|
+
model: config.model || 'gpt-4o-mini',
|
|
70
|
+
messages: [{ role: 'user', content: prompt }],
|
|
71
|
+
temperature: 0.2,
|
|
72
|
+
});
|
|
73
|
+
const rawContent = response.choices[0].message.content || '';
|
|
74
|
+
// Defensive JSON extraction (clean markdown if LLM added it)
|
|
75
|
+
const cleaned = rawContent
|
|
76
|
+
.replace(/```json/gi, '')
|
|
77
|
+
.replace(/```/g, '')
|
|
78
|
+
.trim();
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(cleaned);
|
|
82
|
+
}
|
|
83
|
+
catch (parseError) {
|
|
84
|
+
logger.warn('Failed to parse AI locator response, using fallback');
|
|
85
|
+
logger.debug('Raw response:', rawContent);
|
|
86
|
+
parsed = {
|
|
87
|
+
failedLocator: 'Unknown',
|
|
88
|
+
suggestedLocator: `page.getByRole('heading')`,
|
|
89
|
+
confidence: 50,
|
|
90
|
+
reason: 'Unable to parse AI response, using safe default',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const suggestion = {
|
|
94
|
+
failedLocator: parsed.failedLocator || 'Unknown',
|
|
95
|
+
suggestedLocator: parsed.suggestedLocator || `page.getByRole('heading')`,
|
|
96
|
+
confidence: Math.min(100, Math.max(0, parsed.confidence || 50)),
|
|
97
|
+
reason: parsed.reason || 'AI suggestion generated',
|
|
98
|
+
decision: deriveDecision(parsed.confidence || 50),
|
|
99
|
+
};
|
|
100
|
+
logger.debug('Locator suggestion generated:', suggestion);
|
|
101
|
+
return suggestion;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
logger.error('Failed to suggest locator:', error);
|
|
105
|
+
return {
|
|
106
|
+
failedLocator: 'Unable to analyze',
|
|
107
|
+
suggestedLocator: `page.getByRole('heading')`,
|
|
108
|
+
confidence: 0,
|
|
109
|
+
reason: 'Error analyzing failure',
|
|
110
|
+
decision: 'NOT_RECOMMENDED',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if failure is a locator/timeout issue
|
|
116
|
+
*/
|
|
117
|
+
export function isLocatorTimeoutFailure(error) {
|
|
118
|
+
const errorLower = error.toLowerCase();
|
|
119
|
+
return (/test timeout/i.test(errorLower) ||
|
|
120
|
+
/waiting for locator/i.test(errorLower) ||
|
|
121
|
+
/timeout.*locator/i.test(errorLower) ||
|
|
122
|
+
/locator.*not.*found/i.test(errorLower) ||
|
|
123
|
+
/element.*not.*found/i.test(errorLower) ||
|
|
124
|
+
/page\.(click|fill|check|selectoption)/i.test(errorLower));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=locatorSuggester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locatorSuggester.js","sourceRoot":"","sources":["../../src/agents/locatorSuggester.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,SAAS,eAAe;IACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,YAAY,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,eAAe,CAAC;IAC7C,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,cAAc,CAAC;IAC5C,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,KAAa,EAAE,GAAW;IACtE,OAAO;;;UAGC,QAAQ;WACP,KAAK;;;EAGd,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;EAqBlB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,KAAa,EACb,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa;YACpC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAE7D,6DAA6D;QAC7D,MAAM,OAAO,GAAG,UAAU;aACvB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,IAAI,EAAE,CAAC;QAEV,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACnE,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC1C,MAAM,GAAG;gBACP,aAAa,EAAE,SAAS;gBACxB,gBAAgB,EAAE,2BAA2B;gBAC7C,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,iDAAiD;aAC1D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAsB;YACpC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,SAAS;YAChD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,2BAA2B;YACxE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,yBAAyB;YAClD,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;SAClD,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO;YACL,aAAa,EAAE,mBAAmB;YAClC,gBAAgB,EAAE,2BAA2B;YAC7C,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,iBAAiB;SAC5B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,CACL,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,wCAAwC,CAAC,IAAI,CAAC,UAAU,CAAC,CAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -15,6 +15,14 @@ declare class AIReportGenerator {
|
|
|
15
15
|
* Load test results from file
|
|
16
16
|
*/
|
|
17
17
|
private loadTestResults;
|
|
18
|
+
/**
|
|
19
|
+
* Strip markdown formatting from text
|
|
20
|
+
*/
|
|
21
|
+
private stripMarkdown;
|
|
22
|
+
/**
|
|
23
|
+
* Strip ANSI color codes from text
|
|
24
|
+
*/
|
|
25
|
+
private stripAnsiCodes;
|
|
18
26
|
/**
|
|
19
27
|
* Analyze a single test failure with AI
|
|
20
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,cAAM,iBAAiB;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,UAAU,CAAqC;gBAE3C,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9E;;OAEG;IACH,OAAO,CAAC,eAAe;IA6DvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,cAAc;IAyD5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4R1B;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB;AAED,eAAO,MAAM,eAAe,mBAA0B,CAAC;AACvD,eAAe,eAAe,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import { analyzeFailure } from '../agents/failureAnalyzer.js';
|
|
8
|
+
import { suggestLocator, isLocatorTimeoutFailure } from '../agents/locatorSuggester.js';
|
|
8
9
|
import { classifyFailure } from '../analyzers/failureClassifier.js';
|
|
9
10
|
class AIReportGenerator {
|
|
10
11
|
constructor(projectRoot = process.cwd()) {
|
|
@@ -22,7 +23,8 @@ class AIReportGenerator {
|
|
|
22
23
|
console.log('ℹ️ No test results found to analyze.');
|
|
23
24
|
return;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
+
// Include all non-passing statuses: failed, timedOut, crashed, interrupted, skipped etc
|
|
27
|
+
const failedTests = testResults.filter((t) => t.status && t.status !== 'passed' && t.status !== 'skipped');
|
|
26
28
|
if (failedTests.length === 0) {
|
|
27
29
|
console.log('✅ All tests passed! No failures to analyze.');
|
|
28
30
|
return;
|
|
@@ -100,6 +102,25 @@ class AIReportGenerator {
|
|
|
100
102
|
return [];
|
|
101
103
|
}
|
|
102
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Strip markdown formatting from text
|
|
107
|
+
*/
|
|
108
|
+
stripMarkdown(text) {
|
|
109
|
+
return text
|
|
110
|
+
.replace(/^#+\s+/gm, '') // Remove markdown headers
|
|
111
|
+
.replace(/\*\*/g, '') // Remove bold markers
|
|
112
|
+
.replace(/`/g, '') // Remove code markers
|
|
113
|
+
.replace(/\[([^\]]+)\]\([^\)]+\)/g, '$1') // Convert links to text
|
|
114
|
+
.replace(/\n+/g, ' ') // Replace newlines with spaces
|
|
115
|
+
.replace(/\s+/g, ' ') // Collapse multiple spaces
|
|
116
|
+
.trim();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Strip ANSI color codes from text
|
|
120
|
+
*/
|
|
121
|
+
stripAnsiCodes(text) {
|
|
122
|
+
return text.replace(/\u001b\[[0-9;]*m/g, ''); // Remove ANSI color codes
|
|
123
|
+
}
|
|
103
124
|
/**
|
|
104
125
|
* Analyze a single test failure with AI
|
|
105
126
|
*/
|
|
@@ -117,7 +138,8 @@ class AIReportGenerator {
|
|
|
117
138
|
const errorMsg = test.error?.message || '';
|
|
118
139
|
const potentiallyFlaky = errorMsg.toLowerCase().includes('timeout') ||
|
|
119
140
|
errorMsg.toLowerCase().includes('flaky') ||
|
|
120
|
-
errorMsg.toLowerCase().includes('intermittent')
|
|
141
|
+
errorMsg.toLowerCase().includes('intermittent') ||
|
|
142
|
+
test.status === 'timedOut';
|
|
121
143
|
insight.isFlaky = potentiallyFlaky;
|
|
122
144
|
// Get AI-powered suggestion
|
|
123
145
|
const result = await analyzeFailure({
|
|
@@ -125,7 +147,20 @@ class AIReportGenerator {
|
|
|
125
147
|
error: test.error?.message || '',
|
|
126
148
|
errorType: failureType,
|
|
127
149
|
});
|
|
128
|
-
|
|
150
|
+
// For timeout/locator failures, get specific locator suggestions
|
|
151
|
+
let suggestion = this.stripMarkdown(result.rootCause || result.suggestions?.[0] || '');
|
|
152
|
+
let confidence = result.confidence || 0;
|
|
153
|
+
if (isLocatorTimeoutFailure(test.error?.message || '')) {
|
|
154
|
+
try {
|
|
155
|
+
const locatorSuggestion = await suggestLocator(test.name, test.error?.message || '', test.error?.message || 'No DOM available');
|
|
156
|
+
suggestion = `Try locator: ${locatorSuggestion.suggestedLocator} (${locatorSuggestion.decision}). ${locatorSuggestion.reason}`;
|
|
157
|
+
confidence = locatorSuggestion.confidence;
|
|
158
|
+
}
|
|
159
|
+
catch (locatorError) {
|
|
160
|
+
console.warn('Could not generate locator suggestion:', locatorError);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
insight.suggestion = suggestion;
|
|
129
164
|
insight.confidence = result.confidence || 0;
|
|
130
165
|
}
|
|
131
166
|
catch (error) {
|
|
@@ -147,7 +182,7 @@ class AIReportGenerator {
|
|
|
147
182
|
<td class="index">${index + 1}</td>
|
|
148
183
|
<td class="test-name">${this.escapeHtml(insight.testName)}</td>
|
|
149
184
|
<td class="failure-type">${insight.failureType || 'Unknown'}</td>
|
|
150
|
-
<td class="error-msg">${this.escapeHtml(insight.errorMessage || 'N/A')}</td>
|
|
185
|
+
<td class="error-msg">${this.escapeHtml(this.stripAnsiCodes(insight.errorMessage || 'N/A'))}</td>
|
|
151
186
|
<td class="suggestion">${this.escapeHtml(insight.suggestion || 'N/A')}</td>
|
|
152
187
|
<td class="confidence">${insight.confidence ? Math.round(insight.confidence) + '%' : 'N/A'}</td>
|
|
153
188
|
<td class="flaky ${insight.isFlaky ? 'yes' : 'no'}">${insight.isFlaky ? '⚠️ Yes' : 'No'}</td>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AA2BpE,MAAM,iBAAiB;IAKrB,YAAY,cAAsB,OAAO,CAAC,GAAG,EAAE;QAHvC,gBAAW,GAAW,mBAAmB,CAAC;QAC1C,eAAU,GAAW,yBAAyB,CAAC;QAGrD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,WAAoB,EAAE,UAAmB;QAC5D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED