UNPKG

scai

Version:

> AI-powered CLI tool for commit messages **and** pull request reviews — using local models.

102 lines (101 loc) 3.43 kB
// Upsert file metadata into `files` export const upsertFileTemplate = ` INSERT INTO files (path, filename, summary, type, last_modified, indexed_at, embedding) VALUES (:path, :filename, :summary, :type, :lastModified, :indexedAt, :embedding) ON CONFLICT(path) DO UPDATE SET filename = excluded.filename, -- Update filename when path conflicts summary = CASE WHEN excluded.summary IS NOT NULL AND excluded.summary != files.summary THEN excluded.summary ELSE files.summary END, type = excluded.type, last_modified = excluded.last_modified, indexed_at = excluded.indexed_at, embedding = CASE WHEN excluded.embedding IS NOT NULL AND excluded.embedding != files.embedding THEN excluded.embedding ELSE files.embedding END `; // 📌 CHANGE 1: Include `filename` in SELECT + weight `filename` highest in bm25 export const fetchBm25ScoresTemplate = ` SELECT f.path, f.filename, f.summary, f.type, bm25(files_fts, 10.0, 2.0, 1.0) AS bm25Score FROM files_fts JOIN files f ON files_fts.rowid = f.id WHERE files_fts MATCH :query LIMIT 50 `; // Fetch embedding vector for a file export const fetchEmbeddingTemplate = ` SELECT embedding FROM files WHERE path = :path `; // 📌 CHANGE 2: Also added weighted `bm25()` with explicit weights here export const rawQueryTemplate = ` SELECT f.path, f.filename, f.summary, f.type, f.last_modified, f.indexed_at, bm25(files_fts, 10.0, 2.0, 1.0) AS rank FROM files_fts JOIN files f ON files_fts.rowid = f.id WHERE files_fts MATCH :query ORDER BY rank LIMIT :limit `; // Insert function metadata export const insertFunctionTemplate = ` INSERT INTO functions (file_id, name, start_line, end_line, content, embedding, lang) VALUES (:file_id, :name, :start_line, :end_line, :content, :embedding, :lang) `; // Insert function call edge export const insertFunctionCallTemplate = ` INSERT INTO function_calls (caller_id, callee_name) VALUES (:caller_id, :callee_name) `; // Mark a file as unprocessed export const markFileAsUnprocessedTemplate = ` UPDATE files SET processing_status = 'unprocessed', functions_extracted_at = NULL WHERE id = :id `; // Mark a file as extracted export const markFileAsExtractedTemplate = ` UPDATE files SET processing_status = 'extracted', functions_extracted_at = CURRENT_TIMESTAMP WHERE id = :id `; // Mark a file as skipped (not extractable) export const markFileAsSkippedTemplate = ` UPDATE files SET processing_status = 'skipped', functions_extracted_at = NULL WHERE id = :id `; // Mark a file as failed export const markFileAsFailedTemplate = ` UPDATE files SET processing_status = 'failed', functions_extracted_at = NULL WHERE id = :id `; export const selectUnprocessedFiles = ` SELECT id, path, type, summary, indexed_at, last_modified, processing_status FROM files WHERE processing_status = 'unprocessed' OR summary IS NULL OR summary = '' ORDER BY last_modified DESC LIMIT ? `; export const markFileAsSkippedByPath = ` UPDATE files SET processing_status = 'skipped', functions_extracted_at = NULL WHERE path = @path `; export const updateFileWithSummaryAndEmbedding = ` UPDATE files SET summary = @summary, embedding = @embedding, indexed_at = datetime('now') WHERE path = @path `;