const fs = require('fs'); const path = require('path'); const e2eDir = 'tests/e2e'; const files = fs.readdirSync(e2eDir).filter(f => f.endsWith('.spec.ts')); files.forEach(file => { if (file === 'onboarding.spec.ts') return; const p = path.join(e2eDir, file); let content = fs.readFileSync(p, 'utf8'); // Add fs and path imports if missing if (!content.includes(`import * as fs from 'fs';`)) { content = `import * as fs from 'fs';\nimport * as path from 'path';\n` + content; } // Replace the old bypass logic block entirely (if it exists) content = content.replace(/\/\/ Bypass onboarding by filling it if visible[\s\S]*?\} catch\(e\) \{\n\s*\/\/ Ignore if not found\n\s*\}/g, ''); // Inject the config.json writing before electron.launch // Find the string `--user-data-dir=` to extract the directory path const match = content.match(/--user-data-dir=([^']+)'/); if (match) { const userDataDir = match[1]; // Inject fs.writeFileSync before electronApp = await electron.launch const injectStr = ` // Pre-fill d3ro-voice-config.json to bypass onboarding const userDataDir = '${userDataDir}'; fs.mkdirSync(userDataDir, { recursive: true }); fs.writeFileSync(path.join(userDataDir, 'd3ro-voice-config.json'), JSON.stringify({ onboardingCompleted: true, appUsageMode: 'online', llmBackend: 'online' })); electronApp = await electron.launch`; content = content.replace(/electronApp = await electron\.launch/, injectStr); } fs.writeFileSync(p, content); });