@335g/pi-git 0.0.2 → 0.0.4
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/README.ja.md +3 -30
- package/README.md +3 -30
- package/dist/commands/agg-commit.d.ts.map +1 -1
- package/dist/commands/agg-commit.js +27 -38
- package/dist/commands/agg-commit.js.map +1 -1
- package/dist/commands/auto-agg-commit.d.ts.map +1 -1
- package/dist/commands/auto-agg-commit.js +11 -68
- package/dist/commands/auto-agg-commit.js.map +1 -1
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +55 -70
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/diagnostics.d.ts +12 -0
- package/dist/commands/diagnostics.d.ts.map +1 -0
- package/dist/commands/diagnostics.js +59 -0
- package/dist/commands/diagnostics.js.map +1 -0
- package/dist/core/auto-commit-message.d.ts +2 -2
- package/dist/core/auto-commit-message.d.ts.map +1 -1
- package/dist/core/auto-commit-message.js +239 -58
- package/dist/core/auto-commit-message.js.map +1 -1
- package/dist/core/auto-commit.d.ts.map +1 -1
- package/dist/core/auto-commit.js +4 -8
- package/dist/core/auto-commit.js.map +1 -1
- package/dist/core/commit-message.d.ts.map +1 -1
- package/dist/core/commit-message.js +3 -0
- package/dist/core/commit-message.js.map +1 -1
- package/dist/core/diff-analyzer.d.ts +1 -9
- package/dist/core/diff-analyzer.d.ts.map +1 -1
- package/dist/core/diff-analyzer.js +75 -75
- package/dist/core/diff-analyzer.js.map +1 -1
- package/dist/core/git.d.ts +5 -28
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +19 -68
- package/dist/core/git.js.map +1 -1
- package/dist/i18n/messages.d.ts +107 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +135 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -22
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/diagnostics.d.ts +33 -0
- package/dist/utils/diagnostics.d.ts.map +1 -0
- package/dist/utils/diagnostics.js +32 -0
- package/dist/utils/diagnostics.js.map +1 -0
- package/dist/utils/footer-manager.d.ts.map +1 -1
- package/dist/utils/footer-manager.js +6 -9
- package/dist/utils/footer-manager.js.map +1 -1
- package/dist/utils/lang.d.ts +13 -7
- package/dist/utils/lang.d.ts.map +1 -1
- package/dist/utils/lang.js +21 -10
- package/dist/utils/lang.js.map +1 -1
- package/dist/utils/settings.d.ts +13 -5
- package/dist/utils/settings.d.ts.map +1 -1
- package/dist/utils/settings.js +65 -13
- package/dist/utils/settings.js.map +1 -1
- package/package.json +6 -2
- package/dist/commands/branch.d.ts +0 -8
- package/dist/commands/branch.d.ts.map +0 -1
- package/dist/commands/branch.js +0 -197
- package/dist/commands/branch.js.map +0 -1
- package/dist/commands/git-diff.d.ts +0 -10
- package/dist/commands/git-diff.d.ts.map +0 -1
- package/dist/commands/git-diff.js +0 -228
- package/dist/commands/git-diff.js.map +0 -1
- package/dist/commands/git-log.d.ts +0 -8
- package/dist/commands/git-log.d.ts.map +0 -1
- package/dist/commands/git-log.js +0 -100
- package/dist/commands/git-log.js.map +0 -1
- package/dist/tui/hunk-review.d.ts +0 -51
- package/dist/tui/hunk-review.d.ts.map +0 -1
- package/dist/tui/hunk-review.js +0 -296
- package/dist/tui/hunk-review.js.map +0 -1
|
@@ -2,36 +2,183 @@
|
|
|
2
2
|
* Auto-commit message generation from conversation history.
|
|
3
3
|
*
|
|
4
4
|
* When auto-agg-commit triggers after agent_end, skips hunk analysis
|
|
5
|
-
* and instead generates a commit message from the user's
|
|
6
|
-
* and assistant's
|
|
5
|
+
* and instead generates a commit message from the user's prompts
|
|
6
|
+
* and assistant's responses.
|
|
7
7
|
*/
|
|
8
8
|
import { completeSimple } from "@earendil-works/pi-ai";
|
|
9
|
-
import {
|
|
9
|
+
import { diagIncr } from "../utils/diagnostics.js";
|
|
10
|
+
import { t } from "../utils/lang.js";
|
|
10
11
|
import { getLanguage } from "../utils/settings.js";
|
|
11
12
|
import { sanitizeCommitMessage } from "./commit-message.js";
|
|
12
13
|
import { resolveModel } from "./resolve-model.js";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
/** Truncate text to approximately maxChars, keeping whole words at boundaries */
|
|
15
|
+
function truncate(text, maxChars) {
|
|
16
|
+
if (text.length <= maxChars)
|
|
17
|
+
return text;
|
|
18
|
+
const slice = text.substring(0, maxChars);
|
|
19
|
+
const lastSpace = slice.lastIndexOf(" ");
|
|
20
|
+
// If no space found within reasonable range, just cut at maxChars
|
|
21
|
+
if (lastSpace > maxChars * 0.7)
|
|
22
|
+
return slice.substring(0, lastSpace) + "...";
|
|
23
|
+
return slice + "...";
|
|
24
|
+
}
|
|
25
|
+
/** Generic commit message patterns — messages matching these lack specificity */
|
|
26
|
+
const GENERIC_MESSAGE_PATTERNS = [
|
|
27
|
+
/^chore:\s*apply\s*changes?\s*$/i,
|
|
28
|
+
/^chore:\s*update\s*(files?)?\s*$/i,
|
|
29
|
+
/^chore:\s*commit\s*changes?\s*$/i,
|
|
30
|
+
/^chore:\s*modify\s*(files?)?\s*$/i,
|
|
31
|
+
/^chore:\s*update\s+\S+\s*$/i,
|
|
32
|
+
/^(feat|fix|chore|docs|style|refactor|test):\s*.{0,10}$/i,
|
|
33
|
+
];
|
|
34
|
+
/** Heuristic: is this commit message too generic to be useful? */
|
|
35
|
+
function isGenericMessage(message) {
|
|
36
|
+
const m = message.trim();
|
|
37
|
+
if (m.length < 12)
|
|
38
|
+
return true;
|
|
39
|
+
return GENERIC_MESSAGE_PATTERNS.some((p) => p.test(m));
|
|
40
|
+
}
|
|
41
|
+
/** Derive a commit-message candidate from the user's last message. */
|
|
42
|
+
function userMessageToCandidate(userMessage) {
|
|
43
|
+
let text = userMessage
|
|
44
|
+
.replace(/[。.!!??]$/, "")
|
|
45
|
+
.replace(/お願いします$/, "")
|
|
46
|
+
.replace(/してください$/, "")
|
|
47
|
+
.replace(/して$/, "")
|
|
48
|
+
.replace(/\bplease\b/gi, "")
|
|
49
|
+
.replace(/\n/g, " ")
|
|
50
|
+
.replace(/\s+/g, " ")
|
|
51
|
+
.trim();
|
|
52
|
+
if (!text)
|
|
53
|
+
return "";
|
|
54
|
+
// Infer Conventional Commit type from keywords
|
|
55
|
+
let type = "chore";
|
|
56
|
+
if (/修正|fix|bug|バグ|不具合|error|エラー|直[しす]|訂正/i.test(text))
|
|
57
|
+
type = "fix";
|
|
58
|
+
else if (/追加|add|feature|機能|実装|implement|作[ってり]|作成|新規/i.test(text))
|
|
59
|
+
type = "feat";
|
|
60
|
+
else if (/docs|ドキュメント|readme|資料|文書/i.test(text))
|
|
61
|
+
type = "docs";
|
|
62
|
+
else if (/refactor|リファクタ|整理|改善|改修/i.test(text))
|
|
63
|
+
type = "refactor";
|
|
64
|
+
else if (/test|テスト|spec/i.test(text))
|
|
65
|
+
type = "test";
|
|
66
|
+
else if (/削除|remove|delete|消[しす]/i.test(text))
|
|
67
|
+
type = "chore";
|
|
68
|
+
const prefix = `${type}: `;
|
|
69
|
+
const maxBody = 50 - prefix.length;
|
|
70
|
+
if (text.length > maxBody) {
|
|
71
|
+
const cut = text.substring(0, maxBody - 1);
|
|
72
|
+
const lastBoundary = Math.max(cut.lastIndexOf("、"), cut.lastIndexOf(","), cut.lastIndexOf(" "));
|
|
73
|
+
text =
|
|
74
|
+
lastBoundary > maxBody * 0.5
|
|
75
|
+
? cut.substring(0, lastBoundary) + "…"
|
|
76
|
+
: cut + "…";
|
|
25
77
|
}
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
78
|
+
return `${prefix}${text}`;
|
|
79
|
+
}
|
|
80
|
+
/** Heuristic specificity score for a commit message. Higher = more specific. */
|
|
81
|
+
function specificityScore(message) {
|
|
82
|
+
let score = 0;
|
|
83
|
+
const m = message.replace(/^(feat|fix|chore|docs|style|refactor|test|perf|ci|build|revert)(\(.+?\))?!?:\s*/i, "");
|
|
84
|
+
// Length contributes (up to a point)
|
|
85
|
+
score += Math.min(m.length, 30) * 0.3;
|
|
86
|
+
// Penalize generic words
|
|
87
|
+
const genericWords = /\b(change|update|modify|fix|apply|commit|files?|stuff|things?)\b/gi;
|
|
88
|
+
const genericCount = (m.match(genericWords) || []).length;
|
|
89
|
+
score -= genericCount * 2;
|
|
90
|
+
// Reward specific nouns (CamelCase, ALL_CAPS, or mixed-case words)
|
|
91
|
+
const specificTerms = m.match(/[A-Z][a-z]+|[a-z]+[A-Z]|[A-Z]{2,}/g);
|
|
92
|
+
score += (specificTerms || []).length * 3;
|
|
93
|
+
// Reward concrete action verbs
|
|
94
|
+
const concreteVerbs = /\b(add|implement|create|remove|refactor|extract|rename|optimize|migrate|configure|integrate|replace|split|merge|enhance|introduce|deprecate|upgrade|downgrade|support|handle|prevent|allow|restrict|validate|sanitize|normalize|format|generate|bump|release|deploy|fix|resolve|address|correct|adjust|tweak|improve|streamline|simplify|reduce|increase|enable|disable|expose|hide|export|import|wire|connect|disconnect|setup|teardown)\b/gi;
|
|
95
|
+
score += (m.match(concreteVerbs) || []).length * 2;
|
|
96
|
+
return score;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* If the generated message is generic, compare it against a candidate derived
|
|
100
|
+
* from the user's last message and return the more specific one.
|
|
101
|
+
*
|
|
102
|
+
* Uses AI comparison when available; falls back to heuristic scoring.
|
|
103
|
+
*/
|
|
104
|
+
async function refineMessageIfGeneric(model, auth, ctx, generatedMessage, messages, changedFiles, lang) {
|
|
105
|
+
// Only refine if the generated message seems generic
|
|
106
|
+
if (!isGenericMessage(generatedMessage)) {
|
|
107
|
+
return generatedMessage;
|
|
108
|
+
}
|
|
109
|
+
diagIncr("msgIsGeneric");
|
|
110
|
+
// Get the last user message
|
|
111
|
+
const userMessages = collectMessagesByRole(messages, "user");
|
|
112
|
+
if (userMessages.length === 0) {
|
|
113
|
+
return generatedMessage;
|
|
114
|
+
}
|
|
115
|
+
const lastUserMessage = userMessages[0]; // newest first
|
|
116
|
+
const userCandidate = userMessageToCandidate(lastUserMessage);
|
|
117
|
+
if (!userCandidate) {
|
|
118
|
+
return generatedMessage;
|
|
119
|
+
}
|
|
120
|
+
// Quick heuristic guard: skip AI if one candidate is clearly better
|
|
121
|
+
const genScore = specificityScore(generatedMessage);
|
|
122
|
+
const userScore = specificityScore(userCandidate);
|
|
123
|
+
if (userScore > genScore + 5)
|
|
124
|
+
return userCandidate;
|
|
125
|
+
if (genScore > userScore + 5)
|
|
126
|
+
return generatedMessage;
|
|
127
|
+
// Scores are close — ask AI to decide
|
|
128
|
+
diagIncr("msgRefineUsedAI");
|
|
129
|
+
try {
|
|
130
|
+
const comparisonPrompt = t(lang, "autoCommitMsg.comparePrompt", {
|
|
131
|
+
candidateA: generatedMessage,
|
|
132
|
+
candidateB: userCandidate,
|
|
133
|
+
files: changedFiles.join(", "),
|
|
134
|
+
});
|
|
135
|
+
const context = {
|
|
136
|
+
systemPrompt: t(lang, "autoCommitMsg.compareSystemPrompt"),
|
|
137
|
+
messages: [
|
|
138
|
+
{
|
|
139
|
+
role: "user",
|
|
140
|
+
content: comparisonPrompt,
|
|
141
|
+
timestamp: Date.now(),
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
const result = await completeSimple(model, context, {
|
|
146
|
+
apiKey: auth.apiKey,
|
|
147
|
+
headers: auth.headers,
|
|
148
|
+
signal: ctx.signal,
|
|
149
|
+
reasoning: "minimal",
|
|
150
|
+
temperature: 0,
|
|
151
|
+
maxTokens: 100,
|
|
152
|
+
});
|
|
153
|
+
const text = result.content
|
|
154
|
+
.filter((c) => c.type === "text")
|
|
155
|
+
.map((c) => c.text)
|
|
156
|
+
.join("")
|
|
157
|
+
.trim()
|
|
158
|
+
// Strip code fences if the model wraps the message
|
|
159
|
+
.replace(/^```[a-z]*\n?/i, "")
|
|
160
|
+
.replace(/\n?```$/i, "")
|
|
161
|
+
.trim();
|
|
162
|
+
// Validate the AI's choice: if it contains the user candidate, prefer that
|
|
163
|
+
if (userCandidate.length >= 15 &&
|
|
164
|
+
text.includes(userCandidate.substring(0, 15))) {
|
|
165
|
+
return userCandidate;
|
|
166
|
+
}
|
|
167
|
+
// If it contains the generated message's subject, keep it
|
|
168
|
+
if (generatedMessage.length >= 15 &&
|
|
169
|
+
text.includes(generatedMessage.substring(0, 15))) {
|
|
170
|
+
return generatedMessage;
|
|
171
|
+
}
|
|
172
|
+
// Fallback: use heuristic scores
|
|
173
|
+
return userScore > genScore ? userCandidate : generatedMessage;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// AI failed — fall back to heuristic scoring
|
|
177
|
+
return userScore > genScore ? userCandidate : generatedMessage;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function getSystemPrompt(lang) {
|
|
181
|
+
return t(lang, "autoCommitMsg.systemPrompt");
|
|
35
182
|
}
|
|
36
183
|
function extractTextContent(content) {
|
|
37
184
|
if (typeof content === "string")
|
|
@@ -40,55 +187,85 @@ function extractTextContent(content) {
|
|
|
40
187
|
return content
|
|
41
188
|
.filter((c) => typeof c === "object" && c !== null)
|
|
42
189
|
.map((c) => c.text || "")
|
|
43
|
-
.join("");
|
|
190
|
+
.join("\n");
|
|
44
191
|
}
|
|
45
192
|
return "";
|
|
46
193
|
}
|
|
47
|
-
|
|
194
|
+
/** Collect all messages of a given role, newest first */
|
|
195
|
+
function collectMessagesByRole(messages, role) {
|
|
196
|
+
const result = [];
|
|
48
197
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
49
198
|
if (messages[i].role === role) {
|
|
50
|
-
|
|
199
|
+
const text = extractTextContent(messages[i].content);
|
|
200
|
+
if (text.trim()) {
|
|
201
|
+
result.push(text);
|
|
202
|
+
}
|
|
51
203
|
}
|
|
52
204
|
}
|
|
53
|
-
return
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Count total characters across all collected messages for truncation budgeting.
|
|
209
|
+
*/
|
|
210
|
+
function totalChars(collected) {
|
|
211
|
+
return collected.reduce((sum, s) => sum + s.length, 0);
|
|
54
212
|
}
|
|
55
|
-
function buildPrompt(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
213
|
+
function buildPrompt(userMessages, assistantMessages, changedFiles, lang) {
|
|
214
|
+
// Budget: keep the whole prompt under ~4000 chars to leave room for system prompt + response
|
|
215
|
+
const MAX_USER_CHARS = 2000;
|
|
216
|
+
const MAX_ASSISTANT_CHARS = 800;
|
|
217
|
+
const MAX_FILES_CHARS = 800;
|
|
218
|
+
// Build user messages section (newest first, most relevant last in display)
|
|
219
|
+
const userLines = [];
|
|
220
|
+
let userBudget = MAX_USER_CHARS;
|
|
221
|
+
for (const msg of userMessages.reverse()) {
|
|
222
|
+
if (userBudget <= 0)
|
|
223
|
+
break;
|
|
224
|
+
const truncated = truncate(msg, userBudget);
|
|
225
|
+
userLines.push(truncated);
|
|
226
|
+
userBudget -= truncated.length;
|
|
227
|
+
}
|
|
228
|
+
const userStr = userLines.reverse().join("\n---\n");
|
|
229
|
+
const noData = t(lang, "autoCommitMsg.noData");
|
|
230
|
+
const userSection = userStr || noData;
|
|
231
|
+
// Build assistant messages section
|
|
232
|
+
const assistantLines = [];
|
|
233
|
+
let assistantBudget = MAX_ASSISTANT_CHARS;
|
|
234
|
+
for (const msg of assistantMessages.reverse()) {
|
|
235
|
+
if (assistantBudget <= 0)
|
|
236
|
+
break;
|
|
237
|
+
const truncated = truncate(msg, assistantBudget);
|
|
238
|
+
assistantLines.push(truncated);
|
|
239
|
+
assistantBudget -= truncated.length;
|
|
67
240
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
241
|
+
const assistantStr = assistantLines.reverse().join("\n---\n");
|
|
242
|
+
const assistantSection = assistantStr || noData;
|
|
243
|
+
// Build files section
|
|
244
|
+
const filesStr = truncate(changedFiles.join(", "), MAX_FILES_CHARS);
|
|
245
|
+
const filesSection = filesStr || noData;
|
|
246
|
+
const examples = t(lang, "autoCommitMsg.examples");
|
|
247
|
+
return t(lang, "autoCommitMsg.buildPrompt", {
|
|
248
|
+
userSection,
|
|
249
|
+
assistantSection,
|
|
250
|
+
filesSection,
|
|
251
|
+
examples,
|
|
252
|
+
});
|
|
77
253
|
}
|
|
78
254
|
export async function generateAutoCommitMessage(_pi, ctx, messages, changedFiles) {
|
|
255
|
+
const lang = getLanguage(ctx.cwd);
|
|
79
256
|
const model = resolveModel(ctx);
|
|
80
257
|
if (!model) {
|
|
81
|
-
return sanitizeCommitMessage(
|
|
258
|
+
return sanitizeCommitMessage(t(lang, "core.applyChanges"), changedFiles);
|
|
82
259
|
}
|
|
83
260
|
const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
|
|
84
261
|
if (!auth.ok) {
|
|
85
|
-
return sanitizeCommitMessage(
|
|
262
|
+
return sanitizeCommitMessage(t(lang, "core.applyChanges"), changedFiles);
|
|
86
263
|
}
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
if (
|
|
91
|
-
return sanitizeCommitMessage(
|
|
264
|
+
// Collect ALL user messages and assistant messages for rich context
|
|
265
|
+
const userMessages = collectMessagesByRole(messages, "user");
|
|
266
|
+
const assistantMessages = collectMessagesByRole(messages, "assistant");
|
|
267
|
+
if (userMessages.length === 0) {
|
|
268
|
+
return sanitizeCommitMessage(t(lang, "core.applyChanges"), changedFiles);
|
|
92
269
|
}
|
|
93
270
|
try {
|
|
94
271
|
const promptContext = {
|
|
@@ -96,7 +273,7 @@ export async function generateAutoCommitMessage(_pi, ctx, messages, changedFiles
|
|
|
96
273
|
messages: [
|
|
97
274
|
{
|
|
98
275
|
role: "user",
|
|
99
|
-
content: buildPrompt(
|
|
276
|
+
content: buildPrompt(userMessages, assistantMessages, changedFiles, lang),
|
|
100
277
|
timestamp: Date.now(),
|
|
101
278
|
},
|
|
102
279
|
],
|
|
@@ -112,7 +289,11 @@ export async function generateAutoCommitMessage(_pi, ctx, messages, changedFiles
|
|
|
112
289
|
.map((c) => c.text)
|
|
113
290
|
.join("")
|
|
114
291
|
.trim();
|
|
115
|
-
|
|
292
|
+
const commitMessage = sanitizeCommitMessage(text || t(lang, "core.applyChanges"), changedFiles);
|
|
293
|
+
// If the generated message is too generic, compare with a user-message
|
|
294
|
+
// candidate and pick the more specific one (heuristic → AI comparison)
|
|
295
|
+
diagIncr("msgRefineTriggered");
|
|
296
|
+
return await refineMessageIfGeneric(model, auth, ctx, commitMessage, messages, changedFiles, lang);
|
|
116
297
|
}
|
|
117
298
|
catch {
|
|
118
299
|
return sanitizeCommitMessage("chore: apply changes", changedFiles);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-commit-message.js","sourceRoot":"","sources":["../../src/core/auto-commit-message.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auto-commit-message.js","sourceRoot":"","sources":["../../src/core/auto-commit-message.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-commit.d.ts","sourceRoot":"","sources":["../../src/core/auto-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-commit.d.ts","sourceRoot":"","sources":["../../src/core/auto-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAsFf"}
|
package/dist/core/auto-commit.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Automatically commits changes after assistant response when enabled.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { t } from "../utils/lang.js";
|
|
7
7
|
import { getAutoAggCommit, getLanguage } from "../utils/settings.js";
|
|
8
8
|
import { footerManager } from "../utils/footer-manager.js";
|
|
9
9
|
import { generateAutoCommitMessage } from "./auto-commit-message.js";
|
|
@@ -32,9 +32,8 @@ export async function handleAutoCommit(pi, ctx, event) {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
const lang = getLanguage(ctx.cwd);
|
|
35
|
-
const ja = isJapanese(lang);
|
|
36
|
-
await footerManager.setRunning("auto-commit", "generateMessage");
|
|
37
35
|
try {
|
|
36
|
+
await footerManager.setRunning("auto-commit", "generateMessage");
|
|
38
37
|
const { stdout: statusOutput } = await pi.exec("git", ["status", "--short"], { cwd: ctx.cwd });
|
|
39
38
|
const changedFiles = statusOutput
|
|
40
39
|
.split("\n")
|
|
@@ -42,7 +41,6 @@ export async function handleAutoCommit(pi, ctx, event) {
|
|
|
42
41
|
.map((line) => line.slice(3).trim())
|
|
43
42
|
.filter(Boolean);
|
|
44
43
|
if (changedFiles.length === 0) {
|
|
45
|
-
await footerManager.clearRunning();
|
|
46
44
|
return;
|
|
47
45
|
}
|
|
48
46
|
const messages = event.messages || [];
|
|
@@ -52,12 +50,10 @@ export async function handleAutoCommit(pi, ctx, event) {
|
|
|
52
50
|
const { code: exitCode, stderr } = await pi.exec("git", ["commit", "-m", commitMessage], { cwd: ctx.cwd });
|
|
53
51
|
if (exitCode !== 0) {
|
|
54
52
|
await resetStaging(pi, ctx.cwd);
|
|
55
|
-
ctx.ui.notify(
|
|
53
|
+
ctx.ui.notify(t(lang, "autoCommit.commitFailed", { error: stderr }), "warning");
|
|
56
54
|
}
|
|
57
55
|
else {
|
|
58
|
-
ctx.ui.notify(
|
|
59
|
-
? `コミットを作成しました: ${commitMessage}`
|
|
60
|
-
: `Created commit: ${commitMessage}`, "info");
|
|
56
|
+
ctx.ui.notify(t(lang, "autoCommit.commitCreated", { message: commitMessage }), "info");
|
|
61
57
|
}
|
|
62
58
|
}
|
|
63
59
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-commit.js","sourceRoot":"","sources":["../../src/core/auto-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auto-commit.js","sourceRoot":"","sources":["../../src/core/auto-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,GACX,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAgB,EAChB,GAAqB,EACrB,KAAoB;IAEpB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpD,sEAAsE;IACtE,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;IAE9B,yCAAyC;IACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAEjE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAC5C,KAAK,EACL,CAAC,QAAQ,EAAE,SAAS,CAAC,EACrB,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CACjB,CAAC;QAEF,MAAM,YAAY,GAAG,YAAY;aAC9B,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACnC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,yBAAyB,CACnD,EAAE,EACF,GAAG,EACH,QAAQ,EACR,YAAY,CACb,CAAC;QAEF,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvC,MAAM,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAC9C,KAAK,EACL,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,EAC/B,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CACjB,CAAC;QAEF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,CAAC,CAAC,IAAI,EACJ,yBAAyB,EACzB,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,EACD,SAAS,CACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,CAAC,CAAC,IAAI,EACJ,0BAA0B,EAC1B,EAAE,OAAO,EAAE,aAAa,EAAE,CAC3B,EACD,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit-message.d.ts","sourceRoot":"","sources":["../../src/core/commit-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"commit-message.d.ts","sourceRoot":"","sources":["../../src/core/commit-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAsBxC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAK7D;AAuCD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,MAAM,CAkDR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAO/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAK7C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Since diff-analyzer.ts already generates Conventional Commits messages via AI,
|
|
5
5
|
* this module focuses on post-processing: validation, cleanup, and fallback.
|
|
6
6
|
*/
|
|
7
|
+
import { diagIncr } from "../utils/diagnostics.js";
|
|
7
8
|
/** Valid Conventional Commits types */
|
|
8
9
|
const VALID_TYPES = [
|
|
9
10
|
"feat",
|
|
@@ -64,6 +65,7 @@ function inferTypeFromFiles(files) {
|
|
|
64
65
|
* Returns a clean, valid Conventional Commits message.
|
|
65
66
|
*/
|
|
66
67
|
export function sanitizeCommitMessage(message, files) {
|
|
68
|
+
diagIncr("msgSanitized");
|
|
67
69
|
let sanitized = message.trim();
|
|
68
70
|
// Remove trailing period from subject
|
|
69
71
|
sanitized = sanitized.replace(/\.$/, "");
|
|
@@ -89,6 +91,7 @@ export function sanitizeCommitMessage(message, files) {
|
|
|
89
91
|
}
|
|
90
92
|
// Not a conventional commit - try to fix or fallback
|
|
91
93
|
// If it has a colon, maybe it's an unknown format
|
|
94
|
+
diagIncr("msgSanitizeChanged");
|
|
92
95
|
const colonIndex = sanitized.indexOf(":");
|
|
93
96
|
if (colonIndex > 0) {
|
|
94
97
|
const possibleSubject = sanitized.slice(colonIndex + 1).trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit-message.js","sourceRoot":"","sources":["../../src/core/commit-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"commit-message.js","sourceRoot":"","sources":["../../src/core/commit-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,uCAAuC;AACvC,MAAM,WAAW,GAAG;IAClB,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,UAAU;IACV,MAAM;IACN,OAAO;IACP,MAAM;IACN,IAAI;IACJ,OAAO;IACP,QAAQ;CACT,CAAC;AAEF,uDAAuD;AACvD,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAEtE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,IAAY,EACZ,KAAyB,EACzB,OAAe,EACf,QAAQ,GAAG,KAAK;IAEhB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,KAAK,OAAO,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAe;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAChE,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,6CAA6C,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9D,OAAO,OAAO,CAAC;IACjB,IACE,gHAAgH,CAAC,IAAI,CACnH,QAAQ,CACT,EACD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAEpE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,KAAgB;IAEhB,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzB,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,sCAAsC;IACtC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEzC,yBAAyB;IACzB,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,sDAAsD;YACtD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;QAC3D,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEvB,iBAAiB;QACjB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAED,+BAA+B;QAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACxC,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC;QAC7D,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,qDAAqD;IACrD,kDAAkD;IAClD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACzD,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,GAAG,kBAAkB;QACnC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK;QACpD,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAe;IACrD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,IAAI,YAAY,QAAQ,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,IAAI,YAAY,KAAK,CAAC,MAAM,QAAQ,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;KACzD,CAAC;AACJ,CAAC"}
|
|
@@ -5,19 +5,11 @@
|
|
|
5
5
|
* logical hunks with Conventional Commits messages.
|
|
6
6
|
*/
|
|
7
7
|
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
8
|
-
import type {
|
|
8
|
+
import type { Hunk } from "../types.js";
|
|
9
9
|
export declare function analyzeDiff(_pi: ExtensionAPI, ctx: ExtensionContext, diff: string, langOverride?: string): Promise<Hunk[]>;
|
|
10
10
|
/**
|
|
11
11
|
* Post-process AI-generated hunks: sanitize commit messages, deduplicate files
|
|
12
12
|
* across hunks (each file belongs only to its first hunk), and remove empty hunks.
|
|
13
13
|
*/
|
|
14
14
|
export declare function processHunks(hunks: Hunk[]): Hunk[];
|
|
15
|
-
/**
|
|
16
|
-
* Split a full diff into per-file diff line arrays, keyed by file path.
|
|
17
|
-
*/
|
|
18
|
-
export declare function splitDiffByFile(fullDiff: string): Map<string, string[]>;
|
|
19
|
-
/**
|
|
20
|
-
* Parse addition/deletion counts for each file from a full diff.
|
|
21
|
-
*/
|
|
22
|
-
export declare function parseDiffStats(fullDiff: string): Map<string, FileStats>;
|
|
23
15
|
//# sourceMappingURL=diff-analyzer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-analyzer.d.ts","sourceRoot":"","sources":["../../src/core/diff-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"diff-analyzer.d.ts","sourceRoot":"","sources":["../../src/core/diff-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAa,IAAI,EAAE,MAAM,aAAa,CAAC;AA2QnD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,EAAE,CAAC,CAmDjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAalD"}
|