@mesadev/agentblame 0.2.10 → 3.0.0

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.
Files changed (68) hide show
  1. package/dist/agentblame.js +3500 -0
  2. package/dist/blame.d.ts +4 -1
  3. package/dist/blame.js +280 -78
  4. package/dist/blame.js.map +1 -1
  5. package/dist/capture.d.ts +4 -7
  6. package/dist/capture.js +465 -467
  7. package/dist/capture.js.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +334 -72
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/analytics.d.ts +179 -0
  12. package/dist/lib/analytics.js +833 -0
  13. package/dist/lib/analytics.js.map +1 -0
  14. package/dist/lib/attribution.d.ts +54 -0
  15. package/dist/lib/attribution.js +266 -0
  16. package/dist/lib/attribution.js.map +1 -0
  17. package/dist/lib/checkpoint.d.ts +97 -0
  18. package/dist/lib/checkpoint.js +441 -0
  19. package/dist/lib/checkpoint.js.map +1 -0
  20. package/dist/lib/config.d.ts +46 -0
  21. package/dist/lib/config.js +123 -0
  22. package/dist/lib/config.js.map +1 -0
  23. package/dist/lib/database.d.ts +115 -85
  24. package/dist/lib/database.js +306 -323
  25. package/dist/lib/database.js.map +1 -1
  26. package/dist/lib/delta.d.ts +78 -0
  27. package/dist/lib/delta.js +309 -0
  28. package/dist/lib/delta.js.map +1 -0
  29. package/dist/lib/git/gitBlame.js +9 -4
  30. package/dist/lib/git/gitBlame.js.map +1 -1
  31. package/dist/lib/git/gitConfig.d.ts +5 -3
  32. package/dist/lib/git/gitConfig.js +41 -6
  33. package/dist/lib/git/gitConfig.js.map +1 -1
  34. package/dist/lib/git/gitDiff.d.ts +13 -1
  35. package/dist/lib/git/gitDiff.js +39 -7
  36. package/dist/lib/git/gitDiff.js.map +1 -1
  37. package/dist/lib/git/gitNotes.d.ts +30 -4
  38. package/dist/lib/git/gitNotes.js +140 -24
  39. package/dist/lib/git/gitNotes.js.map +1 -1
  40. package/dist/lib/hooks.d.ts +1 -0
  41. package/dist/lib/hooks.js +148 -27
  42. package/dist/lib/hooks.js.map +1 -1
  43. package/dist/lib/index.d.ts +7 -0
  44. package/dist/lib/index.js +13 -0
  45. package/dist/lib/index.js.map +1 -1
  46. package/dist/lib/storage.d.ts +163 -0
  47. package/dist/lib/storage.js +823 -0
  48. package/dist/lib/storage.js.map +1 -0
  49. package/dist/lib/trace.d.ts +118 -0
  50. package/dist/lib/trace.js +499 -0
  51. package/dist/lib/trace.js.map +1 -0
  52. package/dist/lib/types.d.ts +322 -114
  53. package/dist/lib/types.js +2 -1
  54. package/dist/lib/types.js.map +1 -1
  55. package/dist/lib/util.d.ts +8 -8
  56. package/dist/lib/util.js +18 -22
  57. package/dist/lib/util.js.map +1 -1
  58. package/dist/lib/watcher.d.ts +104 -0
  59. package/dist/lib/watcher.js +398 -0
  60. package/dist/lib/watcher.js.map +1 -0
  61. package/dist/post-merge.js +460 -421
  62. package/dist/post-merge.js.map +1 -1
  63. package/dist/process.d.ts +6 -5
  64. package/dist/process.js +182 -158
  65. package/dist/process.js.map +1 -1
  66. package/dist/sync.js +172 -131
  67. package/dist/sync.js.map +1 -1
  68. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Line Tracing Module v3
3
+ *
4
+ * Context-aware line tracing algorithm for attributing lines in committed code
5
+ * to their original AI session. Walks backwards through snapshot chain to find
6
+ * where each line was introduced.
7
+ *
8
+ * Key features:
9
+ * - Context-aware matching (uses prev/next lines to disambiguate)
10
+ * - Handles common collisions like `}`, `{`, empty lines
11
+ * - Similarity-based fallback for fuzzy context matching
12
+ */
13
+ import type { Snapshot, LineOrigin, LineContext } from "./types";
14
+ /**
15
+ * Normalize line endings (CRLF -> LF) and split into lines
16
+ */
17
+ export declare function splitLines(content: string): string[];
18
+ /**
19
+ * Pre-built index for fast line lookups
20
+ * Maps line content -> array of indices where that content appears
21
+ */
22
+ type LineIndex = Map<string, number[]>;
23
+ /**
24
+ * Trace a line's origin through the snapshot chain
25
+ * Returns the session that introduced the line, or null if it existed before AI edits
26
+ *
27
+ * @param repoRoot - Repository root path
28
+ * @param lineContent - The line content to trace
29
+ * @param context - Surrounding lines for disambiguation
30
+ * @param chain - Snapshot chain (oldest first)
31
+ */
32
+ export declare function traceLineOrigin(repoRoot: string, lineContent: string, context: LineContext, chain: Snapshot[]): Promise<LineOrigin>;
33
+ /**
34
+ * Batch trace multiple lines from the same file
35
+ * Uses pre-built indexes for O(1) line lookups instead of O(n) scans
36
+ */
37
+ export declare function traceFileLines(repoRoot: string, lines: string[], chain: Snapshot[]): Promise<LineOrigin[]>;
38
+ interface LineMatch {
39
+ index: number;
40
+ confidence: number;
41
+ }
42
+ /**
43
+ * Find a line in the snapshot using context for disambiguation
44
+ * Uses pre-built indexes for O(1) lookups
45
+ */
46
+ export declare function findLineWithContextIndexed(target: string, context: LineContext, lines: string[], exactIndex: LineIndex, normalizedIndex: LineIndex): LineMatch | null;
47
+ /**
48
+ * Find a line in the snapshot using context for disambiguation
49
+ * Legacy version without index (for single-use cases)
50
+ */
51
+ export declare function findLineWithContext(target: string, context: LineContext, lines: string[]): LineMatch | null;
52
+ /**
53
+ * Compute similarity between two strings (0-1)
54
+ * Uses a combination of normalized edit distance and token overlap
55
+ */
56
+ export declare function similarity(a: string, b: string): number;
57
+ /**
58
+ * Aggregate line-level attributions into ranges
59
+ */
60
+ export declare function aggregateToRanges(attributions: Array<{
61
+ line: number;
62
+ sessionId: string | null;
63
+ promptId?: number | null;
64
+ }>): Array<{
65
+ startLine: number;
66
+ endLine: number;
67
+ sessionId: string | null;
68
+ promptId?: number | null;
69
+ }>;
70
+ /**
71
+ * Separate AI and human ranges
72
+ */
73
+ export declare function separateRanges(ranges: Array<{
74
+ startLine: number;
75
+ endLine: number;
76
+ sessionId: string | null;
77
+ promptId?: number | null;
78
+ }>): {
79
+ aiRanges: Array<{
80
+ startLine: number;
81
+ endLine: number;
82
+ sessionId: string;
83
+ promptId?: number | null;
84
+ }>;
85
+ humanRanges: Array<{
86
+ startLine: number;
87
+ endLine: number;
88
+ }>;
89
+ };
90
+ /**
91
+ * Format ranges as compact string (e.g., "10-45,60-75")
92
+ */
93
+ export declare function formatRanges(ranges: Array<{
94
+ startLine: number;
95
+ endLine: number;
96
+ }>): string;
97
+ /**
98
+ * Parse ranges from compact string
99
+ */
100
+ export declare function parseRanges(str: string): Array<{
101
+ startLine: number;
102
+ endLine: number;
103
+ }>;
104
+ /**
105
+ * Build a map of sessionId -> files -> lines from traced results
106
+ */
107
+ export declare function buildSessionMap(fileAttributions: Map<string, Array<{
108
+ line: number;
109
+ sessionId: string | null;
110
+ }>>): Map<string, Map<string, number[]>>;
111
+ /**
112
+ * Build human ranges map from traced results
113
+ */
114
+ export declare function buildHumanMap(fileAttributions: Map<string, Array<{
115
+ line: number;
116
+ sessionId: string | null;
117
+ }>>): Map<string, number[]>;
118
+ export {};
@@ -0,0 +1,499 @@
1
+ "use strict";
2
+ /**
3
+ * Line Tracing Module v3
4
+ *
5
+ * Context-aware line tracing algorithm for attributing lines in committed code
6
+ * to their original AI session. Walks backwards through snapshot chain to find
7
+ * where each line was introduced.
8
+ *
9
+ * Key features:
10
+ * - Context-aware matching (uses prev/next lines to disambiguate)
11
+ * - Handles common collisions like `}`, `{`, empty lines
12
+ * - Similarity-based fallback for fuzzy context matching
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.splitLines = splitLines;
16
+ exports.traceLineOrigin = traceLineOrigin;
17
+ exports.traceFileLines = traceFileLines;
18
+ exports.findLineWithContextIndexed = findLineWithContextIndexed;
19
+ exports.findLineWithContext = findLineWithContext;
20
+ exports.similarity = similarity;
21
+ exports.aggregateToRanges = aggregateToRanges;
22
+ exports.separateRanges = separateRanges;
23
+ exports.formatRanges = formatRanges;
24
+ exports.parseRanges = parseRanges;
25
+ exports.buildSessionMap = buildSessionMap;
26
+ exports.buildHumanMap = buildHumanMap;
27
+ const storage_1 = require("./storage");
28
+ // =============================================================================
29
+ // String Utilities (needed early for indexing)
30
+ // =============================================================================
31
+ /**
32
+ * Normalize whitespace in a string
33
+ */
34
+ function normalizeWhitespace(s) {
35
+ return s.replace(/\s+/g, " ").trim();
36
+ }
37
+ /**
38
+ * Normalize line endings (CRLF -> LF) and split into lines
39
+ */
40
+ function splitLines(content) {
41
+ return content.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
42
+ }
43
+ /**
44
+ * Build a line index for a snapshot's content
45
+ */
46
+ function buildLineIndex(lines) {
47
+ const index = new Map();
48
+ for (let i = 0; i < lines.length; i++) {
49
+ const content = lines[i];
50
+ if (!index.has(content)) {
51
+ index.set(content, []);
52
+ }
53
+ index.get(content).push(i);
54
+ }
55
+ return index;
56
+ }
57
+ /**
58
+ * Build a normalized line index (whitespace-normalized)
59
+ */
60
+ function buildNormalizedLineIndex(lines) {
61
+ const index = new Map();
62
+ for (let i = 0; i < lines.length; i++) {
63
+ const normalized = normalizeWhitespace(lines[i]);
64
+ if (!index.has(normalized)) {
65
+ index.set(normalized, []);
66
+ }
67
+ index.get(normalized).push(i);
68
+ }
69
+ return index;
70
+ }
71
+ // =============================================================================
72
+ // Main Line Tracing
73
+ // =============================================================================
74
+ /**
75
+ * Trace a line's origin through the snapshot chain
76
+ * Returns the session that introduced the line, or null if it existed before AI edits
77
+ *
78
+ * @param repoRoot - Repository root path
79
+ * @param lineContent - The line content to trace
80
+ * @param context - Surrounding lines for disambiguation
81
+ * @param chain - Snapshot chain (oldest first)
82
+ */
83
+ async function traceLineOrigin(repoRoot, lineContent, context, chain) {
84
+ if (chain.length === 0) {
85
+ // No AI edits tracked for this file
86
+ return { sessionId: null, confidence: 1.0 };
87
+ }
88
+ // Walk backwards through snapshots (newest first)
89
+ for (let i = chain.length - 1; i >= 0; i--) {
90
+ const snapshot = chain[i];
91
+ const snapshotContent = await (0, storage_1.loadSnapshot)(repoRoot, snapshot.blobSha);
92
+ const snapshotLines = splitLines(snapshotContent);
93
+ const match = findLineWithContext(lineContent, context, snapshotLines);
94
+ if (match === null) {
95
+ // Line doesn't exist in this snapshot
96
+ // It was introduced in the NEXT snapshot (newer)
97
+ const introducer = chain[i + 1];
98
+ return {
99
+ sessionId: introducer?.sessionId || null,
100
+ confidence: 1.0,
101
+ };
102
+ }
103
+ // Update context for next iteration (earlier snapshot)
104
+ context = {
105
+ prev: snapshotLines[match.index - 1],
106
+ next: snapshotLines[match.index + 1],
107
+ };
108
+ }
109
+ // Line existed before any AI edits (original git state)
110
+ return { sessionId: null, confidence: 1.0 };
111
+ }
112
+ /**
113
+ * Batch trace multiple lines from the same file
114
+ * Uses pre-built indexes for O(1) line lookups instead of O(n) scans
115
+ */
116
+ async function traceFileLines(repoRoot, lines, chain) {
117
+ if (chain.length === 0) {
118
+ // No AI edits tracked - all lines are human/original
119
+ return lines.map(() => ({ sessionId: null, confidence: 1.0 }));
120
+ }
121
+ // Batch load all snapshots at once
122
+ const blobShas = chain.map((s) => s.blobSha);
123
+ const contents = await (0, storage_1.loadSnapshotsBatch)(repoRoot, blobShas);
124
+ // Build indexed snapshots with pre-computed lookup tables
125
+ const indexedSnapshots = chain.map((snapshot) => {
126
+ const content = contents.get(snapshot.blobSha) || "";
127
+ const snapshotLines = splitLines(content);
128
+ return {
129
+ lines: snapshotLines,
130
+ exactIndex: buildLineIndex(snapshotLines),
131
+ normalizedIndex: buildNormalizedLineIndex(snapshotLines),
132
+ sessionId: snapshot.sessionId,
133
+ };
134
+ });
135
+ const results = [];
136
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
137
+ const lineContent = lines[lineIdx];
138
+ let context = {
139
+ prev: lines[lineIdx - 1],
140
+ next: lines[lineIdx + 1],
141
+ };
142
+ let origin = { sessionId: null, confidence: 1.0 };
143
+ // Walk backwards through snapshots
144
+ let foundIntroducer = false;
145
+ for (let i = chain.length - 1; i >= 0; i--) {
146
+ const snapshot = indexedSnapshots[i];
147
+ const match = findLineWithContextIndexed(lineContent, context, snapshot.lines, snapshot.exactIndex, snapshot.normalizedIndex);
148
+ if (match === null) {
149
+ // Line was introduced in the NEXT snapshot
150
+ const introducer = chain[i + 1];
151
+ origin = {
152
+ sessionId: introducer?.sessionId || null,
153
+ confidence: 1.0,
154
+ };
155
+ foundIntroducer = true;
156
+ break;
157
+ }
158
+ // Update context for next iteration
159
+ context = {
160
+ prev: snapshot.lines[match.index - 1],
161
+ next: snapshot.lines[match.index + 1],
162
+ };
163
+ }
164
+ // If line existed in all snapshots and chain[0] is not the original (new file),
165
+ // attribute to the first AI snapshot that created the file
166
+ if (!foundIntroducer && chain[0].sessionId !== null) {
167
+ origin = {
168
+ sessionId: chain[0].sessionId,
169
+ confidence: 1.0,
170
+ };
171
+ }
172
+ results.push(origin);
173
+ }
174
+ return results;
175
+ }
176
+ /**
177
+ * Find a line in the snapshot using context for disambiguation
178
+ * Uses pre-built indexes for O(1) lookups
179
+ */
180
+ function findLineWithContextIndexed(target, context, lines, exactIndex, normalizedIndex) {
181
+ // O(1) lookup using index
182
+ const matches = exactIndex.get(target) || [];
183
+ if (matches.length === 0) {
184
+ // Try normalized match using normalized index
185
+ const normalizedTarget = normalizeWhitespace(target);
186
+ const normMatches = normalizedIndex.get(normalizedTarget) || [];
187
+ if (normMatches.length === 1) {
188
+ return { index: normMatches[0], confidence: 0.95 };
189
+ }
190
+ if (normMatches.length > 1) {
191
+ // Multiple normalized matches - use context
192
+ const contextMatch = findBestContextMatch(normMatches, context, lines);
193
+ if (contextMatch !== null) {
194
+ return { index: contextMatch, confidence: 0.9 };
195
+ }
196
+ }
197
+ return null;
198
+ }
199
+ if (matches.length === 1) {
200
+ return { index: matches[0], confidence: 1.0 };
201
+ }
202
+ // Multiple matches (e.g., `}`, empty lines) - use context
203
+ const contextMatch = findBestContextMatch(matches, context, lines);
204
+ if (contextMatch !== null) {
205
+ return { index: contextMatch, confidence: 1.0 };
206
+ }
207
+ // Fuzzy context matching as fallback
208
+ const fuzzyMatch = findFuzzyContextMatch(matches, context, lines);
209
+ if (fuzzyMatch !== null) {
210
+ return { index: fuzzyMatch.index, confidence: fuzzyMatch.confidence };
211
+ }
212
+ // Can't disambiguate - assume first match
213
+ return { index: matches[0], confidence: 0.5 };
214
+ }
215
+ /**
216
+ * Find a line in the snapshot using context for disambiguation
217
+ * Legacy version without index (for single-use cases)
218
+ */
219
+ function findLineWithContext(target, context, lines) {
220
+ // Find all exact matches
221
+ const matches = findExactMatches(target, lines);
222
+ if (matches.length === 0) {
223
+ // Try normalized match (whitespace-only differences)
224
+ const normMatches = findNormalizedMatches(target, lines);
225
+ if (normMatches.length === 1) {
226
+ return { index: normMatches[0], confidence: 0.95 };
227
+ }
228
+ if (normMatches.length > 1) {
229
+ // Multiple normalized matches - use context
230
+ const contextMatch = findBestContextMatch(normMatches, context, lines);
231
+ if (contextMatch !== null) {
232
+ return { index: contextMatch, confidence: 0.9 };
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+ if (matches.length === 1) {
238
+ return { index: matches[0], confidence: 1.0 };
239
+ }
240
+ // Multiple matches (e.g., `}`, empty lines) - use context
241
+ const contextMatch = findBestContextMatch(matches, context, lines);
242
+ if (contextMatch !== null) {
243
+ return { index: contextMatch, confidence: 1.0 };
244
+ }
245
+ // Fuzzy context matching as fallback
246
+ const fuzzyMatch = findFuzzyContextMatch(matches, context, lines);
247
+ if (fuzzyMatch !== null) {
248
+ return { index: fuzzyMatch.index, confidence: fuzzyMatch.confidence };
249
+ }
250
+ // Can't disambiguate - assume first match
251
+ return { index: matches[0], confidence: 0.5 };
252
+ }
253
+ /**
254
+ * Find all indices where line exactly matches
255
+ */
256
+ function findExactMatches(target, lines) {
257
+ const matches = [];
258
+ for (let i = 0; i < lines.length; i++) {
259
+ if (lines[i] === target) {
260
+ matches.push(i);
261
+ }
262
+ }
263
+ return matches;
264
+ }
265
+ /**
266
+ * Find all indices where normalized line matches
267
+ */
268
+ function findNormalizedMatches(target, lines) {
269
+ const normalizedTarget = normalizeWhitespace(target);
270
+ const matches = [];
271
+ for (let i = 0; i < lines.length; i++) {
272
+ if (normalizeWhitespace(lines[i]) === normalizedTarget) {
273
+ matches.push(i);
274
+ }
275
+ }
276
+ return matches;
277
+ }
278
+ /**
279
+ * Find best match using exact context comparison
280
+ */
281
+ function findBestContextMatch(candidates, context, lines) {
282
+ for (const idx of candidates) {
283
+ const prevMatch = !context.prev || lines[idx - 1] === context.prev;
284
+ const nextMatch = !context.next || lines[idx + 1] === context.next;
285
+ if (prevMatch && nextMatch) {
286
+ return idx;
287
+ }
288
+ }
289
+ // Try with just one context line matching
290
+ for (const idx of candidates) {
291
+ const prevMatch = !context.prev || lines[idx - 1] === context.prev;
292
+ const nextMatch = !context.next || lines[idx + 1] === context.next;
293
+ if (prevMatch || nextMatch) {
294
+ return idx;
295
+ }
296
+ }
297
+ return null;
298
+ }
299
+ /**
300
+ * Find best match using fuzzy context similarity
301
+ */
302
+ function findFuzzyContextMatch(candidates, context, lines) {
303
+ let best = null;
304
+ for (const idx of candidates) {
305
+ let score = 0;
306
+ let maxScore = 0;
307
+ if (context.prev !== undefined) {
308
+ score += similarity(lines[idx - 1] || "", context.prev);
309
+ maxScore += 1;
310
+ }
311
+ if (context.next !== undefined) {
312
+ score += similarity(lines[idx + 1] || "", context.next);
313
+ maxScore += 1;
314
+ }
315
+ const normalizedScore = maxScore > 0 ? score / maxScore : 0;
316
+ if (!best || normalizedScore > best.score) {
317
+ best = { index: idx, score: normalizedScore };
318
+ }
319
+ }
320
+ if (best && best.score > 0.5) {
321
+ // Map score to confidence (0.5-1.0 score -> 0.7-0.9 confidence)
322
+ const confidence = 0.7 + best.score * 0.2;
323
+ return { index: best.index, confidence };
324
+ }
325
+ return null;
326
+ }
327
+ // =============================================================================
328
+ // String Similarity
329
+ // =============================================================================
330
+ /**
331
+ * Compute similarity between two strings (0-1)
332
+ * Uses a combination of normalized edit distance and token overlap
333
+ */
334
+ function similarity(a, b) {
335
+ if (a === b)
336
+ return 1.0;
337
+ if (!a || !b)
338
+ return 0.0;
339
+ // Normalize whitespace for comparison
340
+ const normA = normalizeWhitespace(a);
341
+ const normB = normalizeWhitespace(b);
342
+ if (normA === normB)
343
+ return 0.95;
344
+ // Token-based similarity
345
+ const tokensA = tokenize(normA);
346
+ const tokensB = tokenize(normB);
347
+ if (tokensA.length === 0 && tokensB.length === 0)
348
+ return 1.0;
349
+ if (tokensA.length === 0 || tokensB.length === 0)
350
+ return 0.0;
351
+ // Jaccard similarity on tokens
352
+ const setA = new Set(tokensA);
353
+ const setB = new Set(tokensB);
354
+ let intersection = 0;
355
+ for (const token of setA) {
356
+ if (setB.has(token))
357
+ intersection++;
358
+ }
359
+ const union = setA.size + setB.size - intersection;
360
+ return union > 0 ? intersection / union : 0;
361
+ }
362
+ /**
363
+ * Tokenize a string into words/identifiers
364
+ */
365
+ function tokenize(s) {
366
+ // Split on non-alphanumeric characters
367
+ return s
368
+ .split(/[^a-zA-Z0-9_]+/)
369
+ .filter((t) => t.length > 0)
370
+ .map((t) => t.toLowerCase());
371
+ }
372
+ // =============================================================================
373
+ // Attribution Aggregation
374
+ // =============================================================================
375
+ /**
376
+ * Aggregate line-level attributions into ranges
377
+ */
378
+ function aggregateToRanges(attributions) {
379
+ if (attributions.length === 0)
380
+ return [];
381
+ // Sort by line number
382
+ const sorted = [...attributions].sort((a, b) => a.line - b.line);
383
+ const ranges = [];
384
+ let current = {
385
+ startLine: sorted[0].line,
386
+ endLine: sorted[0].line,
387
+ sessionId: sorted[0].sessionId,
388
+ promptId: sorted[0].promptId,
389
+ };
390
+ for (let i = 1; i < sorted.length; i++) {
391
+ const attr = sorted[i];
392
+ // Merge if consecutive and same session AND same prompt
393
+ if (attr.line === current.endLine + 1 &&
394
+ attr.sessionId === current.sessionId &&
395
+ attr.promptId === current.promptId) {
396
+ current.endLine = attr.line;
397
+ }
398
+ else {
399
+ ranges.push(current);
400
+ current = {
401
+ startLine: attr.line,
402
+ endLine: attr.line,
403
+ sessionId: attr.sessionId,
404
+ promptId: attr.promptId,
405
+ };
406
+ }
407
+ }
408
+ ranges.push(current);
409
+ return ranges;
410
+ }
411
+ /**
412
+ * Separate AI and human ranges
413
+ */
414
+ function separateRanges(ranges) {
415
+ const aiRanges = [];
416
+ const humanRanges = [];
417
+ for (const range of ranges) {
418
+ if (range.sessionId) {
419
+ aiRanges.push({
420
+ startLine: range.startLine,
421
+ endLine: range.endLine,
422
+ sessionId: range.sessionId,
423
+ promptId: range.promptId,
424
+ });
425
+ }
426
+ else {
427
+ humanRanges.push({
428
+ startLine: range.startLine,
429
+ endLine: range.endLine,
430
+ });
431
+ }
432
+ }
433
+ return { aiRanges, humanRanges };
434
+ }
435
+ /**
436
+ * Format ranges as compact string (e.g., "10-45,60-75")
437
+ */
438
+ function formatRanges(ranges) {
439
+ return ranges
440
+ .map((r) => r.startLine === r.endLine ? `${r.startLine}` : `${r.startLine}-${r.endLine}`)
441
+ .join(",");
442
+ }
443
+ /**
444
+ * Parse ranges from compact string
445
+ */
446
+ function parseRanges(str) {
447
+ if (!str)
448
+ return [];
449
+ return str.split(",").map((part) => {
450
+ const [start, end] = part.split("-").map((n) => parseInt(n, 10));
451
+ return {
452
+ startLine: start,
453
+ endLine: end ?? start,
454
+ };
455
+ });
456
+ }
457
+ // =============================================================================
458
+ // Session Attribution Map
459
+ // =============================================================================
460
+ /**
461
+ * Build a map of sessionId -> files -> lines from traced results
462
+ */
463
+ function buildSessionMap(fileAttributions) {
464
+ const sessionMap = new Map();
465
+ for (const [filePath, attributions] of fileAttributions) {
466
+ for (const { line, sessionId } of attributions) {
467
+ if (!sessionId)
468
+ continue;
469
+ if (!sessionMap.has(sessionId)) {
470
+ sessionMap.set(sessionId, new Map());
471
+ }
472
+ const fileMap = sessionMap.get(sessionId);
473
+ if (!fileMap.has(filePath)) {
474
+ fileMap.set(filePath, []);
475
+ }
476
+ fileMap.get(filePath).push(line);
477
+ }
478
+ }
479
+ return sessionMap;
480
+ }
481
+ /**
482
+ * Build human ranges map from traced results
483
+ */
484
+ function buildHumanMap(fileAttributions) {
485
+ const humanMap = new Map();
486
+ for (const [filePath, attributions] of fileAttributions) {
487
+ const humanLines = [];
488
+ for (const { line, sessionId } of attributions) {
489
+ if (!sessionId) {
490
+ humanLines.push(line);
491
+ }
492
+ }
493
+ if (humanLines.length > 0) {
494
+ humanMap.set(filePath, humanLines);
495
+ }
496
+ }
497
+ return humanMap;
498
+ }
499
+ //# sourceMappingURL=trace.js.map