UNPKG

scai

Version:

> **AI-powered CLI for local code analysis, commit message suggestions, and natural-language queries.** 100% local, private, GDPR-friendly, made in Denmark/EU with ❤️.

79 lines (78 loc) 2.84 kB
import fs from 'fs'; import path from 'path'; import lockfile from 'proper-lockfile'; import readline from 'readline'; import { backupScaiFolder } from '../db/backup.js'; import { getDbPathForRepo, getDbForRepo } from '../db/client.js'; import chalk from 'chalk'; export async function resetDatabase() { const dbPath = getDbPathForRepo(); console.log(`⚠️ You are about to delete the database at: ${dbPath}`); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const confirm = await new Promise((resolve) => { rl.question('Are you sure you want to proceed? (y/N): ', (answer) => { rl.close(); resolve(answer.trim().toLowerCase() === 'y'); }); }); if (!confirm) { console.log('❌ Reset aborted. Database was not deleted.'); return; } console.log('🔁 Backing up existing .scai folder...'); await backupScaiFolder(); // Close the DB connection try { const db = getDbForRepo(); db.close(); console.log('🔒 Closed SQLite database connection.'); } catch (err) { console.warn('⚠️ Could not close database:', err instanceof Error ? err.message : err); } // Release lockfile if present try { const releaseLock = await lockfile.unlock(dbPath).catch(() => null); if (releaseLock) { console.log('🔓 Released database lock.'); } } catch (err) { console.warn('⚠️ Failed to release database lock:', err instanceof Error ? err.message : err); } // Delete DB and related files const dbDir = path.dirname(dbPath); const dbBase = path.basename(dbPath); const dbPrefix = dbBase.replace(/\.sqlite$/, ''); const filesToDelete = [ `${dbPath}`, path.join(dbDir, `${dbPrefix}.sqlite-wal`), path.join(dbDir, `${dbPrefix}.sqlite-shm`), ]; const lockDir = `${dbPath}.lock`; for (const file of filesToDelete) { if (fs.existsSync(file)) { try { fs.unlinkSync(file); console.log(`🧹 Deleted ${path.basename(file)}`); } catch (err) { console.error(`❌ Failed to delete ${file}:`, err instanceof Error ? err.message : err); } } } // Clean up lock directory if (fs.existsSync(lockDir)) { try { fs.rmSync(lockDir, { recursive: true, force: true }); console.log('🧹 Removed leftover lock directory.'); } catch (err) { console.warn('⚠️ Failed to remove lock directory:', err instanceof Error ? err.message : err); } } console.log('✅ Database has been fully reset. ' + chalk.yellow('You can now re-run: scai index start')); }