1 import { GoogleGenAI, Type } from "@google/genai";
2 import { TECHNICAL_MANUALS } from "../shared/technical-manuals";
3 import { storage } from "./storage";
4
5 let genAIClient: GoogleGenAI | null = null;
6
7 function getGenAI(): GoogleGenAI | null {
8 if (!process.env.GEMINI_API_KEY) {
9 return null;
10 }
11 if (!genAIClient) {
12 genAIClient = new GoogleGenAI({
13 apiKey: process.env.GEMINI_API_KEY,
14 httpOptions: {
15 headers: {
16 "User-Agent": "aistudio-build",
17 },
18 },
19 });
20 }
21 return genAIClient;
22 }
23
24 // Resilient helper to execute Gemini API calls with graceful multi-model fallback and seamless offline fallback
25 async function callGeminiWithFallback<T>(
26 fn: (model: string) => Promise<T>
27 ): Promise<T | null> {
28 // Try lightweight fast flash-lite first (low latency, high availability under load), then standard flash
29 const models = ["gemini-3.1-flash-lite", "gemini-3.7-flash", "gemini-flash-latest"];
30
31 for (const model of models) {
32 try {
33 const res = await fn(model);
34 if (res) return res;
35 } catch (err: any) {
36 // Quietly fall through on 503/429/high demand or network blips
37 continue;
38 }
39 }
40
41 return null;
42 }
43
44 export interface DiagnosticsRequest {
45 symptoms: string;
46 deviceType?: "laptop" | "desktop" | "all" | string;
47 brand?: string;
48 model?: string;
49 os?: string;
50 category?: "hardware" | "software" | "cleaning" | "upgrades" | "all" | string;
51 errorCode?: string;
52 }
53
54 export interface DiagnosticResult {
55 summary: string;
56 confidence: "High" | "Medium" | "Low";
57 recommendedCategory: "hardware" | "software" | "cleaning" | "upgrades";
58 probableCauses: {
59 cause: string;
60 likelihood: "High" | "Medium" | "Low";
61 explanation: string;
62 }[];
63 stepByStepPlan: {
64 stepNumber: number;
65 title: string;
66 action: string;
67 expectedOutcome: string;
68 }[];
69 toolsAndSoftware: string[];
70 safetyWarnings: string[];
71 preventativeTips: string[];
72 isOutOfScope?: boolean;
73 }
74
75 export interface ChatMessage {
76 role: "user" | "assistant" | "system";
77 content: string;
78 }
79
80 export interface TechnicalChatRequest {
81 messages: ChatMessage[];
82 deviceContext?: string;
83 categoryContext?: string;
84 }
85
86 export interface TechnicalChatResponse {
87 message: string;
88 suggestedGuides?: {
89 id: string;
90 title: string;
91 category: string;
92 difficulty: string;
93 estimatedTime: string;
94 }[];
95 suggestedManuals?: {
96 id: string;
97 title: string;
98 code: string;
99 category: string;
100 }[];
101 voltageRailsMentioned?: {
102 rail: string;
103 voltage: string;
104 location: string;
105 description: string;
106 }[];
107 quickActions?: string[];
108 }
109
110 const SYSTEM_INSTRUCTION = `You are JCRGuru's expert Hardware & Computer Diagnostic Specialist.
111 Your SOLE purpose is to diagnose, troubleshoot, and provide step-by-step resolution paths for computer hardware, laptops, desktops, operating systems (Windows, macOS, Linux), peripherals, thermals, BIOS/UEFI, and electronic repairs.
112
113 STRICT SCOPE DIRECTIVE:
114 You ONLY assist with device diagnostics, computer repair, hardware upgrades, OS recovery, driver/firmware fixes, component testing, and cleaning.
115 If a user prompt is unrelated to computer/laptop repair or hardware maintenance (such as general conversational queries, creative writing, cooking, gaming lore, non-PC topics), set "isOutOfScope": true, give a polite 1-sentence refusal in "summary", and leave the other lists empty.
116
117 For valid computer repair queries, provide a highly technical, precise, and practical diagnostic analysis adhering to industry standard bench repair practices.`;
118
119 export async function runAIDiagnostics(reqData: DiagnosticsRequest): Promise<DiagnosticResult> {
120 const ai = getGenAI();
121
122 if (!ai) {
123 return generateFallbackDiagnostics(reqData);
124 }
125
126 const prompt = `Diagnose the following computer/laptop issue:
127 Device Type: ${reqData.deviceType || "Laptop/Desktop"}
128 Brand/Model: ${reqData.brand || "Generic"} ${reqData.model || ""}
129 Operating System: ${reqData.os || "Any"}
130 Target Category: ${reqData.category || "Any"}
131 Reported Symptoms / Error Code: ${reqData.symptoms} ${reqData.errorCode ? `(Error code: ${reqData.errorCode})` : ""}`;
132
133 const result = await callGeminiWithFallback(async (modelName) => {
134 const response = await ai.models.generateContent({
135 model: modelName,
136 contents: prompt,
137 config: {
138 systemInstruction: SYSTEM_INSTRUCTION,
139 responseMimeType: "application/json",
140 responseSchema: {
141 type: Type.OBJECT,
142 properties: {
143 isOutOfScope: { type: Type.BOOLEAN, description: "True if the question is not about computer or electronics repair" },
144 summary: { type: Type.STRING, description: "High-level summary of the diagnostic finding" },
145 confidence: { type: Type.STRING, enum: ["High", "Medium", "Low"], description: "Diagnostic confidence" },
146 recommendedCategory: { type: Type.STRING, enum: ["hardware", "software", "cleaning", "upgrades"], description: "Primary repair category" },
147 probableCauses: {
148 type: Type.ARRAY,
149 items: {
150 type: Type.OBJECT,
151 properties: {
152 cause: { type: Type.STRING },
153 likelihood: { type: Type.STRING, enum: ["High", "Medium", "Low"] },
154 explanation: { type: Type.STRING }
155 },
156 required: ["cause", "likelihood", "explanation"]
157 }
158 },
159 stepByStepPlan: {
160 type: Type.ARRAY,
161 items: {
162 type: Type.OBJECT,
163 properties: {
164 stepNumber: { type: Type.INTEGER },
165 title: { type: Type.STRING },
166 action: { type: Type.STRING },
167 expectedOutcome: { type: Type.STRING }
168 },
169 required: ["stepNumber", "title", "action", "expectedOutcome"]
170 }
171 },
172 toolsAndSoftware: {
173 type: Type.ARRAY,
174 items: { type: Type.STRING },
175 description: "Diagnostic tools or software like HWiNFO64, MemTest86, DDU, Multimeter, ESD strap"
176 },
177 safetyWarnings: {
178 type: Type.ARRAY,
179 items: { type: Type.STRING },
180 description: "Safety guidelines regarding power isolation, battery handling, and ESD"
181 },
182 preventativeTips: {
183 type: Type.ARRAY,
184 items: { type: Type.STRING }
185 }
186 },
187 required: [
188 "summary",
189 "confidence",
190 "recommendedCategory",
191 "probableCauses",
192 "stepByStepPlan",
193 "toolsAndSoftware",
194 "safetyWarnings",
195 "preventativeTips"
196 ]
197 }
198 }
199 });
200
201 const parsed = JSON.parse(response.text || "{}");
202 return parsed as DiagnosticResult;
203 });
204
205 if (result) {
206 return result;
207 }
208
209 return generateFallbackDiagnostics(reqData);
210 }
211
212 function generateFallbackDiagnostics(reqData: DiagnosticsRequest): DiagnosticResult {
213 const sym = (reqData.symptoms || "").toLowerCase();
214 const err = (reqData.errorCode || "").toLowerCase();
215
216 let category: "hardware" | "software" | "cleaning" | "upgrades" = "hardware";
217 let summary = `Diagnostic assessment for ${reqData.brand || "Device"} ${reqData.model || ""}`;
218 let confidence: "High" | "Medium" | "Low" = "High";
219
220 const probableCauses: DiagnosticResult["probableCauses"] = [];
221 const stepByStepPlan: DiagnosticResult["stepByStepPlan"] = [];
222 const toolsAndSoftware: string[] = [];
223 const safetyWarnings: string[] = [
224 "Always disconnect AC adapter and main battery before touching internal motherboard components.",
225 "Wear an ESD anti-static wrist strap or ground yourself against bare unpainted metal.",
226 "Never compress or puncture swollen lithium-ion battery pouches."
227 ];
228 const preventativeTips: string[] = [
229 "Keep device firmware/BIOS updated from the official vendor support portal.",
230 "Perform annual dust cleaning and thermal paste refresh to prevent thermal degradation."
231 ];
232
233 if (sym.includes("blue screen") || sym.includes("bsod") || sym.includes("freeze") || sym.includes("crash") || err.includes("dump")) {
234 category = "software";
235 summary = "Kernel Stop Code / System Instability detected. Likely caused by conflicting graphics/chipset drivers or RAM memory bit flips.";
236 probableCauses.push(
237 { cause: "Outdated or Corrupted Graphics/Chipset Drivers", likelihood: "High", explanation: "Conflicting kernel-mode drivers crashing Windows kernel (ntoskrnl.exe)." },
238 { cause: "Failing RAM Memory Module", likelihood: "Medium", explanation: "Defective DDR4/DDR5 memory cell failing read/write validation passes." },
239 { cause: "System File Corruption (SFC/DISM)", likelihood: "Medium", explanation: "Corrupted system DLLs following incomplete Windows updates." }
240 );
241 stepByStepPlan.push(
242 { stepNumber: 1, title: "Boot Safe Mode & Run DDU", action: "Boot into Safe Mode, run Display Driver Uninstaller (DDU) to wipe old GPU drivers, then install latest WHQL driver.", expectedOutcome: "Clean driver installation without legacy hooks." },
243 { stepNumber: 2, title: "Run DISM & SFC System File Repair", action: "Execute 'DISM /Online /Cleanup-Image /RestoreHealth' followed by 'sfc /scannow' in Administrator Terminal.", expectedOutcome: "System integrity verified and corrupted DLLs replaced." },
244 { stepNumber: 3, title: "Execute MemTest86 4-Pass Scan", action: "Create bootable USB with PassMark MemTest86 and test RAM for 4 full passes.", expectedOutcome: "Confirm memory subsystem has zero hardware faults." }
245 );
246 toolsAndSoftware.push("Display Driver Uninstaller (DDU)", "PassMark MemTest86", "WinDbg Preview", "CrystalDiskInfo");
247 } else if (sym.includes("heat") || sym.includes("fan") || sym.includes("temp") || sym.includes("loud") || sym.includes("throttle")) {
248 category = "cleaning";
249 summary = "Thermal Throttling & Airflow Restriction detected. CPU/GPU package temperatures exceeding safe operating TJMax thresholds.";
250 probableCauses.push(
251 { cause: "Dried Thermal Interface Material (TIM)", likelihood: "High", explanation: "Factory silicone paste pumped out or baked, creating micro-voids between die and coldplate." },
252 { cause: "Clogged Copper Heatsink Radiator Fins", likelihood: "High", explanation: "Felt-like dust wall trapped between blower fan outlet and copper exhaust fins." },
253 { cause: "Bearing Wear on Centrifugal Fan", likelihood: "Medium", explanation: "Imbalanced impeller blades or dry sleeve bearings causing RPM drop." }
254 );
255 stepByStepPlan.push(
256 { stepNumber: 1, title: "Disassemble Bottom Chassis & Exhaust", action: "Remove bottom cover, disconnect battery, and remove blower fans and heatpipe assembly.", expectedOutcome: "Exhaust radiators and die exposed for inspection." },
257 { stepNumber: 2, title: "Clean Fins & Strip Old Paste", action: "Use 99% Isopropyl Alcohol and ESD brush to clear radiator fin walls and remove dried paste from copper coldplates.", expectedOutcome: "Mirror-clean bare silicon die." },
258 { stepNumber: 3, title: "Apply Honeywell PTM7950 & Re-torque", action: "Cut and apply 0.25mm PTM7950 phase change pad. Torque heatsink screws diagonally (1→2→3→4) to 0.25 Nm.", expectedOutcome: "Optimal core-to-heatsink heat transfer under sustained load." }
259 );
260 toolsAndSoftware.push("Honeywell PTM7950 / Arctic MX-6", "99% Isopropyl Alcohol", "ESD Bristle Brush", "HWiNFO64");
261 } else if (sym.includes("power") || sym.includes("dead") || sym.includes("charge") || sym.includes("turn on") || sym.includes("black screen")) {
262 category = "hardware";
263 summary = "Power Delivery & Initial POST failure. The board is failing to complete the power sequence or standby rail handoff.";
264 probableCauses.push(
265 { cause: "DC-In Stage or Primary Input MOSFET Short", likelihood: "High", explanation: "High-side DC-in MOSFET (PQ101) shorted to ground, triggering power supply over-current protection." },
266 { cause: "Standby 3.3V/5V Regulator Circuit Fault", likelihood: "Medium", explanation: "Buck regulator coil (PL301/PL302) damaged or missing enabling signal from Super I/O EC." },
267 { cause: "Stuck Embedded Controller (EC) Register Lock", likelihood: "Medium", explanation: "Transient electrostatic discharge locking the EC power sequencer state machine." }
268 );
269 stepByStepPlan.push(
270 { stepNumber: 1, title: "15-Second Hard RTC/EC Drain", action: "Disconnect charger and battery. Hold power button firmly for 15 seconds to force residual discharge.", expectedOutcome: "Clear stuck EC register states." },
271 { stepNumber: 2, title: "Measure Primary DC Input (+19V/+20V)", action: "Connect power supply with multimeter. Measure voltage on the drain and source of input MOSFETs.", expectedOutcome: "Verify +19V or +20V USB-PD reaches the main power rail." },
272 { stepNumber: 3, title: "Check Standby Always-On Coils", action: "Probe coils PL301 (+3.3V_ALW) and PL302 (+5.0V_ALW) with multimeter in DC voltage mode.", expectedOutcome: "Confirm both 3.3V and 5.0V standby rails are stable." }
273 );
274 toolsAndSoftware.push("Digital Multimeter (Fluke/Aneng)", "DC Power Bench Supply", "Torx T5 / Phillips #00 Screwdrivers", "Safety Grounding Strap");
275 } else {
276 category = "hardware";
277 summary = `Hardware diagnostic assessment for reported symptom: "${reqData.symptoms}". Follow structured electrical isolation protocol.`;
278 probableCauses.push(
279 { cause: "Loose Internal Cable or Connector Latch", likelihood: "Medium", explanation: "Vibration or impact dislodging eDP display, battery, or ribbon connector." },
280 { cause: "Power Rail Fault or Drained CMOS RTC", likelihood: "Medium", explanation: "RTC clock lockup preventing board POST cycle." },
281 { cause: "Component Degradation", likelihood: "Low", explanation: "Capacitor leakage or solder fatigue on mainboard power stages." }
282 );
283 stepByStepPlan.push(
284 { stepNumber: 1, title: "Hard Power Cycle & CMOS Drain", action: "Disconnect power cord and battery, hold power button for 30 seconds, then reconnect.", expectedOutcome: "Clear transient RTC register locks." },
285 { stepNumber: 2, title: "Minimal POST Test", action: "Disconnect non-essential peripherals, Wi-Fi card, and extra storage drives. Test boot with single RAM stick.", expectedOutcome: "Identify if peripheral short is halting POST." },
286 { stepNumber: 3, title: "Inspect Connectors Under Light", action: "Check motherboard sockets for bent pins, burn marks, or cracked solder joints.", expectedOutcome: "Confirm physical board integrity." }
287 );
288 toolsAndSoftware.push("Precision Toolkit", "Digital Multimeter", "Anti-Static Mat & Wrist Strap", "Magnification Loupe");
289 }
290
291 return {
292 summary,
293 confidence,
294 recommendedCategory: category,
295 probableCauses,
296 stepByStepPlan,
297 toolsAndSoftware,
298 safetyWarnings,
299 preventativeTips,
300 isOutOfScope: false
301 };
302 }
303
304 /**
305 * Conversational Technical AI with direct grounding in all 624 guides and 8 manuals
306 */
307 export async function runTechnicalAIChat(reqData: TechnicalChatRequest): Promise<TechnicalChatResponse> {
308 const allGuides = await storage.getRepairGuides();
309 const manuals = TECHNICAL_MANUALS;
310
311 // Extract latest user message
312 const userMessages = reqData.messages.filter(m => m.role === "user");
313 const latestUserMsg = userMessages.length > 0 ? userMessages[userMessages.length - 1].content : "";
314 const queryLower = latestUserMsg.toLowerCase();
315
316 // Match relevant guides from the 624 database
317 const matchingGuides = allGuides.filter(g => {
318 const titleMatch = g.title.toLowerCase().includes(queryLower);
319 const descMatch = g.description.toLowerCase().includes(queryLower);
320 const words = queryLower.split(/\s+/).filter(w => w.length > 2);
321 const multiMatch = words.length > 0 && words.some(w => g.title.toLowerCase().includes(w));
322 return titleMatch || descMatch || multiMatch;
323 }).slice(0, 5);
324
325 // Match relevant manuals
326 const matchingManuals = manuals.filter(m => {
327 return m.title.toLowerCase().includes(queryLower) ||
328 m.summary.toLowerCase().includes(queryLower) ||
329 m.keyTopics.some(k => k.toLowerCase().includes(queryLower)) ||
330 (reqData.categoryContext && m.category === reqData.categoryContext);
331 }).slice(0, 3);
332
333 // Voltage rails matching
334 const matchingRails: { rail: string; voltage: string; location: string; description: string }[] = [];
335 manuals.forEach(m => {
336 if (m.voltageRails) {
337 m.voltageRails.forEach(r => {
338 if (queryLower.includes("rail") || queryLower.includes("volt") || queryLower.includes("power") ||
339 queryLower.includes("short") || queryLower.includes("multimeter") || queryLower.includes("pl301") ||
340 queryLower.includes(r.rail.toLowerCase().replace(/[^a-z0-9]/g, '')) ||
341 queryLower.includes("dead") || queryLower.includes("turn on") || queryLower.includes("boot")) {
342 if (!matchingRails.some(mr => mr.rail === r.rail)) {
343 matchingRails.push({
344 rail: r.rail,
345 voltage: r.voltage,
346 location: r.location,
347 description: r.description
348 });
349 }
350 }
351 });
352 }
353 });
354
355 const ai = getGenAI();
356 if (ai) {
357 // Build grounding knowledge summary
358 const contextGuides = matchingGuides.map(g => `- [Guide ID: ${g.id}] "${g.title}" (${g.category}, ${g.difficulty}, ${g.estimatedTime}): ${g.description}`).join("\n");
359 const contextManuals = matchingManuals.map(m => `- [Manual ID: ${m.id}] "${m.title}" (${m.code}): ${m.summary}`).join("\n");
360 const contextRails = matchingRails.slice(0, 4).map(r => `- ${r.rail}: ${r.voltage} (${r.location}) - ${r.description}`).join("\n");
361
362 const systemPrompt = `You are JCRGuru's Technical AI, the lead master computer hardware technician, electronics diagnostician, and board-level repair assistant.
363 You have direct access to JCRGuru's full database of 624 verified multi-brand repair guides (Apple, Dell, Lenovo, HP, ASUS, Razer, Framework, MSI, Custom PCs) and 8 comprehensive technical manuals.
364
365 YOUR CAPABILITIES & PROTOCOLS:
366 1. Provide precise, actionable technical instructions with exact fastener torque specs (e.g. 0.20 Nm M2.0), screwdriver bit types (Torx T5, Phillips #00), and test procedures.
367 2. If the user asks about board-level repair, no-power faults, or charging issues, reference exact voltage rails (e.g. +19V_DCIN, +3.3V_ALW on Coil PL301, +5V_ALW, VCCST, VCORE) and multimeter testing sequences.
368 3. If the user has a software/BSOD issue, provide exact commands (DDU in Safe Mode, DISM, SFC, WinDbg minidump triage, MemTest86).
369 4. For thermal problems, detail phase-change PTM7950 application and fan fin cleaning.
370 5. Provide relevant guide references using markdown bolding or brackets like [Guide: "Device Model: Procedure Name"].
371 6. Keep your tone professional, authoritative, helpful, and concise.
372
373 MATCHING KNOWLEDGE BASE FOR THIS QUERY:
374 Relevant Guides in Database:
375 ${contextGuides || "Database contains 624 multi-brand hardware guides for Apple, Dell, Lenovo, HP, ASUS, Razer, Framework, and Custom PCs."}
376
377 Relevant Technical Manuals:
378 ${contextManuals || "Technical manuals available: Universal Laptop Teardown, VRM Power Delivery Schematics, BSOD Minidump Manual, UEFI Crisis Flash, Ultrasonic Decontamination, PTM7950 Thermal Standards, NVMe Retrofits, DDR5 Architecture."}
379
380 Key Voltage Rails:
381 ${contextRails || "+19V_DCIN (Input), +3.3V_ALW (EC/Standby), +5.0V_ALW (Peripherals), +VCORE (CPU Core), +1.1V DDR5"}
382 `;
383
384 const contents = reqData.messages.map(m => ({
385 role: m.role === "assistant" ? "model" : "user",
386 parts: [{ text: m.content }]
387 }));
388
389 const reply = await callGeminiWithFallback(async (modelName) => {
390 const response = await ai.models.generateContent({
391 model: modelName,
392 contents: contents,
393 config: {
394 systemInstruction: systemPrompt,
395 temperature: 0.3,
396 }
397 });
398 return response.text;
399 });
400
401 if (reply) {
402 return {
403 message: reply,
404 suggestedGuides: matchingGuides.map(g => ({
405 id: g.id,
406 title: g.title,
407 category: g.category,
408 difficulty: g.difficulty,
409 estimatedTime: g.estimatedTime,
410 })),
411 suggestedManuals: matchingManuals.map(m => ({
412 id: m.id,
413 title: m.title,
414 code: m.code,
415 category: m.category
416 })),
417 voltageRailsMentioned: matchingRails.slice(0, 4),
418 quickActions: [
419 "Check +3.3V / +5V Always-On Rails",
420 "Open Matching Teardown Guide",
421 "Run Minidump / BSOD Triage",
422 "View Fastener Torque Table"
423 ]
424 };
425 }
426 }
427
428 // Deterministic local response based on knowledge base
429 return generateDeterministicChatReply(reqData, matchingGuides, matchingManuals, matchingRails);
430 }
431
432 function generateDeterministicChatReply(
433 reqData: TechnicalChatRequest,
434 guides: any[],
435 manuals: any[],
436 rails: any[]
437 ): TechnicalChatResponse {
438 const query = reqData.messages[reqData.messages.length - 1]?.content.toLowerCase() || "";
439 let message = "";
440
441 if (query.includes("power") || query.includes("turn on") || query.includes("dead") || query.includes("rail") || query.includes("charge")) {
442 message = `### ⚡ Power Delivery & No-Power Diagnostic Protocol
443
444 When troubleshooting a device that will not power on, follow the standard bench sequence:
445
446 1. **DC-In & Input Stage Isolation**:
447 - Check **+19V_DCIN** or **+20V_USB_PD** after the input MOSFETs. If voltage drops below 19V under load, check for a shorted DC jack or cracked ceramic filter capacitor.
448 2. **Always-On Standby Rails**:
449 - Verify **+3.3V_ALW** (Coil PL301) and **+5.0V_ALW** (Coil PL302). The Super I/O Embedded Controller (EC) cannot register the power button if +3.3V_ALW is missing.
450 3. **Power Button Trigger & RTC Reset**:
451 - Check that the power button signal (\`NBSWON#\`) pulls down from 3.3V to 0V when pressed.
452 - Perform a 30-second CMOS/RTC hard drain to reset stuck power state machine registers.
453
454 I have matched **${guides.length > 0 ? guides.length : "several"} verified guides** and technical schematics from our 624-guide database below:`;
455 } else if (query.includes("bsod") || query.includes("blue screen") || query.includes("crash") || query.includes("whea") || query.includes("freeze")) {
456 message = `### 🛑 Kernel Crash & BSOD Diagnostic Protocol
457
458 For Windows stop codes and system freeze triage:
459
460 1. **Clean Driver State**: Boot into Windows Safe Mode and run **Display Driver Uninstaller (DDU)** to remove residual GPU driver hooks, then install clean WHQL drivers.
461 2. **System File Integrity**: Open Administrator Terminal and execute:
462 \`\`\`bash
463 DISM /Online /Cleanup-Image /RestoreHealth
464 sfc /scannow
465 \`\`\`
466 3. **Memory Bus Stress Test**: Launch **PassMark MemTest86** from a bootable USB and complete 4 full passes to rule out defective RAM cells.
467 4. **Minidump Stack Analysis**: Open \`C:\\Windows\\Minidump\` using **WinDbg Preview** and run \`!analyze -v\` to isolate the faulting \`.sys\` kernel driver module.`;
468 } else if (query.includes("heat") || query.includes("temp") || query.includes("thermal") || query.includes("fan") || query.includes("loud") || query.includes("paste")) {
469 message = `### 🔥 Thermal Throttling & Dissipation Protocol
470
471 To eliminate thermal throttling and direct-die pump-out:
472
473 1. **Phase-Change Interface**: Apply **Honeywell PTM7950 (0.25mm)** phase-change pad on bare CPU/GPU silicon dies. Unlike conventional silicone grease, it will not pump out under thermal expansion cycles.
474 2. **Radiator Exhaust Clearance**: Clear the felt dust wall trapped between the blower fan impeller and the copper radiator fins using 99% IPA and an ESD brush.
475 3. **Torque Tightening Sequence**: Tighten heatsink retention spring screws in a cross-diagonal sequence (1 → 2 → 3 → 4) to **0.25 – 0.30 Nm** max torque to prevent die cracking.`;
476 } else if (query.includes("display") || query.includes("screen") || query.includes("black") || query.includes("edp") || query.includes("backlight")) {
477 message = `### 🖥️ Display & Backlight Troubleshooting Protocol
478
479 For black screen, no backlight, or flickering display issues:
480
481 1. **Flashlight Test**: Shine a bright light at an angle against the LCD screen while powered on. If icons or text are visible, the LCD panel is receiving video data but the **+19V Backlight Rail (VLED)** or backlight fuse (F1) is open.
482 2. **eDP Ribbon Connector Inspection**: Disconnect internal battery first. Reseat the 30-pin / 40-pin eDP connector on both motherboard and panel sides. Inspect for pulled pins.
483 3. **External Display Verification**: Connect to an external HDMI/DisplayPort monitor to isolate whether the fault is in the internal eDP pipeline or the GPU core.`;
484 } else if (query.includes("ram") || query.includes("memory") || query.includes("beep") || query.includes("post")) {
485 message = `### 🧠 RAM & Memory Subsystem Validation
486
487 For memory post codes, 3-beep codes, or random memory crashes:
488
489 1. **Single-DIMM Isolation**: Remove all RAM sticks. Clean the gold edge connectors with 99% Isopropyl Alcohol. Test each stick individually in Slot A.
490 2. **SPD / Voltage Verification**: Verify **+1.2V (DDR4)** or **+1.1V (DDR5)** rail across the RAM buck regulator coils.
491 3. **4-Pass Stress Testing**: Boot into **MemTest86+** or **Linpack Xtreme** to stress test the memory controller and trace buses for memory bit flips.`;
492 } else {
493 message = `### 🛠️ Hardware Diagnostic Analysis
494
495 I have indexed your query across our **624 multi-brand repair guides** and **8 technical engineering manuals**.
496
497 Key technician bench steps:
498 1. **Power Isolation**: Disconnect AC charger and internal battery header before touching motherboard components.
499 2. **Electrical Measurements**: Probe standby test points (**+19V_DCIN**, **+3.3V_ALW**, **+5.0V_ALW**) to isolate power sequencer states.
500 3. **Fastener Torque Standards**: Maintain **0.25–0.30 Nm** on heatsink mounts and **0.18–0.20 Nm** on M.2 SSD screws.
501
502 Explore matching repair procedures and manuals directly below:`;
503 }
504
505 return {
506 message,
507 suggestedGuides: guides.map(g => ({
508 id: g.id,
509 title: g.title,
510 category: g.category,
511 difficulty: g.difficulty,
512 estimatedTime: g.estimatedTime,
513 })),
514 suggestedManuals: manuals.map(m => ({
515 id: m.id,
516 title: m.title,
517 code: m.code,
518 category: m.category
519 })),
520 voltageRailsMentioned: rails.slice(0, 4),
521 quickActions: [
522 "Check Standby Power Rails",
523 "Run Diagnostic Flowchart",
524 "Open Software Download Hub",
525 "View Torque & Fastener Table"
526 ]
527 };
528 }