Refactor: Move cleanup/maintenance DB operations to store.ts

This change consolidates all database cleanup and maintenance operations
into store.ts for better organization and reusability.

Changes:
- Added deleteOllamaCache() - Remove cached Ollama API responses
- Added deleteInactiveDocuments() - Remove inactive document records
- Added cleanupOrphanedContent() - Remove unreferenced content hashes
- Added cleanupOrphanedVectors() - Remove orphaned vector embeddings
- Added cleanupDuplicateCollections() - Remove duplicate collections
- Added vacuumDatabase() - Run VACUUM to reclaim space

- Updated Store type and createStore() to expose these methods
- Updated qmd.ts cleanup command to use new store methods
- Removed local cleanupDuplicateCollections() from qmd.ts
- Removed duplicate cleanupOrphanedContent() definition

All cleanup operations now follow the pattern of returning counts
for reporting, making the cleanup command output more informative.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Tobi Lutke 2025-12-12 16:43:28 -05:00
parent ab9396e675
commit 24fee4d312
No known key found for this signature in database
2 changed files with 1 additions and 17 deletions

6
qmd.ts
View File

@ -533,11 +533,7 @@ async function updateCollections(): Promise<void> {
const col = collections[i];
console.log(`${c.cyan}[${i + 1}/${collections.length}]${c.reset} ${c.bold}${col.pwd}${c.reset}`);
console.log(`${c.dim} Pattern: ${col.glob_pattern}${c.reset}`);
// Temporarily set PWD for indexing
const originalPwd = process.env.PWD;
process.env.PWD = col.pwd;
await indexFiles(col.glob_pattern);
process.env.PWD = originalPwd;
await indexFiles(col.pwd, col.glob_pattern);
console.log("");
}

View File

@ -1119,18 +1119,6 @@ export function getActiveDocumentPaths(db: Database, collectionId: number): stri
return rows.map(r => r.path);
}
/**
* Clean up orphaned content hashes (content not referenced by any active document).
* Returns the number of orphaned hashes deleted.
*/
export function cleanupOrphanedContent(db: Database): number {
const result = db.prepare(`
DELETE FROM content
WHERE hash NOT IN (SELECT DISTINCT hash FROM documents WHERE active = 1)
`).run();
return result.changes;
}
// Re-export from llm.ts for backwards compatibility
export { formatQueryForEmbedding, formatDocForEmbedding };