@mesadev/agentblame 0.1.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 (58) hide show
  1. package/dist/blame.d.ts +14 -0
  2. package/dist/blame.js +252 -0
  3. package/dist/blame.js.map +1 -0
  4. package/dist/capture.d.ts +16 -0
  5. package/dist/capture.js +284 -0
  6. package/dist/capture.js.map +1 -0
  7. package/dist/cleanup.d.ts +10 -0
  8. package/dist/cleanup.js +136 -0
  9. package/dist/cleanup.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.js +240 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/db.d.ts +53 -0
  14. package/dist/lib/db.js +290 -0
  15. package/dist/lib/db.js.map +1 -0
  16. package/dist/lib/diff.d.ts +13 -0
  17. package/dist/lib/diff.js +32 -0
  18. package/dist/lib/diff.js.map +1 -0
  19. package/dist/lib/git/gitBlame.d.ts +25 -0
  20. package/dist/lib/git/gitBlame.js +87 -0
  21. package/dist/lib/git/gitBlame.js.map +1 -0
  22. package/dist/lib/git/gitCli.d.ts +17 -0
  23. package/dist/lib/git/gitCli.js +57 -0
  24. package/dist/lib/git/gitCli.js.map +1 -0
  25. package/dist/lib/git/gitConfig.d.ts +20 -0
  26. package/dist/lib/git/gitConfig.js +91 -0
  27. package/dist/lib/git/gitConfig.js.map +1 -0
  28. package/dist/lib/git/gitDiff.d.ts +42 -0
  29. package/dist/lib/git/gitDiff.js +346 -0
  30. package/dist/lib/git/gitDiff.js.map +1 -0
  31. package/dist/lib/git/gitNotes.d.ts +31 -0
  32. package/dist/lib/git/gitNotes.js +93 -0
  33. package/dist/lib/git/gitNotes.js.map +1 -0
  34. package/dist/lib/git/index.d.ts +5 -0
  35. package/dist/lib/git/index.js +22 -0
  36. package/dist/lib/git/index.js.map +1 -0
  37. package/dist/lib/hooks.d.ts +65 -0
  38. package/dist/lib/hooks.js +423 -0
  39. package/dist/lib/hooks.js.map +1 -0
  40. package/dist/lib/index.d.ts +10 -0
  41. package/dist/lib/index.js +33 -0
  42. package/dist/lib/index.js.map +1 -0
  43. package/dist/lib/types.d.ts +190 -0
  44. package/dist/lib/types.js +8 -0
  45. package/dist/lib/types.js.map +1 -0
  46. package/dist/lib/util.d.ts +24 -0
  47. package/dist/lib/util.js +82 -0
  48. package/dist/lib/util.js.map +1 -0
  49. package/dist/process.d.ts +14 -0
  50. package/dist/process.js +224 -0
  51. package/dist/process.js.map +1 -0
  52. package/dist/sync.d.ts +15 -0
  53. package/dist/sync.js +413 -0
  54. package/dist/sync.js.map +1 -0
  55. package/dist/transfer-notes.d.ts +16 -0
  56. package/dist/transfer-notes.js +426 -0
  57. package/dist/transfer-notes.js.map +1 -0
  58. package/package.json +37 -0
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * Core Types for Agent Blame
4
+ *
5
+ * Line-level attribution tracking for AI-generated code.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Compute SHA256 hash of content
3
+ */
4
+ export declare function computeContentHash(content: string): string;
5
+ /**
6
+ * Compute normalized hash (whitespace-stripped) for formatter tolerance
7
+ */
8
+ export declare function computeNormalizedHash(content: string): string;
9
+ /**
10
+ * Get the agentblame directory path (~/.agentblame)
11
+ */
12
+ export declare function getAgentBlameDir(): string;
13
+ /**
14
+ * Get the default database path
15
+ */
16
+ export declare function getDefaultDbPath(): string;
17
+ /**
18
+ * Get the logs directory path
19
+ */
20
+ export declare function getLogsDir(): string;
21
+ /**
22
+ * Get the hooks directory path
23
+ */
24
+ export declare function getHooksDir(): string;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.computeContentHash = computeContentHash;
37
+ exports.computeNormalizedHash = computeNormalizedHash;
38
+ exports.getAgentBlameDir = getAgentBlameDir;
39
+ exports.getDefaultDbPath = getDefaultDbPath;
40
+ exports.getLogsDir = getLogsDir;
41
+ exports.getHooksDir = getHooksDir;
42
+ const crypto = __importStar(require("node:crypto"));
43
+ /**
44
+ * Compute SHA256 hash of content
45
+ */
46
+ function computeContentHash(content) {
47
+ return `sha256:${crypto.createHash("sha256").update(content).digest("hex")}`;
48
+ }
49
+ /**
50
+ * Compute normalized hash (whitespace-stripped) for formatter tolerance
51
+ */
52
+ function computeNormalizedHash(content) {
53
+ // Remove all whitespace for normalized comparison
54
+ const normalized = content.replace(/\s+/g, "");
55
+ return `sha256:${crypto.createHash("sha256").update(normalized).digest("hex")}`;
56
+ }
57
+ /**
58
+ * Get the agentblame directory path (~/.agentblame)
59
+ */
60
+ function getAgentBlameDir() {
61
+ const home = process.env.HOME || process.env.USERPROFILE || "";
62
+ return `${home}/.agentblame`;
63
+ }
64
+ /**
65
+ * Get the default database path
66
+ */
67
+ function getDefaultDbPath() {
68
+ return `${getAgentBlameDir()}/attribution.db`;
69
+ }
70
+ /**
71
+ * Get the logs directory path
72
+ */
73
+ function getLogsDir() {
74
+ return `${getAgentBlameDir()}/logs`;
75
+ }
76
+ /**
77
+ * Get the hooks directory path
78
+ */
79
+ function getHooksDir() {
80
+ return `${getAgentBlameDir()}/hooks`;
81
+ }
82
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,gDAEC;AAKD,sDAIC;AAKD,4CAGC;AAKD,4CAEC;AAKD,gCAEC;AAKD,kCAEC;AA7CD,oDAAsC;AAEtC;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,OAAO,UAAU,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAe;IACnD,kDAAkD;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,UAAU,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/D,OAAO,GAAG,IAAI,cAAc,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,GAAG,gBAAgB,EAAE,iBAAiB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,GAAG,gBAAgB,EAAE,OAAO,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,OAAO,GAAG,gBAAgB,EAAE,QAAQ,CAAC;AACvC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Process Command
3
+ *
4
+ * Match a commit against pending AI edits and attach git notes.
5
+ */
6
+ import { type MatchResult } from "./lib";
7
+ /**
8
+ * Process a commit - match and attach git note
9
+ */
10
+ export declare function processCommit(repoRoot: string, sha: string): Promise<MatchResult>;
11
+ /**
12
+ * CLI handler for process command
13
+ */
14
+ export declare function runProcess(sha?: string): Promise<void>;
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * Process Command
4
+ *
5
+ * Match a commit against pending AI edits and attach git notes.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.processCommit = processCommit;
9
+ exports.runProcess = runProcess;
10
+ const lib_1 = require("./lib");
11
+ // Terminal colors
12
+ const c = {
13
+ reset: "\x1b[0m",
14
+ bold: "\x1b[1m",
15
+ dim: "\x1b[2m",
16
+ cyan: "\x1b[36m",
17
+ yellow: "\x1b[33m",
18
+ green: "\x1b[32m",
19
+ magenta: "\x1b[35m",
20
+ blue: "\x1b[34m",
21
+ };
22
+ /**
23
+ * Find a match for an original location (before move)
24
+ */
25
+ function findMatchForOriginalLocation(originalPath, originalLine, pendingEdits, hashIndex) {
26
+ for (const edit of pendingEdits) {
27
+ const editFileName = edit.file_path.split("/").pop();
28
+ const originalFileName = originalPath.split("/").pop();
29
+ if (editFileName !== originalFileName &&
30
+ !edit.file_path.endsWith(originalPath) &&
31
+ !originalPath.endsWith(editFileName || "")) {
32
+ continue;
33
+ }
34
+ for (const line of edit.lines || []) {
35
+ return {
36
+ edit,
37
+ line: {
38
+ content: line.content,
39
+ hash: line.hash,
40
+ hash_normalized: line.hash_normalized,
41
+ },
42
+ };
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ /**
48
+ * Merge consecutive lines with the same attribution into ranges
49
+ */
50
+ function mergeConsecutiveLines(lines) {
51
+ if (lines.length === 0)
52
+ return [];
53
+ const sorted = [...lines].sort((a, b) => {
54
+ if (a.path !== b.path)
55
+ return a.path.localeCompare(b.path);
56
+ return a.line - b.line;
57
+ });
58
+ const ranges = [];
59
+ let currentRange = null;
60
+ for (const line of sorted) {
61
+ if (currentRange &&
62
+ currentRange.path === line.path &&
63
+ currentRange.end_line === line.line - 1 &&
64
+ currentRange.provider === line.provider &&
65
+ currentRange.match_type === line.match_type) {
66
+ currentRange.end_line = line.line;
67
+ currentRange.confidence = Math.min(currentRange.confidence, line.confidence);
68
+ }
69
+ else {
70
+ if (currentRange) {
71
+ ranges.push(currentRange);
72
+ }
73
+ currentRange = {
74
+ path: line.path,
75
+ start_line: line.line,
76
+ end_line: line.line,
77
+ provider: line.provider,
78
+ model: line.model,
79
+ confidence: line.confidence,
80
+ match_type: line.match_type,
81
+ content_hash: line.content_hash,
82
+ };
83
+ }
84
+ }
85
+ if (currentRange) {
86
+ ranges.push(currentRange);
87
+ }
88
+ return ranges;
89
+ }
90
+ /**
91
+ * Match a commit's lines against pending AI edits
92
+ */
93
+ async function matchCommit(repoRoot, sha) {
94
+ const hunks = await (0, lib_1.getCommitHunks)(repoRoot, sha);
95
+ const pendingEdits = (0, lib_1.readPendingEdits)();
96
+ const hashIndex = (0, lib_1.buildLineHashIndex)(pendingEdits);
97
+ const moves = await (0, lib_1.getCommitMoves)(repoRoot, sha);
98
+ const moveIndex = (0, lib_1.buildMoveIndex)(moves);
99
+ const lineAttributions = [];
100
+ const matchedEditKeys = new Map();
101
+ let totalLines = 0;
102
+ let unmatchedLines = 0;
103
+ for (const hunk of hunks) {
104
+ for (const line of hunk.lines) {
105
+ totalLines++;
106
+ let match = (0, lib_1.findLineMatch)(line.content, line.hash, line.hash_normalized, hunk.path, hashIndex, pendingEdits);
107
+ if (!match) {
108
+ const moveKey = `${hunk.path}:${line.line_number}`;
109
+ const moveInfo = moveIndex.get(moveKey);
110
+ if (moveInfo) {
111
+ const originalMatch = findMatchForOriginalLocation(moveInfo.fromPath, moveInfo.fromLine, pendingEdits, hashIndex);
112
+ if (originalMatch) {
113
+ match = {
114
+ edit: originalMatch.edit,
115
+ line: originalMatch.line,
116
+ matchType: "move_detected",
117
+ confidence: 0.85,
118
+ };
119
+ }
120
+ }
121
+ }
122
+ if (match) {
123
+ lineAttributions.push({
124
+ path: hunk.path,
125
+ line: line.line_number,
126
+ provider: match.edit.provider,
127
+ model: match.edit.model,
128
+ confidence: match.confidence,
129
+ match_type: match.matchType,
130
+ content_hash: line.hash,
131
+ });
132
+ const key = match.edit.source_log;
133
+ if (!matchedEditKeys.has(key)) {
134
+ matchedEditKeys.set(key, []);
135
+ }
136
+ matchedEditKeys.get(key).push(match.edit.line_number);
137
+ }
138
+ else {
139
+ unmatchedLines++;
140
+ }
141
+ }
142
+ }
143
+ for (const [sourceLog, lineNumbers] of matchedEditKeys) {
144
+ (0, lib_1.markEditsAsMatched)(sourceLog, lineNumbers, sha);
145
+ }
146
+ const rangeAttributions = mergeConsecutiveLines(lineAttributions);
147
+ return {
148
+ sha,
149
+ attributions: rangeAttributions,
150
+ unmatched_lines: unmatchedLines,
151
+ total_lines: totalLines,
152
+ };
153
+ }
154
+ /**
155
+ * Process a commit - match and attach git note
156
+ */
157
+ async function processCommit(repoRoot, sha) {
158
+ const result = await matchCommit(repoRoot, sha);
159
+ if (result.attributions.length > 0) {
160
+ await (0, lib_1.attachNote)(repoRoot, sha, result.attributions);
161
+ }
162
+ return result;
163
+ }
164
+ /**
165
+ * CLI handler for process command
166
+ */
167
+ async function runProcess(sha) {
168
+ const repoRoot = await (0, lib_1.getRepoRoot)(process.cwd());
169
+ if (!repoRoot) {
170
+ console.error("Error: Not in a git repository");
171
+ process.exit(1);
172
+ }
173
+ // Always resolve to actual SHA (not HEAD)
174
+ let commitSha = sha || "HEAD";
175
+ const resolveResult = await (0, lib_1.runGit)(repoRoot, ["rev-parse", commitSha]);
176
+ if (resolveResult.exitCode !== 0) {
177
+ console.error("Error: Could not resolve commit");
178
+ process.exit(1);
179
+ }
180
+ commitSha = resolveResult.stdout.trim();
181
+ const result = await processCommit(repoRoot, commitSha);
182
+ // Calculate stats
183
+ const aiLines = result.total_lines - result.unmatched_lines;
184
+ const humanLines = result.unmatched_lines;
185
+ const aiPercent = result.total_lines > 0 ? Math.round((aiLines / result.total_lines) * 100) : 0;
186
+ const humanPercent = 100 - aiPercent;
187
+ const WIDTH = 70;
188
+ const border = `${c.dim}│${c.reset}`;
189
+ const line = (content) => `${border} ${content.padEnd(WIDTH - 4)}${border}`;
190
+ // Print formatted output
191
+ console.log("");
192
+ console.log(`${c.dim}┌${"─".repeat(WIDTH - 2)}┐${c.reset}`);
193
+ console.log(`${border} ${c.bold}${c.cyan}${"Agent Blame".padStart((WIDTH - 4 + 11) / 2).padEnd(WIDTH - 4)}${c.reset}${border}`);
194
+ console.log(`${c.dim}├${"─".repeat(WIDTH - 2)}┤${c.reset}`);
195
+ console.log(`${border} Commit: ${c.yellow}${commitSha.slice(0, 8)}${c.reset}${"".padEnd(WIDTH - 18)}${border}`);
196
+ console.log(`${c.dim}├${"─".repeat(WIDTH - 2)}┤${c.reset}`);
197
+ if (result.attributions.length > 0) {
198
+ console.log(line("AI-Generated Code:"));
199
+ for (const attr of result.attributions) {
200
+ const provider = attr.provider === "cursor" ? "Cursor" : "Claude";
201
+ const model = attr.model && attr.model !== "claude" ? attr.model : "";
202
+ const modelStr = model ? ` - ${model}` : "";
203
+ const location = `${c.blue}${attr.path}:${attr.start_line}-${attr.end_line}${c.reset}`;
204
+ const info = `${c.magenta}[${provider}${modelStr}]${c.reset}`;
205
+ const content = ` ${location} ${info}`;
206
+ // Calculate visible length (without color codes)
207
+ const visibleLen = ` ${attr.path}:${attr.start_line}-${attr.end_line} [${provider}${modelStr}]`.length;
208
+ console.log(`${border} ${content}${" ".repeat(Math.max(0, WIDTH - 4 - visibleLen))}${border}`);
209
+ }
210
+ console.log(`${c.dim}├${"─".repeat(WIDTH - 2)}┤${c.reset}`);
211
+ }
212
+ // Summary bar
213
+ const barWidth = 50;
214
+ const aiBarWidth = Math.round((aiPercent / 100) * barWidth);
215
+ const humanBarWidth = barWidth - aiBarWidth;
216
+ const aiBar = `${c.magenta}${"█".repeat(aiBarWidth)}${c.reset}`;
217
+ const humanBar = `${c.dim}${"░".repeat(humanBarWidth)}${c.reset}`;
218
+ console.log(line("Summary:"));
219
+ console.log(`${border} ${aiBar}${humanBar}${"".padEnd(WIDTH - 4 - barWidth)}${border}`);
220
+ console.log(`${border} ${c.magenta}AI: ${String(aiLines).padStart(3)} lines (${String(aiPercent).padStart(3)}%)${c.reset} ${c.green}Human: ${String(humanLines).padStart(3)} lines (${String(humanPercent).padStart(3)}%)${c.reset}${"".padEnd(10)}${border}`);
221
+ console.log(`${c.dim}└${"─".repeat(WIDTH - 2)}┘${c.reset}`);
222
+ console.log("");
223
+ }
224
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Agent Blame Sync Command
3
+ *
4
+ * Transfers attribution notes after squash/rebase merges.
5
+ * Detects recent merges, fetches original PR commits, and transfers notes.
6
+ */
7
+ interface SyncOptions {
8
+ dryRun?: boolean;
9
+ verbose?: boolean;
10
+ }
11
+ /**
12
+ * Main sync function
13
+ */
14
+ export declare function sync(options?: SyncOptions): Promise<void>;
15
+ export {};