@ksw8954/git-ai-commit 1.0.1 → 1.0.3
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/Makefile +13 -1
- package/dist/commands/ai.d.ts +5 -1
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +76 -4
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +63 -1
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/config.js +2 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/history.d.ts +16 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +73 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/log.d.ts +19 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +65 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/prCommand.d.ts.map +1 -1
- package/dist/commands/prCommand.js +30 -3
- package/dist/commands/prCommand.js.map +1 -1
- package/dist/commands/tag.d.ts +2 -0
- package/dist/commands/tag.d.ts.map +1 -1
- package/dist/commands/tag.js +72 -4
- package/dist/commands/tag.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/ai.ts +84 -2
package/Makefile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: install build dev lint test typecheck clean uninstall link unlink
|
|
1
|
+
.PHONY: install build dev lint test typecheck clean uninstall link unlink version publish install-package
|
|
2
2
|
|
|
3
3
|
install: ## Install dependencies and build the project
|
|
4
4
|
npm install
|
|
@@ -30,3 +30,15 @@ link: ## Link the CLI globally
|
|
|
30
30
|
|
|
31
31
|
unlink: ## Unlink the globally installed CLI
|
|
32
32
|
npm unlink -g git-ai-commit
|
|
33
|
+
|
|
34
|
+
# Version bump target
|
|
35
|
+
# Usage: make version [LEVEL=patch] (LEVEL can be patch, minor, major)
|
|
36
|
+
LEVEL ?= patch
|
|
37
|
+
version: ## Bump package.json version one step (default: patch)
|
|
38
|
+
npm version $(LEVEL) --no-git-tag-version
|
|
39
|
+
|
|
40
|
+
publish: build ## Publish the package to npm (ensure you're logged in)
|
|
41
|
+
npm publish
|
|
42
|
+
|
|
43
|
+
install-package: ## Install this package globally via npm
|
|
44
|
+
npm i -g @ksw8954/git-ai-commit
|
package/dist/commands/ai.d.ts
CHANGED
|
@@ -28,8 +28,12 @@ export declare class AIService {
|
|
|
28
28
|
private verbose;
|
|
29
29
|
constructor(config: AIServiceConfig);
|
|
30
30
|
private debugLog;
|
|
31
|
+
/**
|
|
32
|
+
* Remove think/thinking tags and other XML-style tags from AI response
|
|
33
|
+
*/
|
|
34
|
+
private cleanMessage;
|
|
31
35
|
generateCommitMessage(diff: string, extraInstructions?: string): Promise<CommitGenerationResult>;
|
|
32
|
-
generateTagNotes(tagName: string, commitLog: string): Promise<TagGenerationResult>;
|
|
36
|
+
generateTagNotes(tagName: string, commitLog: string, extraInstructions?: string): Promise<TagGenerationResult>;
|
|
33
37
|
generatePullRequestMessage(baseBranch: string, compareBranch: string, diff: string): Promise<PullRequestGenerationResult>;
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=ai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,EAAE,eAAe;IAUnC,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,EAAE,eAAe;IAUnC,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBd,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAyJhG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuD9G,0BAA0B,CAC9B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,2BAA2B,CAAC;CAsDxC"}
|
package/dist/commands/ai.js
CHANGED
|
@@ -23,6 +23,27 @@ class AIService {
|
|
|
23
23
|
console.log(...args);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Remove think/thinking tags and other XML-style tags from AI response
|
|
28
|
+
*/
|
|
29
|
+
cleanMessage(message) {
|
|
30
|
+
if (!message)
|
|
31
|
+
return message;
|
|
32
|
+
let cleaned = message;
|
|
33
|
+
// Remove <think>...</think> (including namespaced <antml:think>) and <thinking>...</thinking>
|
|
34
|
+
const thinkBlock = /<\s*(?:antml:)?think\b[^>]*>[\s\S]*?<\s*\/\s*(?:antml:)?think\s*>/gi;
|
|
35
|
+
const thinkingBlock = /<\s*thinking\b[^>]*>[\s\S]*?<\s*\/\s*thinking\s*>/gi;
|
|
36
|
+
cleaned = cleaned.replace(thinkBlock, '').replace(thinkingBlock, '');
|
|
37
|
+
// Also remove stray opening/closing think tags if any slipped through
|
|
38
|
+
cleaned = cleaned.replace(/<\/?\s*(?:antml:)?think\b[^>]*>/gi, '');
|
|
39
|
+
cleaned = cleaned.replace(/<\/?\s*thinking\b[^>]*>/gi, '');
|
|
40
|
+
// Remove any remaining XML/HTML-like tags
|
|
41
|
+
cleaned = cleaned.replace(/<[^>]+>/g, '');
|
|
42
|
+
// Normalize whitespace
|
|
43
|
+
cleaned = cleaned.replace(/[\t\r]+/g, '');
|
|
44
|
+
cleaned = cleaned.replace(/\n{3,}/g, '\n\n').trim();
|
|
45
|
+
return cleaned;
|
|
46
|
+
}
|
|
26
47
|
async generateCommitMessage(diff, extraInstructions) {
|
|
27
48
|
try {
|
|
28
49
|
this.debugLog('Sending request to AI API...');
|
|
@@ -99,6 +120,54 @@ class AIService {
|
|
|
99
120
|
finalMessage = `chore: ${finalMessage}`;
|
|
100
121
|
}
|
|
101
122
|
}
|
|
123
|
+
// Clean and normalize formatting/artifacts that sometimes appear
|
|
124
|
+
finalMessage = this.cleanMessage(finalMessage);
|
|
125
|
+
// If the model produced a stray type-only line (e.g., "chore:" on its own), drop it
|
|
126
|
+
let lines = finalMessage.split('\n').map(l => l.replace(/[\s\t]+$/, '')).filter(l => l !== undefined);
|
|
127
|
+
const headerPattern = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s+.+/;
|
|
128
|
+
const typeOnlyPattern = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s*$/;
|
|
129
|
+
// Remove Markdown code fences and trim surrounding whitespace
|
|
130
|
+
lines = lines.filter(l => !/^```/.test(l));
|
|
131
|
+
// Trim leading blank lines
|
|
132
|
+
while (lines.length && lines[0].trim() === '')
|
|
133
|
+
lines.shift();
|
|
134
|
+
// Remove any leading type-only lines until we hit a real header or content
|
|
135
|
+
while (lines.length && typeOnlyPattern.test(lines[0])) {
|
|
136
|
+
lines.shift();
|
|
137
|
+
while (lines.length && lines[0].trim() === '')
|
|
138
|
+
lines.shift();
|
|
139
|
+
}
|
|
140
|
+
// If the first non-empty line is not a header, but a header exists later, start from that header
|
|
141
|
+
const firstHeaderIdx = lines.findIndex(l => headerPattern.test(l));
|
|
142
|
+
if (firstHeaderIdx > 0) {
|
|
143
|
+
lines = lines.slice(firstHeaderIdx);
|
|
144
|
+
}
|
|
145
|
+
// If the first line has a duplicated type prefix like "chore: docs(scope): ...", trim the outer prefix
|
|
146
|
+
if (lines.length > 0) {
|
|
147
|
+
const dupTypePrefix = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert):\s+(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s+(.+)/;
|
|
148
|
+
const m = lines[0].match(dupTypePrefix);
|
|
149
|
+
if (m) {
|
|
150
|
+
// Keep the inner proper header
|
|
151
|
+
const innerType = m[2];
|
|
152
|
+
// Rebuild as `${innerType}${scope}: ${desc}`
|
|
153
|
+
lines[0] = `${innerType}${m[3] ?? ''}: ${m[4]}`;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Ensure only a single blank line between header and body if body exists
|
|
157
|
+
if (lines.length > 1 && lines[0].trim().length > 0) {
|
|
158
|
+
// Collapse multiple blank lines immediately after header to one
|
|
159
|
+
let i = 1;
|
|
160
|
+
let blankCount = 0;
|
|
161
|
+
while (i < lines.length && lines[i].trim() === '') {
|
|
162
|
+
blankCount++;
|
|
163
|
+
i++;
|
|
164
|
+
}
|
|
165
|
+
if (blankCount > 1) {
|
|
166
|
+
// Keep exactly one blank line
|
|
167
|
+
lines.splice(1, blankCount - 1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
finalMessage = lines.join('\n').trim();
|
|
102
171
|
return {
|
|
103
172
|
success: true,
|
|
104
173
|
message: finalMessage
|
|
@@ -112,17 +181,20 @@ class AIService {
|
|
|
112
181
|
};
|
|
113
182
|
}
|
|
114
183
|
}
|
|
115
|
-
async generateTagNotes(tagName, commitLog) {
|
|
184
|
+
async generateTagNotes(tagName, commitLog, extraInstructions) {
|
|
116
185
|
try {
|
|
117
186
|
this.debugLog('Sending request to AI API for tag notes...');
|
|
118
187
|
this.debugLog('Model:', this.model);
|
|
119
188
|
this.debugLog('Base URL:', this.openai.baseURL);
|
|
189
|
+
const customInstructions = extraInstructions && extraInstructions.trim().length > 0
|
|
190
|
+
? `${extraInstructions.trim()}`
|
|
191
|
+
: '';
|
|
120
192
|
const response = await this.openai.chat.completions.create({
|
|
121
193
|
model: this.model,
|
|
122
194
|
messages: [
|
|
123
195
|
{
|
|
124
196
|
role: 'system',
|
|
125
|
-
content: (0, tag_1.generateTagPrompt)(tagName,
|
|
197
|
+
content: (0, tag_1.generateTagPrompt)(tagName, customInstructions, this.language)
|
|
126
198
|
},
|
|
127
199
|
{
|
|
128
200
|
role: 'user',
|
|
@@ -146,7 +218,7 @@ class AIService {
|
|
|
146
218
|
}
|
|
147
219
|
return {
|
|
148
220
|
success: true,
|
|
149
|
-
notes: finalNotes.trim()
|
|
221
|
+
notes: this.cleanMessage(finalNotes.trim())
|
|
150
222
|
};
|
|
151
223
|
}
|
|
152
224
|
catch (error) {
|
|
@@ -190,7 +262,7 @@ class AIService {
|
|
|
190
262
|
}
|
|
191
263
|
return {
|
|
192
264
|
success: true,
|
|
193
|
-
message: finalMessage.trim()
|
|
265
|
+
message: this.cleanMessage(finalMessage.trim())
|
|
194
266
|
};
|
|
195
267
|
}
|
|
196
268
|
catch (error) {
|
package/dist/commands/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAU;;YAcX,YAAY;YAoKZ,aAAa;IAgB3B,UAAU,IAAI,OAAO;CAGtB"}
|
package/dist/commands/commit.js
CHANGED
|
@@ -9,6 +9,7 @@ const readline_1 = __importDefault(require("readline"));
|
|
|
9
9
|
const git_1 = require("./git");
|
|
10
10
|
const ai_1 = require("./ai");
|
|
11
11
|
const config_1 = require("./config");
|
|
12
|
+
const log_1 = require("./log");
|
|
12
13
|
class CommitCommand {
|
|
13
14
|
constructor() {
|
|
14
15
|
this.program = new commander_1.Command('commit')
|
|
@@ -22,6 +23,11 @@ class CommitCommand {
|
|
|
22
23
|
.action(this.handleCommit.bind(this));
|
|
23
24
|
}
|
|
24
25
|
async handleCommit(options) {
|
|
26
|
+
const start = Date.now();
|
|
27
|
+
const safeArgs = {
|
|
28
|
+
...options,
|
|
29
|
+
apiKey: options.apiKey ? '***' : undefined
|
|
30
|
+
};
|
|
25
31
|
try {
|
|
26
32
|
const existingConfig = config_1.ConfigService.getConfig();
|
|
27
33
|
const mergedApiKey = options.apiKey || existingConfig.apiKey;
|
|
@@ -48,6 +54,13 @@ class CommitCommand {
|
|
|
48
54
|
const diffResult = await git_1.GitService.getStagedDiff();
|
|
49
55
|
if (!diffResult.success) {
|
|
50
56
|
console.error('Error:', diffResult.error);
|
|
57
|
+
await log_1.LogService.append({
|
|
58
|
+
command: 'commit',
|
|
59
|
+
args: safeArgs,
|
|
60
|
+
status: 'failure',
|
|
61
|
+
details: diffResult.error,
|
|
62
|
+
durationMs: Date.now() - start
|
|
63
|
+
});
|
|
51
64
|
process.exit(1);
|
|
52
65
|
}
|
|
53
66
|
log('Generating commit message...');
|
|
@@ -55,6 +68,13 @@ class CommitCommand {
|
|
|
55
68
|
const aiResult = await aiService.generateCommitMessage(diffResult.diff, options.prompt);
|
|
56
69
|
if (!aiResult.success) {
|
|
57
70
|
console.error('Error:', aiResult.error);
|
|
71
|
+
await log_1.LogService.append({
|
|
72
|
+
command: 'commit',
|
|
73
|
+
args: safeArgs,
|
|
74
|
+
status: 'failure',
|
|
75
|
+
details: aiResult.error,
|
|
76
|
+
durationMs: Date.now() - start
|
|
77
|
+
});
|
|
58
78
|
process.exit(1);
|
|
59
79
|
}
|
|
60
80
|
if (typeof aiResult.message !== 'string') {
|
|
@@ -63,6 +83,13 @@ class CommitCommand {
|
|
|
63
83
|
}
|
|
64
84
|
if (messageOnly) {
|
|
65
85
|
console.log(aiResult.message);
|
|
86
|
+
await log_1.LogService.append({
|
|
87
|
+
command: 'commit',
|
|
88
|
+
args: { ...safeArgs, messageOnly: true },
|
|
89
|
+
status: 'success',
|
|
90
|
+
details: 'message-only output',
|
|
91
|
+
durationMs: Date.now() - start
|
|
92
|
+
});
|
|
66
93
|
return;
|
|
67
94
|
}
|
|
68
95
|
console.log('\nGenerated commit message:');
|
|
@@ -70,6 +97,13 @@ class CommitCommand {
|
|
|
70
97
|
const confirmed = await this.confirmCommit();
|
|
71
98
|
if (!confirmed) {
|
|
72
99
|
console.log('Commit cancelled by user.');
|
|
100
|
+
await log_1.LogService.append({
|
|
101
|
+
command: 'commit',
|
|
102
|
+
args: safeArgs,
|
|
103
|
+
status: 'cancelled',
|
|
104
|
+
details: 'user declined commit',
|
|
105
|
+
durationMs: Date.now() - start
|
|
106
|
+
});
|
|
73
107
|
return;
|
|
74
108
|
}
|
|
75
109
|
console.log('\nCreating commit...');
|
|
@@ -92,17 +126,45 @@ class CommitCommand {
|
|
|
92
126
|
}
|
|
93
127
|
else {
|
|
94
128
|
console.error('❌ Failed to push to remote');
|
|
129
|
+
await log_1.LogService.append({
|
|
130
|
+
command: 'commit',
|
|
131
|
+
args: { ...safeArgs, push: true },
|
|
132
|
+
status: 'failure',
|
|
133
|
+
details: 'push failed',
|
|
134
|
+
durationMs: Date.now() - start
|
|
135
|
+
});
|
|
95
136
|
process.exit(1);
|
|
96
137
|
}
|
|
97
138
|
}
|
|
98
139
|
}
|
|
99
140
|
else {
|
|
100
141
|
console.error('❌ Failed to create commit');
|
|
142
|
+
await log_1.LogService.append({
|
|
143
|
+
command: 'commit',
|
|
144
|
+
args: safeArgs,
|
|
145
|
+
status: 'failure',
|
|
146
|
+
details: 'git commit failed',
|
|
147
|
+
durationMs: Date.now() - start
|
|
148
|
+
});
|
|
101
149
|
process.exit(1);
|
|
102
150
|
}
|
|
151
|
+
await log_1.LogService.append({
|
|
152
|
+
command: 'commit',
|
|
153
|
+
args: safeArgs,
|
|
154
|
+
status: 'success',
|
|
155
|
+
durationMs: Date.now() - start
|
|
156
|
+
});
|
|
103
157
|
}
|
|
104
158
|
catch (error) {
|
|
105
|
-
|
|
159
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
160
|
+
console.error('Error:', message);
|
|
161
|
+
await log_1.LogService.append({
|
|
162
|
+
command: 'commit',
|
|
163
|
+
args: safeArgs,
|
|
164
|
+
status: 'failure',
|
|
165
|
+
details: message,
|
|
166
|
+
durationMs: Date.now() - start
|
|
167
|
+
});
|
|
106
168
|
process.exit(1);
|
|
107
169
|
}
|
|
108
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,wDAAgC;AAChC,+BAAkD;AAClD,6BAAkD;AAClD,qCAAyC;
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/config.js
CHANGED
|
@@ -56,8 +56,8 @@ class ConfigService {
|
|
|
56
56
|
const resolvedMode = this.normalizeMode(modeOverride || process.env.AI_MODE);
|
|
57
57
|
const isOpenAI = resolvedMode === 'openai';
|
|
58
58
|
const apiKey = isOpenAI
|
|
59
|
-
? process.env.OPENAI_API_KEY || process.env.AI_API_KEY
|
|
60
|
-
: process.env.AI_API_KEY || process.env.OPENAI_API_KEY
|
|
59
|
+
? process.env.OPENAI_API_KEY || process.env.AI_API_KEY
|
|
60
|
+
: process.env.AI_API_KEY || process.env.OPENAI_API_KEY;
|
|
61
61
|
const baseURL = isOpenAI
|
|
62
62
|
? process.env.OPENAI_BASE_URL || process.env.AI_BASE_URL
|
|
63
63
|
: process.env.AI_BASE_URL || process.env.OPENAI_BASE_URL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,2BAA4C;AAC5C,4CAAoB;AACpB,gDAAwB;AAsBxB,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,YAAY,GAAwB,QAAQ,CAAC;AACnD,MAAM,gBAAgB,GAAsB,IAAI,CAAC;AACjD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAa,aAAa;IAChB,MAAM,CAAC,iBAAiB;QAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAClE,CAAC;IAEO,MAAM,CAAC,cAAc;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE1C,IAAI,CAAC;YACH,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;YACnG,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,QAAiB;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,IAAa;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,YAAkC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,YAAY,KAAK,QAAQ,CAAC;QAE3C,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export interface HistoryOptions {
|
|
3
|
+
limit?: string;
|
|
4
|
+
json?: boolean;
|
|
5
|
+
clear?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class HistoryCommand {
|
|
8
|
+
private program;
|
|
9
|
+
constructor();
|
|
10
|
+
private confirmClear;
|
|
11
|
+
private parseLimit;
|
|
12
|
+
private formatLine;
|
|
13
|
+
private handleHistory;
|
|
14
|
+
getCommand(): Command;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAU;;YAWX,YAAY;IAU1B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;YASJ,aAAa;IA+B3B,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HistoryCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const readline_1 = __importDefault(require("readline"));
|
|
9
|
+
const log_1 = require("./log");
|
|
10
|
+
class HistoryCommand {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.program = new commander_1.Command('history')
|
|
13
|
+
.description('Manage git-ai-commit command history')
|
|
14
|
+
.option('-l, --limit <n>', 'Limit number of entries to show (most recent first)')
|
|
15
|
+
.option('--json', 'Output in JSON format')
|
|
16
|
+
.option('--clear', 'Clear all stored history (requires confirmation)')
|
|
17
|
+
.action(this.handleHistory.bind(this));
|
|
18
|
+
}
|
|
19
|
+
async confirmClear() {
|
|
20
|
+
const rl = readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
|
|
21
|
+
const answer = await new Promise(resolve => {
|
|
22
|
+
rl.question('This will remove all stored history. Continue? (y/n): ', resolve);
|
|
23
|
+
});
|
|
24
|
+
rl.close();
|
|
25
|
+
const normalized = answer.trim().toLowerCase();
|
|
26
|
+
return normalized === 'y' || normalized === 'yes';
|
|
27
|
+
}
|
|
28
|
+
parseLimit(value) {
|
|
29
|
+
if (!value)
|
|
30
|
+
return undefined;
|
|
31
|
+
const n = Number(value);
|
|
32
|
+
return Number.isFinite(n) && n > 0 ? Math.floor(n) : undefined;
|
|
33
|
+
}
|
|
34
|
+
formatLine(e) {
|
|
35
|
+
const ts = new Date(e.timestamp).toISOString();
|
|
36
|
+
const args = Object.entries(e.args || {})
|
|
37
|
+
.filter(([k, v]) => v !== undefined && v !== null && v !== '')
|
|
38
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
39
|
+
.join(' ');
|
|
40
|
+
return `${ts} ${e.command} ${e.status}${e.durationMs ? ` (${e.durationMs}ms)` : ''}${args ? ` -- ${args}` : ''}${e.details ? `\n > ${e.details}` : ''}`;
|
|
41
|
+
}
|
|
42
|
+
async handleHistory(options) {
|
|
43
|
+
if (options.clear) {
|
|
44
|
+
const confirmed = await this.confirmClear();
|
|
45
|
+
if (!confirmed) {
|
|
46
|
+
console.log('History clear cancelled.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
await log_1.LogService.clear();
|
|
50
|
+
console.log('History cleared.');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const limit = this.parseLimit(options.limit);
|
|
54
|
+
const entries = await log_1.LogService.read(limit);
|
|
55
|
+
if (options.json) {
|
|
56
|
+
const output = limit ? entries.slice(-limit) : entries;
|
|
57
|
+
console.log(JSON.stringify(output, null, 2));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (entries.length === 0) {
|
|
61
|
+
console.log('No history entries.');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
for (const e of entries) {
|
|
65
|
+
console.log(this.formatLine(e));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
getCommand() {
|
|
69
|
+
return this.program;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.HistoryCommand = HistoryCommand;
|
|
73
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type LogStatus = 'success' | 'failure' | 'cancelled';
|
|
2
|
+
export interface HistoryEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
command: string;
|
|
6
|
+
args: Record<string, unknown>;
|
|
7
|
+
status: LogStatus;
|
|
8
|
+
details?: string;
|
|
9
|
+
durationMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class LogService {
|
|
12
|
+
static append(entry: Omit<HistoryEntry, 'id' | 'timestamp'> & {
|
|
13
|
+
timestamp?: string;
|
|
14
|
+
id?: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
static read(limit?: number): Promise<HistoryEntry[]>;
|
|
17
|
+
static clear(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,qBAAa,UAAU;WACR,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAmB1G,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;WAe7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LogService = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
function getStorageDir() {
|
|
11
|
+
const override = process.env.GIT_AI_COMMIT_CONFIG_PATH;
|
|
12
|
+
return override ? path_1.default.dirname(path_1.default.resolve(override)) : path_1.default.join(os_1.default.homedir(), '.git-ai-commit');
|
|
13
|
+
}
|
|
14
|
+
function getHistoryPath() {
|
|
15
|
+
return path_1.default.join(getStorageDir(), 'history.jsonl');
|
|
16
|
+
}
|
|
17
|
+
function genId() {
|
|
18
|
+
return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
19
|
+
}
|
|
20
|
+
class LogService {
|
|
21
|
+
static async append(entry) {
|
|
22
|
+
const file = getHistoryPath();
|
|
23
|
+
const dir = path_1.default.dirname(file);
|
|
24
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
25
|
+
const finalized = {
|
|
26
|
+
id: entry.id || genId(),
|
|
27
|
+
timestamp: entry.timestamp || new Date().toISOString(),
|
|
28
|
+
command: entry.command,
|
|
29
|
+
args: entry.args,
|
|
30
|
+
status: entry.status,
|
|
31
|
+
details: entry.details,
|
|
32
|
+
durationMs: entry.durationMs
|
|
33
|
+
};
|
|
34
|
+
const line = JSON.stringify(finalized) + '\n';
|
|
35
|
+
await fs_1.promises.appendFile(file, line, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
static async read(limit) {
|
|
38
|
+
const file = getHistoryPath();
|
|
39
|
+
try {
|
|
40
|
+
const raw = await fs_1.promises.readFile(file, 'utf-8');
|
|
41
|
+
const lines = raw.split('\n').filter(Boolean);
|
|
42
|
+
const parsed = lines.map(l => {
|
|
43
|
+
try {
|
|
44
|
+
return JSON.parse(l);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}).filter((e) => Boolean(e));
|
|
50
|
+
const result = limit && limit > 0 ? parsed.slice(-limit) : parsed;
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
static async clear() {
|
|
58
|
+
const file = getHistoryPath();
|
|
59
|
+
const dir = path_1.default.dirname(file);
|
|
60
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
61
|
+
await fs_1.promises.writeFile(file, '', 'utf-8');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.LogService = LogService;
|
|
65
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prCommand.d.ts","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"prCommand.d.ts","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAU;;YAaX,iBAAiB;IA2E/B,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const git_1 = require("./git");
|
|
6
6
|
const ai_1 = require("./ai");
|
|
7
7
|
const config_1 = require("./config");
|
|
8
|
+
const log_1 = require("./log");
|
|
8
9
|
class PullRequestCommand {
|
|
9
10
|
constructor() {
|
|
10
11
|
this.program = new commander_1.Command('pr')
|
|
@@ -29,7 +30,14 @@ class PullRequestCommand {
|
|
|
29
30
|
});
|
|
30
31
|
const diffResult = await git_1.GitService.getBranchDiff(options.base, options.compare);
|
|
31
32
|
if (!diffResult.success || !diffResult.diff) {
|
|
32
|
-
|
|
33
|
+
const err = diffResult.error || 'Unable to determine differences between branches.';
|
|
34
|
+
console.error('Error:', err);
|
|
35
|
+
await log_1.LogService.append({
|
|
36
|
+
command: 'pr',
|
|
37
|
+
args: { ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
38
|
+
status: 'failure',
|
|
39
|
+
details: err
|
|
40
|
+
});
|
|
33
41
|
process.exit(1);
|
|
34
42
|
return;
|
|
35
43
|
}
|
|
@@ -42,14 +50,33 @@ class PullRequestCommand {
|
|
|
42
50
|
});
|
|
43
51
|
const aiResult = await aiService.generatePullRequestMessage(options.base, options.compare, diffResult.diff);
|
|
44
52
|
if (!aiResult.success || !aiResult.message) {
|
|
45
|
-
|
|
53
|
+
const err = aiResult.error || 'Failed to generate pull request message.';
|
|
54
|
+
console.error('Error:', err);
|
|
55
|
+
await log_1.LogService.append({
|
|
56
|
+
command: 'pr',
|
|
57
|
+
args: { ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
58
|
+
status: 'failure',
|
|
59
|
+
details: err
|
|
60
|
+
});
|
|
46
61
|
process.exit(1);
|
|
47
62
|
return;
|
|
48
63
|
}
|
|
49
64
|
console.log(aiResult.message);
|
|
65
|
+
await log_1.LogService.append({
|
|
66
|
+
command: 'pr',
|
|
67
|
+
args: { ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
68
|
+
status: 'success'
|
|
69
|
+
});
|
|
50
70
|
}
|
|
51
71
|
catch (error) {
|
|
52
|
-
|
|
72
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
73
|
+
console.error('Error:', message);
|
|
74
|
+
await log_1.LogService.append({
|
|
75
|
+
command: 'pr',
|
|
76
|
+
args: { ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
77
|
+
status: 'failure',
|
|
78
|
+
details: message
|
|
79
|
+
});
|
|
53
80
|
process.exit(1);
|
|
54
81
|
}
|
|
55
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prCommand.js","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,+BAAmC;AACnC,6BAAiC;AACjC,qCAAyC;
|
|
1
|
+
{"version":3,"file":"prCommand.js","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tag.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface TagOptions {
|
|
|
5
5
|
model?: string;
|
|
6
6
|
message?: string;
|
|
7
7
|
baseTag?: string;
|
|
8
|
+
prompt?: string;
|
|
8
9
|
}
|
|
9
10
|
export declare class TagCommand {
|
|
10
11
|
private program;
|
|
@@ -12,6 +13,7 @@ export declare class TagCommand {
|
|
|
12
13
|
private resolveAIConfig;
|
|
13
14
|
private handleTag;
|
|
14
15
|
private confirmTagPush;
|
|
16
|
+
private confirmTagCreate;
|
|
15
17
|
getCommand(): Command;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=tag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAU;;IAiBzB,OAAO,CAAC,eAAe;YAoBT,SAAS;YA4IT,cAAc;YAgBd,gBAAgB;IAgB9B,UAAU,IAAI,OAAO;CAGtB"}
|
package/dist/commands/tag.js
CHANGED
|
@@ -9,6 +9,7 @@ const readline_1 = __importDefault(require("readline"));
|
|
|
9
9
|
const ai_1 = require("./ai");
|
|
10
10
|
const config_1 = require("./config");
|
|
11
11
|
const git_1 = require("./git");
|
|
12
|
+
const log_1 = require("./log");
|
|
12
13
|
class TagCommand {
|
|
13
14
|
constructor() {
|
|
14
15
|
this.program = new commander_1.Command('tag')
|
|
@@ -19,6 +20,7 @@ class TagCommand {
|
|
|
19
20
|
.option('-m, --model <model>', 'Model to use (overrides env var)')
|
|
20
21
|
.option('--message <message>', 'Tag message to use directly (skips AI generation)')
|
|
21
22
|
.option('-t, --base-tag <tag>', 'Existing tag to diff against when generating notes')
|
|
23
|
+
.option('--prompt <text>', 'Additional instructions to append to the AI prompt for this tag')
|
|
22
24
|
.action(async (tagName, options) => {
|
|
23
25
|
await this.handleTag(tagName, options);
|
|
24
26
|
});
|
|
@@ -43,6 +45,12 @@ class TagCommand {
|
|
|
43
45
|
const trimmedName = tagName?.trim();
|
|
44
46
|
if (!trimmedName) {
|
|
45
47
|
console.error('Tag name is required.');
|
|
48
|
+
await log_1.LogService.append({
|
|
49
|
+
command: 'tag',
|
|
50
|
+
args: { name: tagName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
51
|
+
status: 'failure',
|
|
52
|
+
details: 'missing tag name'
|
|
53
|
+
});
|
|
46
54
|
process.exit(1);
|
|
47
55
|
return;
|
|
48
56
|
}
|
|
@@ -63,6 +71,12 @@ class TagCommand {
|
|
|
63
71
|
const historyResult = await git_1.GitService.getCommitSummariesSince(baseTag);
|
|
64
72
|
if (!historyResult.success || !historyResult.log) {
|
|
65
73
|
console.error('Error:', historyResult.error ?? 'Unable to read commit history.');
|
|
74
|
+
await log_1.LogService.append({
|
|
75
|
+
command: 'tag',
|
|
76
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
77
|
+
status: 'failure',
|
|
78
|
+
details: historyResult.error ?? 'Unable to read commit history.'
|
|
79
|
+
});
|
|
66
80
|
process.exit(1);
|
|
67
81
|
return;
|
|
68
82
|
}
|
|
@@ -71,29 +85,60 @@ class TagCommand {
|
|
|
71
85
|
aiConfig = this.resolveAIConfig(options);
|
|
72
86
|
}
|
|
73
87
|
catch (error) {
|
|
74
|
-
|
|
88
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
89
|
+
console.error('Error:', message);
|
|
90
|
+
await log_1.LogService.append({
|
|
91
|
+
command: 'tag',
|
|
92
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
93
|
+
status: 'failure',
|
|
94
|
+
details: message
|
|
95
|
+
});
|
|
75
96
|
process.exit(1);
|
|
76
97
|
return;
|
|
77
98
|
}
|
|
78
99
|
const aiService = new ai_1.AIService(aiConfig);
|
|
79
|
-
const aiResult = await aiService.generateTagNotes(trimmedName, historyResult.log);
|
|
100
|
+
const aiResult = await aiService.generateTagNotes(trimmedName, historyResult.log, options.prompt);
|
|
80
101
|
if (!aiResult.success || !aiResult.notes) {
|
|
81
102
|
console.error('Error:', aiResult.error ?? 'Failed to generate tag notes.');
|
|
103
|
+
await log_1.LogService.append({
|
|
104
|
+
command: 'tag',
|
|
105
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
106
|
+
status: 'failure',
|
|
107
|
+
details: aiResult.error ?? 'Failed to generate tag notes.'
|
|
108
|
+
});
|
|
82
109
|
process.exit(1);
|
|
83
110
|
return;
|
|
84
111
|
}
|
|
85
112
|
tagMessage = aiResult.notes;
|
|
86
113
|
}
|
|
114
|
+
// Show preview and confirm before creating the tag
|
|
115
|
+
console.log('\nTag message preview:\n');
|
|
116
|
+
console.log(tagMessage);
|
|
117
|
+
const shouldCreate = await this.confirmTagCreate(trimmedName);
|
|
118
|
+
if (!shouldCreate) {
|
|
119
|
+
console.log('Tag creation cancelled by user.');
|
|
120
|
+
await log_1.LogService.append({
|
|
121
|
+
command: 'tag',
|
|
122
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
123
|
+
status: 'cancelled',
|
|
124
|
+
details: 'user declined tag creation'
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
87
128
|
console.log(`Creating annotated tag ${trimmedName}...`);
|
|
88
129
|
const created = await git_1.GitService.createAnnotatedTag(trimmedName, tagMessage);
|
|
89
130
|
if (!created) {
|
|
90
131
|
console.error('❌ Failed to create tag');
|
|
132
|
+
await log_1.LogService.append({
|
|
133
|
+
command: 'tag',
|
|
134
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
135
|
+
status: 'failure',
|
|
136
|
+
details: 'git tag creation failed'
|
|
137
|
+
});
|
|
91
138
|
process.exit(1);
|
|
92
139
|
return;
|
|
93
140
|
}
|
|
94
141
|
console.log(`✅ Tag ${trimmedName} created successfully!`);
|
|
95
|
-
console.log('\nTag message:\n');
|
|
96
|
-
console.log(tagMessage);
|
|
97
142
|
const shouldPush = await this.confirmTagPush(trimmedName);
|
|
98
143
|
if (shouldPush) {
|
|
99
144
|
console.log(`Pushing tag ${trimmedName} to remote...`);
|
|
@@ -103,9 +148,20 @@ class TagCommand {
|
|
|
103
148
|
}
|
|
104
149
|
else {
|
|
105
150
|
console.error('❌ Failed to push tag to remote');
|
|
151
|
+
await log_1.LogService.append({
|
|
152
|
+
command: 'tag',
|
|
153
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
154
|
+
status: 'failure',
|
|
155
|
+
details: 'tag push failed'
|
|
156
|
+
});
|
|
106
157
|
process.exit(1);
|
|
107
158
|
}
|
|
108
159
|
}
|
|
160
|
+
await log_1.LogService.append({
|
|
161
|
+
command: 'tag',
|
|
162
|
+
args: { name: trimmedName, ...options, apiKey: options.apiKey ? '***' : undefined },
|
|
163
|
+
status: 'success'
|
|
164
|
+
});
|
|
109
165
|
}
|
|
110
166
|
async confirmTagPush(tagName) {
|
|
111
167
|
const rl = readline_1.default.createInterface({
|
|
@@ -119,6 +175,18 @@ class TagCommand {
|
|
|
119
175
|
const normalized = answer.trim().toLowerCase();
|
|
120
176
|
return normalized === 'y' || normalized === 'yes';
|
|
121
177
|
}
|
|
178
|
+
async confirmTagCreate(tagName) {
|
|
179
|
+
const rl = readline_1.default.createInterface({
|
|
180
|
+
input: process.stdin,
|
|
181
|
+
output: process.stdout
|
|
182
|
+
});
|
|
183
|
+
const answer = await new Promise(resolve => {
|
|
184
|
+
rl.question(`Create annotated tag ${tagName}? (y/n): `, resolve);
|
|
185
|
+
});
|
|
186
|
+
rl.close();
|
|
187
|
+
const normalized = answer.trim().toLowerCase();
|
|
188
|
+
return normalized === 'y' || normalized === 'yes';
|
|
189
|
+
}
|
|
122
190
|
getCommand() {
|
|
123
191
|
return this.program;
|
|
124
192
|
}
|
package/dist/commands/tag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,wDAAgC;AAChC,6BAAkD;AAClD,qCAAyC;AACzC,+BAAmC;
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ const commit_1 = require("./commands/commit");
|
|
|
6
6
|
const configCommand_1 = require("./commands/configCommand");
|
|
7
7
|
const prCommand_1 = require("./commands/prCommand");
|
|
8
8
|
const tag_1 = require("./commands/tag");
|
|
9
|
+
const history_1 = require("./commands/history");
|
|
9
10
|
const program = new commander_1.Command();
|
|
10
11
|
program
|
|
11
12
|
.name('git-ai-commit')
|
|
@@ -15,9 +16,11 @@ const commitCommand = new commit_1.CommitCommand();
|
|
|
15
16
|
const configCommand = new configCommand_1.ConfigCommand();
|
|
16
17
|
const pullRequestCommand = new prCommand_1.PullRequestCommand();
|
|
17
18
|
const tagCommand = new tag_1.TagCommand();
|
|
19
|
+
const historyCommand = new history_1.HistoryCommand();
|
|
18
20
|
program.addCommand(commitCommand.getCommand());
|
|
19
21
|
program.addCommand(configCommand.getCommand());
|
|
20
22
|
program.addCommand(pullRequestCommand.getCommand());
|
|
21
23
|
program.addCommand(tagCommand.getCommand());
|
|
24
|
+
program.addCommand(historyCommand.getCommand());
|
|
22
25
|
program.parse();
|
|
23
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,8CAAkD;AAClD,4DAAyD;AACzD,oDAA0D;AAC1D,wCAA4C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,8CAAkD;AAClD,4DAAyD;AACzD,oDAA0D;AAC1D,wCAA4C;AAC5C,gDAAoD;AAEpD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,aAAa,GAAG,IAAI,sBAAa,EAAE,CAAC;AAC1C,MAAM,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;AAC1C,MAAM,kBAAkB,GAAG,IAAI,8BAAkB,EAAE,CAAC;AACpD,MAAM,UAAU,GAAG,IAAI,gBAAU,EAAE,CAAC;AACpC,MAAM,cAAc,GAAG,IAAI,wBAAc,EAAE,CAAC;AAE5C,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC;AACpD,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;AAEhD,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
package/src/commands/ai.ts
CHANGED
|
@@ -52,6 +52,33 @@ export class AIService {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Remove think/thinking tags and other XML-style tags from AI response
|
|
57
|
+
*/
|
|
58
|
+
private cleanMessage(message: string): string {
|
|
59
|
+
if (!message) return message;
|
|
60
|
+
|
|
61
|
+
let cleaned = message;
|
|
62
|
+
|
|
63
|
+
// Remove <think>...</think> (including namespaced <antml:think>) and <thinking>...</thinking>
|
|
64
|
+
const thinkBlock = /<\s*(?:antml:)?think\b[^>]*>[\s\S]*?<\s*\/\s*(?:antml:)?think\s*>/gi;
|
|
65
|
+
const thinkingBlock = /<\s*thinking\b[^>]*>[\s\S]*?<\s*\/\s*thinking\s*>/gi;
|
|
66
|
+
cleaned = cleaned.replace(thinkBlock, '').replace(thinkingBlock, '');
|
|
67
|
+
|
|
68
|
+
// Also remove stray opening/closing think tags if any slipped through
|
|
69
|
+
cleaned = cleaned.replace(/<\/?\s*(?:antml:)?think\b[^>]*>/gi, '');
|
|
70
|
+
cleaned = cleaned.replace(/<\/?\s*thinking\b[^>]*>/gi, '');
|
|
71
|
+
|
|
72
|
+
// Remove any remaining XML/HTML-like tags
|
|
73
|
+
cleaned = cleaned.replace(/<[^>]+>/g, '');
|
|
74
|
+
|
|
75
|
+
// Normalize whitespace
|
|
76
|
+
cleaned = cleaned.replace(/[\t\r]+/g, '');
|
|
77
|
+
cleaned = cleaned.replace(/\n{3,}/g, '\n\n').trim();
|
|
78
|
+
|
|
79
|
+
return cleaned;
|
|
80
|
+
}
|
|
81
|
+
|
|
55
82
|
async generateCommitMessage(diff: string, extraInstructions?: string): Promise<CommitGenerationResult> {
|
|
56
83
|
try {
|
|
57
84
|
this.debugLog('Sending request to AI API...');
|
|
@@ -137,6 +164,61 @@ export class AIService {
|
|
|
137
164
|
}
|
|
138
165
|
}
|
|
139
166
|
|
|
167
|
+
// Clean and normalize formatting/artifacts that sometimes appear
|
|
168
|
+
finalMessage = this.cleanMessage(finalMessage);
|
|
169
|
+
|
|
170
|
+
// If the model produced a stray type-only line (e.g., "chore:" on its own), drop it
|
|
171
|
+
let lines = finalMessage.split('\n').map(l => l.replace(/[\s\t]+$/,'')).filter(l => l !== undefined) as string[];
|
|
172
|
+
const headerPattern = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s+.+/;
|
|
173
|
+
const typeOnlyPattern = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s*$/;
|
|
174
|
+
|
|
175
|
+
// Remove Markdown code fences and trim surrounding whitespace
|
|
176
|
+
lines = lines.filter(l => !/^```/.test(l));
|
|
177
|
+
|
|
178
|
+
// Trim leading blank lines
|
|
179
|
+
while (lines.length && lines[0].trim() === '') lines.shift();
|
|
180
|
+
|
|
181
|
+
// Remove any leading type-only lines until we hit a real header or content
|
|
182
|
+
while (lines.length && typeOnlyPattern.test(lines[0])) {
|
|
183
|
+
lines.shift();
|
|
184
|
+
while (lines.length && lines[0].trim() === '') lines.shift();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// If the first non-empty line is not a header, but a header exists later, start from that header
|
|
188
|
+
const firstHeaderIdx = lines.findIndex(l => headerPattern.test(l));
|
|
189
|
+
if (firstHeaderIdx > 0) {
|
|
190
|
+
lines = lines.slice(firstHeaderIdx);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// If the first line has a duplicated type prefix like "chore: docs(scope): ...", trim the outer prefix
|
|
194
|
+
if (lines.length > 0) {
|
|
195
|
+
const dupTypePrefix = /^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert):\s+(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?!?:\s+(.+)/;
|
|
196
|
+
const m = lines[0].match(dupTypePrefix);
|
|
197
|
+
if (m) {
|
|
198
|
+
// Keep the inner proper header
|
|
199
|
+
const innerType = m[2];
|
|
200
|
+
// Rebuild as `${innerType}${scope}: ${desc}`
|
|
201
|
+
lines[0] = `${innerType}${m[3] ?? ''}: ${m[4]}`;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Ensure only a single blank line between header and body if body exists
|
|
206
|
+
if (lines.length > 1 && lines[0].trim().length > 0) {
|
|
207
|
+
// Collapse multiple blank lines immediately after header to one
|
|
208
|
+
let i = 1;
|
|
209
|
+
let blankCount = 0;
|
|
210
|
+
while (i < lines.length && lines[i].trim() === '') {
|
|
211
|
+
blankCount++;
|
|
212
|
+
i++;
|
|
213
|
+
}
|
|
214
|
+
if (blankCount > 1) {
|
|
215
|
+
// Keep exactly one blank line
|
|
216
|
+
lines.splice(1, blankCount - 1);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
finalMessage = lines.join('\n').trim();
|
|
221
|
+
|
|
140
222
|
return {
|
|
141
223
|
success: true,
|
|
142
224
|
message: finalMessage
|
|
@@ -194,7 +276,7 @@ export class AIService {
|
|
|
194
276
|
|
|
195
277
|
return {
|
|
196
278
|
success: true,
|
|
197
|
-
notes: finalNotes.trim()
|
|
279
|
+
notes: this.cleanMessage(finalNotes.trim())
|
|
198
280
|
};
|
|
199
281
|
} catch (error) {
|
|
200
282
|
console.error('API Error:', error);
|
|
@@ -253,7 +335,7 @@ export class AIService {
|
|
|
253
335
|
|
|
254
336
|
return {
|
|
255
337
|
success: true,
|
|
256
|
-
message: finalMessage.trim()
|
|
338
|
+
message: this.cleanMessage(finalMessage.trim())
|
|
257
339
|
};
|
|
258
340
|
} catch (error) {
|
|
259
341
|
console.error('API Error:', error);
|