@amnesia2k/git-aic 2.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/LICENSE +21 -0
- package/README.md +312 -0
- package/bin/cli.ts +546 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +394 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/config.d.ts +4 -0
- package/dist/src/config.js +6 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/git.d.ts +14 -0
- package/dist/src/git.js +116 -0
- package/dist/src/git.js.map +1 -0
- package/dist/src/llm.d.ts +9 -0
- package/dist/src/llm.js +201 -0
- package/dist/src/llm.js.map +1 -0
- package/dist/src/prompt.d.ts +7 -0
- package/dist/src/prompt.js +127 -0
- package/dist/src/prompt.js.map +1 -0
- package/package.json +51 -0
- package/src/config.ts +7 -0
- package/src/git.ts +141 -0
- package/src/llm.ts +340 -0
- package/src/prompt.ts +144 -0
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { arrows_3 } from "cli-loaders";
|
|
4
|
+
import { simpleGit } from "simple-git";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { getGitDiff, getBranchName, getHeadCommitInfo, getSelectedFileDiffs, getSelectedFilesDiff, } from "../src/git.js";
|
|
7
|
+
import { generateCommitMessage, generateDiffExplanations, generateDiffFileName, } from "../src/llm.js";
|
|
8
|
+
import { spawnSync } from "child_process";
|
|
9
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
import { config, setStoredApiKey } from "../src/config.js";
|
|
12
|
+
const git = simpleGit();
|
|
13
|
+
const program = new Command();
|
|
14
|
+
const createLoader = () => {
|
|
15
|
+
let timer = null;
|
|
16
|
+
let frameIndex = 0;
|
|
17
|
+
let message = "";
|
|
18
|
+
const render = () => {
|
|
19
|
+
if (!process.stdout.isTTY) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const frame = arrows_3.keyframes[frameIndex % arrows_3.keyframes.length];
|
|
23
|
+
frameIndex += 1;
|
|
24
|
+
process.stdout.write(`\r${chalk.cyan(frame)} ${message}`);
|
|
25
|
+
};
|
|
26
|
+
const clear = () => {
|
|
27
|
+
if (!process.stdout.isTTY) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
process.stdout.clearLine(0);
|
|
31
|
+
process.stdout.cursorTo(0);
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
start(nextMessage) {
|
|
35
|
+
message = nextMessage;
|
|
36
|
+
frameIndex = 0;
|
|
37
|
+
render();
|
|
38
|
+
if (timer) {
|
|
39
|
+
clearInterval(timer);
|
|
40
|
+
}
|
|
41
|
+
timer = setInterval(render, arrows_3.speed);
|
|
42
|
+
},
|
|
43
|
+
update(nextMessage) {
|
|
44
|
+
message = nextMessage;
|
|
45
|
+
render();
|
|
46
|
+
},
|
|
47
|
+
succeed(doneMessage) {
|
|
48
|
+
if (timer) {
|
|
49
|
+
clearInterval(timer);
|
|
50
|
+
timer = null;
|
|
51
|
+
}
|
|
52
|
+
clear();
|
|
53
|
+
console.log(chalk.green(`OK ${doneMessage}`));
|
|
54
|
+
},
|
|
55
|
+
fail(errorMessage) {
|
|
56
|
+
if (timer) {
|
|
57
|
+
clearInterval(timer);
|
|
58
|
+
timer = null;
|
|
59
|
+
}
|
|
60
|
+
clear();
|
|
61
|
+
console.log(chalk.red(`ERROR ${errorMessage}`));
|
|
62
|
+
},
|
|
63
|
+
stop() {
|
|
64
|
+
if (timer) {
|
|
65
|
+
clearInterval(timer);
|
|
66
|
+
timer = null;
|
|
67
|
+
}
|
|
68
|
+
clear();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
const normalizeLegacyDiffFlag = () => {
|
|
73
|
+
for (let index = 2; index < process.argv.length; index += 1) {
|
|
74
|
+
if (process.argv[index] === "-diff") {
|
|
75
|
+
process.argv[index] = "--diff";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const sanitizeFileSegment = (value) => value
|
|
80
|
+
.trim()
|
|
81
|
+
.replace(/[^a-zA-Z0-9-_]+/g, "-")
|
|
82
|
+
.replace(/-+/g, "-")
|
|
83
|
+
.replace(/^-|-$/g, "")
|
|
84
|
+
.toLowerCase();
|
|
85
|
+
const getChangedFiles = (status) => Array.from(new Set([
|
|
86
|
+
...status.staged,
|
|
87
|
+
...status.modified,
|
|
88
|
+
...status.not_added,
|
|
89
|
+
...status.created,
|
|
90
|
+
...status.deleted,
|
|
91
|
+
]));
|
|
92
|
+
const unstageFiles = async (files) => {
|
|
93
|
+
if (files.length === 0) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const restoreResult = spawnSync("git", ["restore", "--staged", "--", ...files], { stdio: "ignore" });
|
|
97
|
+
if (restoreResult.status === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const resetResult = spawnSync("git", ["reset", "HEAD", "--", ...files], {
|
|
101
|
+
stdio: "ignore",
|
|
102
|
+
});
|
|
103
|
+
if (resetResult.status !== 0) {
|
|
104
|
+
throw new Error("Failed to update staged file selection");
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const selectFilesForOperation = async (actionLabel, status, shouldStageSelection) => {
|
|
108
|
+
const changedFiles = getChangedFiles(status);
|
|
109
|
+
if (changedFiles.length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (changedFiles.length === 1) {
|
|
113
|
+
const onlyFile = changedFiles[0];
|
|
114
|
+
if (shouldStageSelection && !status.staged.includes(onlyFile)) {
|
|
115
|
+
console.log(chalk.cyan(`\nOnly one changed file found: ${onlyFile}`));
|
|
116
|
+
console.log(chalk.blue("Staging 1 file..."));
|
|
117
|
+
await git.add(onlyFile);
|
|
118
|
+
}
|
|
119
|
+
return [onlyFile];
|
|
120
|
+
}
|
|
121
|
+
const p = await import("@clack/prompts");
|
|
122
|
+
p.intro(chalk.bgCyan(chalk.black(" Git AIC ")));
|
|
123
|
+
const selectedFiles = await p.multiselect({
|
|
124
|
+
message: `Select the files you want to ${actionLabel}:`,
|
|
125
|
+
options: changedFiles.map((file) => ({
|
|
126
|
+
value: file,
|
|
127
|
+
label: status.staged.includes(file) ? `${file} (staged)` : file,
|
|
128
|
+
})),
|
|
129
|
+
initialValues: status.staged,
|
|
130
|
+
required: false,
|
|
131
|
+
});
|
|
132
|
+
if (p.isCancel(selectedFiles) ||
|
|
133
|
+
!selectedFiles ||
|
|
134
|
+
selectedFiles.length === 0) {
|
|
135
|
+
p.outro(chalk.yellow("No files selected. Exiting."));
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
const filesToUse = selectedFiles;
|
|
139
|
+
if (!shouldStageSelection) {
|
|
140
|
+
p.outro(chalk.blue(`Using ${filesToUse.length} selected file(s)...`));
|
|
141
|
+
return filesToUse;
|
|
142
|
+
}
|
|
143
|
+
const filesToUnstage = status.staged.filter((file) => !filesToUse.includes(file));
|
|
144
|
+
const filesToStage = filesToUse.filter((file) => !status.staged.includes(file));
|
|
145
|
+
if (filesToUnstage.length > 0) {
|
|
146
|
+
await unstageFiles(filesToUnstage);
|
|
147
|
+
}
|
|
148
|
+
if (filesToStage.length > 0) {
|
|
149
|
+
p.outro(chalk.blue(`Staging ${filesToStage.length} file(s)...`));
|
|
150
|
+
await git.add(filesToStage);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
p.outro(chalk.blue(`Using ${filesToUse.length} selected file(s)...`));
|
|
154
|
+
}
|
|
155
|
+
return filesToUse;
|
|
156
|
+
};
|
|
157
|
+
const getAvailableMarkdownPath = (directory, baseName) => {
|
|
158
|
+
const cleanBaseName = sanitizeFileSegment(baseName) || "proposed-diff";
|
|
159
|
+
let candidate = join(directory, `${cleanBaseName}.md`);
|
|
160
|
+
let counter = 1;
|
|
161
|
+
while (existsSync(candidate)) {
|
|
162
|
+
candidate = join(directory, `${cleanBaseName}-${counter}.md`);
|
|
163
|
+
counter += 1;
|
|
164
|
+
}
|
|
165
|
+
return candidate;
|
|
166
|
+
};
|
|
167
|
+
const ensureGitDiffsIgnored = () => {
|
|
168
|
+
const gitignorePath = join(process.cwd(), ".gitignore");
|
|
169
|
+
const ignoreEntry = "git-diffs/";
|
|
170
|
+
if (!existsSync(gitignorePath)) {
|
|
171
|
+
writeFileSync(gitignorePath, `${ignoreEntry}\n`, "utf8");
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const currentContents = readFileSync(gitignorePath, "utf8");
|
|
175
|
+
const normalizedEntries = currentContents
|
|
176
|
+
.split(/\r?\n/)
|
|
177
|
+
.map((line) => line.trim());
|
|
178
|
+
if (normalizedEntries.includes(ignoreEntry) ||
|
|
179
|
+
normalizedEntries.includes("/git-diffs/") ||
|
|
180
|
+
normalizedEntries.includes("git-diffs") ||
|
|
181
|
+
normalizedEntries.includes("/git-diffs")) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const separator = currentContents.endsWith("\n") || currentContents.length === 0 ? "" : "\n";
|
|
185
|
+
writeFileSync(gitignorePath, `${currentContents}${separator}${ignoreEntry}\n`, "utf8");
|
|
186
|
+
};
|
|
187
|
+
const createDiffMarkdown = async (branchName, headCommit, fileDiffs, updateStatus) => {
|
|
188
|
+
updateStatus(`Explaining diffs with AI (${fileDiffs.length} files)`);
|
|
189
|
+
const explanations = await generateDiffExplanations(fileDiffs, branchName);
|
|
190
|
+
const sections = [];
|
|
191
|
+
for (let index = 0; index < fileDiffs.length; index += 1) {
|
|
192
|
+
const { filePath, diff } = fileDiffs[index];
|
|
193
|
+
updateStatus(`Formatting diff ${index + 1}/${fileDiffs.length}: ${filePath}`);
|
|
194
|
+
const explanation = explanations.get(filePath) ||
|
|
195
|
+
`Updates ${filePath} with the selected changes shown below.`;
|
|
196
|
+
sections.push([
|
|
197
|
+
`## ${filePath}`,
|
|
198
|
+
"",
|
|
199
|
+
explanation.trim(),
|
|
200
|
+
"",
|
|
201
|
+
"```diff",
|
|
202
|
+
diff.trimEnd(),
|
|
203
|
+
"```",
|
|
204
|
+
].join("\n"));
|
|
205
|
+
}
|
|
206
|
+
const lines = [
|
|
207
|
+
"# Proposed Diff",
|
|
208
|
+
"",
|
|
209
|
+
"## Metadata",
|
|
210
|
+
"",
|
|
211
|
+
`- Generated: ${new Date().toISOString()}`,
|
|
212
|
+
`- Branch: ${branchName || "unknown"}`,
|
|
213
|
+
`- Base Commit: ${headCommit.short}`,
|
|
214
|
+
`- Base Commit Full: ${headCommit.full}`,
|
|
215
|
+
"",
|
|
216
|
+
"## Files",
|
|
217
|
+
"",
|
|
218
|
+
...(fileDiffs.length > 0
|
|
219
|
+
? fileDiffs.map(({ filePath }) => `- ${filePath}`)
|
|
220
|
+
: ["- No staged files detected"]),
|
|
221
|
+
"",
|
|
222
|
+
...sections.flatMap((section) => [section, ""]),
|
|
223
|
+
];
|
|
224
|
+
return lines.join("\n");
|
|
225
|
+
};
|
|
226
|
+
program
|
|
227
|
+
.name("git-aic")
|
|
228
|
+
.description("AI-powered Git commit using Google Gemini")
|
|
229
|
+
.version("1.0.0")
|
|
230
|
+
.option("-p, --push", "push after committing")
|
|
231
|
+
.option("-d, --diff", "write selected changes to a markdown diff report");
|
|
232
|
+
program
|
|
233
|
+
.command("show")
|
|
234
|
+
.description("Show current configuration")
|
|
235
|
+
.action(() => {
|
|
236
|
+
const rawKey = config.get("apiKey");
|
|
237
|
+
const displayKey = rawKey
|
|
238
|
+
? `${rawKey.substring(0, 8)}${"*".repeat(Math.max(0, rawKey.length - 8))}`
|
|
239
|
+
: "not set";
|
|
240
|
+
console.log(chalk.cyan(`API Key: ${displayKey}`));
|
|
241
|
+
console.log(chalk.cyan(`Config path: ${config.path}`));
|
|
242
|
+
});
|
|
243
|
+
program
|
|
244
|
+
.command("set-key <key>")
|
|
245
|
+
.description("Set your Gemini API key persistently")
|
|
246
|
+
.action((key) => {
|
|
247
|
+
setStoredApiKey(key);
|
|
248
|
+
console.log(chalk.green("API key saved successfully."));
|
|
249
|
+
});
|
|
250
|
+
program
|
|
251
|
+
.command("alias")
|
|
252
|
+
.description("Set up 'git aic' alias")
|
|
253
|
+
.action(() => {
|
|
254
|
+
try {
|
|
255
|
+
spawnSync("git", ["config", "--global", "alias.aic", "!git-aic"], {
|
|
256
|
+
stdio: "inherit",
|
|
257
|
+
shell: true,
|
|
258
|
+
});
|
|
259
|
+
console.log(chalk.green("Alias 'git aic' set up successfully."));
|
|
260
|
+
console.log(chalk.cyan("Now you can use 'git aic' instead of 'git-aic'!"));
|
|
261
|
+
console.log(chalk.yellow("\nNote: Use 'git aic help' or 'git aic -h' for help. 'git aic --help' is reserved by Git for its internal documentation."));
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
console.error(chalk.red("Failed to set up alias:"), error);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
program
|
|
268
|
+
.command("help")
|
|
269
|
+
.description("Display help information")
|
|
270
|
+
.action(() => {
|
|
271
|
+
program.help();
|
|
272
|
+
});
|
|
273
|
+
program.action(async (options) => {
|
|
274
|
+
const loader = createLoader();
|
|
275
|
+
try {
|
|
276
|
+
loader.start("Inspecting repository changes");
|
|
277
|
+
let status = await git.status();
|
|
278
|
+
if (!options.diff && status.deleted.length > 0) {
|
|
279
|
+
loader.update(`Auto-staging ${status.deleted.length} deleted file(s)`);
|
|
280
|
+
await git.add(status.deleted);
|
|
281
|
+
status = await git.status();
|
|
282
|
+
}
|
|
283
|
+
const changedFiles = getChangedFiles(status);
|
|
284
|
+
if (changedFiles.length === 0) {
|
|
285
|
+
loader.stop();
|
|
286
|
+
console.log(chalk.yellow("No files changed in this repository."));
|
|
287
|
+
process.exit(0);
|
|
288
|
+
}
|
|
289
|
+
const actionLabel = options.diff
|
|
290
|
+
? "include in the diff report"
|
|
291
|
+
: options.push
|
|
292
|
+
? "commit and push"
|
|
293
|
+
: "commit";
|
|
294
|
+
let selectedFiles = [];
|
|
295
|
+
if (changedFiles.length > 1) {
|
|
296
|
+
loader.stop();
|
|
297
|
+
selectedFiles =
|
|
298
|
+
(await selectFilesForOperation(actionLabel, status, !options.diff)) ||
|
|
299
|
+
[];
|
|
300
|
+
}
|
|
301
|
+
else if (!status.staged.includes(changedFiles[0])) {
|
|
302
|
+
loader.stop();
|
|
303
|
+
selectedFiles =
|
|
304
|
+
(await selectFilesForOperation(actionLabel, status, !options.diff)) ||
|
|
305
|
+
[];
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
selectedFiles = options.diff ? changedFiles : status.staged;
|
|
309
|
+
loader.succeed(options.diff
|
|
310
|
+
? "Using the currently selected file set for diff report"
|
|
311
|
+
: "Using the currently staged file selection");
|
|
312
|
+
}
|
|
313
|
+
loader.start(options.diff ? "Checking selected changes" : "Checking staged changes");
|
|
314
|
+
const finalDiff = options.diff
|
|
315
|
+
? await getSelectedFilesDiff(selectedFiles)
|
|
316
|
+
: await getGitDiff();
|
|
317
|
+
if (!finalDiff) {
|
|
318
|
+
loader.stop();
|
|
319
|
+
console.log(chalk.yellow(options.diff
|
|
320
|
+
? "No selected changes found for the diff report!"
|
|
321
|
+
: "Still no changes to commit!"));
|
|
322
|
+
process.exit(0);
|
|
323
|
+
}
|
|
324
|
+
status = await git.status();
|
|
325
|
+
const filesBeingUsed = options.diff ? selectedFiles : status.staged;
|
|
326
|
+
loader.succeed(options.diff
|
|
327
|
+
? "Collected selected changes for diff report"
|
|
328
|
+
: "Collected staged changes for commit");
|
|
329
|
+
console.log(chalk.blue(options.diff ? "\nFiles being documented:" : "\nFiles being committed:"));
|
|
330
|
+
filesBeingUsed.forEach((file) => console.log(chalk.cyan(`- ${file}`)));
|
|
331
|
+
console.log("");
|
|
332
|
+
if (options.diff) {
|
|
333
|
+
const branchName = await getBranchName();
|
|
334
|
+
const headCommit = await getHeadCommitInfo();
|
|
335
|
+
loader.start("Collecting selected file diffs");
|
|
336
|
+
const fileDiffs = await getSelectedFileDiffs(selectedFiles);
|
|
337
|
+
const outputDirectory = join(process.cwd(), "git-diffs");
|
|
338
|
+
const outputDirectoryExists = existsSync(outputDirectory);
|
|
339
|
+
loader.update("Preparing git-diffs output folder");
|
|
340
|
+
mkdirSync(outputDirectory, { recursive: true });
|
|
341
|
+
if (!outputDirectoryExists) {
|
|
342
|
+
loader.update("Adding git-diffs to .gitignore");
|
|
343
|
+
ensureGitDiffsIgnored();
|
|
344
|
+
}
|
|
345
|
+
loader.update("Generating AI report filename");
|
|
346
|
+
const aiFileName = await generateDiffFileName(finalDiff);
|
|
347
|
+
const markdownPath = getAvailableMarkdownPath(outputDirectory, aiFileName);
|
|
348
|
+
const markdown = await createDiffMarkdown(branchName, headCommit, fileDiffs, (message) => loader.update(message));
|
|
349
|
+
loader.update("Writing markdown report");
|
|
350
|
+
writeFileSync(markdownPath, markdown, "utf8");
|
|
351
|
+
loader.succeed(`Diff markdown written to ${markdownPath}`);
|
|
352
|
+
process.exit(0);
|
|
353
|
+
}
|
|
354
|
+
loader.start("Analyzing staged changes with AI");
|
|
355
|
+
const branchName = await getBranchName();
|
|
356
|
+
const message = await generateCommitMessage(finalDiff, branchName);
|
|
357
|
+
loader.succeed("Commit message generated");
|
|
358
|
+
console.log(chalk.green("Commit message generated:\n"));
|
|
359
|
+
console.log(chalk.green(`"${message}"\n`));
|
|
360
|
+
console.log(chalk.blue(`> ran: git commit -m\n"${message}"`));
|
|
361
|
+
// await git.commit(message);
|
|
362
|
+
const commitResult = spawnSync("git", ["commit", "-F", "-"], {
|
|
363
|
+
input: message,
|
|
364
|
+
stdio: ["pipe", "inherit", "inherit"],
|
|
365
|
+
});
|
|
366
|
+
if (commitResult.status !== 0) {
|
|
367
|
+
throw new Error(`Git commit failed with status ${commitResult.status}`);
|
|
368
|
+
}
|
|
369
|
+
console.log(chalk.green("\nCommit successful"));
|
|
370
|
+
if (options.push) {
|
|
371
|
+
console.log(chalk.blue("\n> ran: git push"));
|
|
372
|
+
const pushResult = spawnSync("git", ["push"], { stdio: "inherit" });
|
|
373
|
+
if (pushResult.status !== 0) {
|
|
374
|
+
throw new Error(`Git push failed with status ${pushResult.status}`);
|
|
375
|
+
}
|
|
376
|
+
console.log(chalk.green("Push successful"));
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
if (error.name === "ExitPromptError" ||
|
|
381
|
+
error.message?.includes("force closed") ||
|
|
382
|
+
error.message?.includes("Prompt was canceled")) {
|
|
383
|
+
loader.stop();
|
|
384
|
+
console.log(chalk.yellow("\nCommit cancelled."));
|
|
385
|
+
process.exit(0);
|
|
386
|
+
}
|
|
387
|
+
loader.fail("Command failed");
|
|
388
|
+
console.error(chalk.red("Commit failed:"), error);
|
|
389
|
+
process.exit(1);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
normalizeLegacyDiffFlag();
|
|
393
|
+
program.parse(process.argv);
|
|
394
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,aAAa;AACb,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FileDiff {
|
|
2
|
+
filePath: string;
|
|
3
|
+
diff: string;
|
|
4
|
+
}
|
|
5
|
+
export interface HeadCommitInfo {
|
|
6
|
+
short: string;
|
|
7
|
+
full: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const getGitDiff: () => Promise<string>;
|
|
10
|
+
export declare const getBranchName: () => Promise<string>;
|
|
11
|
+
export declare const getStagedFileDiffs: () => Promise<FileDiff[]>;
|
|
12
|
+
export declare const getSelectedFileDiffs: (filePaths: string[]) => Promise<FileDiff[]>;
|
|
13
|
+
export declare const getSelectedFilesDiff: (filePaths: string[]) => Promise<string>;
|
|
14
|
+
export declare const getHeadCommitInfo: () => Promise<HeadCommitInfo>;
|
package/dist/src/git.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { simpleGit } from "simple-git";
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
const git = simpleGit();
|
|
4
|
+
export const getGitDiff = async () => {
|
|
5
|
+
try {
|
|
6
|
+
await git.raw(["config", "core.autocrlf", "true"]);
|
|
7
|
+
const diff = await git.diff(["--cached", "--ignore-space-at-eol"]);
|
|
8
|
+
return diff || "";
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.error(error);
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export const getBranchName = async () => {
|
|
16
|
+
try {
|
|
17
|
+
const status = await git.status();
|
|
18
|
+
return status.current || "";
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error(error);
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
export const getStagedFileDiffs = async () => {
|
|
26
|
+
try {
|
|
27
|
+
const status = await git.status();
|
|
28
|
+
const fileDiffs = await Promise.all(status.staged.map(async (filePath) => {
|
|
29
|
+
const diff = await git.diff([
|
|
30
|
+
"--cached",
|
|
31
|
+
"--ignore-space-at-eol",
|
|
32
|
+
"--",
|
|
33
|
+
filePath,
|
|
34
|
+
]);
|
|
35
|
+
return {
|
|
36
|
+
filePath,
|
|
37
|
+
diff: diff || "",
|
|
38
|
+
};
|
|
39
|
+
}));
|
|
40
|
+
return fileDiffs.filter((entry) => entry.diff.trim().length > 0);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(error);
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const createUntrackedFileDiff = (filePath) => {
|
|
48
|
+
try {
|
|
49
|
+
const contents = readFileSync(filePath, "utf8");
|
|
50
|
+
const lines = contents.split(/\r?\n/);
|
|
51
|
+
const body = lines.map((line) => `+${line}`).join("\n");
|
|
52
|
+
return [
|
|
53
|
+
`diff --git a/${filePath} b/${filePath}`,
|
|
54
|
+
"new file mode 100644",
|
|
55
|
+
"index 0000000..0000000",
|
|
56
|
+
"--- /dev/null",
|
|
57
|
+
`+++ b/${filePath}`,
|
|
58
|
+
`@@ -0,0 +1,${lines.length} @@`,
|
|
59
|
+
body,
|
|
60
|
+
].join("\n");
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(error);
|
|
64
|
+
return "";
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const getSelectedFileDiffs = async (filePaths) => {
|
|
68
|
+
try {
|
|
69
|
+
const status = await git.status();
|
|
70
|
+
const fileDiffs = await Promise.all(filePaths.map(async (filePath) => {
|
|
71
|
+
if (status.not_added.includes(filePath)) {
|
|
72
|
+
return {
|
|
73
|
+
filePath,
|
|
74
|
+
diff: createUntrackedFileDiff(filePath),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const diff = await git.diff([
|
|
78
|
+
"HEAD",
|
|
79
|
+
"--ignore-space-at-eol",
|
|
80
|
+
"--",
|
|
81
|
+
filePath,
|
|
82
|
+
]);
|
|
83
|
+
return {
|
|
84
|
+
filePath,
|
|
85
|
+
diff: diff || "",
|
|
86
|
+
};
|
|
87
|
+
}));
|
|
88
|
+
return fileDiffs.filter((entry) => entry.diff.trim().length > 0);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(error);
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
export const getSelectedFilesDiff = async (filePaths) => {
|
|
96
|
+
const fileDiffs = await getSelectedFileDiffs(filePaths);
|
|
97
|
+
return fileDiffs.map(({ diff }) => diff).join("\n\n");
|
|
98
|
+
};
|
|
99
|
+
export const getHeadCommitInfo = async () => {
|
|
100
|
+
try {
|
|
101
|
+
const full = (await git.revparse(["HEAD"])).trim();
|
|
102
|
+
const short = (await git.revparse(["--short", "HEAD"])).trim();
|
|
103
|
+
return {
|
|
104
|
+
short,
|
|
105
|
+
full,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(error);
|
|
110
|
+
return {
|
|
111
|
+
short: "unknown",
|
|
112
|
+
full: "unknown",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DiffFileInput {
|
|
2
|
+
filePath: string;
|
|
3
|
+
diff: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const generateCommitMessage: (rawDiff: string, branchName: string) => Promise<string>;
|
|
6
|
+
export declare const generateDiffExplanation: (filePath: string, rawDiff: string, branchName: string) => Promise<string>;
|
|
7
|
+
export declare const generateDiffExplanations: (fileDiffs: DiffFileInput[], branchName: string) => Promise<Map<string, string>>;
|
|
8
|
+
export declare const generateDiffFileName: (rawDiff: string) => Promise<string>;
|
|
9
|
+
export {};
|