@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.
- package/dist/agentblame.js +3500 -0
- package/dist/blame.d.ts +4 -1
- package/dist/blame.js +280 -78
- package/dist/blame.js.map +1 -1
- package/dist/capture.d.ts +4 -7
- package/dist/capture.js +465 -467
- package/dist/capture.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +334 -72
- package/dist/index.js.map +1 -1
- package/dist/lib/analytics.d.ts +179 -0
- package/dist/lib/analytics.js +833 -0
- package/dist/lib/analytics.js.map +1 -0
- package/dist/lib/attribution.d.ts +54 -0
- package/dist/lib/attribution.js +266 -0
- package/dist/lib/attribution.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +97 -0
- package/dist/lib/checkpoint.js +441 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/config.d.ts +46 -0
- package/dist/lib/config.js +123 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/database.d.ts +115 -85
- package/dist/lib/database.js +306 -323
- package/dist/lib/database.js.map +1 -1
- package/dist/lib/delta.d.ts +78 -0
- package/dist/lib/delta.js +309 -0
- package/dist/lib/delta.js.map +1 -0
- package/dist/lib/git/gitBlame.js +9 -4
- package/dist/lib/git/gitBlame.js.map +1 -1
- package/dist/lib/git/gitConfig.d.ts +5 -3
- package/dist/lib/git/gitConfig.js +41 -6
- package/dist/lib/git/gitConfig.js.map +1 -1
- package/dist/lib/git/gitDiff.d.ts +13 -1
- package/dist/lib/git/gitDiff.js +39 -7
- package/dist/lib/git/gitDiff.js.map +1 -1
- package/dist/lib/git/gitNotes.d.ts +30 -4
- package/dist/lib/git/gitNotes.js +140 -24
- package/dist/lib/git/gitNotes.js.map +1 -1
- package/dist/lib/hooks.d.ts +1 -0
- package/dist/lib/hooks.js +148 -27
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.js +13 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/storage.d.ts +163 -0
- package/dist/lib/storage.js +823 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/trace.d.ts +118 -0
- package/dist/lib/trace.js +499 -0
- package/dist/lib/trace.js.map +1 -0
- package/dist/lib/types.d.ts +322 -114
- package/dist/lib/types.js +2 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/util.d.ts +8 -8
- package/dist/lib/util.js +18 -22
- package/dist/lib/util.js.map +1 -1
- package/dist/lib/watcher.d.ts +104 -0
- package/dist/lib/watcher.js +398 -0
- package/dist/lib/watcher.js.map +1 -0
- package/dist/post-merge.js +460 -421
- package/dist/post-merge.js.map +1 -1
- package/dist/process.d.ts +6 -5
- package/dist/process.js +182 -158
- package/dist/process.js.map +1 -1
- package/dist/sync.js +172 -131
- package/dist/sync.js.map +1 -1
- 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
|