@ksw8954/git-ai-commit 1.1.8 → 1.2.1

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.
Files changed (53) hide show
  1. package/.github/workflows/publish.yml +31 -5
  2. package/CHANGELOG.md +16 -0
  3. package/README.md +25 -4
  4. package/dist/commands/ai.d.ts +7 -1
  5. package/dist/commands/ai.d.ts.map +1 -1
  6. package/dist/commands/ai.js +108 -11
  7. package/dist/commands/ai.js.map +1 -1
  8. package/dist/commands/commit.d.ts +1 -0
  9. package/dist/commands/commit.d.ts.map +1 -1
  10. package/dist/commands/commit.js +37 -34
  11. package/dist/commands/commit.js.map +1 -1
  12. package/dist/commands/completion.d.ts.map +1 -1
  13. package/dist/commands/completion.js +15 -5
  14. package/dist/commands/completion.js.map +1 -1
  15. package/dist/commands/config.d.ts +7 -2
  16. package/dist/commands/config.d.ts.map +1 -1
  17. package/dist/commands/config.js +37 -15
  18. package/dist/commands/config.js.map +1 -1
  19. package/dist/commands/configCommand.d.ts +5 -1
  20. package/dist/commands/configCommand.d.ts.map +1 -1
  21. package/dist/commands/configCommand.js +30 -3
  22. package/dist/commands/configCommand.js.map +1 -1
  23. package/dist/commands/git.js +3 -3
  24. package/dist/commands/hookCommand.d.ts +14 -0
  25. package/dist/commands/hookCommand.d.ts.map +1 -0
  26. package/dist/commands/hookCommand.js +180 -0
  27. package/dist/commands/hookCommand.js.map +1 -0
  28. package/dist/commands/prCommand.d.ts.map +1 -1
  29. package/dist/commands/prCommand.js +3 -1
  30. package/dist/commands/prCommand.js.map +1 -1
  31. package/dist/commands/tag.d.ts.map +1 -1
  32. package/dist/commands/tag.js +9 -3
  33. package/dist/commands/tag.js.map +1 -1
  34. package/dist/index.js +3 -0
  35. package/dist/index.js.map +1 -1
  36. package/package.json +2 -1
  37. package/src/__tests__/ai.test.ts +486 -7
  38. package/src/__tests__/commitCommand.test.ts +111 -0
  39. package/src/__tests__/config.test.ts +24 -6
  40. package/src/__tests__/git.test.ts +421 -98
  41. package/src/__tests__/preCommit.test.ts +19 -0
  42. package/src/__tests__/tagCommand.test.ts +510 -17
  43. package/src/commands/ai.ts +128 -13
  44. package/src/commands/commit.ts +40 -34
  45. package/src/commands/completion.ts +15 -5
  46. package/src/commands/config.ts +46 -23
  47. package/src/commands/configCommand.ts +41 -8
  48. package/src/commands/git.ts +3 -3
  49. package/src/commands/hookCommand.ts +193 -0
  50. package/src/commands/prCommand.ts +3 -1
  51. package/src/commands/tag.ts +10 -4
  52. package/src/index.ts +3 -0
  53. package/src/schema/config.schema.json +72 -0
@@ -32,14 +32,14 @@ _git_ai_commit() {
32
32
  local cur prev words cword
33
33
  _init_completion || return
34
34
 
35
- local commands="commit config pr tag history completion"
35
+ local commands="commit config pr tag history completion hook"
36
36
 
37
37
  # Global options
38
38
  local global_opts="-v --version -h --help"
39
39
 
40
40
  # Command-specific options
41
41
  local commit_opts="-k --api-key -b --base-url --model -m --message-only -p --push --prompt --no-verify"
42
- local config_opts="-s --show -l --language --auto-push --no-auto-push -k --api-key -b --base-url -m --model --fallback-model --reasoning-effort --mode"
42
+ local config_opts="-s --show -l --language --auto-push --no-auto-push -k --api-key -b --base-url -m --model --fallback-model --reasoning-effort --mode --co-author --no-co-author"
43
43
  local pr_opts="--base --compare -k --api-key -b --base-url --model"
44
44
  local tag_opts="-k --api-key --base-url -m --model --message -t --base-tag --prompt"
45
45
  local history_opts="-l --limit --json --clear"
@@ -70,10 +70,10 @@ _git_ai_commit() {
70
70
  return
71
71
  ;;
72
72
  --mode)
73
- COMPREPLY=( \$(compgen -W "custom openai" -- "\${cur}") )
73
+ COMPREPLY=( \$(compgen -W "custom openai gemini" -- "\${cur}") )
74
74
  return
75
75
  ;;
76
- -k|--api-key|-b|--base-url|-m|--model)
76
+ -k|--api-key|-b|--base-url|-m|--model|--co-author)
77
77
  return
78
78
  ;;
79
79
  esac
@@ -118,6 +118,9 @@ _git_ai_commit() {
118
118
  completion)
119
119
  COMPREPLY=( \$(compgen -W "bash zsh" -- "\${cur}") )
120
120
  ;;
121
+ hook)
122
+ COMPREPLY=( \$(compgen -W "install uninstall status" -- "\${cur}") )
123
+ ;;
121
124
  esac
122
125
  }
123
126
 
@@ -155,6 +158,7 @@ _git-ai-commit() {
155
158
  'tag:Create an annotated git tag with AI-generated notes'
156
159
  'history:Manage git-ai-commit command history'
157
160
  'completion:Generate shell completion scripts'
161
+ 'hook:Manage prepare-commit-msg git hook'
158
162
  )
159
163
  _describe -t commands 'git-ai-commit commands' commands
160
164
  ;;
@@ -188,7 +192,9 @@ _git-ai-commit() {
188
192
  '--base-url[Persist API base URL]:url:' \\
189
193
  '-m[Persist default AI model]:model:' \\
190
194
  '--model[Persist default AI model]:model:' \\
191
- '--mode[Persist AI mode]:mode:(custom openai)'
195
+ '--mode[Persist AI mode]:mode:(custom openai gemini)' \\
196
+ '--co-author[Set Co-authored-by trailer for commits]:author:' \\
197
+ '--no-co-author[Remove Co-authored-by trailer]'
192
198
  ;;
193
199
  pr)
194
200
  _arguments \\
@@ -234,6 +240,10 @@ _git-ai-commit() {
234
240
  _arguments \\
235
241
  '1:shell:(bash zsh)'
236
242
  ;;
243
+ hook)
244
+ _arguments \\
245
+ '1:action:(install uninstall status)'
246
+ ;;
237
247
  esac
238
248
  ;;
239
249
  esac
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGV,CAAC;IACA,CAAC;IAEO,qBAAqB;QAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiHV,CAAC;IACA,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAtPD,8CAsPC"}
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: 'custom' | 'openai';
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?: 'custom' | 'openai';
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,QAAQ,GAAG,QAAQ,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB;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,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IASvC,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA0B/B,MAAM,CAAC,SAAS,IAAI,iBAAiB;IAyBrC,MAAM,CAAC,YAAY,IAAI,iBAAiB;WAI3B,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C/D,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAS5E"}
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"}
@@ -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
- return typeof parsed === 'object' && parsed !== null ? parsed : {};
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
- return normalized === 'openai' ? 'openai' : 'custom';
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
- const isOpenAI = resolvedMode === 'openai';
67
- const apiKey = isOpenAI
68
- ? process.env.OPENAI_API_KEY || process.env.AI_API_KEY
69
- : process.env.AI_API_KEY || process.env.OPENAI_API_KEY;
70
- const baseURL = isOpenAI
71
- ? process.env.OPENAI_BASE_URL || process.env.AI_BASE_URL
72
- : process.env.AI_BASE_URL || process.env.OPENAI_BASE_URL;
73
- const model = isOpenAI
74
- ? process.env.OPENAI_MODEL || process.env.AI_MODEL || DEFAULT_MODEL
75
- : process.env.AI_MODEL || process.env.OPENAI_MODEL || DEFAULT_MODEL;
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: model || DEFAULT_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":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -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?: 'custom' | 'openai';
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;AAGpC,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,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAU;;IAkBzB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,mBAAmB;YASb,YAAY;IA8F1B,UAAU,IAAI,OAAO;CAGtB"}
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 either "custom" or "openai".');
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":"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"}
1
+ {"version":3,"file":"configCommand.js","sourceRoot":"","sources":["../../src/commands/configCommand.ts"],"names":[],"mappings":"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"}
@@ -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 = 50000;
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 = 400;
13
- const MAX_NEW_FILE_LINES = 200;
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;IAiF/B,UAAU,IAAI,OAAO;CAGtB"}
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) {