@ksw8954/git-ai-commit 1.1.8 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +3 -0
- package/CHANGELOG.md +16 -0
- package/README.md +25 -4
- package/dist/commands/ai.d.ts +7 -1
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +108 -11
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/commit.d.ts +1 -0
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +37 -34
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +15 -5
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/config.d.ts +7 -2
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +37 -15
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/configCommand.d.ts +5 -1
- package/dist/commands/configCommand.d.ts.map +1 -1
- package/dist/commands/configCommand.js +30 -3
- package/dist/commands/configCommand.js.map +1 -1
- package/dist/commands/git.js +3 -3
- package/dist/commands/hookCommand.d.ts +14 -0
- package/dist/commands/hookCommand.d.ts.map +1 -0
- package/dist/commands/hookCommand.js +180 -0
- package/dist/commands/hookCommand.js.map +1 -0
- package/dist/commands/prCommand.d.ts.map +1 -1
- package/dist/commands/prCommand.js +3 -1
- package/dist/commands/prCommand.js.map +1 -1
- package/dist/commands/tag.d.ts.map +1 -1
- package/dist/commands/tag.js +9 -3
- package/dist/commands/tag.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/ai.test.ts +486 -7
- package/src/__tests__/commitCommand.test.ts +111 -0
- package/src/__tests__/config.test.ts +24 -6
- package/src/__tests__/git.test.ts +421 -98
- package/src/__tests__/preCommit.test.ts +19 -0
- package/src/__tests__/tagCommand.test.ts +510 -17
- package/src/commands/ai.ts +128 -13
- package/src/commands/commit.ts +40 -34
- package/src/commands/completion.ts +15 -5
- package/src/commands/config.ts +46 -23
- package/src/commands/configCommand.ts +41 -8
- package/src/commands/git.ts +3 -3
- package/src/commands/hookCommand.ts +193 -0
- package/src/commands/prCommand.ts +3 -1
- package/src/commands/tag.ts +10 -4
- package/src/index.ts +3 -0
- package/src/schema/config.schema.json +72 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,MAAa,iBAAiB;IAG5B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAO,CAAC,YAAY,CAAC;aACrC,WAAW,CAAC,mCAAmC,CAAC;aAChD,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAC;aAC/C,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAE9C,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,OAAO
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,MAAa,iBAAiB;IAG5B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAO,CAAC,YAAY,CAAC;aACrC,WAAW,CAAC,mCAAmC,CAAC;aAChD,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAC;aAC/C,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAE9C,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGV,CAAC;IACA,CAAC;IAEO,qBAAqB;QAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHV,CAAC;IACA,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAhQD,8CAgQC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
export type SupportedLanguage = 'ko' | 'en';
|
|
2
2
|
export type ReasoningEffort = 'minimal' | 'low' | 'medium' | 'high';
|
|
3
|
+
export type AIMode = 'custom' | 'openai' | 'gemini';
|
|
3
4
|
export interface EnvironmentConfig {
|
|
4
5
|
apiKey?: string;
|
|
5
6
|
baseURL?: string;
|
|
6
7
|
model?: string;
|
|
7
8
|
fallbackModel?: string;
|
|
8
9
|
reasoningEffort?: ReasoningEffort;
|
|
9
|
-
mode:
|
|
10
|
+
mode: AIMode;
|
|
10
11
|
language: SupportedLanguage;
|
|
11
12
|
autoPush: boolean;
|
|
13
|
+
coAuthor?: string | false;
|
|
14
|
+
maxCompletionTokens?: number;
|
|
12
15
|
}
|
|
13
16
|
interface StoredConfig {
|
|
14
17
|
apiKey?: string;
|
|
@@ -16,9 +19,11 @@ interface StoredConfig {
|
|
|
16
19
|
model?: string;
|
|
17
20
|
fallbackModel?: string;
|
|
18
21
|
reasoningEffort?: ReasoningEffort | string;
|
|
19
|
-
mode?:
|
|
22
|
+
mode?: AIMode;
|
|
20
23
|
language?: SupportedLanguage | string;
|
|
21
24
|
autoPush?: boolean;
|
|
25
|
+
coAuthor?: string | false;
|
|
26
|
+
maxCompletionTokens?: number;
|
|
22
27
|
}
|
|
23
28
|
export declare class ConfigService {
|
|
24
29
|
private static getConfigFilePath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpE,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AASD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,cAAc;IAsB7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IASvC,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA+B/B,MAAM,CAAC,SAAS,IAAI,iBAAiB;IA8BrC,MAAM,CAAC,YAAY,IAAI,iBAAiB;WAI3B,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C/D,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAS5E"}
|
package/dist/commands/config.js
CHANGED
|
@@ -12,6 +12,8 @@ const DEFAULT_MODEL = 'zai-org/GLM-4.5-FP8';
|
|
|
12
12
|
const DEFAULT_MODE = 'custom';
|
|
13
13
|
const DEFAULT_LANGUAGE = 'ko';
|
|
14
14
|
const DEFAULT_AUTO_PUSH = false;
|
|
15
|
+
const DEFAULT_CO_AUTHOR = 'git-ai-commit <git-ai-commit@users.noreply.github.com>';
|
|
16
|
+
const CONFIG_SCHEMA_URL = 'https://raw.githubusercontent.com/onaries/git-ai-commit/main/src/schema/config.schema.json';
|
|
15
17
|
class ConfigService {
|
|
16
18
|
static getConfigFilePath() {
|
|
17
19
|
const overridePath = process.env.GIT_AI_COMMIT_CONFIG_PATH;
|
|
@@ -31,7 +33,8 @@ class ConfigService {
|
|
|
31
33
|
return {};
|
|
32
34
|
}
|
|
33
35
|
const parsed = JSON.parse(raw);
|
|
34
|
-
|
|
36
|
+
const { $schema, ...config } = typeof parsed === 'object' && parsed !== null ? parsed : {};
|
|
37
|
+
return config;
|
|
35
38
|
}
|
|
36
39
|
catch (error) {
|
|
37
40
|
console.warn('Warning: Failed to read configuration file. Falling back to environment variables.');
|
|
@@ -59,24 +62,36 @@ class ConfigService {
|
|
|
59
62
|
return DEFAULT_MODE;
|
|
60
63
|
}
|
|
61
64
|
const normalized = mode.toLowerCase();
|
|
62
|
-
|
|
65
|
+
if (normalized === 'openai')
|
|
66
|
+
return 'openai';
|
|
67
|
+
if (normalized === 'gemini')
|
|
68
|
+
return 'gemini';
|
|
69
|
+
return 'custom';
|
|
63
70
|
}
|
|
64
71
|
static resolveEnvConfig(modeOverride) {
|
|
65
72
|
const resolvedMode = this.normalizeMode(modeOverride || process.env.AI_MODE);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
let apiKey;
|
|
74
|
+
let baseURL;
|
|
75
|
+
let model;
|
|
76
|
+
if (resolvedMode === 'gemini') {
|
|
77
|
+
apiKey = process.env.GEMINI_API_KEY || process.env.AI_API_KEY;
|
|
78
|
+
baseURL = undefined;
|
|
79
|
+
model = process.env.AI_MODEL || 'gemini-2.0-flash';
|
|
80
|
+
}
|
|
81
|
+
else if (resolvedMode === 'openai') {
|
|
82
|
+
apiKey = process.env.OPENAI_API_KEY || process.env.AI_API_KEY;
|
|
83
|
+
baseURL = process.env.OPENAI_BASE_URL || process.env.AI_BASE_URL;
|
|
84
|
+
model = process.env.OPENAI_MODEL || process.env.AI_MODEL || DEFAULT_MODEL;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
apiKey = process.env.AI_API_KEY || process.env.OPENAI_API_KEY;
|
|
88
|
+
baseURL = process.env.AI_BASE_URL || process.env.OPENAI_BASE_URL;
|
|
89
|
+
model = process.env.AI_MODEL || process.env.OPENAI_MODEL || DEFAULT_MODEL;
|
|
90
|
+
}
|
|
76
91
|
return {
|
|
77
92
|
apiKey: apiKey || undefined,
|
|
78
93
|
baseURL: baseURL || undefined,
|
|
79
|
-
model
|
|
94
|
+
model,
|
|
80
95
|
mode: resolvedMode,
|
|
81
96
|
language: DEFAULT_LANGUAGE,
|
|
82
97
|
autoPush: DEFAULT_AUTO_PUSH
|
|
@@ -93,6 +108,10 @@ class ConfigService {
|
|
|
93
108
|
const reasoningEffort = this.normalizeReasoningEffort(fileConfig.reasoningEffort);
|
|
94
109
|
const language = this.normalizeLanguage(fileConfig.language ?? envConfig.language);
|
|
95
110
|
const autoPush = typeof fileConfig.autoPush === 'boolean' ? fileConfig.autoPush : envConfig.autoPush;
|
|
111
|
+
const coAuthor = fileConfig.coAuthor === false ? false : (fileConfig.coAuthor || DEFAULT_CO_AUTHOR);
|
|
112
|
+
const maxCompletionTokens = typeof fileConfig.maxCompletionTokens === 'number' && fileConfig.maxCompletionTokens > 0
|
|
113
|
+
? fileConfig.maxCompletionTokens
|
|
114
|
+
: undefined;
|
|
96
115
|
return {
|
|
97
116
|
apiKey,
|
|
98
117
|
baseURL,
|
|
@@ -101,7 +120,9 @@ class ConfigService {
|
|
|
101
120
|
reasoningEffort,
|
|
102
121
|
mode,
|
|
103
122
|
language,
|
|
104
|
-
autoPush
|
|
123
|
+
autoPush,
|
|
124
|
+
coAuthor,
|
|
125
|
+
maxCompletionTokens,
|
|
105
126
|
};
|
|
106
127
|
}
|
|
107
128
|
static getEnvConfig() {
|
|
@@ -129,6 +150,7 @@ class ConfigService {
|
|
|
129
150
|
if (next.mode === DEFAULT_MODE) {
|
|
130
151
|
delete next.mode;
|
|
131
152
|
}
|
|
153
|
+
// coAuthor: false means explicitly disabled — persist it so getConfig() sees it
|
|
132
154
|
const sanitized = Object.entries(next).reduce((acc, [key, value]) => {
|
|
133
155
|
if (value !== undefined) {
|
|
134
156
|
acc[key] = value;
|
|
@@ -139,7 +161,7 @@ class ConfigService {
|
|
|
139
161
|
return acc;
|
|
140
162
|
}, {});
|
|
141
163
|
await fs_2.promises.mkdir(path_1.default.dirname(filePath), { recursive: true });
|
|
142
|
-
await fs_2.promises.writeFile(filePath, JSON.stringify(sanitized, null, 2), 'utf-8');
|
|
164
|
+
await fs_2.promises.writeFile(filePath, JSON.stringify({ $schema: CONFIG_SCHEMA_URL, ...sanitized }, null, 2), 'utf-8');
|
|
143
165
|
}
|
|
144
166
|
static validateConfig(config) {
|
|
145
167
|
if (!config.apiKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,2BAA4C;AAC5C,4CAAoB;AACpB,gDAAwB;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,2BAA4C;AAC5C,4CAAoB;AACpB,gDAAwB;AAkCxB,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,YAAY,GAAW,QAAQ,CAAC;AACtC,MAAM,gBAAgB,GAAsB,IAAI,CAAC;AACjD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,iBAAiB,GAAG,wDAAwD,CAAC;AACnF,MAAM,iBAAiB,GAAG,4FAA4F,CAAC;AAEvH,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,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,CAAC;YACtH,OAAO,MAAsB,CAAC;QAChC,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,wBAAwB,CAAC,MAAe;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,OAAO,UAA6B,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,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,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC7C,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,YAAqB;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7E,IAAI,MAA0B,CAAC;QAC/B,IAAI,OAA2B,CAAC;QAChC,IAAI,KAAa,CAAC;QAElB,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9D,OAAO,GAAG,SAAS,CAAC;YACpB,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,kBAAkB,CAAC;QACrD,CAAC;aAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9D,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACjE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC9D,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACjE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM,IAAI,SAAS;YAC3B,OAAO,EAAE,OAAO,IAAI,SAAS;YAC7B,KAAK;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,iBAAiB;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;QACrD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,IAAI,aAAa,CAAC;QACnE,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QACrG,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC;QACpG,MAAM,mBAAmB,GAAG,OAAO,UAAU,CAAC,mBAAmB,KAAK,QAAQ,IAAI,UAAU,CAAC,mBAAmB,GAAG,CAAC;YAClH,CAAC,CAAC,UAAU,CAAC,mBAAmB;YAChC,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,MAAM;YACN,OAAO;YACP,KAAK;YACL,aAAa;YACb,eAAe;YACf,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,mBAAmB;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAqB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtC,MAAM,IAAI,GAAiB;YACzB,GAAG,OAAO;YACV,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,gFAAgF;QAEhF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAChF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,GAAG,CAAC,GAAyB,CAAC,GAAG,KAAY,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,GAAyB,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,aAAU,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,aAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAA8C;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAnLD,sCAmLC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { AIMode } from './config';
|
|
2
3
|
export interface ConfigOptions {
|
|
3
4
|
show?: boolean;
|
|
4
5
|
language?: string;
|
|
@@ -8,7 +9,10 @@ export interface ConfigOptions {
|
|
|
8
9
|
model?: string;
|
|
9
10
|
fallbackModel?: string;
|
|
10
11
|
reasoningEffort?: string;
|
|
11
|
-
mode?:
|
|
12
|
+
mode?: AIMode;
|
|
13
|
+
coAuthor?: string;
|
|
14
|
+
noCoAuthor?: boolean;
|
|
15
|
+
maxTokens?: string;
|
|
12
16
|
}
|
|
13
17
|
export declare class ConfigCommand {
|
|
14
18
|
private program;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configCommand.d.ts","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"configCommand.d.ts","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAoC,MAAM,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAU;;IAqBzB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,mBAAmB;YASb,YAAY;IAyH1B,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -16,7 +16,10 @@ class ConfigCommand {
|
|
|
16
16
|
.option('-m, --model <model>', 'Persist default AI model')
|
|
17
17
|
.option('--fallback-model <model>', 'Persist fallback model for rate limit (429) retry')
|
|
18
18
|
.option('--reasoning-effort <level>', 'Thinking effort for reasoning models (minimal | low | medium | high)')
|
|
19
|
-
.option('--mode <mode>', 'Persist AI mode (custom | openai)')
|
|
19
|
+
.option('--mode <mode>', 'Persist AI mode (custom | openai | gemini)')
|
|
20
|
+
.option('--co-author <value>', 'Set co-author for commits (e.g. "Name <email>")')
|
|
21
|
+
.option('--no-co-author', 'Disable co-author')
|
|
22
|
+
.option('--max-tokens <number>', 'Persist max completion tokens for AI responses')
|
|
20
23
|
.action(this.handleConfig.bind(this));
|
|
21
24
|
}
|
|
22
25
|
validateLanguage(language) {
|
|
@@ -29,8 +32,8 @@ class ConfigCommand {
|
|
|
29
32
|
}
|
|
30
33
|
validateMode(mode) {
|
|
31
34
|
const normalized = mode?.toLowerCase();
|
|
32
|
-
if (normalized !== 'custom' && normalized !== 'openai') {
|
|
33
|
-
console.error('Mode must be
|
|
35
|
+
if (normalized !== 'custom' && normalized !== 'openai' && normalized !== 'gemini') {
|
|
36
|
+
console.error('Mode must be one of: "custom", "openai", "gemini".');
|
|
34
37
|
process.exit(1);
|
|
35
38
|
}
|
|
36
39
|
return normalized;
|
|
@@ -73,6 +76,25 @@ class ConfigCommand {
|
|
|
73
76
|
if (options.mode) {
|
|
74
77
|
updates.mode = this.validateMode(options.mode);
|
|
75
78
|
}
|
|
79
|
+
if (options.noCoAuthor) {
|
|
80
|
+
updates.coAuthor = false;
|
|
81
|
+
}
|
|
82
|
+
else if (options.coAuthor !== undefined) {
|
|
83
|
+
const coAuthor = this.sanitizeStringValue(options.coAuthor);
|
|
84
|
+
if (coAuthor && !/.+<.+@.+>/.test(coAuthor)) {
|
|
85
|
+
console.error('Co-author must be in "Name <email>" format.');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
updates.coAuthor = coAuthor;
|
|
89
|
+
}
|
|
90
|
+
if (options.maxTokens !== undefined) {
|
|
91
|
+
const parsed = parseInt(options.maxTokens, 10);
|
|
92
|
+
if (isNaN(parsed) || parsed <= 0) {
|
|
93
|
+
console.error('Max tokens must be a positive number.');
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
updates.maxCompletionTokens = parsed;
|
|
97
|
+
}
|
|
76
98
|
const hasUpdates = Object.keys(updates).length > 0;
|
|
77
99
|
if (!options.show && !hasUpdates) {
|
|
78
100
|
console.log('Usage examples:');
|
|
@@ -82,8 +104,11 @@ class ConfigCommand {
|
|
|
82
104
|
console.log(' git-ai-commit config -k sk-xxx # Persist API key securely on disk');
|
|
83
105
|
console.log(' git-ai-commit config -b https://api.test # Persist custom API base URL');
|
|
84
106
|
console.log(' git-ai-commit config --mode openai # Use OpenAI-compatible environment defaults');
|
|
107
|
+
console.log(' git-ai-commit config --mode gemini # Use Gemini native SDK (GEMINI_API_KEY)');
|
|
85
108
|
console.log(' git-ai-commit config --model gpt-4o-mini # Persist preferred AI model');
|
|
86
109
|
console.log(' git-ai-commit config --fallback-model glm-4-flash # Fallback model for 429 retry');
|
|
110
|
+
console.log(' git-ai-commit config --co-author "Name <email>" # Set co-author for commits');
|
|
111
|
+
console.log(' git-ai-commit config --max-tokens 2000 # Set max completion tokens for AI');
|
|
87
112
|
return;
|
|
88
113
|
}
|
|
89
114
|
if (hasUpdates) {
|
|
@@ -109,6 +134,8 @@ class ConfigCommand {
|
|
|
109
134
|
console.log(`Fallback Model: ${config.fallbackModel || 'Not set'}`);
|
|
110
135
|
console.log(`Reasoning Effort: ${config.reasoningEffort || 'Not set (model default)'}`);
|
|
111
136
|
console.log(`Mode: ${config.mode || 'custom (default)'}`);
|
|
137
|
+
console.log(`Co-author: ${config.coAuthor === false ? 'disabled' : config.coAuthor}`);
|
|
138
|
+
console.log(`Max Completion Tokens: ${config.maxCompletionTokens || 'Not set (using per-command defaults)'}`);
|
|
112
139
|
}
|
|
113
140
|
catch (error) {
|
|
114
141
|
console.error('Error reading configuration:', error instanceof Error ? error.message : error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configCommand.js","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"configCommand.js","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/git.js
CHANGED
|
@@ -6,11 +6,11 @@ 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
8
|
const GIT_DIFF_MAX_BUFFER = 50 * 1024 * 1024;
|
|
9
|
-
const MAX_DIFF_TOKENS =
|
|
9
|
+
const MAX_DIFF_TOKENS = 25000;
|
|
10
10
|
const APPROX_CHARS_PER_TOKEN = 4;
|
|
11
11
|
const MAX_DIFF_CHARS = MAX_DIFF_TOKENS * APPROX_CHARS_PER_TOKEN;
|
|
12
|
-
const MAX_FILE_LINES =
|
|
13
|
-
const MAX_NEW_FILE_LINES =
|
|
12
|
+
const MAX_FILE_LINES = 200;
|
|
13
|
+
const MAX_NEW_FILE_LINES = 100;
|
|
14
14
|
const splitDiffSections = (diff) => {
|
|
15
15
|
const lines = diff.split('\n');
|
|
16
16
|
const sections = [];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare class HookCommand {
|
|
3
|
+
private program;
|
|
4
|
+
constructor();
|
|
5
|
+
private getGitRoot;
|
|
6
|
+
private getHooksDir;
|
|
7
|
+
private getHookPath;
|
|
8
|
+
private isOurHook;
|
|
9
|
+
private handleInstall;
|
|
10
|
+
private handleUninstall;
|
|
11
|
+
private handleStatus;
|
|
12
|
+
getCommand(): Command;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=hookCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookCommand.d.ts","sourceRoot":"","sources":["../../src/commands/hookCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAU;;IAsBzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,YAAY;IA4BpB,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
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.HookCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const HOOK_NAME = 'prepare-commit-msg';
|
|
12
|
+
const HOOK_SIGNATURE = '# installed by git-ai-commit';
|
|
13
|
+
const HOOK_SCRIPT = `#!/bin/sh
|
|
14
|
+
${HOOK_SIGNATURE}
|
|
15
|
+
|
|
16
|
+
COMMIT_MSG_FILE="$1"
|
|
17
|
+
COMMIT_SOURCE="$2"
|
|
18
|
+
|
|
19
|
+
# Skip if message was provided via -m, merge, squash, or amend
|
|
20
|
+
if [ -n "$COMMIT_SOURCE" ]; then
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Skip if no staged changes
|
|
25
|
+
if ! git diff --cached --quiet --exit-code 2>/dev/null; then
|
|
26
|
+
# Generate AI commit message
|
|
27
|
+
AI_MSG=$(git-ai-commit commit --message-only 2>/dev/null)
|
|
28
|
+
if [ $? -eq 0 ] && [ -n "$AI_MSG" ]; then
|
|
29
|
+
# Prepend AI message, keep original commented lines below
|
|
30
|
+
ORIGINAL=$(cat "$COMMIT_MSG_FILE")
|
|
31
|
+
printf '%s\n\n%s' "$AI_MSG" "$ORIGINAL" > "$COMMIT_MSG_FILE"
|
|
32
|
+
fi
|
|
33
|
+
fi
|
|
34
|
+
`;
|
|
35
|
+
class HookCommand {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.program = new commander_1.Command('hook')
|
|
38
|
+
.description('Manage git-ai-commit prepare-commit-msg hook');
|
|
39
|
+
this.program
|
|
40
|
+
.command('install')
|
|
41
|
+
.description('Install prepare-commit-msg hook in the current repository')
|
|
42
|
+
.action(this.handleInstall.bind(this));
|
|
43
|
+
this.program
|
|
44
|
+
.command('uninstall')
|
|
45
|
+
.description('Remove prepare-commit-msg hook from the current repository')
|
|
46
|
+
.action(this.handleUninstall.bind(this));
|
|
47
|
+
this.program
|
|
48
|
+
.command('status')
|
|
49
|
+
.description('Show hook installation status')
|
|
50
|
+
.action(this.handleStatus.bind(this));
|
|
51
|
+
}
|
|
52
|
+
getGitRoot() {
|
|
53
|
+
try {
|
|
54
|
+
return (0, child_process_1.execFileSync)('git', ['rev-parse', '--show-toplevel'], {
|
|
55
|
+
encoding: 'utf-8',
|
|
56
|
+
}).trim();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getHooksDir() {
|
|
63
|
+
try {
|
|
64
|
+
const hooksPath = (0, child_process_1.execFileSync)('git', ['rev-parse', '--git-path', 'hooks'], {
|
|
65
|
+
encoding: 'utf-8',
|
|
66
|
+
}).trim();
|
|
67
|
+
// git rev-parse --git-path returns relative path; resolve it
|
|
68
|
+
const gitRoot = this.getGitRoot();
|
|
69
|
+
if (!gitRoot)
|
|
70
|
+
return null;
|
|
71
|
+
return path_1.default.resolve(gitRoot, hooksPath);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
getHookPath() {
|
|
78
|
+
const hooksDir = this.getHooksDir();
|
|
79
|
+
if (!hooksDir)
|
|
80
|
+
return null;
|
|
81
|
+
return path_1.default.join(hooksDir, HOOK_NAME);
|
|
82
|
+
}
|
|
83
|
+
isOurHook(hookPath) {
|
|
84
|
+
try {
|
|
85
|
+
const content = fs_1.default.readFileSync(hookPath, 'utf-8');
|
|
86
|
+
return content.includes(HOOK_SIGNATURE);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
handleInstall() {
|
|
93
|
+
const gitRoot = this.getGitRoot();
|
|
94
|
+
if (!gitRoot) {
|
|
95
|
+
console.error('Error: Not a git repository.');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
const hookPath = this.getHookPath();
|
|
99
|
+
if (!hookPath) {
|
|
100
|
+
console.error('Error: Could not determine git hooks directory.');
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
// Check if hook already exists
|
|
104
|
+
if (fs_1.default.existsSync(hookPath)) {
|
|
105
|
+
if (this.isOurHook(hookPath)) {
|
|
106
|
+
console.log('Hook is already installed. Use "git-ai-commit hook uninstall" to remove it.');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
console.error(`Error: ${HOOK_NAME} hook already exists and was not installed by git-ai-commit.`);
|
|
110
|
+
console.error(`Path: ${hookPath}`);
|
|
111
|
+
console.error('Remove or rename the existing hook first, then try again.');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
// Create hooks directory if it doesn't exist
|
|
115
|
+
const hooksDir = path_1.default.dirname(hookPath);
|
|
116
|
+
if (!fs_1.default.existsSync(hooksDir)) {
|
|
117
|
+
fs_1.default.mkdirSync(hooksDir, { recursive: true });
|
|
118
|
+
}
|
|
119
|
+
fs_1.default.writeFileSync(hookPath, HOOK_SCRIPT, { mode: 0o755 });
|
|
120
|
+
console.log(`Installed ${HOOK_NAME} hook.`);
|
|
121
|
+
console.log(`Path: ${hookPath}`);
|
|
122
|
+
console.log('');
|
|
123
|
+
console.log('Now "git commit" will auto-generate an AI commit message.');
|
|
124
|
+
console.log('The message will be pre-filled in your editor for review.');
|
|
125
|
+
console.log('Use "git commit -m ..." to skip AI generation.');
|
|
126
|
+
}
|
|
127
|
+
handleUninstall() {
|
|
128
|
+
const gitRoot = this.getGitRoot();
|
|
129
|
+
if (!gitRoot) {
|
|
130
|
+
console.error('Error: Not a git repository.');
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
const hookPath = this.getHookPath();
|
|
134
|
+
if (!hookPath) {
|
|
135
|
+
console.error('Error: Could not determine git hooks directory.');
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
if (!fs_1.default.existsSync(hookPath)) {
|
|
139
|
+
console.log('No hook installed.');
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!this.isOurHook(hookPath)) {
|
|
143
|
+
console.error(`Error: ${HOOK_NAME} hook exists but was not installed by git-ai-commit.`);
|
|
144
|
+
console.error('Will not remove hooks installed by other tools.');
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
fs_1.default.unlinkSync(hookPath);
|
|
148
|
+
console.log(`Removed ${HOOK_NAME} hook.`);
|
|
149
|
+
}
|
|
150
|
+
handleStatus() {
|
|
151
|
+
const gitRoot = this.getGitRoot();
|
|
152
|
+
if (!gitRoot) {
|
|
153
|
+
console.error('Error: Not a git repository.');
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
const hookPath = this.getHookPath();
|
|
157
|
+
if (!hookPath) {
|
|
158
|
+
console.error('Error: Could not determine git hooks directory.');
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
if (!fs_1.default.existsSync(hookPath)) {
|
|
162
|
+
console.log('Not installed.');
|
|
163
|
+
console.log('Run "git-ai-commit hook install" to set up the prepare-commit-msg hook.');
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (this.isOurHook(hookPath)) {
|
|
167
|
+
console.log('Installed.');
|
|
168
|
+
console.log(`Path: ${hookPath}`);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.log(`A ${HOOK_NAME} hook exists but was not installed by git-ai-commit.`);
|
|
172
|
+
console.log(`Path: ${hookPath}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
getCommand() {
|
|
176
|
+
return this.program;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.HookCommand = HookCommand;
|
|
180
|
+
//# sourceMappingURL=hookCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookCommand.js","sourceRoot":"","sources":["../../src/commands/hookCommand.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;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;
|
|
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;IAmF/B,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -49,7 +49,9 @@ class PullRequestCommand {
|
|
|
49
49
|
fallbackModel: existingConfig.fallbackModel,
|
|
50
50
|
reasoningEffort: existingConfig.reasoningEffort,
|
|
51
51
|
language: existingConfig.language,
|
|
52
|
-
verbose: false
|
|
52
|
+
verbose: false,
|
|
53
|
+
mode: existingConfig.mode,
|
|
54
|
+
maxCompletionTokens: existingConfig.maxCompletionTokens,
|
|
53
55
|
});
|
|
54
56
|
const aiResult = await aiService.generatePullRequestMessage(options.base, options.compare, diffResult.diff);
|
|
55
57
|
if (!aiResult.success || !aiResult.message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prCommand.js","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,+BAAmC;AACnC,6BAAiC;AACjC,qCAAyC;AACzC,+BAAmC;AAWnC,MAAa,kBAAkB;IAG7B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAO,CAAC,IAAI,CAAC;aAC7B,WAAW,CAAC,mEAAmE,CAAC;aAChF,cAAc,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;aAC5E,cAAc,CAAC,oBAAoB,EAAE,qDAAqD,CAAC;aAC3F,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;aAC9D,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;aACvD,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;aAC3D,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAA2B;QACzD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,sBAAa,CAAC,SAAS,EAAE,CAAC;YAEjD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YAC7D,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;YAC3D,MAAM,aAAa,GAAG,eAAe,IAAI,cAAc,CAAC,OAAO,CAAC;YAChE,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC;YAE1D,sBAAa,CAAC,cAAc,CAAC;gBAC3B,MAAM,EAAE,YAAY;gBACpB,QAAQ,EAAE,cAAc,CAAC,QAAQ;aAClC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,gBAAU,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAEjF,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,mDAAmD,CAAC;gBACpF,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM,gBAAU,CAAC,MAAM,CAAC;oBACtB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE;oBAChE,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE,WAAW;iBACnB,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,cAAS,CAAC;gBAC9B,MAAM,EAAE,YAAa;gBACrB,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,WAAW;gBAClB,aAAa,EAAE,cAAc,CAAC,aAAa;gBAC3C,eAAe,EAAE,cAAc,CAAC,eAAe;gBAC/C,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,OAAO,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"prCommand.js","sourceRoot":"","sources":["../../src/commands/prCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;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;AASD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAU;;IAiBzB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,eAAe;
|
|
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;AASD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAU;;IAiBzB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,eAAe;YAwBT,SAAS;IAgZvB,OAAO,CAAC,iBAAiB;YAIX,qBAAqB;YAuCrB,oBAAoB;YAoBpB,oBAAoB;YA+CpB,gBAAgB;YAgBhB,gBAAgB;YAgBhB,sBAAsB;YAgBtB,oBAAoB;YAgBpB,gBAAgB;IAgB9B,UAAU,IAAI,OAAO;CAGtB"}
|
package/dist/commands/tag.js
CHANGED
|
@@ -50,7 +50,9 @@ class TagCommand {
|
|
|
50
50
|
model: mergedModel,
|
|
51
51
|
fallbackModel: storedConfig.fallbackModel,
|
|
52
52
|
reasoningEffort: storedConfig.reasoningEffort,
|
|
53
|
-
language: storedConfig.language
|
|
53
|
+
language: storedConfig.language,
|
|
54
|
+
mode: storedConfig.mode,
|
|
55
|
+
maxCompletionTokens: storedConfig.maxCompletionTokens,
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
58
|
async handleTag(tagName, options) {
|
|
@@ -376,8 +378,12 @@ class TagCommand {
|
|
|
376
378
|
console.log(`Pushing tag ${trimmedName} to ${remote}...`);
|
|
377
379
|
let pushSuccess = await git_1.GitService.pushTagToRemote(trimmedName, remote);
|
|
378
380
|
if (!pushSuccess) {
|
|
379
|
-
console.log(`⚠️ Normal push failed
|
|
380
|
-
|
|
381
|
+
console.log(`⚠️ Normal push failed for ${remote}. Force push may be required.`);
|
|
382
|
+
const shouldForcePush = await this.confirmForcePush(trimmedName);
|
|
383
|
+
if (shouldForcePush) {
|
|
384
|
+
console.log(`Force pushing tag ${trimmedName} to ${remote}...`);
|
|
385
|
+
pushSuccess = await git_1.GitService.forcePushTag(trimmedName, remote);
|
|
386
|
+
}
|
|
381
387
|
}
|
|
382
388
|
if (pushSuccess) {
|
|
383
389
|
console.log(`✅ Tag ${trimmedName} pushed to ${remote} successfully!`);
|