@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.
- package/dist/blame.d.ts +14 -0
- package/dist/blame.js +252 -0
- package/dist/blame.js.map +1 -0
- package/dist/capture.d.ts +16 -0
- package/dist/capture.js +284 -0
- package/dist/capture.js.map +1 -0
- package/dist/cleanup.d.ts +10 -0
- package/dist/cleanup.js +136 -0
- package/dist/cleanup.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +240 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/db.d.ts +53 -0
- package/dist/lib/db.js +290 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/diff.d.ts +13 -0
- package/dist/lib/diff.js +32 -0
- package/dist/lib/diff.js.map +1 -0
- package/dist/lib/git/gitBlame.d.ts +25 -0
- package/dist/lib/git/gitBlame.js +87 -0
- package/dist/lib/git/gitBlame.js.map +1 -0
- package/dist/lib/git/gitCli.d.ts +17 -0
- package/dist/lib/git/gitCli.js +57 -0
- package/dist/lib/git/gitCli.js.map +1 -0
- package/dist/lib/git/gitConfig.d.ts +20 -0
- package/dist/lib/git/gitConfig.js +91 -0
- package/dist/lib/git/gitConfig.js.map +1 -0
- package/dist/lib/git/gitDiff.d.ts +42 -0
- package/dist/lib/git/gitDiff.js +346 -0
- package/dist/lib/git/gitDiff.js.map +1 -0
- package/dist/lib/git/gitNotes.d.ts +31 -0
- package/dist/lib/git/gitNotes.js +93 -0
- package/dist/lib/git/gitNotes.js.map +1 -0
- package/dist/lib/git/index.d.ts +5 -0
- package/dist/lib/git/index.js +22 -0
- package/dist/lib/git/index.js.map +1 -0
- package/dist/lib/hooks.d.ts +65 -0
- package/dist/lib/hooks.js +423 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.js +33 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types.d.ts +190 -0
- package/dist/lib/types.js +8 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/util.d.ts +24 -0
- package/dist/lib/util.js +82 -0
- package/dist/lib/util.js.map +1 -0
- package/dist/process.d.ts +14 -0
- package/dist/process.js +224 -0
- package/dist/process.js.map +1 -0
- package/dist/sync.d.ts +15 -0
- package/dist/sync.js +413 -0
- package/dist/sync.js.map +1 -0
- package/dist/transfer-notes.d.ts +16 -0
- package/dist/transfer-notes.js +426 -0
- package/dist/transfer-notes.js.map +1 -0
- package/package.json +37 -0
package/dist/sync.js
ADDED
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Blame Sync Command
|
|
4
|
+
*
|
|
5
|
+
* Transfers attribution notes after squash/rebase merges.
|
|
6
|
+
* Detects recent merges, fetches original PR commits, and transfers notes.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.sync = sync;
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const lib_1 = require("./lib");
|
|
12
|
+
function run(cmd, cwd) {
|
|
13
|
+
try {
|
|
14
|
+
return (0, node_child_process_1.execSync)(cmd, { encoding: "utf8", cwd }).trim();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function vlog(msg, options) {
|
|
21
|
+
if (options.verbose) {
|
|
22
|
+
console.log(` ${msg}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Find recent commits that look like squash/rebase merges without notes
|
|
27
|
+
*/
|
|
28
|
+
function findMergeCandidates(repoRoot, options) {
|
|
29
|
+
const candidates = [];
|
|
30
|
+
// Get recent commits on current branch (last 20)
|
|
31
|
+
const logOutput = run(`git log --oneline -20 --format="%H %s"`, repoRoot);
|
|
32
|
+
if (!logOutput)
|
|
33
|
+
return candidates;
|
|
34
|
+
for (const line of logOutput.split("\n")) {
|
|
35
|
+
const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
|
|
36
|
+
if (!match)
|
|
37
|
+
continue;
|
|
38
|
+
const [, sha, message] = match;
|
|
39
|
+
// Check if commit message has PR number pattern: (#123) or (123)
|
|
40
|
+
const prMatch = message.match(/\(#?(\d+)\)\s*$/);
|
|
41
|
+
if (!prMatch)
|
|
42
|
+
continue;
|
|
43
|
+
const prNumber = parseInt(prMatch[1], 10);
|
|
44
|
+
// Check if this commit already has a note
|
|
45
|
+
const hasNote = run(`git notes --ref=refs/notes/agentblame show ${sha} 2>/dev/null`, repoRoot);
|
|
46
|
+
if (hasNote) {
|
|
47
|
+
vlog(`Skipping ${sha.slice(0, 7)} - already has note`, options);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Check if it's a single-parent commit (squash or rebase, not merge)
|
|
51
|
+
const parents = run(`git rev-list --parents -n 1 ${sha}`, repoRoot).split(" ");
|
|
52
|
+
if (parents.length > 2) {
|
|
53
|
+
vlog(`Skipping ${sha.slice(0, 7)} - merge commit (has multiple parents)`, options);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
candidates.push({ sha, prNumber, message });
|
|
57
|
+
}
|
|
58
|
+
return candidates;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Fetch PR ref from remote to get original commits
|
|
62
|
+
*/
|
|
63
|
+
function fetchPRRef(repoRoot, prNumber, options) {
|
|
64
|
+
vlog(`Fetching refs/pull/${prNumber}/head...`, options);
|
|
65
|
+
run(`git fetch origin refs/pull/${prNumber}/head:refs/remotes/origin/pr/${prNumber} 2>&1`, repoRoot);
|
|
66
|
+
// Check if fetch succeeded
|
|
67
|
+
const refExists = run(`git rev-parse --verify refs/remotes/origin/pr/${prNumber} 2>/dev/null`, repoRoot);
|
|
68
|
+
return !!refExists;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get commits from a PR branch
|
|
72
|
+
*/
|
|
73
|
+
function getPRCommits(repoRoot, prNumber, baseSha) {
|
|
74
|
+
// Find merge base between PR head and the base
|
|
75
|
+
const prRef = `refs/remotes/origin/pr/${prNumber}`;
|
|
76
|
+
// Get commits that are in PR but not in base
|
|
77
|
+
const output = run(`git rev-list ${baseSha}..${prRef} 2>/dev/null`, repoRoot);
|
|
78
|
+
if (!output)
|
|
79
|
+
return [];
|
|
80
|
+
return output.split("\n").filter(Boolean);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read attribution note from a commit
|
|
84
|
+
*/
|
|
85
|
+
function readNote(repoRoot, sha) {
|
|
86
|
+
const note = run(`git notes --ref=refs/notes/agentblame show ${sha} 2>/dev/null`, repoRoot);
|
|
87
|
+
if (!note)
|
|
88
|
+
return null;
|
|
89
|
+
try {
|
|
90
|
+
return JSON.parse(note);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Write attribution note to a commit
|
|
98
|
+
*/
|
|
99
|
+
function writeNote(repoRoot, sha, attribution) {
|
|
100
|
+
const noteJson = JSON.stringify(attribution);
|
|
101
|
+
try {
|
|
102
|
+
// Use spawnSync with array args to avoid shell injection
|
|
103
|
+
const result = (0, node_child_process_1.spawnSync)("git", ["notes", "--ref=refs/notes/agentblame", "add", "-f", "-m", noteJson, sha], { encoding: "utf8", cwd: repoRoot });
|
|
104
|
+
if (result.status !== 0) {
|
|
105
|
+
console.error(`Failed to write note to ${sha}: ${result.stderr}`);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error(`Failed to write note to ${sha}: ${err}`);
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get diff hunks from a commit
|
|
117
|
+
*/
|
|
118
|
+
function getCommitHunks(repoRoot, sha) {
|
|
119
|
+
const diff = run(`git diff-tree -p ${sha}`, repoRoot);
|
|
120
|
+
if (!diff)
|
|
121
|
+
return [];
|
|
122
|
+
const hunks = [];
|
|
123
|
+
let currentFile = "";
|
|
124
|
+
let lineNumber = 0;
|
|
125
|
+
let addedLines = [];
|
|
126
|
+
let startLine = 0;
|
|
127
|
+
const computeHash = (content) => {
|
|
128
|
+
const crypto = require("node:crypto");
|
|
129
|
+
return `sha256:${crypto.createHash("sha256").update(content).digest("hex")}`;
|
|
130
|
+
};
|
|
131
|
+
for (const line of diff.split("\n")) {
|
|
132
|
+
if (line.startsWith("+++ b/")) {
|
|
133
|
+
if (addedLines.length > 0 && currentFile) {
|
|
134
|
+
const content = addedLines.join("\n");
|
|
135
|
+
hunks.push({
|
|
136
|
+
path: currentFile,
|
|
137
|
+
startLine,
|
|
138
|
+
content,
|
|
139
|
+
contentHash: computeHash(content),
|
|
140
|
+
});
|
|
141
|
+
addedLines = [];
|
|
142
|
+
}
|
|
143
|
+
currentFile = line.slice(6);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (line.startsWith("@@")) {
|
|
147
|
+
if (addedLines.length > 0 && currentFile) {
|
|
148
|
+
const content = addedLines.join("\n");
|
|
149
|
+
hunks.push({
|
|
150
|
+
path: currentFile,
|
|
151
|
+
startLine,
|
|
152
|
+
content,
|
|
153
|
+
contentHash: computeHash(content),
|
|
154
|
+
});
|
|
155
|
+
addedLines = [];
|
|
156
|
+
}
|
|
157
|
+
const match = line.match(/@@ -\d+(?:,\d+)? \+(\d+)/);
|
|
158
|
+
if (match) {
|
|
159
|
+
lineNumber = parseInt(match[1], 10);
|
|
160
|
+
startLine = lineNumber;
|
|
161
|
+
}
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
165
|
+
if (addedLines.length === 0) {
|
|
166
|
+
startLine = lineNumber;
|
|
167
|
+
}
|
|
168
|
+
addedLines.push(line.slice(1));
|
|
169
|
+
lineNumber++;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!line.startsWith("-")) {
|
|
173
|
+
if (addedLines.length > 0 && currentFile) {
|
|
174
|
+
const content = addedLines.join("\n");
|
|
175
|
+
hunks.push({
|
|
176
|
+
path: currentFile,
|
|
177
|
+
startLine,
|
|
178
|
+
content,
|
|
179
|
+
contentHash: computeHash(content),
|
|
180
|
+
});
|
|
181
|
+
addedLines = [];
|
|
182
|
+
}
|
|
183
|
+
lineNumber++;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (addedLines.length > 0 && currentFile) {
|
|
187
|
+
const content = addedLines.join("\n");
|
|
188
|
+
hunks.push({
|
|
189
|
+
path: currentFile,
|
|
190
|
+
startLine,
|
|
191
|
+
content,
|
|
192
|
+
contentHash: computeHash(content),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return hunks;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Collect attributions from PR commits with original content
|
|
199
|
+
*/
|
|
200
|
+
function collectPRAttributions(repoRoot, prCommits) {
|
|
201
|
+
const byHash = new Map();
|
|
202
|
+
const withContent = [];
|
|
203
|
+
for (const sha of prCommits) {
|
|
204
|
+
const note = readNote(repoRoot, sha);
|
|
205
|
+
if (!note?.attributions)
|
|
206
|
+
continue;
|
|
207
|
+
const hunks = getCommitHunks(repoRoot, sha);
|
|
208
|
+
const hunksByHash = new Map();
|
|
209
|
+
for (const hunk of hunks) {
|
|
210
|
+
hunksByHash.set(hunk.contentHash, hunk.content);
|
|
211
|
+
}
|
|
212
|
+
for (const attr of note.attributions) {
|
|
213
|
+
const hash = attr.content_hash;
|
|
214
|
+
if (!byHash.has(hash)) {
|
|
215
|
+
byHash.set(hash, []);
|
|
216
|
+
}
|
|
217
|
+
byHash.get(hash)?.push(attr);
|
|
218
|
+
const content = hunksByHash.get(hash) || "";
|
|
219
|
+
if (content) {
|
|
220
|
+
withContent.push({ ...attr, originalContent: content });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return { byHash, withContent };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Find contained attributions with precise line numbers
|
|
228
|
+
*/
|
|
229
|
+
function findContainedAttributions(hunk, attributions) {
|
|
230
|
+
const results = [];
|
|
231
|
+
for (const attr of attributions) {
|
|
232
|
+
const attrFileName = attr.path.split("/").pop();
|
|
233
|
+
const hunkFileName = hunk.path.split("/").pop();
|
|
234
|
+
const sameFile = attrFileName === hunkFileName ||
|
|
235
|
+
attr.path.endsWith(hunk.path) ||
|
|
236
|
+
hunk.path.endsWith(attrFileName || "");
|
|
237
|
+
if (!sameFile)
|
|
238
|
+
continue;
|
|
239
|
+
const aiContent = attr.originalContent.trim();
|
|
240
|
+
const hunkContent = hunk.content;
|
|
241
|
+
if (!hunkContent.includes(aiContent))
|
|
242
|
+
continue;
|
|
243
|
+
const offset = hunkContent.indexOf(aiContent);
|
|
244
|
+
let startLine = hunk.startLine;
|
|
245
|
+
if (offset > 0) {
|
|
246
|
+
const contentBeforeAI = hunkContent.slice(0, offset);
|
|
247
|
+
const linesBeforeAI = contentBeforeAI.split("\n").length - 1;
|
|
248
|
+
startLine = hunk.startLine + linesBeforeAI;
|
|
249
|
+
}
|
|
250
|
+
const aiLineCount = aiContent.split("\n").length;
|
|
251
|
+
const endLine = startLine + aiLineCount - 1;
|
|
252
|
+
const { originalContent: _, ...cleanAttr } = attr;
|
|
253
|
+
results.push({
|
|
254
|
+
...cleanAttr,
|
|
255
|
+
path: hunk.path,
|
|
256
|
+
start_line: startLine,
|
|
257
|
+
end_line: endLine,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return results;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Transfer notes for a single merge candidate
|
|
264
|
+
*/
|
|
265
|
+
function transferNotes(repoRoot, candidate, prCommits, options) {
|
|
266
|
+
const { byHash, withContent } = collectPRAttributions(repoRoot, prCommits);
|
|
267
|
+
if (byHash.size === 0) {
|
|
268
|
+
vlog(`No attributions found in PR commits`, options);
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
vlog(`Found ${byHash.size} unique content hashes`, options);
|
|
272
|
+
const hunks = getCommitHunks(repoRoot, candidate.sha);
|
|
273
|
+
vlog(`Merge commit has ${hunks.length} hunks`, options);
|
|
274
|
+
const newAttributions = [];
|
|
275
|
+
const matchedHashes = new Set();
|
|
276
|
+
for (const hunk of hunks) {
|
|
277
|
+
// Try exact hash match
|
|
278
|
+
const attrs = byHash.get(hunk.contentHash);
|
|
279
|
+
if (attrs && attrs.length > 0) {
|
|
280
|
+
const attr = attrs[0];
|
|
281
|
+
newAttributions.push({
|
|
282
|
+
...attr,
|
|
283
|
+
path: hunk.path,
|
|
284
|
+
start_line: hunk.startLine,
|
|
285
|
+
end_line: hunk.startLine + hunk.content.split("\n").length - 1,
|
|
286
|
+
});
|
|
287
|
+
matchedHashes.add(attr.content_hash);
|
|
288
|
+
vlog(` Exact match: ${hunk.path}:${hunk.startLine}`, options);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// Fallback: containment matching
|
|
292
|
+
const unmatchedAttrs = withContent.filter((a) => !matchedHashes.has(a.content_hash));
|
|
293
|
+
const containedMatches = findContainedAttributions(hunk, unmatchedAttrs);
|
|
294
|
+
for (const match of containedMatches) {
|
|
295
|
+
newAttributions.push(match);
|
|
296
|
+
matchedHashes.add(match.content_hash);
|
|
297
|
+
vlog(` Contained match: ${match.path}:${match.start_line}-${match.end_line}`, options);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (newAttributions.length === 0) {
|
|
301
|
+
return 0;
|
|
302
|
+
}
|
|
303
|
+
if (options.dryRun) {
|
|
304
|
+
console.log(` Would attach ${newAttributions.length} attribution(s)`);
|
|
305
|
+
return newAttributions.length;
|
|
306
|
+
}
|
|
307
|
+
const note = {
|
|
308
|
+
version: 1,
|
|
309
|
+
timestamp: new Date().toISOString(),
|
|
310
|
+
attributions: newAttributions,
|
|
311
|
+
};
|
|
312
|
+
if (writeNote(repoRoot, candidate.sha, note)) {
|
|
313
|
+
return newAttributions.length;
|
|
314
|
+
}
|
|
315
|
+
return 0;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Find the base commit (parent of merge commit)
|
|
319
|
+
*/
|
|
320
|
+
function findBaseSha(repoRoot, mergeSha) {
|
|
321
|
+
const parent = run(`git rev-parse ${mergeSha}^`, repoRoot);
|
|
322
|
+
return parent || "";
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Push notes to remote
|
|
326
|
+
*/
|
|
327
|
+
function pushNotes(repoRoot, options) {
|
|
328
|
+
if (options.dryRun) {
|
|
329
|
+
console.log("\nWould push notes to origin");
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
console.log("\nPushing notes to origin...");
|
|
333
|
+
try {
|
|
334
|
+
(0, node_child_process_1.execSync)("git push origin refs/notes/agentblame", {
|
|
335
|
+
encoding: "utf8",
|
|
336
|
+
cwd: repoRoot,
|
|
337
|
+
stdio: "inherit",
|
|
338
|
+
});
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
console.error("Failed to push notes");
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Main sync function
|
|
348
|
+
*/
|
|
349
|
+
async function sync(options = {}) {
|
|
350
|
+
const repoRoot = await (0, lib_1.getRepoRoot)(process.cwd());
|
|
351
|
+
if (!repoRoot) {
|
|
352
|
+
console.error("Error: Not in a git repository");
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
console.log("Agent Blame Sync - Transferring attribution notes\n");
|
|
356
|
+
if (options.dryRun) {
|
|
357
|
+
console.log("[DRY RUN - no changes will be made]\n");
|
|
358
|
+
}
|
|
359
|
+
// Fetch latest notes from remote (silent, ignores errors)
|
|
360
|
+
await (0, lib_1.fetchNotesQuiet)(repoRoot, "origin", options.verbose);
|
|
361
|
+
// Find merge candidates
|
|
362
|
+
const candidates = findMergeCandidates(repoRoot, options);
|
|
363
|
+
if (candidates.length === 0) {
|
|
364
|
+
console.log("No squash/rebase merges found that need notes transferred.");
|
|
365
|
+
console.log("(Looking for commits with PR numbers like '#123' that don't have notes)");
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
console.log(`Found ${candidates.length} merge(s) that may need notes:\n`);
|
|
369
|
+
let totalTransferred = 0;
|
|
370
|
+
let successCount = 0;
|
|
371
|
+
for (const candidate of candidates) {
|
|
372
|
+
console.log(`PR #${candidate.prNumber}: ${candidate.message.slice(0, 50)}...`);
|
|
373
|
+
console.log(` Commit: ${candidate.sha.slice(0, 7)}`);
|
|
374
|
+
// Fetch PR ref
|
|
375
|
+
if (!fetchPRRef(repoRoot, candidate.prNumber, options)) {
|
|
376
|
+
console.log(` Skipped: Could not fetch PR #${candidate.prNumber} refs`);
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
// Find base and get PR commits
|
|
380
|
+
const baseSha = findBaseSha(repoRoot, candidate.sha);
|
|
381
|
+
if (!baseSha) {
|
|
382
|
+
console.log(` Skipped: Could not find base commit`);
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
const prCommits = getPRCommits(repoRoot, candidate.prNumber, baseSha);
|
|
386
|
+
if (prCommits.length === 0) {
|
|
387
|
+
console.log(` Skipped: No PR commits found`);
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
vlog(`Found ${prCommits.length} PR commits`, options);
|
|
391
|
+
// Transfer notes
|
|
392
|
+
const transferred = transferNotes(repoRoot, candidate, prCommits, options);
|
|
393
|
+
if (transferred > 0) {
|
|
394
|
+
console.log(` Transferred ${transferred} attribution(s)`);
|
|
395
|
+
totalTransferred += transferred;
|
|
396
|
+
successCount++;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.log(` No attributions to transfer`);
|
|
400
|
+
}
|
|
401
|
+
console.log("");
|
|
402
|
+
}
|
|
403
|
+
// Summary
|
|
404
|
+
if (totalTransferred > 0) {
|
|
405
|
+
console.log(`\nSummary: Transferred ${totalTransferred} attribution(s) for ${successCount} merge(s)`);
|
|
406
|
+
// Push notes
|
|
407
|
+
pushNotes(repoRoot, options);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
console.log("\nNo attributions were transferred.");
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Agent Blame - Transfer Notes Action
|
|
4
|
+
*
|
|
5
|
+
* Transfers git notes from PR commits to merge/squash/rebase commits.
|
|
6
|
+
* Runs as part of GitHub Actions workflow after PR merge.
|
|
7
|
+
*
|
|
8
|
+
* Environment variables (set by GitHub Actions):
|
|
9
|
+
* PR_NUMBER - The PR number
|
|
10
|
+
* PR_TITLE - The PR title
|
|
11
|
+
* BASE_REF - Target branch (e.g., main)
|
|
12
|
+
* BASE_SHA - Base commit SHA before merge
|
|
13
|
+
* HEAD_SHA - Last commit SHA on feature branch
|
|
14
|
+
* MERGE_SHA - The merge commit SHA (for merge/squash)
|
|
15
|
+
*/
|
|
16
|
+
export {};
|