lhci-ai-assistant 0.1.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.
- package/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/ai/copilot.d.ts +40 -0
- package/dist/ai/copilot.d.ts.map +1 -0
- package/dist/ai/copilot.js +176 -0
- package/dist/ai/copilot.js.map +1 -0
- package/dist/ai/local.d.ts +11 -0
- package/dist/ai/local.d.ts.map +1 -0
- package/dist/ai/local.js +199 -0
- package/dist/ai/local.js.map +1 -0
- package/dist/ai/openai.d.ts +39 -0
- package/dist/ai/openai.d.ts.map +1 -0
- package/dist/ai/openai.js +113 -0
- package/dist/ai/openai.js.map +1 -0
- package/dist/ai/prompt.d.ts +36 -0
- package/dist/ai/prompt.d.ts.map +1 -0
- package/dist/ai/prompt.js +190 -0
- package/dist/ai/prompt.js.map +1 -0
- package/dist/analyzer.d.ts +19 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +264 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/autofix/generator.d.ts +27 -0
- package/dist/autofix/generator.d.ts.map +1 -0
- package/dist/autofix/generator.js +153 -0
- package/dist/autofix/generator.js.map +1 -0
- package/dist/autofix/patterns.d.ts +34 -0
- package/dist/autofix/patterns.d.ts.map +1 -0
- package/dist/autofix/patterns.js +247 -0
- package/dist/autofix/patterns.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +159 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +109 -0
- package/dist/config.js.map +1 -0
- package/dist/github/diff-fetcher.d.ts +43 -0
- package/dist/github/diff-fetcher.d.ts.map +1 -0
- package/dist/github/diff-fetcher.js +183 -0
- package/dist/github/diff-fetcher.js.map +1 -0
- package/dist/github/pr-commenter.d.ts +18 -0
- package/dist/github/pr-commenter.d.ts.map +1 -0
- package/dist/github/pr-commenter.js +229 -0
- package/dist/github/pr-commenter.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/comparator.d.ts +10 -0
- package/dist/metrics/comparator.d.ts.map +1 -0
- package/dist/metrics/comparator.js +228 -0
- package/dist/metrics/comparator.js.map +1 -0
- package/dist/metrics/extractor.d.ts +26 -0
- package/dist/metrics/extractor.d.ts.map +1 -0
- package/dist/metrics/extractor.js +174 -0
- package/dist/metrics/extractor.js.map +1 -0
- package/dist/metrics/loader.d.ts +35 -0
- package/dist/metrics/loader.d.ts.map +1 -0
- package/dist/metrics/loader.js +94 -0
- package/dist/metrics/loader.js.map +1 -0
- package/dist/output/json.d.ts +23 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +144 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/markdown.d.ts +10 -0
- package/dist/output/markdown.d.ts.map +1 -0
- package/dist/output/markdown.js +226 -0
- package/dist/output/markdown.js.map +1 -0
- package/dist/output/terminal.d.ts +22 -0
- package/dist/output/terminal.d.ts.map +1 -0
- package/dist/output/terminal.js +238 -0
- package/dist/output/terminal.js.map +1 -0
- package/dist/types.d.ts +156 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/ai/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI API client for performance analysis
|
|
3
|
+
*/
|
|
4
|
+
export interface OpenAIOptions {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
maxTokens?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface OpenAIMessage {
|
|
10
|
+
role: 'system' | 'user' | 'assistant';
|
|
11
|
+
content: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Analyze performance data using OpenAI
|
|
15
|
+
*/
|
|
16
|
+
export declare function analyzeWithOpenAI(prompt: string, options: OpenAIOptions): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if an OpenAI API key is valid
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkOpenAIAccess(apiKey: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Custom error class for OpenAI API errors
|
|
23
|
+
*/
|
|
24
|
+
export declare class OpenAIError extends Error {
|
|
25
|
+
statusCode: number;
|
|
26
|
+
constructor(message: string, statusCode: number);
|
|
27
|
+
isAuthError(): boolean;
|
|
28
|
+
isRateLimit(): boolean;
|
|
29
|
+
isQuotaExceeded(): boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a helpful error message for OpenAI errors
|
|
33
|
+
*/
|
|
34
|
+
export declare function getOpenAIErrorMessage(error: unknown): string;
|
|
35
|
+
/**
|
|
36
|
+
* Estimate token count for a prompt (rough approximation)
|
|
37
|
+
*/
|
|
38
|
+
export declare function estimateTokens(text: string): number;
|
|
39
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CA2CjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxE;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAG3B,UAAU,EAAE,MAAM;gBADzB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM;IAM3B,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,OAAO;IAItB,eAAe,IAAI,OAAO;CAG3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmB5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI API client for performance analysis
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenAIError = void 0;
|
|
7
|
+
exports.analyzeWithOpenAI = analyzeWithOpenAI;
|
|
8
|
+
exports.checkOpenAIAccess = checkOpenAIAccess;
|
|
9
|
+
exports.getOpenAIErrorMessage = getOpenAIErrorMessage;
|
|
10
|
+
exports.estimateTokens = estimateTokens;
|
|
11
|
+
const OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions';
|
|
12
|
+
/**
|
|
13
|
+
* Analyze performance data using OpenAI
|
|
14
|
+
*/
|
|
15
|
+
async function analyzeWithOpenAI(prompt, options) {
|
|
16
|
+
const messages = [
|
|
17
|
+
{
|
|
18
|
+
role: 'system',
|
|
19
|
+
content: 'You are a web performance expert specializing in Lighthouse optimization. You provide specific, actionable advice for improving Core Web Vitals and overall performance scores.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
role: 'user',
|
|
23
|
+
content: prompt,
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
const response = await fetch(OPENAI_API_URL, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: {
|
|
29
|
+
Authorization: `Bearer ${options.apiKey}`,
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
model: options.model || 'gpt-4-turbo-preview',
|
|
34
|
+
messages,
|
|
35
|
+
max_tokens: options.maxTokens || 1000,
|
|
36
|
+
temperature: 0.3,
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const error = await response.text();
|
|
41
|
+
throw new OpenAIError(`OpenAI API error (${response.status}): ${error}`, response.status);
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
if (!data.choices || data.choices.length === 0) {
|
|
45
|
+
throw new OpenAIError('No response from OpenAI API', 500);
|
|
46
|
+
}
|
|
47
|
+
return data.choices[0]?.message?.content || 'No analysis available.';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if an OpenAI API key is valid
|
|
51
|
+
*/
|
|
52
|
+
async function checkOpenAIAccess(apiKey) {
|
|
53
|
+
try {
|
|
54
|
+
const response = await fetch('https://api.openai.com/v1/models', {
|
|
55
|
+
headers: {
|
|
56
|
+
Authorization: `Bearer ${apiKey}`,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
return response.ok;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Custom error class for OpenAI API errors
|
|
67
|
+
*/
|
|
68
|
+
class OpenAIError extends Error {
|
|
69
|
+
constructor(message, statusCode) {
|
|
70
|
+
super(message);
|
|
71
|
+
this.statusCode = statusCode;
|
|
72
|
+
this.name = 'OpenAIError';
|
|
73
|
+
}
|
|
74
|
+
isAuthError() {
|
|
75
|
+
return this.statusCode === 401;
|
|
76
|
+
}
|
|
77
|
+
isRateLimit() {
|
|
78
|
+
return this.statusCode === 429;
|
|
79
|
+
}
|
|
80
|
+
isQuotaExceeded() {
|
|
81
|
+
return this.statusCode === 402;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.OpenAIError = OpenAIError;
|
|
85
|
+
/**
|
|
86
|
+
* Get a helpful error message for OpenAI errors
|
|
87
|
+
*/
|
|
88
|
+
function getOpenAIErrorMessage(error) {
|
|
89
|
+
if (error instanceof OpenAIError) {
|
|
90
|
+
if (error.isAuthError()) {
|
|
91
|
+
return 'OpenAI API key is invalid. Please check your OPENAI_API_KEY environment variable.';
|
|
92
|
+
}
|
|
93
|
+
if (error.isRateLimit()) {
|
|
94
|
+
return 'OpenAI rate limit exceeded. Please try again later.';
|
|
95
|
+
}
|
|
96
|
+
if (error.isQuotaExceeded()) {
|
|
97
|
+
return 'OpenAI quota exceeded. Please check your billing settings.';
|
|
98
|
+
}
|
|
99
|
+
return error.message;
|
|
100
|
+
}
|
|
101
|
+
if (error instanceof Error) {
|
|
102
|
+
return error.message;
|
|
103
|
+
}
|
|
104
|
+
return 'Unknown error occurred while calling OpenAI API';
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Estimate token count for a prompt (rough approximation)
|
|
108
|
+
*/
|
|
109
|
+
function estimateTokens(text) {
|
|
110
|
+
// Rough estimation: ~4 characters per token on average
|
|
111
|
+
return Math.ceil(text.length / 4);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MetricComparison, Opportunity, PRDiff } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generate the analysis prompt for the AI
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateAnalysisPrompt(data: {
|
|
6
|
+
regressions: MetricComparison[];
|
|
7
|
+
improvements: MetricComparison[];
|
|
8
|
+
opportunities: Opportunity[];
|
|
9
|
+
codeDiff?: PRDiff;
|
|
10
|
+
}): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate a prompt for auto-fix suggestions
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateAutoFixPrompt(data: {
|
|
15
|
+
regression: MetricComparison;
|
|
16
|
+
codeSnippet?: string;
|
|
17
|
+
opportunity?: Opportunity;
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* Parse the AI response into structured recommendations
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseAnalysisResponse(response: string): {
|
|
23
|
+
rootCauses: Array<{
|
|
24
|
+
metric: string;
|
|
25
|
+
cause: string;
|
|
26
|
+
confidence: 'low' | 'medium' | 'high';
|
|
27
|
+
}>;
|
|
28
|
+
recommendations: Array<{
|
|
29
|
+
title: string;
|
|
30
|
+
description: string;
|
|
31
|
+
priority: 'low' | 'medium' | 'high';
|
|
32
|
+
impact: string;
|
|
33
|
+
effort: 'low' | 'medium' | 'high';
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGjE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAUT;AAwHD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,MAAM,CAwBT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACvD,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;CACxJ,CAyCA"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateAnalysisPrompt = generateAnalysisPrompt;
|
|
4
|
+
exports.generateAutoFixPrompt = generateAutoFixPrompt;
|
|
5
|
+
exports.parseAnalysisResponse = parseAnalysisResponse;
|
|
6
|
+
const diff_fetcher_1 = require("../github/diff-fetcher");
|
|
7
|
+
/**
|
|
8
|
+
* Generate the analysis prompt for the AI
|
|
9
|
+
*/
|
|
10
|
+
function generateAnalysisPrompt(data) {
|
|
11
|
+
const sections = [
|
|
12
|
+
getSystemContext(),
|
|
13
|
+
formatPerformanceChanges(data.regressions, data.improvements),
|
|
14
|
+
formatCodeChanges(data.codeDiff),
|
|
15
|
+
formatOpportunities(data.opportunities),
|
|
16
|
+
getTaskInstructions(),
|
|
17
|
+
];
|
|
18
|
+
return sections.filter(Boolean).join('\n\n');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* System context for the AI
|
|
22
|
+
*/
|
|
23
|
+
function getSystemContext() {
|
|
24
|
+
return `You are an expert web performance engineer analyzing Lighthouse CI results.
|
|
25
|
+
Your goal is to identify root causes of performance regressions and provide actionable recommendations.`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Format performance changes section
|
|
29
|
+
*/
|
|
30
|
+
function formatPerformanceChanges(regressions, improvements) {
|
|
31
|
+
const lines = ['## Performance Changes'];
|
|
32
|
+
if (regressions.length > 0) {
|
|
33
|
+
lines.push('\n### Regressions:');
|
|
34
|
+
for (const r of regressions) {
|
|
35
|
+
lines.push(`- ${r.metric}: ${formatValue(r.metric, r.base)} → ${formatValue(r.metric, r.current)} (${formatDiff(r.metric, r.diff)}) [${r.severity}]`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
lines.push('\n### Regressions: None detected');
|
|
40
|
+
}
|
|
41
|
+
if (improvements.length > 0) {
|
|
42
|
+
lines.push('\n### Improvements:');
|
|
43
|
+
for (const i of improvements) {
|
|
44
|
+
lines.push(`- ${i.metric}: ${formatValue(i.metric, i.base)} → ${formatValue(i.metric, i.current)} (${formatDiff(i.metric, i.diff)})`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return lines.join('\n');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Format code changes section
|
|
51
|
+
*/
|
|
52
|
+
function formatCodeChanges(diff) {
|
|
53
|
+
if (!diff) {
|
|
54
|
+
return '## Code Changes\nNo code diff available.';
|
|
55
|
+
}
|
|
56
|
+
return `## Code Changes\n${(0, diff_fetcher_1.summarizeCodeChanges)(diff)}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Format opportunities section
|
|
60
|
+
*/
|
|
61
|
+
function formatOpportunities(opportunities) {
|
|
62
|
+
if (opportunities.length === 0) {
|
|
63
|
+
return '## Lighthouse Opportunities\nNo significant opportunities detected.';
|
|
64
|
+
}
|
|
65
|
+
const lines = ['## Lighthouse Opportunities'];
|
|
66
|
+
for (const opp of opportunities.slice(0, 5)) {
|
|
67
|
+
const savings = opp.savingsMs ? ` (potential ${opp.savingsMs.toFixed(0)}ms savings)` : '';
|
|
68
|
+
lines.push(`- ${opp.title}${savings}`);
|
|
69
|
+
}
|
|
70
|
+
if (opportunities.length > 5) {
|
|
71
|
+
lines.push(`- ... and ${opportunities.length - 5} more`);
|
|
72
|
+
}
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Task instructions for the AI
|
|
77
|
+
*/
|
|
78
|
+
function getTaskInstructions() {
|
|
79
|
+
return `## Task
|
|
80
|
+
|
|
81
|
+
Analyze the performance changes above and provide:
|
|
82
|
+
|
|
83
|
+
1. **Root Cause Analysis**: For each regression, identify the likely cause based on the code changes and Lighthouse opportunities. Be specific about which changes might have caused the regression.
|
|
84
|
+
|
|
85
|
+
2. **Impact Assessment**: Explain how these changes affect real users (loading time, interactivity, visual stability).
|
|
86
|
+
|
|
87
|
+
3. **Recommendations**: Provide 3-5 specific, actionable recommendations to fix the regressions. Include:
|
|
88
|
+
- What to change
|
|
89
|
+
- Why it helps
|
|
90
|
+
- Expected impact
|
|
91
|
+
|
|
92
|
+
4. **Priority**: Order recommendations by impact (highest first).
|
|
93
|
+
|
|
94
|
+
Keep your response focused and under 500 words. Use bullet points for clarity.`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Format a metric value for display
|
|
98
|
+
*/
|
|
99
|
+
function formatValue(metric, value) {
|
|
100
|
+
if (metric.includes('Score')) {
|
|
101
|
+
return `${(value * 100).toFixed(0)}%`;
|
|
102
|
+
}
|
|
103
|
+
if (metric === 'CLS') {
|
|
104
|
+
return value.toFixed(3);
|
|
105
|
+
}
|
|
106
|
+
return `${value.toFixed(0)}ms`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Format a diff value for display
|
|
110
|
+
*/
|
|
111
|
+
function formatDiff(metric, diff) {
|
|
112
|
+
const sign = diff >= 0 ? '+' : '';
|
|
113
|
+
if (metric.includes('Score')) {
|
|
114
|
+
return `${sign}${(diff * 100).toFixed(1)}%`;
|
|
115
|
+
}
|
|
116
|
+
if (metric === 'CLS') {
|
|
117
|
+
return `${sign}${diff.toFixed(3)}`;
|
|
118
|
+
}
|
|
119
|
+
return `${sign}${diff.toFixed(0)}ms`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Generate a prompt for auto-fix suggestions
|
|
123
|
+
*/
|
|
124
|
+
function generateAutoFixPrompt(data) {
|
|
125
|
+
return `You are a web performance expert. Generate a specific code fix for the following performance regression:
|
|
126
|
+
|
|
127
|
+
## Regression
|
|
128
|
+
${data.regression.metric}: ${formatValue(data.regression.metric, data.regression.base)} → ${formatValue(data.regression.metric, data.regression.current)}
|
|
129
|
+
Severity: ${data.regression.severity}
|
|
130
|
+
|
|
131
|
+
${data.opportunity ? `## Related Opportunity\n${data.opportunity.title}\n${data.opportunity.description || ''}` : ''}
|
|
132
|
+
|
|
133
|
+
${data.codeSnippet ? `## Relevant Code\n\`\`\`\n${data.codeSnippet}\n\`\`\`` : ''}
|
|
134
|
+
|
|
135
|
+
## Task
|
|
136
|
+
Provide a specific code change to fix this regression. Format your response as:
|
|
137
|
+
|
|
138
|
+
1. **Title**: Brief description of the fix
|
|
139
|
+
2. **Explanation**: Why this fix helps
|
|
140
|
+
3. **Code Change**: Show the before/after in diff format
|
|
141
|
+
|
|
142
|
+
\`\`\`diff
|
|
143
|
+
- old code
|
|
144
|
+
+ new code
|
|
145
|
+
\`\`\`
|
|
146
|
+
|
|
147
|
+
Be specific and practical. Only suggest changes that directly address the performance issue.`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse the AI response into structured recommendations
|
|
151
|
+
*/
|
|
152
|
+
function parseAnalysisResponse(response) {
|
|
153
|
+
const rootCauses = [];
|
|
154
|
+
const recommendations = [];
|
|
155
|
+
// Simple parsing - look for patterns in the response
|
|
156
|
+
const lines = response.split('\n');
|
|
157
|
+
let currentSection = '';
|
|
158
|
+
for (const line of lines) {
|
|
159
|
+
const lowerLine = line.toLowerCase();
|
|
160
|
+
if (lowerLine.includes('root cause') || lowerLine.includes('cause')) {
|
|
161
|
+
currentSection = 'causes';
|
|
162
|
+
}
|
|
163
|
+
else if (lowerLine.includes('recommendation') || lowerLine.includes('suggest')) {
|
|
164
|
+
currentSection = 'recommendations';
|
|
165
|
+
}
|
|
166
|
+
// Parse bullet points
|
|
167
|
+
const bulletMatch = line.match(/^[-*•]\s*(.+)/);
|
|
168
|
+
if (bulletMatch) {
|
|
169
|
+
const content = bulletMatch[1].trim();
|
|
170
|
+
if (currentSection === 'causes' && content.length > 10) {
|
|
171
|
+
rootCauses.push({
|
|
172
|
+
metric: 'Performance',
|
|
173
|
+
cause: content,
|
|
174
|
+
confidence: 'medium',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else if (currentSection === 'recommendations' && content.length > 10) {
|
|
178
|
+
recommendations.push({
|
|
179
|
+
title: content.substring(0, 50) + (content.length > 50 ? '...' : ''),
|
|
180
|
+
description: content,
|
|
181
|
+
priority: recommendations.length < 2 ? 'high' : 'medium',
|
|
182
|
+
impact: 'Variable',
|
|
183
|
+
effort: 'medium',
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return { rootCauses, recommendations };
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AnalyzeOptions, AnalysisResult } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Main analysis orchestrator
|
|
4
|
+
*/
|
|
5
|
+
export declare function analyze(options: AnalyzeOptions): Promise<AnalysisResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Quick analysis without AI - useful for CI/CD gates
|
|
8
|
+
*/
|
|
9
|
+
export declare function quickCheck(thresholds?: {
|
|
10
|
+
performance?: number;
|
|
11
|
+
accessibility?: number;
|
|
12
|
+
bestPractices?: number;
|
|
13
|
+
seo?: number;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
passed: boolean;
|
|
16
|
+
scores: Record<string, number>;
|
|
17
|
+
failures: string[];
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,cAAc,EAIf,MAAM,SAAS,CAAC;AAmBjB;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAuF9E;AA6JD;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAqCD"}
|