@dongowu/git-ai-cli 1.0.21 → 2.0.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.
Files changed (82) hide show
  1. package/README.md +200 -157
  2. package/bin/git-ai.cjs +57 -0
  3. package/install.cjs +50 -0
  4. package/package.json +27 -28
  5. package/.claude/settings.local.json +0 -17
  6. package/CHANGELOG.md +0 -46
  7. package/README_EN.md +0 -264
  8. package/dist/cli.d.ts +0 -3
  9. package/dist/cli.d.ts.map +0 -1
  10. package/dist/cli.js +0 -17
  11. package/dist/cli.js.map +0 -1
  12. package/dist/cli_main.d.ts +0 -2
  13. package/dist/cli_main.d.ts.map +0 -1
  14. package/dist/cli_main.js +0 -255
  15. package/dist/cli_main.js.map +0 -1
  16. package/dist/commands/branch.d.ts +0 -11
  17. package/dist/commands/branch.d.ts.map +0 -1
  18. package/dist/commands/branch.js +0 -279
  19. package/dist/commands/branch.js.map +0 -1
  20. package/dist/commands/commit.d.ts +0 -9
  21. package/dist/commands/commit.d.ts.map +0 -1
  22. package/dist/commands/commit.js +0 -326
  23. package/dist/commands/commit.js.map +0 -1
  24. package/dist/commands/config.d.ts +0 -2
  25. package/dist/commands/config.d.ts.map +0 -1
  26. package/dist/commands/config.js +0 -164
  27. package/dist/commands/config.js.map +0 -1
  28. package/dist/commands/config_manage.d.ts +0 -14
  29. package/dist/commands/config_manage.d.ts.map +0 -1
  30. package/dist/commands/config_manage.js +0 -394
  31. package/dist/commands/config_manage.js.map +0 -1
  32. package/dist/commands/hook.d.ts +0 -5
  33. package/dist/commands/hook.d.ts.map +0 -1
  34. package/dist/commands/hook.js +0 -528
  35. package/dist/commands/hook.js.map +0 -1
  36. package/dist/commands/msg.d.ts +0 -20
  37. package/dist/commands/msg.d.ts.map +0 -1
  38. package/dist/commands/msg.js +0 -148
  39. package/dist/commands/msg.js.map +0 -1
  40. package/dist/commands/pr.d.ts +0 -8
  41. package/dist/commands/pr.d.ts.map +0 -1
  42. package/dist/commands/pr.js +0 -96
  43. package/dist/commands/pr.js.map +0 -1
  44. package/dist/commands/release.d.ts +0 -8
  45. package/dist/commands/release.d.ts.map +0 -1
  46. package/dist/commands/release.js +0 -95
  47. package/dist/commands/release.js.map +0 -1
  48. package/dist/commands/report.d.ts +0 -9
  49. package/dist/commands/report.d.ts.map +0 -1
  50. package/dist/commands/report.js +0 -162
  51. package/dist/commands/report.js.map +0 -1
  52. package/dist/types.d.ts +0 -46
  53. package/dist/types.d.ts.map +0 -1
  54. package/dist/types.js +0 -86
  55. package/dist/types.js.map +0 -1
  56. package/dist/utils/agent.d.ts +0 -5
  57. package/dist/utils/agent.d.ts.map +0 -1
  58. package/dist/utils/agent.js +0 -308
  59. package/dist/utils/agent.js.map +0 -1
  60. package/dist/utils/agent_lite.d.ts +0 -5
  61. package/dist/utils/agent_lite.d.ts.map +0 -1
  62. package/dist/utils/agent_lite.js +0 -263
  63. package/dist/utils/agent_lite.js.map +0 -1
  64. package/dist/utils/ai.d.ts +0 -43
  65. package/dist/utils/ai.d.ts.map +0 -1
  66. package/dist/utils/ai.js +0 -1103
  67. package/dist/utils/ai.js.map +0 -1
  68. package/dist/utils/config.d.ts +0 -11
  69. package/dist/utils/config.d.ts.map +0 -1
  70. package/dist/utils/config.js +0 -239
  71. package/dist/utils/config.js.map +0 -1
  72. package/dist/utils/git.d.ts +0 -42
  73. package/dist/utils/git.d.ts.map +0 -1
  74. package/dist/utils/git.js +0 -456
  75. package/dist/utils/git.js.map +0 -1
  76. package/dist/utils/update.d.ts +0 -4
  77. package/dist/utils/update.d.ts.map +0 -1
  78. package/dist/utils/update.js +0 -122
  79. package/dist/utils/update.js.map +0 -1
  80. package/release_notes.md +0 -9
  81. package/scripts/release.sh +0 -34
  82. package/test_agent_feature.ts +0 -1
@@ -1,263 +0,0 @@
1
- import ora from 'ora';
2
- import { execa } from 'execa';
3
- import { getFileDiff, isBlacklisted } from './git.js';
4
- const AGENT_LITE_SYSTEM_PROMPT = `You are an expert at writing Git commit messages following the Conventional Commits specification.
5
-
6
- You are given:
7
- - the current branch name (may hint scope/type)
8
- - a summary of changed files
9
- - diffs for the most important changed files
10
- - optional impact analysis from local code search (git grep)
11
-
12
- Goal: produce a high-quality commit message that reflects the intent of the change.
13
-
14
- Output format:
15
- <type>(<scope>): <subject>
16
-
17
- Rules:
18
- 1) type MUST be one of: feat, fix, docs, style, refactor, perf, test, chore, build, ci
19
- 2) subject <= 50 characters, imperative mood, no trailing period
20
- 3) If changes are complex or there is risk, add a blank line and a concise body.
21
- 4) Do NOT output markdown code blocks. Output raw text only.`;
22
- const MAX_PRIORITY_FILES = 5;
23
- const MAX_DIFF_CHARS_PER_FILE = 6000;
24
- const MAX_OTHER_FILES_LIST = 12;
25
- const MAX_SYMBOLS_TO_SEARCH = 3;
26
- const MAX_GREP_LINES = 80;
27
- const MAX_GREP_CHARS = 4000;
28
- function truncateText(text, maxChars, suffix) {
29
- if (text.length <= maxChars)
30
- return text;
31
- return text.slice(0, maxChars) + suffix;
32
- }
33
- function analyzeFileImportance(stats) {
34
- const sorted = [...stats].sort((a, b) => {
35
- const scoreA = a.insertions + a.deletions;
36
- const scoreB = b.insertions + b.deletions;
37
- return scoreB - scoreA;
38
- });
39
- const priority = [];
40
- let totalLines = 0;
41
- for (const stat of sorted)
42
- totalLines += stat.insertions + stat.deletions;
43
- let accumulated = 0;
44
- for (const stat of sorted) {
45
- if (priority.length >= MAX_PRIORITY_FILES)
46
- break;
47
- const score = stat.insertions + stat.deletions;
48
- accumulated += score;
49
- // Keep ~80% of change volume, capped by MAX_PRIORITY_FILES
50
- if (accumulated <= totalLines * 0.8 || priority.length === 0) {
51
- priority.push(stat);
52
- }
53
- }
54
- return { priority, others: sorted.filter((s) => !priority.includes(s)) };
55
- }
56
- function extractScopeFromBranch(branchName) {
57
- if (!branchName)
58
- return null;
59
- const patterns = [
60
- /^(?:feature|bugfix|hotfix|release|dev)\/([a-zA-Z0-9_-]+)/,
61
- /^(?:feat|fix|chore|docs)\/([a-zA-Z0-9_-]+)/,
62
- /^[A-Z]+-\d+/,
63
- ];
64
- for (const pattern of patterns) {
65
- const match = branchName.match(pattern);
66
- if (match) {
67
- return match[1].toLowerCase().replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
68
- }
69
- }
70
- return null;
71
- }
72
- function getBranchWarning(branchName) {
73
- if (/^hotfix\//.test(branchName)) {
74
- return '\nWARNING: This is a HOTFIX branch. Review carefully before committing.';
75
- }
76
- if (/^release\//.test(branchName)) {
77
- return '\nWARNING: This is a RELEASE branch. Review carefully before committing.';
78
- }
79
- return '';
80
- }
81
- function extractCandidateSymbols(diff) {
82
- const stop = new Set([
83
- 'data',
84
- 'params',
85
- 'param',
86
- 'result',
87
- 'value',
88
- 'values',
89
- 'config',
90
- 'options',
91
- 'option',
92
- 'index',
93
- 'main',
94
- 'test',
95
- ]);
96
- const byName = new Map();
97
- const lines = diff.split('\n');
98
- const matchers = [
99
- { re: /\bexport\s+(?:default\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/g, weight: 5 },
100
- { re: /\bexport\s+(?:const|let|var)\s+([A-Za-z_$][\w$]*)/g, weight: 4 },
101
- { re: /\bexport\s+class\s+([A-Za-z_$][\w$]*)/g, weight: 4 },
102
- { re: /\binterface\s+([A-Za-z_$][\w$]*)/g, weight: 3 },
103
- { re: /\btype\s+([A-Za-z_$][\w$]*)\s*=/g, weight: 3 },
104
- { re: /\benum\s+([A-Za-z_$][\w$]*)/g, weight: 3 },
105
- { re: /\bclass\s+([A-Za-z_$][\w$]*)/g, weight: 2 },
106
- { re: /\bfunction\s+([A-Za-z_$][\w$]*)\s*\(/g, weight: 2 },
107
- { re: /\bdef\s+([A-Za-z_][\w]*)\s*\(/g, weight: 2 },
108
- ];
109
- for (const rawLine of lines) {
110
- if (!rawLine)
111
- continue;
112
- const prefix = rawLine[0];
113
- if (prefix !== '+' && prefix !== '-')
114
- continue;
115
- if (rawLine.startsWith('+++') || rawLine.startsWith('---'))
116
- continue;
117
- const line = rawLine.slice(1);
118
- const isAdded = prefix === '+';
119
- const isRemoved = prefix === '-';
120
- for (const { re, weight } of matchers) {
121
- // Reset lastIndex for global regex reuse per line.
122
- re.lastIndex = 0;
123
- let m;
124
- // eslint-disable-next-line no-cond-assign
125
- while ((m = re.exec(line))) {
126
- const name = m[1];
127
- if (!name || name.length < 4)
128
- continue;
129
- if (stop.has(name.toLowerCase()))
130
- continue;
131
- const existing = byName.get(name);
132
- const delta = weight + (isRemoved ? 2 : 0);
133
- if (!existing) {
134
- byName.set(name, {
135
- name,
136
- score: delta,
137
- seenAdded: isAdded,
138
- seenRemoved: isRemoved,
139
- });
140
- }
141
- else {
142
- existing.score = Math.max(existing.score, existing.score + delta);
143
- existing.seenAdded = existing.seenAdded || isAdded;
144
- existing.seenRemoved = existing.seenRemoved || isRemoved;
145
- }
146
- }
147
- }
148
- }
149
- return [...byName.values()].sort((a, b) => b.score - a.score);
150
- }
151
- async function grepWord(word) {
152
- try {
153
- const { stdout } = await execa('git', ['grep', '-n', '-w', '--', word]);
154
- if (!stdout)
155
- return { total: 0, files: [], sample: 'No matches found.', truncated: false };
156
- const lines = stdout.split('\n').filter(Boolean);
157
- const total = lines.length;
158
- const files = [...new Set(lines.map((l) => l.split(':')[0]).filter(Boolean))];
159
- let outLines = lines;
160
- let truncated = false;
161
- if (outLines.length > MAX_GREP_LINES) {
162
- outLines = outLines.slice(0, MAX_GREP_LINES);
163
- truncated = true;
164
- }
165
- let sample = outLines.join('\n');
166
- if (sample.length > MAX_GREP_CHARS) {
167
- sample = sample.slice(0, MAX_GREP_CHARS) + '\n...[Search output truncated]';
168
- truncated = true;
169
- }
170
- if (truncated) {
171
- sample += `\n...[${Math.max(total - outLines.length, 0)} more matches]`;
172
- }
173
- return { total, files, sample, truncated };
174
- }
175
- catch {
176
- return { total: 0, files: [], sample: 'No matches found.', truncated: false };
177
- }
178
- }
179
- function stripCodeFences(text) {
180
- return text.replace(/^```[a-z]*\n/i, '').replace(/```$/, '').trim();
181
- }
182
- export async function runAgentLite(client, config, stats, branchName, quiet = false, modelOverride) {
183
- const { priority, others } = analyzeFileImportance(stats);
184
- const spinner = !quiet ? ora('Agent (lite) is pre-analyzing important files...').start() : null;
185
- const diffCache = new Map();
186
- const changedFiles = stats.map((s) => s.file);
187
- await Promise.all(priority.map(async (stat) => {
188
- if (isBlacklisted(stat.file))
189
- return;
190
- try {
191
- const diff = await getFileDiff(stat.file);
192
- if (diff) {
193
- diffCache.set(stat.file, truncateText(diff, MAX_DIFF_CHARS_PER_FILE, '\n...[Diff truncated]'));
194
- }
195
- }
196
- catch {
197
- // ignore
198
- }
199
- }));
200
- if (spinner)
201
- spinner.text = 'Agent (lite) is running impact analysis...';
202
- const symbolMetas = extractCandidateSymbols([...diffCache.values()].join('\n\n'));
203
- const symbolsToSearch = symbolMetas.slice(0, MAX_SYMBOLS_TO_SEARCH);
204
- const grepResults = [];
205
- const riskNotes = [];
206
- for (const meta of symbolsToSearch) {
207
- const result = await grepWord(meta.name);
208
- const externalFiles = result.files.filter((f) => !changedFiles.includes(f));
209
- const looksRemoved = meta.seenRemoved && !meta.seenAdded;
210
- const risk = looksRemoved && externalFiles.length > 0;
211
- grepResults.push(`- ${meta.name}: ${result.total} match(es), files: ${result.files.slice(0, 8).join(', ')}${result.files.length > 8 ? ` (+${result.files.length - 8} more)` : ''}`);
212
- if (risk) {
213
- riskNotes.push(`- Potential breaking change: '${meta.name}' looks removed/changed but is referenced in: ${externalFiles.slice(0, 8).join(', ')}${externalFiles.length > 8 ? ` (+${externalFiles.length - 8} more)` : ''}`);
214
- }
215
- }
216
- if (spinner)
217
- spinner.text = 'Agent (lite) is generating commit message...';
218
- const scope = extractScopeFromBranch(branchName || '');
219
- const warning = getBranchWarning(branchName || '');
220
- const priorityDiffs = [...diffCache.entries()]
221
- .map(([file, diff]) => `=== ${file} ===\n${diff}`)
222
- .join('\n\n');
223
- const otherFiles = others
224
- .filter((s) => !isBlacklisted(s.file))
225
- .map((s) => s.file)
226
- .slice(0, MAX_OTHER_FILES_LIST);
227
- const userContent = `Current Branch: ${branchName || 'unknown'}${warning}
228
- ${scope ? `Inferred scope from branch: ${scope}` : ''}
229
-
230
- Files Summary (top changed):
231
- ${stats
232
- .slice(0, 15)
233
- .map((s) => `${s.file} (+${s.insertions}, -${s.deletions})`)
234
- .join('\n')}${stats.length > 15 ? `\n... and ${stats.length - 15} more files` : ''}
235
-
236
- === Priority File Diffs ===
237
- ${priorityDiffs || '(No diffs loaded)'}
238
-
239
- ${otherFiles.length ? `=== Other Changed Files (not loaded) ===\n${otherFiles.join('\n')}` : ''}
240
-
241
- ${grepResults.length ? `=== Impact Analysis (git grep) ===\n${grepResults.join('\n')}` : ''}
242
-
243
- ${riskNotes.length ? `=== Risks ===\n${riskNotes.join('\n')}` : ''}
244
- `;
245
- const response = await client.chat.completions.create({
246
- model: modelOverride || config.model,
247
- messages: [
248
- { role: 'system', content: AGENT_LITE_SYSTEM_PROMPT },
249
- { role: 'user', content: userContent },
250
- ],
251
- temperature: 0.2,
252
- });
253
- const content = response.choices[0]?.message?.content?.trim();
254
- if (!content) {
255
- if (spinner)
256
- spinner.fail('Agent (lite) failed: empty response.');
257
- throw new Error('Agent (lite) failed: empty response.');
258
- }
259
- if (spinner)
260
- spinner.stop();
261
- return stripCodeFences(content);
262
- }
263
- //# sourceMappingURL=agent_lite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent_lite.js","sourceRoot":"","sources":["../../src/utils/agent_lite.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import OpenAI from 'openai';
2
- import type { AIConfig } from '../types.js';
3
- export declare function validateCommitRules(raw: unknown): {
4
- errors: string[];
5
- warnings: string[];
6
- };
7
- export declare function validateCommitMessage(message: string, config: AIConfig, context?: {
8
- branchName?: string;
9
- stagedFiles?: string[];
10
- }): {
11
- errors: string[];
12
- warnings: string[];
13
- };
14
- export declare function createAIClient(config: AIConfig): OpenAI;
15
- export interface CommitMessageGenerationInput {
16
- diff?: string;
17
- diffLoader?: () => Promise<{
18
- diff: string;
19
- truncated: boolean;
20
- ignoredFiles: string[];
21
- }>;
22
- stagedFiles?: string[];
23
- ignoredFiles?: string[];
24
- truncated?: boolean;
25
- branchName?: string;
26
- recentCommits?: string[];
27
- forceAgent?: boolean;
28
- quiet?: boolean;
29
- }
30
- export declare function generateCommitMessage(client: OpenAI, input: CommitMessageGenerationInput, config: AIConfig, numChoices?: number): Promise<string[]>;
31
- export declare function generatePullRequestDescription(client: OpenAI, input: {
32
- commits: string[];
33
- diffStat?: string;
34
- base: string;
35
- head: string;
36
- }, config: AIConfig): Promise<string>;
37
- export declare function generateReleaseNotes(client: OpenAI, input: {
38
- commits: string[];
39
- from: string;
40
- to: string;
41
- }, config: AIConfig): Promise<string>;
42
- export declare function generateWeeklyReport(client: OpenAI, commits: string[], config: AIConfig): Promise<string>;
43
- //# sourceMappingURL=ai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/utils/ai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAsLzD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA+F1F;AAgTD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACxD;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAgD1C;AA8LD,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAOvD;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACzF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,4BAA4B,EACnC,MAAM,EAAE,QAAQ,EAChB,UAAU,SAAI,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA8PnB;AAuFD,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3E,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACtD,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,CAmCjB"}