@mesadev/agentblame 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capture.js +21 -18
- package/dist/capture.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +65 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/database.d.ts +124 -0
- package/dist/lib/database.js +490 -0
- package/dist/lib/database.js.map +1 -0
- package/dist/lib/db.d.ts +2 -1
- package/dist/lib/db.js +4 -3
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/git/gitConfig.d.ts +10 -9
- package/dist/lib/git/gitConfig.js +17 -51
- package/dist/lib/git/gitConfig.js.map +1 -1
- package/dist/lib/hooks.d.ts +0 -8
- package/dist/lib/hooks.js +28 -52
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +2 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/types.d.ts +0 -64
- package/dist/lib/util.d.ts +6 -12
- package/dist/lib/util.js +18 -22
- package/dist/lib/util.js.map +1 -1
- package/dist/process.js +35 -32
- package/dist/process.js.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite Database Module
|
|
4
|
+
*
|
|
5
|
+
* Handles persistent storage of AI edits for attribution matching.
|
|
6
|
+
* Uses Bun's built-in SQLite for high-performance lookups.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getDbPath = getDbPath;
|
|
43
|
+
exports.getDatabase = getDatabase;
|
|
44
|
+
exports.closeDatabase = closeDatabase;
|
|
45
|
+
exports.initDatabase = initDatabase;
|
|
46
|
+
exports.insertEdit = insertEdit;
|
|
47
|
+
exports.findByExactHash = findByExactHash;
|
|
48
|
+
exports.findByNormalizedHash = findByNormalizedHash;
|
|
49
|
+
exports.findEditsByFile = findEditsByFile;
|
|
50
|
+
exports.getEditLines = getEditLines;
|
|
51
|
+
exports.findBySubstring = findBySubstring;
|
|
52
|
+
exports.findLineMatch = findLineMatch;
|
|
53
|
+
exports.markEditAsMatched = markEditAsMatched;
|
|
54
|
+
exports.markEditsAsMatched = markEditsAsMatched;
|
|
55
|
+
exports.cleanupOldEntries = cleanupOldEntries;
|
|
56
|
+
exports.getPendingEditCount = getPendingEditCount;
|
|
57
|
+
exports.getRecentPendingEdits = getRecentPendingEdits;
|
|
58
|
+
const bun_sqlite_1 = require("bun:sqlite");
|
|
59
|
+
const fs = __importStar(require("node:fs"));
|
|
60
|
+
const path = __importStar(require("node:path"));
|
|
61
|
+
const util_1 = require("./util");
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// Database Schema
|
|
64
|
+
// =============================================================================
|
|
65
|
+
const SCHEMA = `
|
|
66
|
+
-- Main edits table (one row per AI edit operation)
|
|
67
|
+
CREATE TABLE IF NOT EXISTS edits (
|
|
68
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
69
|
+
timestamp TEXT NOT NULL,
|
|
70
|
+
provider TEXT NOT NULL,
|
|
71
|
+
file_path TEXT NOT NULL,
|
|
72
|
+
model TEXT,
|
|
73
|
+
content TEXT NOT NULL,
|
|
74
|
+
content_hash TEXT NOT NULL,
|
|
75
|
+
content_hash_normalized TEXT NOT NULL,
|
|
76
|
+
edit_type TEXT NOT NULL,
|
|
77
|
+
old_content TEXT,
|
|
78
|
+
status TEXT DEFAULT 'pending',
|
|
79
|
+
matched_commit TEXT,
|
|
80
|
+
matched_at TEXT
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
-- Lines table (one row per line in an edit)
|
|
84
|
+
CREATE TABLE IF NOT EXISTS lines (
|
|
85
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
86
|
+
edit_id INTEGER NOT NULL,
|
|
87
|
+
content TEXT NOT NULL,
|
|
88
|
+
hash TEXT NOT NULL,
|
|
89
|
+
hash_normalized TEXT NOT NULL,
|
|
90
|
+
FOREIGN KEY (edit_id) REFERENCES edits(id) ON DELETE CASCADE
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
-- Indexes for fast lookup
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_lines_hash ON lines(hash);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_lines_hash_normalized ON lines(hash_normalized);
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_edits_status ON edits(status);
|
|
97
|
+
CREATE INDEX IF NOT EXISTS idx_edits_file_path ON edits(file_path);
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_edits_content_hash ON edits(content_hash);
|
|
99
|
+
`;
|
|
100
|
+
// =============================================================================
|
|
101
|
+
// Database Connection
|
|
102
|
+
// =============================================================================
|
|
103
|
+
let dbInstance = null;
|
|
104
|
+
/**
|
|
105
|
+
* Get the database file path
|
|
106
|
+
*/
|
|
107
|
+
function getDbPath() {
|
|
108
|
+
return path.join((0, util_1.getAgentBlameDir)(), "agentblame.db");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Initialize and return the database connection
|
|
112
|
+
*/
|
|
113
|
+
function getDatabase() {
|
|
114
|
+
if (dbInstance) {
|
|
115
|
+
return dbInstance;
|
|
116
|
+
}
|
|
117
|
+
const dbPath = getDbPath();
|
|
118
|
+
const dbDir = path.dirname(dbPath);
|
|
119
|
+
// Ensure directory exists
|
|
120
|
+
if (!fs.existsSync(dbDir)) {
|
|
121
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
// Create database connection
|
|
124
|
+
dbInstance = new bun_sqlite_1.Database(dbPath);
|
|
125
|
+
// Enable foreign keys and WAL mode for better performance
|
|
126
|
+
dbInstance.exec("PRAGMA foreign_keys = ON");
|
|
127
|
+
dbInstance.exec("PRAGMA journal_mode = WAL");
|
|
128
|
+
// Create tables and indexes
|
|
129
|
+
dbInstance.exec(SCHEMA);
|
|
130
|
+
return dbInstance;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Close the database connection
|
|
134
|
+
*/
|
|
135
|
+
function closeDatabase() {
|
|
136
|
+
if (dbInstance) {
|
|
137
|
+
dbInstance.close();
|
|
138
|
+
dbInstance = null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Initialize database (creates file and schema if needed)
|
|
143
|
+
* Call this during install to ensure DB is ready
|
|
144
|
+
*/
|
|
145
|
+
function initDatabase() {
|
|
146
|
+
const db = getDatabase();
|
|
147
|
+
// Database is initialized by getDatabase()
|
|
148
|
+
// Just verify it's working
|
|
149
|
+
db.exec("SELECT 1");
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Insert a new AI edit into the database
|
|
153
|
+
*/
|
|
154
|
+
function insertEdit(params) {
|
|
155
|
+
const db = getDatabase();
|
|
156
|
+
const editStmt = db.prepare(`
|
|
157
|
+
INSERT INTO edits (
|
|
158
|
+
timestamp, provider, file_path, model, content,
|
|
159
|
+
content_hash, content_hash_normalized, edit_type, old_content
|
|
160
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
161
|
+
`);
|
|
162
|
+
const result = editStmt.run(params.timestamp, params.provider, params.file_path, params.model, params.content, params.content_hash, params.content_hash_normalized, params.edit_type, params.old_content || null);
|
|
163
|
+
const editId = Number(result.lastInsertRowid);
|
|
164
|
+
// Insert lines
|
|
165
|
+
const lineStmt = db.prepare(`
|
|
166
|
+
INSERT INTO lines (edit_id, content, hash, hash_normalized)
|
|
167
|
+
VALUES (?, ?, ?, ?)
|
|
168
|
+
`);
|
|
169
|
+
for (const line of params.lines) {
|
|
170
|
+
lineStmt.run(editId, line.content, line.hash, line.hash_normalized);
|
|
171
|
+
}
|
|
172
|
+
return editId;
|
|
173
|
+
}
|
|
174
|
+
// =============================================================================
|
|
175
|
+
// Query Operations (used by process.ts for matching)
|
|
176
|
+
// =============================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Find a line match by exact hash
|
|
179
|
+
* Returns the edit and line if found, with same-file matches preferred
|
|
180
|
+
*/
|
|
181
|
+
function findByExactHash(hash, filePath) {
|
|
182
|
+
const db = getDatabase();
|
|
183
|
+
// First try same-file match
|
|
184
|
+
const sameFileStmt = db.prepare(`
|
|
185
|
+
SELECT
|
|
186
|
+
l.id as line_id, l.edit_id, l.content as line_content,
|
|
187
|
+
l.hash, l.hash_normalized,
|
|
188
|
+
e.*
|
|
189
|
+
FROM lines l
|
|
190
|
+
JOIN edits e ON l.edit_id = e.id
|
|
191
|
+
WHERE l.hash = ? AND (
|
|
192
|
+
e.file_path = ? OR
|
|
193
|
+
e.file_path LIKE ? OR
|
|
194
|
+
? LIKE '%' || substr(e.file_path, instr(e.file_path, '/') + 1)
|
|
195
|
+
)
|
|
196
|
+
ORDER BY e.timestamp DESC
|
|
197
|
+
LIMIT 1
|
|
198
|
+
`);
|
|
199
|
+
const fileName = filePath.split("/").pop() || "";
|
|
200
|
+
let row = sameFileStmt.get(hash, filePath, `%${fileName}`, filePath);
|
|
201
|
+
// If no same-file match, try any match
|
|
202
|
+
if (!row) {
|
|
203
|
+
const anyStmt = db.prepare(`
|
|
204
|
+
SELECT
|
|
205
|
+
l.id as line_id, l.edit_id, l.content as line_content,
|
|
206
|
+
l.hash, l.hash_normalized,
|
|
207
|
+
e.*
|
|
208
|
+
FROM lines l
|
|
209
|
+
JOIN edits e ON l.edit_id = e.id
|
|
210
|
+
WHERE l.hash = ?
|
|
211
|
+
ORDER BY e.timestamp DESC
|
|
212
|
+
LIMIT 1
|
|
213
|
+
`);
|
|
214
|
+
row = anyStmt.get(hash);
|
|
215
|
+
}
|
|
216
|
+
if (!row)
|
|
217
|
+
return null;
|
|
218
|
+
return {
|
|
219
|
+
edit: rowToEdit(row),
|
|
220
|
+
line: {
|
|
221
|
+
id: row.line_id,
|
|
222
|
+
edit_id: row.edit_id,
|
|
223
|
+
content: row.line_content,
|
|
224
|
+
hash: row.hash,
|
|
225
|
+
hash_normalized: row.hash_normalized,
|
|
226
|
+
},
|
|
227
|
+
matchType: "exact_hash",
|
|
228
|
+
confidence: 1.0,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Find a line match by normalized hash
|
|
233
|
+
*/
|
|
234
|
+
function findByNormalizedHash(hashNormalized, filePath) {
|
|
235
|
+
const db = getDatabase();
|
|
236
|
+
const fileName = filePath.split("/").pop() || "";
|
|
237
|
+
// First try same-file match
|
|
238
|
+
const sameFileStmt = db.prepare(`
|
|
239
|
+
SELECT
|
|
240
|
+
l.id as line_id, l.edit_id, l.content as line_content,
|
|
241
|
+
l.hash, l.hash_normalized,
|
|
242
|
+
e.*
|
|
243
|
+
FROM lines l
|
|
244
|
+
JOIN edits e ON l.edit_id = e.id
|
|
245
|
+
WHERE l.hash_normalized = ? AND (
|
|
246
|
+
e.file_path = ? OR
|
|
247
|
+
e.file_path LIKE ? OR
|
|
248
|
+
? LIKE '%' || substr(e.file_path, instr(e.file_path, '/') + 1)
|
|
249
|
+
)
|
|
250
|
+
ORDER BY e.timestamp DESC
|
|
251
|
+
LIMIT 1
|
|
252
|
+
`);
|
|
253
|
+
let row = sameFileStmt.get(hashNormalized, filePath, `%${fileName}`, filePath);
|
|
254
|
+
if (!row) {
|
|
255
|
+
const anyStmt = db.prepare(`
|
|
256
|
+
SELECT
|
|
257
|
+
l.id as line_id, l.edit_id, l.content as line_content,
|
|
258
|
+
l.hash, l.hash_normalized,
|
|
259
|
+
e.*
|
|
260
|
+
FROM lines l
|
|
261
|
+
JOIN edits e ON l.edit_id = e.id
|
|
262
|
+
WHERE l.hash_normalized = ?
|
|
263
|
+
ORDER BY e.timestamp DESC
|
|
264
|
+
LIMIT 1
|
|
265
|
+
`);
|
|
266
|
+
row = anyStmt.get(hashNormalized);
|
|
267
|
+
}
|
|
268
|
+
if (!row)
|
|
269
|
+
return null;
|
|
270
|
+
return {
|
|
271
|
+
edit: rowToEdit(row),
|
|
272
|
+
line: {
|
|
273
|
+
id: row.line_id,
|
|
274
|
+
edit_id: row.edit_id,
|
|
275
|
+
content: row.line_content,
|
|
276
|
+
hash: row.hash,
|
|
277
|
+
hash_normalized: row.hash_normalized,
|
|
278
|
+
},
|
|
279
|
+
matchType: "normalized_hash",
|
|
280
|
+
confidence: 0.95,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Find edits for a specific file (used for substring matching fallback)
|
|
285
|
+
*/
|
|
286
|
+
function findEditsByFile(filePath) {
|
|
287
|
+
const db = getDatabase();
|
|
288
|
+
const fileName = filePath.split("/").pop() || "";
|
|
289
|
+
const stmt = db.prepare(`
|
|
290
|
+
SELECT * FROM edits
|
|
291
|
+
WHERE file_path = ? OR
|
|
292
|
+
file_path LIKE ? OR
|
|
293
|
+
? LIKE '%' || substr(file_path, instr(file_path, '/') + 1)
|
|
294
|
+
ORDER BY timestamp DESC
|
|
295
|
+
`);
|
|
296
|
+
const rows = stmt.all(filePath, `%${fileName}`, filePath);
|
|
297
|
+
return rows.map(rowToEdit);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get lines for a specific edit
|
|
301
|
+
*/
|
|
302
|
+
function getEditLines(editId) {
|
|
303
|
+
const db = getDatabase();
|
|
304
|
+
const stmt = db.prepare(`SELECT * FROM lines WHERE edit_id = ?`);
|
|
305
|
+
return stmt.all(editId);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Find match using substring containment (Strategy 3 & 4)
|
|
309
|
+
* Only called when hash matches fail
|
|
310
|
+
*/
|
|
311
|
+
function findBySubstring(lineContent, filePath) {
|
|
312
|
+
const normalizedLine = lineContent.trim();
|
|
313
|
+
// Skip trivial lines
|
|
314
|
+
if (normalizedLine.length <= 10)
|
|
315
|
+
return null;
|
|
316
|
+
const edits = findEditsByFile(filePath);
|
|
317
|
+
// Strategy 3: Line contained in AI edit content
|
|
318
|
+
for (const edit of edits) {
|
|
319
|
+
if (edit.content.includes(normalizedLine)) {
|
|
320
|
+
return {
|
|
321
|
+
edit,
|
|
322
|
+
line: {
|
|
323
|
+
id: 0,
|
|
324
|
+
edit_id: edit.id,
|
|
325
|
+
content: normalizedLine,
|
|
326
|
+
hash: "",
|
|
327
|
+
hash_normalized: "",
|
|
328
|
+
},
|
|
329
|
+
matchType: "line_in_ai_content",
|
|
330
|
+
confidence: 0.9,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Strategy 4: AI content contained in line
|
|
335
|
+
for (const edit of edits) {
|
|
336
|
+
const lines = getEditLines(edit.id);
|
|
337
|
+
for (const aiLine of lines) {
|
|
338
|
+
const trimmedAiLine = aiLine.content.trim();
|
|
339
|
+
if (trimmedAiLine.length > 10 && normalizedLine.includes(trimmedAiLine)) {
|
|
340
|
+
const ratio = trimmedAiLine.length / normalizedLine.length;
|
|
341
|
+
if (ratio > 0.5) {
|
|
342
|
+
return {
|
|
343
|
+
edit,
|
|
344
|
+
line: aiLine,
|
|
345
|
+
matchType: "ai_content_in_line",
|
|
346
|
+
confidence: 0.85,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Find a line match using the priority strategy:
|
|
356
|
+
* 1. Exact hash match (1.0)
|
|
357
|
+
* 2. Normalized hash match (0.95)
|
|
358
|
+
* 3. Line contained in AI content (0.9)
|
|
359
|
+
* 4. AI content contained in line (0.85)
|
|
360
|
+
*/
|
|
361
|
+
function findLineMatch(lineContent, lineHash, lineHashNormalized, filePath) {
|
|
362
|
+
// Strategy 1: Exact hash
|
|
363
|
+
let match = findByExactHash(lineHash, filePath);
|
|
364
|
+
if (match)
|
|
365
|
+
return match;
|
|
366
|
+
// Strategy 2: Normalized hash
|
|
367
|
+
match = findByNormalizedHash(lineHashNormalized, filePath);
|
|
368
|
+
if (match)
|
|
369
|
+
return match;
|
|
370
|
+
// Strategy 3 & 4: Substring matching (expensive, only if hashes fail)
|
|
371
|
+
match = findBySubstring(lineContent, filePath);
|
|
372
|
+
if (match)
|
|
373
|
+
return match;
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
// =============================================================================
|
|
377
|
+
// Update Operations
|
|
378
|
+
// =============================================================================
|
|
379
|
+
/**
|
|
380
|
+
* Mark an edit as matched to a commit
|
|
381
|
+
*/
|
|
382
|
+
function markEditAsMatched(editId, commitSha) {
|
|
383
|
+
const db = getDatabase();
|
|
384
|
+
const stmt = db.prepare(`
|
|
385
|
+
UPDATE edits
|
|
386
|
+
SET status = 'matched', matched_commit = ?, matched_at = ?
|
|
387
|
+
WHERE id = ?
|
|
388
|
+
`);
|
|
389
|
+
stmt.run(commitSha, new Date().toISOString(), editId);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Mark multiple edits as matched
|
|
393
|
+
*/
|
|
394
|
+
function markEditsAsMatched(editIds, commitSha) {
|
|
395
|
+
const db = getDatabase();
|
|
396
|
+
const timestamp = new Date().toISOString();
|
|
397
|
+
const stmt = db.prepare(`
|
|
398
|
+
UPDATE edits
|
|
399
|
+
SET status = 'matched', matched_commit = ?, matched_at = ?
|
|
400
|
+
WHERE id = ?
|
|
401
|
+
`);
|
|
402
|
+
db.exec("BEGIN TRANSACTION");
|
|
403
|
+
try {
|
|
404
|
+
for (const editId of editIds) {
|
|
405
|
+
stmt.run(commitSha, timestamp, editId);
|
|
406
|
+
}
|
|
407
|
+
db.exec("COMMIT");
|
|
408
|
+
}
|
|
409
|
+
catch (err) {
|
|
410
|
+
db.exec("ROLLBACK");
|
|
411
|
+
throw err;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// =============================================================================
|
|
415
|
+
// Cleanup Operations
|
|
416
|
+
// =============================================================================
|
|
417
|
+
/**
|
|
418
|
+
* Clean up old entries
|
|
419
|
+
* - Removes matched entries older than maxAgeDays
|
|
420
|
+
* - Removes unmatched entries older than expireDays
|
|
421
|
+
*/
|
|
422
|
+
function cleanupOldEntries(maxAgeDays = 7, expireDays = 30) {
|
|
423
|
+
const db = getDatabase();
|
|
424
|
+
// Count before
|
|
425
|
+
const beforeCount = db.prepare("SELECT COUNT(*) as count FROM edits").get().count;
|
|
426
|
+
// Delete old matched entries
|
|
427
|
+
db.prepare(`
|
|
428
|
+
DELETE FROM edits
|
|
429
|
+
WHERE status = 'matched'
|
|
430
|
+
AND datetime(matched_at) < datetime('now', '-' || ? || ' days')
|
|
431
|
+
`).run(maxAgeDays);
|
|
432
|
+
// Delete old unmatched entries
|
|
433
|
+
db.prepare(`
|
|
434
|
+
DELETE FROM edits
|
|
435
|
+
WHERE (status IS NULL OR status = 'pending')
|
|
436
|
+
AND datetime(timestamp) < datetime('now', '-' || ? || ' days')
|
|
437
|
+
`).run(expireDays);
|
|
438
|
+
// Count after
|
|
439
|
+
const afterCount = db.prepare("SELECT COUNT(*) as count FROM edits").get().count;
|
|
440
|
+
return {
|
|
441
|
+
removed: beforeCount - afterCount,
|
|
442
|
+
kept: afterCount,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Get count of pending edits
|
|
447
|
+
*/
|
|
448
|
+
function getPendingEditCount() {
|
|
449
|
+
const db = getDatabase();
|
|
450
|
+
const result = db.prepare(`
|
|
451
|
+
SELECT COUNT(*) as count FROM edits
|
|
452
|
+
WHERE status IS NULL OR status = 'pending'
|
|
453
|
+
`).get();
|
|
454
|
+
return result.count;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Get recent pending edits for status display
|
|
458
|
+
*/
|
|
459
|
+
function getRecentPendingEdits(limit = 5) {
|
|
460
|
+
const db = getDatabase();
|
|
461
|
+
const stmt = db.prepare(`
|
|
462
|
+
SELECT * FROM edits
|
|
463
|
+
WHERE status IS NULL OR status = 'pending'
|
|
464
|
+
ORDER BY timestamp DESC
|
|
465
|
+
LIMIT ?
|
|
466
|
+
`);
|
|
467
|
+
const rows = stmt.all(limit);
|
|
468
|
+
return rows.map(rowToEdit);
|
|
469
|
+
}
|
|
470
|
+
// =============================================================================
|
|
471
|
+
// Helpers
|
|
472
|
+
// =============================================================================
|
|
473
|
+
function rowToEdit(row) {
|
|
474
|
+
return {
|
|
475
|
+
id: row.id,
|
|
476
|
+
timestamp: row.timestamp,
|
|
477
|
+
provider: row.provider,
|
|
478
|
+
file_path: row.file_path,
|
|
479
|
+
model: row.model,
|
|
480
|
+
content: row.content,
|
|
481
|
+
content_hash: row.content_hash,
|
|
482
|
+
content_hash_normalized: row.content_hash_normalized,
|
|
483
|
+
edit_type: row.edit_type,
|
|
484
|
+
old_content: row.old_content,
|
|
485
|
+
status: row.status,
|
|
486
|
+
matched_commit: row.matched_commit,
|
|
487
|
+
matched_at: row.matched_at,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/lib/database.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/db.d.ts
CHANGED
|
@@ -8,8 +8,9 @@ import type { CapturedLine, PendingEdit, MatchType } from "./types";
|
|
|
8
8
|
import { computeContentHash, computeNormalizedHash } from "./util";
|
|
9
9
|
/**
|
|
10
10
|
* Read all pending edits from log files
|
|
11
|
+
* @param includeMatched - If true, also include already-matched edits (for re-matching across branches)
|
|
11
12
|
*/
|
|
12
|
-
export declare function readPendingEdits(): PendingEdit[];
|
|
13
|
+
export declare function readPendingEdits(includeMatched?: boolean): PendingEdit[];
|
|
13
14
|
/**
|
|
14
15
|
* Build a hash index from pending edits for fast line lookup
|
|
15
16
|
*/
|
package/dist/lib/db.js
CHANGED
|
@@ -55,8 +55,9 @@ Object.defineProperty(exports, "computeNormalizedHash", { enumerable: true, get:
|
|
|
55
55
|
// =============================================================================
|
|
56
56
|
/**
|
|
57
57
|
* Read all pending edits from log files
|
|
58
|
+
* @param includeMatched - If true, also include already-matched edits (for re-matching across branches)
|
|
58
59
|
*/
|
|
59
|
-
function readPendingEdits() {
|
|
60
|
+
function readPendingEdits(includeMatched = false) {
|
|
60
61
|
const logsDir = (0, util_1.getLogsDir)();
|
|
61
62
|
const edits = [];
|
|
62
63
|
if (!fs.existsSync(logsDir)) {
|
|
@@ -73,8 +74,8 @@ function readPendingEdits() {
|
|
|
73
74
|
for (let i = 0; i < lines.length; i++) {
|
|
74
75
|
try {
|
|
75
76
|
const entry = JSON.parse(lines[i]);
|
|
76
|
-
// Skip already matched entries
|
|
77
|
-
if (entry.status === "matched") {
|
|
77
|
+
// Skip already matched entries unless includeMatched is true
|
|
78
|
+
if (entry.status === "matched" && !includeMatched) {
|
|
78
79
|
continue;
|
|
79
80
|
}
|
|
80
81
|
// Validate required fields
|
package/dist/lib/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/lib/db.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/lib/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Git configuration for Agent Blame notes
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Use fetchNotes() to manually fetch when needed.
|
|
4
|
+
* Notes are pushed explicitly by the post-commit hook after processing,
|
|
5
|
+
* rather than via push refspec (which fails if notes don't exist).
|
|
7
6
|
*/
|
|
8
7
|
/**
|
|
9
|
-
* Configure
|
|
10
|
-
*
|
|
8
|
+
* Configure notes sync for a repository.
|
|
9
|
+
* This is now a no-op - notes are pushed by the post-commit hook instead.
|
|
10
|
+
* Keeping the function for API compatibility.
|
|
11
11
|
*/
|
|
12
|
-
export declare function configureNotesSync(
|
|
12
|
+
export declare function configureNotesSync(_repoRoot: string): Promise<boolean>;
|
|
13
13
|
/**
|
|
14
|
-
* Check if notes sync is already configured
|
|
14
|
+
* Check if notes sync is already configured (legacy - always returns false)
|
|
15
15
|
*/
|
|
16
|
-
export declare function isNotesSyncConfigured(
|
|
16
|
+
export declare function isNotesSyncConfigured(_repoRoot: string): Promise<boolean>;
|
|
17
17
|
/**
|
|
18
|
-
* Remove notes sync configuration
|
|
18
|
+
* Remove notes sync configuration.
|
|
19
|
+
* Cleans up any push/fetch refspecs from older versions.
|
|
19
20
|
*/
|
|
20
21
|
export declare function removeNotesSync(repoRoot: string): Promise<boolean>;
|