@ksw8954/git-ai-commit 1.0.9 → 1.0.11
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/AGENTS.md +3 -0
- package/CHANGELOG.md +6 -0
- package/dist/commands/ai.d.ts +5 -0
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +76 -9
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/git.d.ts.map +1 -1
- package/dist/commands/git.js +81 -11
- package/dist/commands/git.js.map +1 -1
- package/justfile +54 -0
- package/package.json +1 -1
- package/src/__tests__/ai.test.ts +78 -4
- package/src/commands/ai.ts +117 -9
- package/src/commands/git.ts +94 -11
package/AGENTS.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Repository Guidelines
|
|
2
2
|
|
|
3
|
+
## Local Search Tooling
|
|
4
|
+
- Use `rg` for local search; do not use `mgrep` in this repository.
|
|
5
|
+
|
|
3
6
|
## Project Structure & Module Organization
|
|
4
7
|
- `src/index.ts` bootstraps the CLI and wires subcommands.
|
|
5
8
|
- `src/commands/` houses command implementations; `src/prompts/` stores prompt templates.
|
package/CHANGELOG.md
ADDED
package/dist/commands/ai.d.ts
CHANGED
|
@@ -28,6 +28,11 @@ export declare class AIService {
|
|
|
28
28
|
private verbose;
|
|
29
29
|
constructor(config: AIServiceConfig);
|
|
30
30
|
private debugLog;
|
|
31
|
+
private isUnsupportedTokenParamError;
|
|
32
|
+
private isUnsupportedValueError;
|
|
33
|
+
private swapTokenParam;
|
|
34
|
+
private removeTemperature;
|
|
35
|
+
private createChatCompletion;
|
|
31
36
|
/**
|
|
32
37
|
* Remove think/thinking tags and other XML-style tags from AI response
|
|
33
38
|
*/
|
|
@@ -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;IAMhB;;OAEG;IACH,OAAO,CAAC,YAAY;IA6Bd,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;
|
|
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,OAAO,CAAC,4BAA4B;IA8BpC,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,iBAAiB;YAOX,oBAAoB;IA6BlC;;OAEG;IACH,OAAO,CAAC,YAAY;IA6Bd,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgKhG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsD9G,0BAA0B,CAC9B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,2BAA2B,CAAC;CAqDxC"}
|
package/dist/commands/ai.js
CHANGED
|
@@ -23,6 +23,76 @@ class AIService {
|
|
|
23
23
|
console.log(...args);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
isUnsupportedTokenParamError(error, param) {
|
|
27
|
+
if (!error || typeof error !== 'object') {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const errorObj = error;
|
|
31
|
+
const message = errorObj.error?.message ?? errorObj.message;
|
|
32
|
+
const code = errorObj.error?.code ?? errorObj.code;
|
|
33
|
+
const errorParam = errorObj.error?.param ?? errorObj.param;
|
|
34
|
+
if (code === 'unsupported_parameter' && errorParam === param) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (typeof message === 'string') {
|
|
38
|
+
return message.includes('Unsupported parameter') && message.includes(param);
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
isUnsupportedValueError(error, param) {
|
|
43
|
+
if (!error || typeof error !== 'object') {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const errorObj = error;
|
|
47
|
+
const message = errorObj.error?.message ?? errorObj.message;
|
|
48
|
+
const code = errorObj.error?.code ?? errorObj.code;
|
|
49
|
+
const errorParam = errorObj.error?.param ?? errorObj.param;
|
|
50
|
+
if (code === 'unsupported_value' && errorParam === param) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (typeof message === 'string') {
|
|
54
|
+
return message.includes('Unsupported value') && message.includes(param);
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
swapTokenParam(request, targetParam) {
|
|
59
|
+
const { max_tokens, max_completion_tokens, ...rest } = request;
|
|
60
|
+
const tokenValue = max_completion_tokens ?? max_tokens;
|
|
61
|
+
if (tokenValue === undefined || tokenValue === null) {
|
|
62
|
+
return { ...rest };
|
|
63
|
+
}
|
|
64
|
+
if (targetParam === 'max_tokens') {
|
|
65
|
+
return { ...rest, max_tokens: tokenValue };
|
|
66
|
+
}
|
|
67
|
+
return { ...rest, max_completion_tokens: tokenValue };
|
|
68
|
+
}
|
|
69
|
+
removeTemperature(request) {
|
|
70
|
+
const { temperature, ...rest } = request;
|
|
71
|
+
return { ...rest };
|
|
72
|
+
}
|
|
73
|
+
async createChatCompletion(request, attempt = 0) {
|
|
74
|
+
try {
|
|
75
|
+
return await this.openai.chat.completions.create(request);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (attempt < 3 && this.isUnsupportedValueError(error, 'temperature')) {
|
|
79
|
+
const fallbackRequest = this.removeTemperature(request);
|
|
80
|
+
this.debugLog('Retrying without temperature due to unsupported value error.');
|
|
81
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
82
|
+
}
|
|
83
|
+
if (this.isUnsupportedTokenParamError(error, 'max_completion_tokens')) {
|
|
84
|
+
const fallbackRequest = this.swapTokenParam(request, 'max_tokens');
|
|
85
|
+
this.debugLog('Retrying with max_tokens due to unsupported max_completion_tokens error.');
|
|
86
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
87
|
+
}
|
|
88
|
+
if (this.isUnsupportedTokenParamError(error, 'max_tokens')) {
|
|
89
|
+
const fallbackRequest = this.swapTokenParam(request, 'max_completion_tokens');
|
|
90
|
+
this.debugLog('Retrying with max_completion_tokens due to unsupported max_tokens error.');
|
|
91
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
92
|
+
}
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
26
96
|
/**
|
|
27
97
|
* Remove think/thinking tags and other XML-style tags from AI response
|
|
28
98
|
*/
|
|
@@ -56,7 +126,7 @@ class AIService {
|
|
|
56
126
|
const customInstructions = extraInstructions && extraInstructions.trim().length > 0
|
|
57
127
|
? `Git diff will be provided separately in the user message.\n\n## Additional User Instructions\n${extraInstructions.trim()}`
|
|
58
128
|
: 'Git diff will be provided separately in the user message.';
|
|
59
|
-
const response = await this.
|
|
129
|
+
const response = await this.createChatCompletion({
|
|
60
130
|
model: this.model,
|
|
61
131
|
messages: [
|
|
62
132
|
{
|
|
@@ -68,8 +138,7 @@ class AIService {
|
|
|
68
138
|
content: `Git diff:\n${diff}`
|
|
69
139
|
}
|
|
70
140
|
],
|
|
71
|
-
|
|
72
|
-
temperature: 0.1
|
|
141
|
+
max_completion_tokens: 3000
|
|
73
142
|
});
|
|
74
143
|
this.debugLog('API Response received:', JSON.stringify(response, null, 2));
|
|
75
144
|
const choice = response.choices[0];
|
|
@@ -200,7 +269,7 @@ class AIService {
|
|
|
200
269
|
const customInstructions = extraInstructions && extraInstructions.trim().length > 0
|
|
201
270
|
? `${extraInstructions.trim()}`
|
|
202
271
|
: '';
|
|
203
|
-
const response = await this.
|
|
272
|
+
const response = await this.createChatCompletion({
|
|
204
273
|
model: this.model,
|
|
205
274
|
messages: [
|
|
206
275
|
{
|
|
@@ -212,8 +281,7 @@ class AIService {
|
|
|
212
281
|
content: `Commit log:\n${commitLog}`
|
|
213
282
|
}
|
|
214
283
|
],
|
|
215
|
-
|
|
216
|
-
temperature: 0.2
|
|
284
|
+
max_completion_tokens: 3000
|
|
217
285
|
});
|
|
218
286
|
const choice = response.choices[0];
|
|
219
287
|
const message = choice?.message?.content?.trim();
|
|
@@ -245,7 +313,7 @@ class AIService {
|
|
|
245
313
|
this.debugLog('Sending request to AI API for pull request message...');
|
|
246
314
|
this.debugLog('Model:', this.model);
|
|
247
315
|
this.debugLog('Base URL:', this.openai.baseURL);
|
|
248
|
-
const response = await this.
|
|
316
|
+
const response = await this.createChatCompletion({
|
|
249
317
|
model: this.model,
|
|
250
318
|
messages: [
|
|
251
319
|
{
|
|
@@ -257,8 +325,7 @@ class AIService {
|
|
|
257
325
|
content: `Git diff between ${baseBranch} and ${compareBranch}:\n${diff}`
|
|
258
326
|
}
|
|
259
327
|
],
|
|
260
|
-
|
|
261
|
-
temperature: 0.2
|
|
328
|
+
max_completion_tokens: 4000
|
|
262
329
|
});
|
|
263
330
|
const choice = response.choices[0];
|
|
264
331
|
const message = choice?.message?.content?.trim();
|
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":"git.d.ts","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AA+EA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAU;WACR,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;WA6BvC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;WA+BpE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAU/C,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;WAUxB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAU1C,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;WAwBrC,uBAAuB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;WAmC5D,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAUtE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAS5C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WASlD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAUjD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAUlD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS7D"}
|
package/dist/commands/git.js
CHANGED
|
@@ -5,11 +5,74 @@ const child_process_1 = require("child_process");
|
|
|
5
5
|
const util_1 = require("util");
|
|
6
6
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
7
7
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
8
|
+
const GIT_DIFF_MAX_BUFFER = 50 * 1024 * 1024;
|
|
9
|
+
const MAX_DIFF_TOKENS = 50000;
|
|
10
|
+
const APPROX_CHARS_PER_TOKEN = 4;
|
|
11
|
+
const MAX_DIFF_CHARS = MAX_DIFF_TOKENS * APPROX_CHARS_PER_TOKEN;
|
|
12
|
+
const MAX_FILE_LINES = 400;
|
|
13
|
+
const MAX_NEW_FILE_LINES = 200;
|
|
14
|
+
const splitDiffSections = (diff) => {
|
|
15
|
+
const lines = diff.split('\n');
|
|
16
|
+
const sections = [];
|
|
17
|
+
let current = [];
|
|
18
|
+
for (const line of lines) {
|
|
19
|
+
if (line.startsWith('diff --git ')) {
|
|
20
|
+
if (current.length > 0) {
|
|
21
|
+
sections.push(current.join('\n'));
|
|
22
|
+
}
|
|
23
|
+
current = [line];
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
current.push(line);
|
|
27
|
+
}
|
|
28
|
+
if (current.length > 0) {
|
|
29
|
+
sections.push(current.join('\n'));
|
|
30
|
+
}
|
|
31
|
+
return sections.length > 0 ? sections : [diff];
|
|
32
|
+
};
|
|
33
|
+
const truncateSection = (section) => {
|
|
34
|
+
const lines = section.split('\n');
|
|
35
|
+
const isNewFile = section.includes('new file mode') || section.includes('--- /dev/null');
|
|
36
|
+
const limit = isNewFile ? MAX_NEW_FILE_LINES : MAX_FILE_LINES;
|
|
37
|
+
if (lines.length <= limit) {
|
|
38
|
+
return section;
|
|
39
|
+
}
|
|
40
|
+
const omitted = lines.length - limit;
|
|
41
|
+
const truncated = lines.slice(0, limit);
|
|
42
|
+
truncated.push(`... (truncated ${omitted} lines)`);
|
|
43
|
+
return truncated.join('\n');
|
|
44
|
+
};
|
|
45
|
+
const truncateDiffByFile = (diff) => {
|
|
46
|
+
const sections = splitDiffSections(diff);
|
|
47
|
+
return sections.map(truncateSection).join('\n');
|
|
48
|
+
};
|
|
49
|
+
const truncateDiffByTotal = (diff) => {
|
|
50
|
+
const lines = diff.split('\n');
|
|
51
|
+
let total = 0;
|
|
52
|
+
const kept = [];
|
|
53
|
+
for (const line of lines) {
|
|
54
|
+
const addition = line.length + 1;
|
|
55
|
+
if (total + addition > MAX_DIFF_CHARS) {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
kept.push(line);
|
|
59
|
+
total += addition;
|
|
60
|
+
}
|
|
61
|
+
if (kept.length === lines.length) {
|
|
62
|
+
return diff;
|
|
63
|
+
}
|
|
64
|
+
kept.push(`... (truncated remaining diff to stay under ${MAX_DIFF_TOKENS} tokens)`);
|
|
65
|
+
return kept.join('\n');
|
|
66
|
+
};
|
|
67
|
+
const truncateDiff = (diff) => truncateDiffByTotal(truncateDiffByFile(diff));
|
|
8
68
|
class GitService {
|
|
9
69
|
static async getStagedDiff() {
|
|
10
70
|
try {
|
|
11
|
-
const { stdout } = await
|
|
12
|
-
|
|
71
|
+
const { stdout } = await execFileAsync('git', ['diff', '--staged'], {
|
|
72
|
+
maxBuffer: GIT_DIFF_MAX_BUFFER
|
|
73
|
+
});
|
|
74
|
+
const diff = truncateDiff(stdout);
|
|
75
|
+
if (!diff.trim()) {
|
|
13
76
|
return {
|
|
14
77
|
success: false,
|
|
15
78
|
error: 'No staged changes found. Please stage your changes first.'
|
|
@@ -17,21 +80,26 @@ class GitService {
|
|
|
17
80
|
}
|
|
18
81
|
return {
|
|
19
82
|
success: true,
|
|
20
|
-
diff
|
|
83
|
+
diff
|
|
21
84
|
};
|
|
22
85
|
}
|
|
23
86
|
catch (error) {
|
|
87
|
+
const message = error instanceof Error ? error.message : 'Failed to get git diff';
|
|
24
88
|
return {
|
|
25
89
|
success: false,
|
|
26
|
-
error:
|
|
90
|
+
error: message.includes('maxBuffer')
|
|
91
|
+
? 'Staged diff is too large to process. Try committing in smaller batches.'
|
|
92
|
+
: message
|
|
27
93
|
};
|
|
28
94
|
}
|
|
29
95
|
}
|
|
30
96
|
static async getBranchDiff(base, compare) {
|
|
31
97
|
try {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
98
|
+
const { stdout } = await execFileAsync('git', ['diff', `${base}...${compare}`], {
|
|
99
|
+
maxBuffer: GIT_DIFF_MAX_BUFFER
|
|
100
|
+
});
|
|
101
|
+
const diff = truncateDiff(stdout);
|
|
102
|
+
if (!diff.trim()) {
|
|
35
103
|
return {
|
|
36
104
|
success: false,
|
|
37
105
|
error: `No differences found between ${base} and ${compare}.`
|
|
@@ -39,16 +107,18 @@ class GitService {
|
|
|
39
107
|
}
|
|
40
108
|
return {
|
|
41
109
|
success: true,
|
|
42
|
-
diff
|
|
110
|
+
diff
|
|
43
111
|
};
|
|
44
112
|
}
|
|
45
113
|
catch (error) {
|
|
46
114
|
const message = error instanceof Error ? error.message : 'Failed to get branch diff';
|
|
47
115
|
return {
|
|
48
116
|
success: false,
|
|
49
|
-
error: message.includes('
|
|
50
|
-
?
|
|
51
|
-
: message
|
|
117
|
+
error: message.includes('maxBuffer')
|
|
118
|
+
? 'Diff is too large to process. Try narrowing the compare range.'
|
|
119
|
+
: message.includes('unknown revision')
|
|
120
|
+
? `Unable to resolve one of the branches: ${base} or ${compare}.`
|
|
121
|
+
: message
|
|
52
122
|
};
|
|
53
123
|
}
|
|
54
124
|
}
|
package/dist/commands/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAC/C,+BAAiC;AAEjC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAClC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"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"}
|
package/justfile
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Install dependencies and build the project
|
|
2
|
+
LEVEL := "patch"
|
|
3
|
+
|
|
4
|
+
install:
|
|
5
|
+
npm install
|
|
6
|
+
npm run build
|
|
7
|
+
|
|
8
|
+
# Compile TypeScript sources
|
|
9
|
+
build:
|
|
10
|
+
npm run build
|
|
11
|
+
|
|
12
|
+
# Run the CLI via ts-node in dev mode
|
|
13
|
+
dev:
|
|
14
|
+
npm run dev -- commit
|
|
15
|
+
|
|
16
|
+
# Run ESLint
|
|
17
|
+
lint:
|
|
18
|
+
npm run lint
|
|
19
|
+
|
|
20
|
+
# Run Jest test suite
|
|
21
|
+
test:
|
|
22
|
+
npm run test
|
|
23
|
+
|
|
24
|
+
# Run TypeScript type checking
|
|
25
|
+
typecheck:
|
|
26
|
+
npm run typecheck
|
|
27
|
+
|
|
28
|
+
# Remove build and coverage artifacts
|
|
29
|
+
clean:
|
|
30
|
+
rm -rf dist coverage
|
|
31
|
+
|
|
32
|
+
# Remove installed dependencies and build outputs
|
|
33
|
+
uninstall:
|
|
34
|
+
rm -rf node_modules package-lock.json dist coverage
|
|
35
|
+
|
|
36
|
+
# Link the CLI globally
|
|
37
|
+
link:
|
|
38
|
+
npm link
|
|
39
|
+
|
|
40
|
+
# Unlink the globally installed CLI
|
|
41
|
+
unlink:
|
|
42
|
+
npm unlink -g git-ai-commit
|
|
43
|
+
|
|
44
|
+
# Bump package.json version one step (default: patch)
|
|
45
|
+
version:
|
|
46
|
+
npm version {{LEVEL}} --no-git-tag-version
|
|
47
|
+
|
|
48
|
+
# Publish the package to npm (ensure you're logged in)
|
|
49
|
+
publish: build
|
|
50
|
+
npm publish
|
|
51
|
+
|
|
52
|
+
# Install this package globally via npm
|
|
53
|
+
install-package:
|
|
54
|
+
npm i -g @ksw8954/git-ai-commit
|
package/package.json
CHANGED
package/src/__tests__/ai.test.ts
CHANGED
|
@@ -66,8 +66,7 @@ describe('AIService', () => {
|
|
|
66
66
|
content: `Git diff:\n${diff}`
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
|
-
|
|
70
|
-
temperature: 0.1
|
|
69
|
+
max_completion_tokens: 3000
|
|
71
70
|
});
|
|
72
71
|
});
|
|
73
72
|
|
|
@@ -104,6 +103,82 @@ describe('AIService', () => {
|
|
|
104
103
|
});
|
|
105
104
|
});
|
|
106
105
|
|
|
106
|
+
it('should retry with max_tokens when max_completion_tokens is unsupported', async () => {
|
|
107
|
+
const error = Object.assign(
|
|
108
|
+
new Error('Unsupported parameter: \'max_completion_tokens\' is not supported with this model. Use \'max_tokens\' instead.'),
|
|
109
|
+
{
|
|
110
|
+
error: {
|
|
111
|
+
message:
|
|
112
|
+
'Unsupported parameter: \'max_completion_tokens\' is not supported with this model. Use \'max_tokens\' instead.',
|
|
113
|
+
type: 'invalid_request_error',
|
|
114
|
+
param: 'max_completion_tokens',
|
|
115
|
+
code: 'unsupported_parameter'
|
|
116
|
+
},
|
|
117
|
+
code: 'unsupported_parameter',
|
|
118
|
+
param: 'max_completion_tokens',
|
|
119
|
+
type: 'invalid_request_error'
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
const mockResponse = {
|
|
124
|
+
choices: [{
|
|
125
|
+
message: {
|
|
126
|
+
content: 'feat: add retry fallback'
|
|
127
|
+
}
|
|
128
|
+
}]
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
(mockOpenai.chat.completions.create as jest.Mock)
|
|
132
|
+
.mockRejectedValueOnce(error)
|
|
133
|
+
.mockResolvedValueOnce(mockResponse);
|
|
134
|
+
|
|
135
|
+
const diff = 'diff --git a/file.txt b/file.txt\nnew file mode 100644';
|
|
136
|
+
const result = await aiService.generateCommitMessage(diff);
|
|
137
|
+
|
|
138
|
+
expect(result).toEqual({
|
|
139
|
+
success: true,
|
|
140
|
+
message: 'feat: add retry fallback'
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
expect(mockOpenai.chat.completions.create).toHaveBeenNthCalledWith(1, {
|
|
144
|
+
model: 'gpt-4',
|
|
145
|
+
messages: [
|
|
146
|
+
{
|
|
147
|
+
role: 'system',
|
|
148
|
+
content: generateCommitPrompt(
|
|
149
|
+
'',
|
|
150
|
+
'Git diff will be provided separately in the user message.',
|
|
151
|
+
'ko'
|
|
152
|
+
)
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
role: 'user',
|
|
156
|
+
content: `Git diff:\n${diff}`
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
max_completion_tokens: 3000
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
expect(mockOpenai.chat.completions.create).toHaveBeenNthCalledWith(2, {
|
|
163
|
+
model: 'gpt-4',
|
|
164
|
+
messages: [
|
|
165
|
+
{
|
|
166
|
+
role: 'system',
|
|
167
|
+
content: generateCommitPrompt(
|
|
168
|
+
'',
|
|
169
|
+
'Git diff will be provided separately in the user message.',
|
|
170
|
+
'ko'
|
|
171
|
+
)
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
role: 'user',
|
|
175
|
+
content: `Git diff:\n${diff}`
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
max_tokens: 3000
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
107
182
|
it('should strip markdown formatting from commit header', async () => {
|
|
108
183
|
const mockResponse = {
|
|
109
184
|
choices: [{
|
|
@@ -183,8 +258,7 @@ describe('AIService', () => {
|
|
|
183
258
|
content: `Git diff between main and feature/cache:\n${diff}`
|
|
184
259
|
}
|
|
185
260
|
],
|
|
186
|
-
|
|
187
|
-
temperature: 0.2
|
|
261
|
+
max_completion_tokens: 4000
|
|
188
262
|
});
|
|
189
263
|
});
|
|
190
264
|
|
package/src/commands/ai.ts
CHANGED
|
@@ -52,6 +52,117 @@ export class AIService {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
private isUnsupportedTokenParamError(
|
|
56
|
+
error: unknown,
|
|
57
|
+
param: 'max_tokens' | 'max_completion_tokens'
|
|
58
|
+
): boolean {
|
|
59
|
+
if (!error || typeof error !== 'object') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const errorObj = error as {
|
|
64
|
+
error?: { message?: string; param?: string; code?: string };
|
|
65
|
+
message?: string;
|
|
66
|
+
param?: string;
|
|
67
|
+
code?: string;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const message = errorObj.error?.message ?? errorObj.message;
|
|
71
|
+
const code = errorObj.error?.code ?? errorObj.code;
|
|
72
|
+
const errorParam = errorObj.error?.param ?? errorObj.param;
|
|
73
|
+
|
|
74
|
+
if (code === 'unsupported_parameter' && errorParam === param) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (typeof message === 'string') {
|
|
79
|
+
return message.includes('Unsupported parameter') && message.includes(param);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private isUnsupportedValueError(error: unknown, param: string): boolean {
|
|
86
|
+
if (!error || typeof error !== 'object') {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const errorObj = error as {
|
|
91
|
+
error?: { message?: string; param?: string; code?: string };
|
|
92
|
+
message?: string;
|
|
93
|
+
param?: string;
|
|
94
|
+
code?: string;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const message = errorObj.error?.message ?? errorObj.message;
|
|
98
|
+
const code = errorObj.error?.code ?? errorObj.code;
|
|
99
|
+
const errorParam = errorObj.error?.param ?? errorObj.param;
|
|
100
|
+
|
|
101
|
+
if (code === 'unsupported_value' && errorParam === param) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (typeof message === 'string') {
|
|
106
|
+
return message.includes('Unsupported value') && message.includes(param);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private swapTokenParam(
|
|
113
|
+
request: OpenAI.ChatCompletionCreateParamsNonStreaming,
|
|
114
|
+
targetParam: 'max_tokens' | 'max_completion_tokens'
|
|
115
|
+
): OpenAI.ChatCompletionCreateParamsNonStreaming {
|
|
116
|
+
const { max_tokens, max_completion_tokens, ...rest } = request;
|
|
117
|
+
const tokenValue = max_completion_tokens ?? max_tokens;
|
|
118
|
+
|
|
119
|
+
if (tokenValue === undefined || tokenValue === null) {
|
|
120
|
+
return { ...rest };
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (targetParam === 'max_tokens') {
|
|
124
|
+
return { ...rest, max_tokens: tokenValue };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return { ...rest, max_completion_tokens: tokenValue };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private removeTemperature(
|
|
131
|
+
request: OpenAI.ChatCompletionCreateParamsNonStreaming
|
|
132
|
+
): OpenAI.ChatCompletionCreateParamsNonStreaming {
|
|
133
|
+
const { temperature, ...rest } = request;
|
|
134
|
+
return { ...rest };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private async createChatCompletion(
|
|
138
|
+
request: OpenAI.ChatCompletionCreateParamsNonStreaming,
|
|
139
|
+
attempt = 0
|
|
140
|
+
): Promise<OpenAI.ChatCompletion> {
|
|
141
|
+
try {
|
|
142
|
+
return await this.openai.chat.completions.create(request);
|
|
143
|
+
} catch (error) {
|
|
144
|
+
if (attempt < 3 && this.isUnsupportedValueError(error, 'temperature')) {
|
|
145
|
+
const fallbackRequest = this.removeTemperature(request);
|
|
146
|
+
this.debugLog('Retrying without temperature due to unsupported value error.');
|
|
147
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (this.isUnsupportedTokenParamError(error, 'max_completion_tokens')) {
|
|
151
|
+
const fallbackRequest = this.swapTokenParam(request, 'max_tokens');
|
|
152
|
+
this.debugLog('Retrying with max_tokens due to unsupported max_completion_tokens error.');
|
|
153
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (this.isUnsupportedTokenParamError(error, 'max_tokens')) {
|
|
157
|
+
const fallbackRequest = this.swapTokenParam(request, 'max_completion_tokens');
|
|
158
|
+
this.debugLog('Retrying with max_completion_tokens due to unsupported max_tokens error.');
|
|
159
|
+
return await this.createChatCompletion(fallbackRequest, attempt + 1);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
55
166
|
/**
|
|
56
167
|
* Remove think/thinking tags and other XML-style tags from AI response
|
|
57
168
|
*/
|
|
@@ -94,7 +205,7 @@ export class AIService {
|
|
|
94
205
|
? `Git diff will be provided separately in the user message.\n\n## Additional User Instructions\n${extraInstructions.trim()}`
|
|
95
206
|
: 'Git diff will be provided separately in the user message.';
|
|
96
207
|
|
|
97
|
-
const response = await this.
|
|
208
|
+
const response = await this.createChatCompletion({
|
|
98
209
|
model: this.model,
|
|
99
210
|
messages: [
|
|
100
211
|
{
|
|
@@ -110,8 +221,7 @@ export class AIService {
|
|
|
110
221
|
content: `Git diff:\n${diff}`
|
|
111
222
|
}
|
|
112
223
|
],
|
|
113
|
-
|
|
114
|
-
temperature: 0.1
|
|
224
|
+
max_completion_tokens: 3000
|
|
115
225
|
});
|
|
116
226
|
|
|
117
227
|
this.debugLog('API Response received:', JSON.stringify(response, null, 2));
|
|
@@ -255,7 +365,7 @@ export class AIService {
|
|
|
255
365
|
? `${extraInstructions.trim()}`
|
|
256
366
|
: '';
|
|
257
367
|
|
|
258
|
-
const response = await this.
|
|
368
|
+
const response = await this.createChatCompletion({
|
|
259
369
|
model: this.model,
|
|
260
370
|
messages: [
|
|
261
371
|
{
|
|
@@ -267,8 +377,7 @@ export class AIService {
|
|
|
267
377
|
content: `Commit log:\n${commitLog}`
|
|
268
378
|
}
|
|
269
379
|
],
|
|
270
|
-
|
|
271
|
-
temperature: 0.2
|
|
380
|
+
max_completion_tokens: 3000
|
|
272
381
|
});
|
|
273
382
|
|
|
274
383
|
const choice = response.choices[0];
|
|
@@ -310,7 +419,7 @@ export class AIService {
|
|
|
310
419
|
this.debugLog('Model:', this.model);
|
|
311
420
|
this.debugLog('Base URL:', this.openai.baseURL);
|
|
312
421
|
|
|
313
|
-
const response = await this.
|
|
422
|
+
const response = await this.createChatCompletion({
|
|
314
423
|
model: this.model,
|
|
315
424
|
messages: [
|
|
316
425
|
{
|
|
@@ -327,8 +436,7 @@ export class AIService {
|
|
|
327
436
|
content: `Git diff between ${baseBranch} and ${compareBranch}:\n${diff}`
|
|
328
437
|
}
|
|
329
438
|
],
|
|
330
|
-
|
|
331
|
-
temperature: 0.2
|
|
439
|
+
max_completion_tokens: 4000
|
|
332
440
|
});
|
|
333
441
|
|
|
334
442
|
const choice = response.choices[0];
|
package/src/commands/git.ts
CHANGED
|
@@ -3,6 +3,79 @@ import { promisify } from 'util';
|
|
|
3
3
|
|
|
4
4
|
const execAsync = promisify(exec);
|
|
5
5
|
const execFileAsync = promisify(execFile);
|
|
6
|
+
const GIT_DIFF_MAX_BUFFER = 50 * 1024 * 1024;
|
|
7
|
+
const MAX_DIFF_TOKENS = 50000;
|
|
8
|
+
const APPROX_CHARS_PER_TOKEN = 4;
|
|
9
|
+
const MAX_DIFF_CHARS = MAX_DIFF_TOKENS * APPROX_CHARS_PER_TOKEN;
|
|
10
|
+
const MAX_FILE_LINES = 400;
|
|
11
|
+
const MAX_NEW_FILE_LINES = 200;
|
|
12
|
+
|
|
13
|
+
const splitDiffSections = (diff: string): string[] => {
|
|
14
|
+
const lines = diff.split('\n');
|
|
15
|
+
const sections: string[] = [];
|
|
16
|
+
let current: string[] = [];
|
|
17
|
+
|
|
18
|
+
for (const line of lines) {
|
|
19
|
+
if (line.startsWith('diff --git ')) {
|
|
20
|
+
if (current.length > 0) {
|
|
21
|
+
sections.push(current.join('\n'));
|
|
22
|
+
}
|
|
23
|
+
current = [line];
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
current.push(line);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (current.length > 0) {
|
|
30
|
+
sections.push(current.join('\n'));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return sections.length > 0 ? sections : [diff];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const truncateSection = (section: string): string => {
|
|
37
|
+
const lines = section.split('\n');
|
|
38
|
+
const isNewFile = section.includes('new file mode') || section.includes('--- /dev/null');
|
|
39
|
+
const limit = isNewFile ? MAX_NEW_FILE_LINES : MAX_FILE_LINES;
|
|
40
|
+
|
|
41
|
+
if (lines.length <= limit) {
|
|
42
|
+
return section;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const omitted = lines.length - limit;
|
|
46
|
+
const truncated = lines.slice(0, limit);
|
|
47
|
+
truncated.push(`... (truncated ${omitted} lines)`);
|
|
48
|
+
return truncated.join('\n');
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const truncateDiffByFile = (diff: string): string => {
|
|
52
|
+
const sections = splitDiffSections(diff);
|
|
53
|
+
return sections.map(truncateSection).join('\n');
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const truncateDiffByTotal = (diff: string): string => {
|
|
57
|
+
const lines = diff.split('\n');
|
|
58
|
+
let total = 0;
|
|
59
|
+
const kept: string[] = [];
|
|
60
|
+
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
const addition = line.length + 1;
|
|
63
|
+
if (total + addition > MAX_DIFF_CHARS) {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
kept.push(line);
|
|
67
|
+
total += addition;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (kept.length === lines.length) {
|
|
71
|
+
return diff;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
kept.push(`... (truncated remaining diff to stay under ${MAX_DIFF_TOKENS} tokens)`);
|
|
75
|
+
return kept.join('\n');
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const truncateDiff = (diff: string): string => truncateDiffByTotal(truncateDiffByFile(diff));
|
|
6
79
|
|
|
7
80
|
export interface GitDiffResult {
|
|
8
81
|
success: boolean;
|
|
@@ -25,9 +98,12 @@ export interface GitLogResult {
|
|
|
25
98
|
export class GitService {
|
|
26
99
|
static async getStagedDiff(): Promise<GitDiffResult> {
|
|
27
100
|
try {
|
|
28
|
-
const { stdout } = await
|
|
101
|
+
const { stdout } = await execFileAsync('git', ['diff', '--staged'], {
|
|
102
|
+
maxBuffer: GIT_DIFF_MAX_BUFFER
|
|
103
|
+
});
|
|
104
|
+
const diff = truncateDiff(stdout);
|
|
29
105
|
|
|
30
|
-
if (!
|
|
106
|
+
if (!diff.trim()) {
|
|
31
107
|
return {
|
|
32
108
|
success: false,
|
|
33
109
|
error: 'No staged changes found. Please stage your changes first.'
|
|
@@ -36,22 +112,27 @@ export class GitService {
|
|
|
36
112
|
|
|
37
113
|
return {
|
|
38
114
|
success: true,
|
|
39
|
-
diff
|
|
115
|
+
diff
|
|
40
116
|
};
|
|
41
117
|
} catch (error) {
|
|
118
|
+
const message = error instanceof Error ? error.message : 'Failed to get git diff';
|
|
42
119
|
return {
|
|
43
120
|
success: false,
|
|
44
|
-
error:
|
|
121
|
+
error: message.includes('maxBuffer')
|
|
122
|
+
? 'Staged diff is too large to process. Try committing in smaller batches.'
|
|
123
|
+
: message
|
|
45
124
|
};
|
|
46
125
|
}
|
|
47
126
|
}
|
|
48
127
|
|
|
49
128
|
static async getBranchDiff(base: string, compare: string): Promise<GitDiffResult> {
|
|
50
129
|
try {
|
|
51
|
-
const
|
|
52
|
-
|
|
130
|
+
const { stdout } = await execFileAsync('git', ['diff', `${base}...${compare}`], {
|
|
131
|
+
maxBuffer: GIT_DIFF_MAX_BUFFER
|
|
132
|
+
});
|
|
133
|
+
const diff = truncateDiff(stdout);
|
|
53
134
|
|
|
54
|
-
if (!
|
|
135
|
+
if (!diff.trim()) {
|
|
55
136
|
return {
|
|
56
137
|
success: false,
|
|
57
138
|
error: `No differences found between ${base} and ${compare}.`
|
|
@@ -60,15 +141,17 @@ export class GitService {
|
|
|
60
141
|
|
|
61
142
|
return {
|
|
62
143
|
success: true,
|
|
63
|
-
diff
|
|
144
|
+
diff
|
|
64
145
|
};
|
|
65
146
|
} catch (error) {
|
|
66
147
|
const message = error instanceof Error ? error.message : 'Failed to get branch diff';
|
|
67
148
|
return {
|
|
68
149
|
success: false,
|
|
69
|
-
error: message.includes('
|
|
70
|
-
?
|
|
71
|
-
: message
|
|
150
|
+
error: message.includes('maxBuffer')
|
|
151
|
+
? 'Diff is too large to process. Try narrowing the compare range.'
|
|
152
|
+
: message.includes('unknown revision')
|
|
153
|
+
? `Unable to resolve one of the branches: ${base} or ${compare}.`
|
|
154
|
+
: message
|
|
72
155
|
};
|
|
73
156
|
}
|
|
74
157
|
}
|