@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/cleanup.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Agent Blame Cleanup Script
|
|
5
|
+
*
|
|
6
|
+
* Removes all Agent Blame data and hook configurations:
|
|
7
|
+
* - ~/.agentblame directory (logs, hooks)
|
|
8
|
+
* - Agent Blame entries from ~/.cursor/hooks.json
|
|
9
|
+
* - Agent Blame entries from ~/.claude/settings.json
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const fs = __importStar(require("node:fs"));
|
|
46
|
+
const path = __importStar(require("node:path"));
|
|
47
|
+
const os = __importStar(require("node:os"));
|
|
48
|
+
const AGENTBLAME_ROOT = path.join(os.homedir(), ".agentblame");
|
|
49
|
+
const CURSOR_HOOKS_CONFIG = path.join(os.homedir(), ".cursor", "hooks.json");
|
|
50
|
+
const CLAUDE_SETTINGS_FILE = path.join(os.homedir(), ".claude", "settings.json");
|
|
51
|
+
function removeAgentBlameDirectory() {
|
|
52
|
+
if (fs.existsSync(AGENTBLAME_ROOT)) {
|
|
53
|
+
fs.rmSync(AGENTBLAME_ROOT, { recursive: true, force: true });
|
|
54
|
+
console.log("✓ Removed ~/.agentblame directory");
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
console.log(" ~/.agentblame directory not found (already clean)");
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
function cleanCursorHooks() {
|
|
61
|
+
if (!fs.existsSync(CURSOR_HOOKS_CONFIG)) {
|
|
62
|
+
console.log(" ~/.cursor/hooks.json not found (already clean)");
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const content = fs.readFileSync(CURSOR_HOOKS_CONFIG, "utf8");
|
|
67
|
+
const config = JSON.parse(content);
|
|
68
|
+
let modified = false;
|
|
69
|
+
if (config.hooks?.afterFileEdit) {
|
|
70
|
+
const before = config.hooks.afterFileEdit.length;
|
|
71
|
+
config.hooks.afterFileEdit = config.hooks.afterFileEdit.filter((h) => !h?.command?.includes("agentblame"));
|
|
72
|
+
if (config.hooks.afterFileEdit.length < before)
|
|
73
|
+
modified = true;
|
|
74
|
+
}
|
|
75
|
+
if (config.hooks?.afterTabFileEdit) {
|
|
76
|
+
const before = config.hooks.afterTabFileEdit.length;
|
|
77
|
+
config.hooks.afterTabFileEdit = config.hooks.afterTabFileEdit.filter((h) => !h?.command?.includes("agentblame"));
|
|
78
|
+
if (config.hooks.afterTabFileEdit.length < before)
|
|
79
|
+
modified = true;
|
|
80
|
+
}
|
|
81
|
+
if (modified) {
|
|
82
|
+
fs.writeFileSync(CURSOR_HOOKS_CONFIG, JSON.stringify(config, null, 2), "utf8");
|
|
83
|
+
console.log("✓ Removed Agent Blame hooks from ~/.cursor/hooks.json");
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
console.log(" No Agent Blame hooks found in ~/.cursor/hooks.json");
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
console.log(" Error reading ~/.cursor/hooks.json:", err);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function cleanClaudeSettings() {
|
|
95
|
+
if (!fs.existsSync(CLAUDE_SETTINGS_FILE)) {
|
|
96
|
+
console.log(" ~/.claude/settings.json not found (already clean)");
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const content = fs.readFileSync(CLAUDE_SETTINGS_FILE, "utf8");
|
|
101
|
+
const config = JSON.parse(content);
|
|
102
|
+
let modified = false;
|
|
103
|
+
if (config.hooks?.PostToolUse) {
|
|
104
|
+
const before = config.hooks.PostToolUse.length;
|
|
105
|
+
config.hooks.PostToolUse = config.hooks.PostToolUse.filter((h) => !h?.hooks?.some((hh) => hh?.command?.includes("agentblame")));
|
|
106
|
+
if (config.hooks.PostToolUse.length < before)
|
|
107
|
+
modified = true;
|
|
108
|
+
}
|
|
109
|
+
if (modified) {
|
|
110
|
+
fs.writeFileSync(CLAUDE_SETTINGS_FILE, JSON.stringify(config, null, 2), "utf8");
|
|
111
|
+
console.log("✓ Removed Agent Blame hooks from ~/.claude/settings.json");
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
console.log(" No Agent Blame hooks found in ~/.claude/settings.json");
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.log(" Error reading ~/.claude/settings.json:", err);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function main() {
|
|
123
|
+
console.log(`\nAgent Blame Cleanup\n${"=".repeat(40)}`);
|
|
124
|
+
removeAgentBlameDirectory();
|
|
125
|
+
cleanCursorHooks();
|
|
126
|
+
cleanClaudeSettings();
|
|
127
|
+
console.log(`\n${"=".repeat(40)}`);
|
|
128
|
+
console.log("Cleanup complete!");
|
|
129
|
+
console.log("\nNext steps:");
|
|
130
|
+
console.log(" 1. Restart Cursor for hook changes to take effect");
|
|
131
|
+
console.log(" 2. Run 'bun run compile' to rebuild");
|
|
132
|
+
console.log(" 3. Press F5 to launch extension (will reinstall hooks)");
|
|
133
|
+
console.log("");
|
|
134
|
+
}
|
|
135
|
+
main();
|
|
136
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../src/cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Agent Blame CLI
|
|
5
|
+
*
|
|
6
|
+
* Commands:
|
|
7
|
+
* agentblame init - Set up hooks and configuration
|
|
8
|
+
* agentblame blame <file> - Show attribution for a file
|
|
9
|
+
* agentblame status - Show current attribution status
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const blame_1 = require("./blame");
|
|
47
|
+
const sync_1 = require("./sync");
|
|
48
|
+
const process_1 = require("./process");
|
|
49
|
+
const lib_1 = require("./lib");
|
|
50
|
+
const args = process.argv.slice(2);
|
|
51
|
+
const command = args[0];
|
|
52
|
+
async function main() {
|
|
53
|
+
switch (command) {
|
|
54
|
+
case "install":
|
|
55
|
+
await runInstall(args.slice(1));
|
|
56
|
+
break;
|
|
57
|
+
case "uninstall":
|
|
58
|
+
await runUninstall(args.slice(1));
|
|
59
|
+
break;
|
|
60
|
+
case "blame":
|
|
61
|
+
await runBlame(args.slice(1));
|
|
62
|
+
break;
|
|
63
|
+
case "process":
|
|
64
|
+
await (0, process_1.runProcess)(args[1]);
|
|
65
|
+
break;
|
|
66
|
+
case "sync":
|
|
67
|
+
await runSync(args.slice(1));
|
|
68
|
+
break;
|
|
69
|
+
case "status":
|
|
70
|
+
await runStatus();
|
|
71
|
+
break;
|
|
72
|
+
case "--help":
|
|
73
|
+
case "-h":
|
|
74
|
+
case undefined:
|
|
75
|
+
printHelp();
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
console.error(`Unknown command: ${command}`);
|
|
79
|
+
printHelp();
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function printHelp() {
|
|
84
|
+
console.log(`
|
|
85
|
+
Agent Blame - Track AI-generated code in your commits
|
|
86
|
+
|
|
87
|
+
Usage:
|
|
88
|
+
agentblame install Set up hooks for current repo
|
|
89
|
+
agentblame install --global Set up hooks for all repos
|
|
90
|
+
agentblame uninstall Remove hooks from current repo
|
|
91
|
+
agentblame uninstall --global Remove global hooks
|
|
92
|
+
agentblame blame <file> Show AI attribution for a file
|
|
93
|
+
agentblame blame --summary Show summary only
|
|
94
|
+
agentblame blame --json Output as JSON
|
|
95
|
+
|
|
96
|
+
Examples:
|
|
97
|
+
agentblame install # Current repo only (recommended)
|
|
98
|
+
agentblame install --global # All repos (overrides repo-specific hooks)
|
|
99
|
+
agentblame blame src/index.ts
|
|
100
|
+
`);
|
|
101
|
+
}
|
|
102
|
+
async function runInstall(args) {
|
|
103
|
+
const isGlobal = args.includes("--global");
|
|
104
|
+
console.log(`Agent Blame Setup${isGlobal ? " (Global)" : ""}\n`);
|
|
105
|
+
// Find capture script relative to CLI (now in same package)
|
|
106
|
+
const captureScript = path.resolve(__dirname, "capture.ts");
|
|
107
|
+
// Always install/reinstall editor hooks
|
|
108
|
+
const cursorSuccess = await (0, lib_1.installCursorHooks)(captureScript);
|
|
109
|
+
console.log(cursorSuccess ? " Cursor hooks: installed" : " Cursor hooks: failed");
|
|
110
|
+
const claudeSuccess = await (0, lib_1.installClaudeHooks)(captureScript);
|
|
111
|
+
console.log(claudeSuccess ? " Claude Code hooks: installed" : " Claude Code hooks: failed");
|
|
112
|
+
if (isGlobal) {
|
|
113
|
+
// Install global git hook (works for all repos)
|
|
114
|
+
const gitHookSuccess = await (0, lib_1.installGlobalGitHook)();
|
|
115
|
+
if (gitHookSuccess) {
|
|
116
|
+
console.log(" Git post-commit hook: installed (global)");
|
|
117
|
+
console.log(" Notes auto-push: auto-configures per repo on first commit");
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(" Git post-commit hook: failed");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Per-repo installation
|
|
125
|
+
const repoRoot = await (0, lib_1.getRepoRoot)(process.cwd());
|
|
126
|
+
if (!repoRoot) {
|
|
127
|
+
console.error("\nError: Not in a git repository. Use --global for system-wide setup.");
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
const gitHookSuccess = await (0, lib_1.installGitHook)(repoRoot);
|
|
131
|
+
console.log(gitHookSuccess ? " Git post-commit hook: installed" : " Git post-commit hook: failed");
|
|
132
|
+
const notesPushSuccess = await (0, lib_1.configureNotesSync)(repoRoot);
|
|
133
|
+
console.log(notesPushSuccess ? " Notes auto-push: configured" : " Notes auto-push: failed");
|
|
134
|
+
}
|
|
135
|
+
console.log("\nSetup complete!");
|
|
136
|
+
console.log("\nIMPORTANT: Restart Cursor/Claude Code for hooks to take effect.");
|
|
137
|
+
console.log("\nHow it works:");
|
|
138
|
+
console.log(" 1. Make AI edits in Cursor or Claude Code");
|
|
139
|
+
console.log(" 2. Commit your changes (attribution attached automatically)");
|
|
140
|
+
console.log(" 3. Run 'agentblame blame <file>' to see attribution");
|
|
141
|
+
}
|
|
142
|
+
async function runUninstall(args) {
|
|
143
|
+
const isGlobal = args.includes("--global");
|
|
144
|
+
console.log(`Removing Agent Blame${isGlobal ? " (Global)" : ""}...\n`);
|
|
145
|
+
// Always remove editor hooks
|
|
146
|
+
const cursorSuccess = await (0, lib_1.uninstallCursorHooks)();
|
|
147
|
+
console.log(cursorSuccess ? " Cursor hooks: removed" : " Cursor hooks: failed");
|
|
148
|
+
const claudeSuccess = await (0, lib_1.uninstallClaudeHooks)();
|
|
149
|
+
console.log(claudeSuccess ? " Claude Code hooks: removed" : " Claude Code hooks: failed");
|
|
150
|
+
if (isGlobal) {
|
|
151
|
+
// Remove global git hook
|
|
152
|
+
const gitHookSuccess = await (0, lib_1.uninstallGlobalGitHook)();
|
|
153
|
+
console.log(gitHookSuccess ? " Git post-commit hook: removed (global)" : " Git post-commit hook: failed");
|
|
154
|
+
// Remove ~/.agentblame directory
|
|
155
|
+
const fs = await Promise.resolve().then(() => __importStar(require("node:fs")));
|
|
156
|
+
const os = await Promise.resolve().then(() => __importStar(require("node:os")));
|
|
157
|
+
const agentblameDir = path.join(os.homedir(), ".agentblame");
|
|
158
|
+
try {
|
|
159
|
+
if (fs.existsSync(agentblameDir)) {
|
|
160
|
+
await fs.promises.rm(agentblameDir, { recursive: true, force: true });
|
|
161
|
+
console.log(" Data directory: removed");
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.log(" Data directory: not found");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
console.log(" Data directory: failed to remove");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// Per-repo uninstallation
|
|
173
|
+
const repoRoot = await (0, lib_1.getRepoRoot)(process.cwd());
|
|
174
|
+
if (!repoRoot) {
|
|
175
|
+
console.error("\nError: Not in a git repository. Use --global to remove global hooks.");
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
const gitHookSuccess = await (0, lib_1.uninstallGitHook)(repoRoot);
|
|
179
|
+
console.log(gitHookSuccess ? " Git post-commit hook: removed" : " Git post-commit hook: failed");
|
|
180
|
+
const notesPushSuccess = await (0, lib_1.removeNotesSync)(repoRoot);
|
|
181
|
+
console.log(notesPushSuccess ? " Notes auto-push: removed" : " Notes auto-push: failed");
|
|
182
|
+
}
|
|
183
|
+
console.log("\nUninstall complete!");
|
|
184
|
+
}
|
|
185
|
+
async function runBlame(args) {
|
|
186
|
+
// Parse options
|
|
187
|
+
const options = {};
|
|
188
|
+
let filePath;
|
|
189
|
+
for (const arg of args) {
|
|
190
|
+
if (arg === "--json") {
|
|
191
|
+
options.json = true;
|
|
192
|
+
}
|
|
193
|
+
else if (arg === "--summary") {
|
|
194
|
+
options.summary = true;
|
|
195
|
+
}
|
|
196
|
+
else if (!arg.startsWith("-")) {
|
|
197
|
+
filePath = arg;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (!filePath) {
|
|
201
|
+
console.error("Usage: agentblame blame [--json|--summary] <file>");
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
await (0, blame_1.blame)(filePath, options);
|
|
205
|
+
}
|
|
206
|
+
async function runSync(args) {
|
|
207
|
+
const options = {};
|
|
208
|
+
for (const arg of args) {
|
|
209
|
+
if (arg === "--dry-run") {
|
|
210
|
+
options.dryRun = true;
|
|
211
|
+
}
|
|
212
|
+
else if (arg === "--verbose" || arg === "-v") {
|
|
213
|
+
options.verbose = true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
await (0, sync_1.sync)(options);
|
|
217
|
+
}
|
|
218
|
+
async function runStatus() {
|
|
219
|
+
console.log("\nAgent Blame Status\n");
|
|
220
|
+
const pendingEdits = (0, lib_1.readPendingEdits)();
|
|
221
|
+
console.log(`Pending AI edits: ${pendingEdits.length}`);
|
|
222
|
+
if (pendingEdits.length > 0) {
|
|
223
|
+
console.log("\nRecent pending edits:");
|
|
224
|
+
const recent = pendingEdits.slice(-5);
|
|
225
|
+
for (const edit of recent) {
|
|
226
|
+
const time = new Date(edit.timestamp).toLocaleTimeString();
|
|
227
|
+
const file = edit.file_path.split("/").pop();
|
|
228
|
+
console.log(` [${edit.provider}] ${file} at ${time}`);
|
|
229
|
+
}
|
|
230
|
+
if (pendingEdits.length > 5) {
|
|
231
|
+
console.log(` ... and ${pendingEdits.length - 5} more`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
console.log("");
|
|
235
|
+
}
|
|
236
|
+
main().catch((err) => {
|
|
237
|
+
console.error(err);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/db.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending Edits Store
|
|
3
|
+
*
|
|
4
|
+
* Reads AI edit logs from ~/.agentblame/logs/ (JSON lines format)
|
|
5
|
+
* Supports line-level matching for precise attribution.
|
|
6
|
+
*/
|
|
7
|
+
import type { CapturedLine, PendingEdit, MatchType } from "./types";
|
|
8
|
+
import { computeContentHash, computeNormalizedHash } from "./util";
|
|
9
|
+
/**
|
|
10
|
+
* Read all pending edits from log files
|
|
11
|
+
*/
|
|
12
|
+
export declare function readPendingEdits(): PendingEdit[];
|
|
13
|
+
/**
|
|
14
|
+
* Build a hash index from pending edits for fast line lookup
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildLineHashIndex(edits: PendingEdit[]): {
|
|
17
|
+
exactHash: Map<string, {
|
|
18
|
+
edit: PendingEdit;
|
|
19
|
+
line: CapturedLine;
|
|
20
|
+
}[]>;
|
|
21
|
+
normalizedHash: Map<string, {
|
|
22
|
+
edit: PendingEdit;
|
|
23
|
+
line: CapturedLine;
|
|
24
|
+
}[]>;
|
|
25
|
+
};
|
|
26
|
+
export interface LineMatchResult {
|
|
27
|
+
edit: PendingEdit;
|
|
28
|
+
line: CapturedLine;
|
|
29
|
+
matchType: MatchType;
|
|
30
|
+
confidence: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Find a line match using the priority strategy:
|
|
34
|
+
* 1. Exact hash match (1.0)
|
|
35
|
+
* 2. Normalized hash match (0.95)
|
|
36
|
+
* 3. Line contained in AI content (0.9)
|
|
37
|
+
* 4. AI content contained in line (0.85)
|
|
38
|
+
*/
|
|
39
|
+
export declare function findLineMatch(lineContent: string, lineHash: string, lineHashNormalized: string, filePath: string, hashIndex: ReturnType<typeof buildLineHashIndex>, edits: PendingEdit[]): LineMatchResult | null;
|
|
40
|
+
/**
|
|
41
|
+
* Mark entries as matched in the log file
|
|
42
|
+
*/
|
|
43
|
+
export declare function markEditsAsMatched(sourceLog: string, lineNumbers: number[], commitSha: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Clean up old log entries
|
|
46
|
+
* - Removes matched entries older than maxAgeDays
|
|
47
|
+
* - Removes unmatched entries older than expireDays
|
|
48
|
+
*/
|
|
49
|
+
export declare function cleanupOldEntries(maxAgeDays?: number, expireDays?: number): {
|
|
50
|
+
removed: number;
|
|
51
|
+
kept: number;
|
|
52
|
+
};
|
|
53
|
+
export { computeContentHash, computeNormalizedHash };
|