"use strict"; /** * OpenAIProvider — AI enrichment using OpenAI API. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIProvider = void 0; const DEFAULT_MODEL = 'gpt-4o-mini'; function buildPrompt(anomaly, context) { return `You are a senior software engineer analyzing a bug report. Bug: - Type: ${anomaly.type} - Severity: ${anomaly.severity} - Description: ${anomaly.description} - URL: ${context.url} - Actions: ${JSON.stringify(anomaly.actionTrace.slice(-5))} ${context.httpLog.length > 0 ? `- HTTP: ${JSON.stringify(context.httpLog.slice(-3))}` : ''} ${context.consoleErrors.length > 0 ? `- Errors: ${context.consoleErrors.slice(-3).join('; ')}` : ''} Respond ONLY with JSON: {"rootCause":"...","userImpact":"...","suggestedFix":"...","confidence":"low|medium|high"}`; } function parseResponse(text, model) { try { const match = text.match(/\{[\s\S]*\}/); if (match) { const p = JSON.parse(match[0]); return { rootCause: p['rootCause'] ?? 'Unknown', userImpact: p['userImpact'] ?? 'Unknown', suggestedFix: p['suggestedFix'] ?? 'None', debugPrompt: text, confidence: p['confidence'] ?? 'medium', generatedAt: Date.now(), provider: 'openai', model, }; } } catch { /* fallback */ } return { rootCause: text.slice(0, 200), userImpact: 'See response', suggestedFix: 'See response', debugPrompt: text, confidence: 'low', generatedAt: Date.now(), provider: 'openai', model, }; } class OpenAIProvider { constructor(apiKey, model = DEFAULT_MODEL) { this.name = 'openai'; this.apiKey = apiKey; this.model = model; } async enrich(anomaly, context) { const prompt = buildPrompt(anomaly, context); const res = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${this.apiKey}`, }, body: JSON.stringify({ model: this.model, messages: [{ role: 'user', content: prompt }], max_tokens: 512, response_format: { type: 'json_object' }, }), }); if (!res.ok) { throw new Error(`OpenAI API error: ${res.status} ${await res.text()}`); } const data = await res.json(); const text = data.choices[0]?.message?.content ?? ''; return parseResponse(text, this.model); } } exports.OpenAIProvider = OpenAIProvider;