@mehmetsagir/git-ai 0.0.8 → 0.0.18

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 (66) hide show
  1. package/README.md +91 -319
  2. package/dist/commit.d.ts +1 -4
  3. package/dist/commit.d.ts.map +1 -1
  4. package/dist/commit.js +214 -208
  5. package/dist/commit.js.map +1 -1
  6. package/dist/config.d.ts +0 -39
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +3 -95
  9. package/dist/config.js.map +1 -1
  10. package/dist/git.d.ts +19 -51
  11. package/dist/git.d.ts.map +1 -1
  12. package/dist/git.js +137 -269
  13. package/dist/git.js.map +1 -1
  14. package/dist/index.js +54 -109
  15. package/dist/index.js.map +1 -1
  16. package/dist/openai.d.ts +2 -21
  17. package/dist/openai.d.ts.map +1 -1
  18. package/dist/openai.js +17 -96
  19. package/dist/openai.js.map +1 -1
  20. package/dist/prompts.d.ts +2 -16
  21. package/dist/prompts.d.ts.map +1 -1
  22. package/dist/prompts.js +32 -146
  23. package/dist/prompts.js.map +1 -1
  24. package/dist/reset.d.ts +0 -3
  25. package/dist/reset.d.ts.map +1 -1
  26. package/dist/reset.js +10 -20
  27. package/dist/reset.js.map +1 -1
  28. package/dist/setup.d.ts +0 -3
  29. package/dist/setup.d.ts.map +1 -1
  30. package/dist/setup.js +28 -156
  31. package/dist/setup.js.map +1 -1
  32. package/dist/stash.d.ts +2 -0
  33. package/dist/stash.d.ts.map +1 -0
  34. package/dist/stash.js +818 -0
  35. package/dist/stash.js.map +1 -0
  36. package/dist/types.d.ts +9 -23
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/utils/hunk-parser.d.ts +22 -0
  39. package/dist/utils/hunk-parser.d.ts.map +1 -0
  40. package/dist/utils/hunk-parser.js +155 -0
  41. package/dist/utils/hunk-parser.js.map +1 -0
  42. package/package.json +12 -8
  43. package/dist/add.d.ts +0 -5
  44. package/dist/add.d.ts.map +0 -1
  45. package/dist/add.js +0 -98
  46. package/dist/add.js.map +0 -1
  47. package/dist/commit-processor.d.ts +0 -6
  48. package/dist/commit-processor.d.ts.map +0 -1
  49. package/dist/commit-processor.js +0 -226
  50. package/dist/commit-processor.js.map +0 -1
  51. package/dist/update.d.ts +0 -9
  52. package/dist/update.d.ts.map +0 -1
  53. package/dist/update.js +0 -69
  54. package/dist/update.js.map +0 -1
  55. package/dist/user-management.d.ts +0 -10
  56. package/dist/user-management.d.ts.map +0 -1
  57. package/dist/user-management.js +0 -175
  58. package/dist/user-management.js.map +0 -1
  59. package/dist/users.d.ts +0 -9
  60. package/dist/users.d.ts.map +0 -1
  61. package/dist/users.js +0 -129
  62. package/dist/users.js.map +0 -1
  63. package/dist/utils/validation.d.ts +0 -24
  64. package/dist/utils/validation.d.ts.map +0 -1
  65. package/dist/utils/validation.js +0 -81
  66. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stash.js","sourceRoot":"","sources":["../src/stash.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,41 +1,27 @@
1
- export interface GitUserProfile {
2
- id: string;
3
- name: string;
4
- email: string;
5
- scope: "global" | "local" | "manual" | "current";
6
- label: string;
7
- shortcut?: string | null;
1
+ export interface FileInfo {
2
+ file: string;
3
+ status: "new" | "modified" | "deleted" | "renamed";
4
+ isBinary: boolean;
8
5
  }
9
- export interface Config {
10
- openaiKey?: string;
11
- gitUsers?: GitUserProfile[];
12
- defaultGitUser?: string | null;
13
- }
14
- export interface DiffData {
15
- staged: string;
16
- unstaged: string;
17
- all: string;
6
+ export interface HunkRef {
7
+ file: string;
8
+ hunkIndex: number;
18
9
  }
19
10
  export interface CommitGroup {
20
11
  number: number;
21
12
  description: string;
22
- files: string[];
13
+ hunks: HunkRef[];
23
14
  commitMessage: string;
24
15
  commitBody?: string;
25
16
  }
26
17
  export interface AnalysisResult {
27
18
  groups: CommitGroup[];
28
- summary?: string;
29
19
  }
30
20
  export interface CommitResult {
31
21
  group: number;
32
22
  message: string;
33
- files: number;
23
+ hunks: HunkRef[];
34
24
  success: boolean;
35
25
  error?: string;
36
26
  }
37
- export interface GitUserInfo {
38
- name: string | null;
39
- email: string | null;
40
- }
41
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Parse git diff into hunks for analysis
3
+ * This module ONLY parses - it does NOT modify any files
4
+ */
5
+ export interface Hunk {
6
+ file: string;
7
+ index: number;
8
+ header: string;
9
+ content: string;
10
+ summary: string;
11
+ }
12
+ export interface FileDiff {
13
+ file: string;
14
+ isNew: boolean;
15
+ isDeleted: boolean;
16
+ isBinary: boolean;
17
+ hunks: Hunk[];
18
+ }
19
+ export declare function parseDiff(diffOutput: string): FileDiff[];
20
+ export declare function formatForAI(files: FileDiff[]): string;
21
+ export declare function getStats(files: FileDiff[]): string;
22
+ //# sourceMappingURL=hunk-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunk-parser.d.ts","sourceRoot":"","sources":["../../src/utils/hunk-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAaD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE,CAkGxD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAuBrD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBlD"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * Parse git diff into hunks for analysis
4
+ * This module ONLY parses - it does NOT modify any files
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseDiff = parseDiff;
8
+ exports.formatForAI = formatForAI;
9
+ exports.getStats = getStats;
10
+ function isValidFilePath(path) {
11
+ if (!path || path.length === 0)
12
+ return false;
13
+ if (path.length > 500)
14
+ return false;
15
+ if (path.includes('\n'))
16
+ return false;
17
+ if (path.includes('${'))
18
+ return false;
19
+ if (path.includes('`'))
20
+ return false;
21
+ if (path.startsWith(' ') || path.endsWith(' '))
22
+ return false;
23
+ if (/[<>"|?*]/.test(path))
24
+ return false;
25
+ return true;
26
+ }
27
+ function parseDiff(diffOutput) {
28
+ const files = [];
29
+ const fileParts = ('\n' + diffOutput).split(/\n(?=diff --git a\/)/);
30
+ for (const part of fileParts) {
31
+ if (!part.trim())
32
+ continue;
33
+ const fileMatch = part.match(/^diff --git a\/(.+) b\/(.+)$/m);
34
+ if (!fileMatch)
35
+ continue;
36
+ const file = fileMatch[2].trim();
37
+ if (!isValidFilePath(file)) {
38
+ continue;
39
+ }
40
+ const headerEnd = part.indexOf('@@');
41
+ const header = headerEnd > 0 ? part.substring(0, headerEnd) : part;
42
+ const isNew = header.includes('new file mode') || header.includes('--- /dev/null');
43
+ const isDeleted = header.includes('deleted file mode') || header.includes('+++ /dev/null');
44
+ const isBinary = header.includes('Binary file') || header.includes('GIT binary patch');
45
+ const hunks = [];
46
+ if (!isBinary) {
47
+ const hunkRegex = /@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@([^\n]*)/g;
48
+ let match;
49
+ let hunkIndex = 0;
50
+ const matches = [];
51
+ while ((match = hunkRegex.exec(part)) !== null) {
52
+ matches.push({
53
+ start: match.index,
54
+ header: match[0],
55
+ context: match[5]?.trim() || ''
56
+ });
57
+ }
58
+ for (let i = 0; i < matches.length; i++) {
59
+ const current = matches[i];
60
+ const nextStart = i < matches.length - 1 ? matches[i + 1].start : part.length;
61
+ const hunkContent = part.substring(current.start, nextStart).trim();
62
+ const lines = hunkContent.split('\n').slice(1);
63
+ const additions = lines.filter(l => l.startsWith('+')).length;
64
+ const deletions = lines.filter(l => l.startsWith('-')).length;
65
+ let summary = '';
66
+ if (current.context) {
67
+ summary = current.context;
68
+ }
69
+ else if (additions > 0 && deletions > 0) {
70
+ summary = `Modified ${additions} lines, removed ${deletions} lines`;
71
+ }
72
+ else if (additions > 0) {
73
+ summary = `Added ${additions} lines`;
74
+ }
75
+ else if (deletions > 0) {
76
+ summary = `Removed ${deletions} lines`;
77
+ }
78
+ hunks.push({
79
+ file,
80
+ index: hunkIndex++,
81
+ header: current.header,
82
+ content: hunkContent,
83
+ summary
84
+ });
85
+ }
86
+ }
87
+ if (hunks.length === 0) {
88
+ hunks.push({
89
+ file,
90
+ index: 0,
91
+ header: isBinary ? '[Binary]' : '[File]',
92
+ content: '',
93
+ summary: isBinary
94
+ ? 'Binary file'
95
+ : isNew
96
+ ? 'New file'
97
+ : isDeleted
98
+ ? 'Deleted file'
99
+ : 'File change'
100
+ });
101
+ }
102
+ files.push({
103
+ file,
104
+ isNew,
105
+ isDeleted,
106
+ isBinary,
107
+ hunks
108
+ });
109
+ }
110
+ return files;
111
+ }
112
+ function formatForAI(files) {
113
+ let output = '';
114
+ for (const file of files) {
115
+ output += `\n### FILE: ${file.file}`;
116
+ if (file.isNew)
117
+ output += ' [NEW]';
118
+ if (file.isDeleted)
119
+ output += ' [DELETED]';
120
+ if (file.isBinary)
121
+ output += ' [BINARY]';
122
+ output += '\n';
123
+ for (const hunk of file.hunks) {
124
+ output += `\n--- Hunk ${hunk.index} ---\n`;
125
+ if (hunk.summary) {
126
+ output += `Summary: ${hunk.summary}\n`;
127
+ }
128
+ if (!file.isBinary && hunk.content) {
129
+ output += hunk.content + '\n';
130
+ }
131
+ }
132
+ output += '\n';
133
+ }
134
+ return output;
135
+ }
136
+ function getStats(files) {
137
+ const totalFiles = files.length;
138
+ const totalHunks = files.reduce((sum, f) => sum + f.hunks.length, 0);
139
+ const newFiles = files.filter(f => f.isNew).length;
140
+ const deletedFiles = files.filter(f => f.isDeleted).length;
141
+ const binaryFiles = files.filter(f => f.isBinary).length;
142
+ let stats = `${totalFiles} file(s), ${totalHunks} change(s)`;
143
+ const details = [];
144
+ if (newFiles > 0)
145
+ details.push(`${newFiles} new`);
146
+ if (deletedFiles > 0)
147
+ details.push(`${deletedFiles} deleted`);
148
+ if (binaryFiles > 0)
149
+ details.push(`${binaryFiles} binary`);
150
+ if (details.length > 0) {
151
+ stats += ` (${details.join(', ')})`;
152
+ }
153
+ return stats;
154
+ }
155
+ //# sourceMappingURL=hunk-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunk-parser.js","sourceRoot":"","sources":["../../src/utils/hunk-parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mehmetsagir/git-ai",
3
- "version": "0.0.8",
3
+ "version": "0.0.18",
4
4
  "description": "AI-powered git commit tool that analyzes diffs and creates conventional commit messages",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -12,10 +12,7 @@
12
12
  },
13
13
  "files": [
14
14
  "dist",
15
- "bin",
16
- "README.md",
17
- "package.json",
18
- "package-lock.json"
15
+ "bin"
19
16
  ],
20
17
  "keywords": [
21
18
  "git",
@@ -33,8 +30,7 @@
33
30
  "inquirer": "^8.2.6",
34
31
  "openai": "^4.20.1",
35
32
  "ora": "^5.4.1",
36
- "simple-git": "^3.20.0",
37
- "update-notifier": "^7.0.0"
33
+ "simple-git": "^3.20.0"
38
34
  },
39
35
  "devDependencies": {
40
36
  "@types/inquirer": "^8.2.10",
@@ -43,5 +39,13 @@
43
39
  },
44
40
  "engines": {
45
41
  "node": ">=14.0.0"
46
- }
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/mehmetsagir/git-ai.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/mehmetsagir/git-ai/issues"
49
+ },
50
+ "homepage": "https://github.com/mehmetsagir/git-ai#readme"
47
51
  }
package/dist/add.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Add a new git user
3
- */
4
- export declare function addUser(): Promise<void>;
5
- //# sourceMappingURL=add.d.ts.map
package/dist/add.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA2D7C"}
package/dist/add.js DELETED
@@ -1,98 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.addUser = addUser;
40
- const chalk_1 = __importDefault(require("chalk"));
41
- const inquirer_1 = __importDefault(require("inquirer"));
42
- const config = __importStar(require("./config"));
43
- const userManagement = __importStar(require("./user-management"));
44
- /**
45
- * Add a new git user
46
- */
47
- async function addUser() {
48
- console.log(chalk_1.default.blue.bold('\n➕ Add Git User\n'));
49
- if (!config.configExists()) {
50
- console.log(chalk_1.default.yellow('⚠ Configuration not found. Please run setup first.\n'));
51
- console.log(chalk_1.default.blue('Run: git-ai setup\n'));
52
- return;
53
- }
54
- const existingProfiles = config.getGitUsers();
55
- if (existingProfiles.length > 0) {
56
- console.log(chalk_1.default.blue('Current git user profiles:\n'));
57
- existingProfiles.forEach((profile, index) => {
58
- const shortcutInfo = profile.shortcut
59
- ? chalk_1.default.yellow(` [shortcut: ${profile.shortcut}]`)
60
- : '';
61
- console.log(chalk_1.default.cyan(` ${index + 1}. ${profile.label}${shortcutInfo}`));
62
- });
63
- console.log('\n');
64
- }
65
- console.log(chalk_1.default.blue('💡 Tip: Type "q" and press Enter at any input to cancel.\n'));
66
- await userManagement.addMoreGitUsers(existingProfiles);
67
- const updatedProfiles = config.getGitUsers();
68
- if (updatedProfiles.length > 1) {
69
- const { updateDefault } = await inquirer_1.default.prompt([
70
- {
71
- type: 'confirm',
72
- name: 'updateDefault',
73
- message: 'Would you like to update the default git user?',
74
- default: false
75
- }
76
- ]);
77
- if (updateDefault) {
78
- const { defaultUser } = await inquirer_1.default.prompt([
79
- {
80
- type: 'list',
81
- name: 'defaultUser',
82
- message: 'Select default git user:',
83
- choices: updatedProfiles.map(p => ({
84
- name: p.label,
85
- value: p.id
86
- }))
87
- }
88
- ]);
89
- config.setDefaultGitUser(defaultUser);
90
- const selectedProfile = updatedProfiles.find(p => p.id === defaultUser);
91
- if (selectedProfile) {
92
- console.log(chalk_1.default.green(`✓ Default git user updated: ${selectedProfile.label}\n`));
93
- }
94
- }
95
- }
96
- console.log(chalk_1.default.green('✓ User addition completed!\n'));
97
- }
98
- //# sourceMappingURL=add.js.map
package/dist/add.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { CommitGroup, CommitResult, GitUserInfo } from "./types";
2
- /**
3
- * Process all commit groups
4
- */
5
- export declare function processAllCommitGroups(groups: CommitGroup[], selectedUser: GitUserInfo | null): Promise<CommitResult[]>;
6
- //# sourceMappingURL=commit-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit-processor.d.ts","sourceRoot":"","sources":["../src/commit-processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA4KjE;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EAAE,EACrB,YAAY,EAAE,WAAW,GAAG,IAAI,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAqGzB"}
@@ -1,226 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.processAllCommitGroups = processAllCommitGroups;
40
- const chalk_1 = __importDefault(require("chalk"));
41
- const ora_1 = __importDefault(require("ora"));
42
- const git = __importStar(require("./git"));
43
- const errors_1 = require("./utils/errors");
44
- /**
45
- * Process and commit a single group
46
- */
47
- async function processCommitGroup(group, selectedUser, filesToUse, processedFiles) {
48
- if (filesToUse.length === 0) {
49
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: No files to process, skipping.\n`));
50
- return { success: false, filesProcessed: [] };
51
- }
52
- // Mark files as processed
53
- filesToUse.forEach((file) => processedFiles.add(file));
54
- // Check if files are already staged
55
- const currentlyStaged = await git.getStagedFiles();
56
- const filesAlreadyStaged = filesToUse.filter((file) => currentlyStaged.includes(file));
57
- const filesToStage = filesAlreadyStaged.length === filesToUse.length
58
- ? [] // All files already staged
59
- : filesToUse.filter((file) => !currentlyStaged.includes(file));
60
- // Stage files if needed
61
- if (filesToStage.length > 0) {
62
- const stageSpinner = (0, ora_1.default)(`Group ${group.number}: Staging ${filesToStage.length} file(s)...`).start();
63
- try {
64
- await git.stageFiles(filesToStage);
65
- stageSpinner.succeed(`Group ${group.number}: Files staged`);
66
- }
67
- catch (error) {
68
- stageSpinner.fail(`Group ${group.number}: Error staging files: ${(0, errors_1.getErrorMessage)(error)}`);
69
- return { success: false, filesProcessed: filesToUse };
70
- }
71
- }
72
- else if (filesAlreadyStaged.length > 0) {
73
- }
74
- // Set git user before committing (local scope to not affect global config)
75
- if (selectedUser?.name && selectedUser?.email) {
76
- try {
77
- const currentUser = await git.getGitUserInfo();
78
- const needsChange = currentUser.name !== selectedUser.name ||
79
- currentUser.email !== selectedUser.email;
80
- if (needsChange) {
81
- await git.setGitUser(selectedUser.name, selectedUser.email, "local");
82
- console.log(chalk_1.default.green(`✓ Group ${group.number}: Git user changed to ${selectedUser.name} <${selectedUser.email}>\n`));
83
- }
84
- }
85
- catch (error) {
86
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: Failed to set git user: ${(0, errors_1.getErrorMessage)(error)}\n`));
87
- }
88
- }
89
- const fullMessage = group.commitBody
90
- ? `${group.commitMessage}\n\n${group.commitBody}`
91
- : group.commitMessage;
92
- // Verify only the intended files are staged before committing
93
- const stagedBeforeCommit = await git.getStagedFiles();
94
- const unexpectedStaged = stagedBeforeCommit.filter((file) => !filesToUse.includes(file));
95
- if (unexpectedStaged.length > 0) {
96
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: Fixing staging (unexpected files detected)\n`));
97
- try {
98
- await git.unstageAll();
99
- if (filesToUse.length > 0) {
100
- await git.stageFiles(filesToUse);
101
- }
102
- }
103
- catch (error) {
104
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: Staging fix failed: ${(0, errors_1.getErrorMessage)(error)}\n`));
105
- }
106
- }
107
- // Final check - ensure we have files to commit
108
- const finalStaged = await git.getStagedFiles();
109
- if (finalStaged.length === 0) {
110
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: No files staged, skipping commit.\n`));
111
- return { success: false, filesProcessed: filesToUse };
112
- }
113
- const commitSpinner = (0, ora_1.default)(`Group ${group.number}: Creating commit "${group.commitMessage}"...`).start();
114
- try {
115
- await git.createCommit(fullMessage, selectedUser?.name || null, selectedUser?.email || null);
116
- // Verify the commit was made with the correct user
117
- if (selectedUser) {
118
- const currentUser = await git.getGitUserInfo();
119
- if (currentUser.name !== selectedUser.name ||
120
- currentUser.email !== selectedUser.email) {
121
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: User mismatch (expected: ${selectedUser.name}, got: ${currentUser.name})\n`));
122
- }
123
- }
124
- commitSpinner.succeed(`Group ${group.number}: Committed - ${group.commitMessage}`);
125
- return {
126
- success: true,
127
- filesProcessed: filesToUse,
128
- message: group.commitMessage,
129
- };
130
- }
131
- catch (error) {
132
- const errorMessage = (0, errors_1.getErrorMessage)(error);
133
- commitSpinner.fail(`Group ${group.number}: Commit error - ${errorMessage}`);
134
- return {
135
- success: false,
136
- filesProcessed: filesToUse,
137
- message: group.commitMessage,
138
- error: errorMessage,
139
- };
140
- }
141
- }
142
- /**
143
- * Process all commit groups
144
- */
145
- async function processAllCommitGroups(groups, selectedUser) {
146
- const prepareSpinner = (0, ora_1.default)("Preparing files...").start();
147
- // Check if there are already staged files
148
- const initialStaged = await git.getStagedFiles();
149
- const hasStagedFiles = initialStaged.length > 0;
150
- if (!hasStagedFiles) {
151
- try {
152
- await git.unstageAll();
153
- prepareSpinner.succeed("Ready");
154
- }
155
- catch (error) {
156
- prepareSpinner.fail(`Error: ${(0, errors_1.getErrorMessage)(error)}`);
157
- }
158
- }
159
- else {
160
- prepareSpinner.succeed(`${initialStaged.length} staged file(s) ready`);
161
- }
162
- const commitResults = [];
163
- const processedFiles = new Set();
164
- console.log(chalk_1.default.blue(`\n📦 Creating ${groups.length} commits...\n`));
165
- for (const group of groups) {
166
- // Get current git status - this will exclude already committed files
167
- const currentStaged = await git.getStagedFiles();
168
- const currentChanged = await git.getAllChangedFiles();
169
- // If there are staged files, use them for this commit
170
- // Otherwise, use unstaged files from the group
171
- let filesToUse = [];
172
- if (currentStaged.length > 0 && processedFiles.size === 0) {
173
- // First group and we have staged files - use them
174
- filesToUse = currentStaged;
175
- }
176
- else {
177
- // Get remaining files (exclude already processed ones)
178
- const remainingFiles = currentChanged.filter((file) => !processedFiles.has(file));
179
- // Match group files with remaining files
180
- const groupFiles = group.files
181
- .map((file) => {
182
- const normalizedFile = file.replace(/^\.\//, "").replace(/^\//, "");
183
- return remainingFiles.find((changed) => {
184
- const normalizedChanged = changed
185
- .replace(/^\.\//, "")
186
- .replace(/^\//, "");
187
- return (normalizedChanged === normalizedFile ||
188
- normalizedChanged.endsWith(normalizedFile) ||
189
- normalizedFile.endsWith(normalizedChanged));
190
- });
191
- })
192
- .filter((file) => Boolean(file));
193
- filesToUse =
194
- groupFiles.length > 0 ? groupFiles : remainingFiles.slice(0, 1);
195
- }
196
- if (filesToUse.length === 0) {
197
- console.log(chalk_1.default.yellow(`⚠ Group ${group.number}: No files available, skipping.\n`));
198
- commitResults.push({
199
- group: group.number,
200
- message: group.commitMessage,
201
- files: 0,
202
- success: false,
203
- error: "No files available",
204
- });
205
- continue;
206
- }
207
- const result = await processCommitGroup(group, selectedUser, filesToUse, processedFiles);
208
- commitResults.push({
209
- group: group.number,
210
- message: result.message || group.commitMessage,
211
- files: result.filesProcessed?.length || 0,
212
- success: result.success,
213
- error: result.error,
214
- });
215
- // After each commit, unstage any remaining staged files
216
- // This ensures the next group only stages its own files
217
- try {
218
- await git.unstageAll();
219
- }
220
- catch (error) {
221
- // Continue even if error
222
- }
223
- }
224
- return commitResults;
225
- }
226
- //# sourceMappingURL=commit-processor.js.map