@mehmetsagir/git-ai 0.0.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 (55) hide show
  1. package/README.md +365 -0
  2. package/bin/git-ai +4 -0
  3. package/dist/add.d.ts +5 -0
  4. package/dist/add.d.ts.map +1 -0
  5. package/dist/add.js +98 -0
  6. package/dist/add.js.map +1 -0
  7. package/dist/commit-processor.d.ts +6 -0
  8. package/dist/commit-processor.d.ts.map +1 -0
  9. package/dist/commit-processor.js +138 -0
  10. package/dist/commit-processor.js.map +1 -0
  11. package/dist/commit.d.ts +5 -0
  12. package/dist/commit.d.ts.map +1 -0
  13. package/dist/commit.js +245 -0
  14. package/dist/commit.js.map +1 -0
  15. package/dist/config.d.ts +44 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +185 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/git.d.ts +54 -0
  20. package/dist/git.d.ts.map +1 -0
  21. package/dist/git.js +256 -0
  22. package/dist/git.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +138 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/openai.d.ts +22 -0
  28. package/dist/openai.d.ts.map +1 -0
  29. package/dist/openai.js +137 -0
  30. package/dist/openai.js.map +1 -0
  31. package/dist/prompts.d.ts +17 -0
  32. package/dist/prompts.d.ts.map +1 -0
  33. package/dist/prompts.js +117 -0
  34. package/dist/prompts.js.map +1 -0
  35. package/dist/reset.d.ts +5 -0
  36. package/dist/reset.d.ts.map +1 -0
  37. package/dist/reset.js +77 -0
  38. package/dist/reset.js.map +1 -0
  39. package/dist/setup.d.ts +5 -0
  40. package/dist/setup.d.ts.map +1 -0
  41. package/dist/setup.js +234 -0
  42. package/dist/setup.js.map +1 -0
  43. package/dist/types.d.ts +41 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +3 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/user-management.d.ts +10 -0
  48. package/dist/user-management.d.ts.map +1 -0
  49. package/dist/user-management.js +225 -0
  50. package/dist/user-management.js.map +1 -0
  51. package/dist/users.d.ts +9 -0
  52. package/dist/users.d.ts.map +1 -0
  53. package/dist/users.js +129 -0
  54. package/dist/users.js.map +1 -0
  55. package/package.json +46 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDiffAnalysisSystemPrompt = getDiffAnalysisSystemPrompt;
4
+ exports.getDiffAnalysisUserPrompt = getDiffAnalysisUserPrompt;
5
+ exports.getSingleCommitSystemPrompt = getSingleCommitSystemPrompt;
6
+ exports.getSingleCommitUserPrompt = getSingleCommitUserPrompt;
7
+ /**
8
+ * Get system prompt for diff analysis and grouping
9
+ */
10
+ function getDiffAnalysisSystemPrompt() {
11
+ return `You are a git commit expert. You analyze git diffs, group them logically, and create Conventional Commits standard commit messages for each group.
12
+
13
+ IMPORTANT PRINCIPLES:
14
+ 1. **Atomic Commits**: Each commit should represent ONE logical change
15
+ 2. **Related Files Together**: Functionally related files should be in the same commit
16
+ 3. **Meaningful Messages**: Each commit message should clearly explain what and why
17
+ 4. **Stable State**: Each commit should leave the codebase in a working state
18
+ 5. **Easy Review**: Smaller, focused commits are easier to review and revert
19
+
20
+ Conventional Commits format:
21
+ <type>(<scope>): <subject>
22
+
23
+ <body>
24
+
25
+ <footer>
26
+
27
+ Types:
28
+ - feat: New feature
29
+ - fix: Bug fix
30
+ - refactor: Code refactoring
31
+ - style: Formatting, styling changes
32
+ - docs: Documentation
33
+ - test: Tests
34
+ - chore: Maintenance tasks
35
+
36
+ Create groups based on these criteria:
37
+ - **Feature area** (e.g., authentication, UI components, API endpoints)
38
+ - **Type of change** (new feature, bug fix, refactor, style, documentation)
39
+ - **Related functionality** (files that work together)
40
+ - **Dependencies** (changes that depend on each other should be in the same commit)
41
+
42
+ Each commit group must contain:
43
+ 1. Group number
44
+ 2. Group description (what type of changes)
45
+ 3. File list (full file paths)
46
+ 4. Commit message in Conventional Commits format
47
+ 5. Commit message body (detailed description of changes)
48
+
49
+ IMPORTANT: Each group will be created as a SEPARATE COMMIT. Do not commit all groups at once, each one will be committed separately.
50
+
51
+ Respond in JSON format:
52
+ {
53
+ "groups": [
54
+ {
55
+ "number": 1,
56
+ "description": "Group description (e.g., Authentication bug fix)",
57
+ "files": ["src/auth.ts", "src/auth.test.ts"],
58
+ "commitMessage": "feat(auth): add OAuth2 authentication support",
59
+ "commitBody": "Added OAuth2 authentication support. Implemented token refresh mechanism. Applied security best practices."
60
+ }
61
+ ],
62
+ "summary": "Total X groups, Y file changes"
63
+ }`;
64
+ }
65
+ /**
66
+ * Get user prompt for diff analysis
67
+ */
68
+ function getDiffAnalysisUserPrompt(diff) {
69
+ return `Analyze the following git diff and group it into logical commit groups. Create Conventional Commits format commit messages for each group.
70
+
71
+ \`\`\`
72
+ ${diff}
73
+ \`\`\`
74
+
75
+ Please respond in JSON format.`;
76
+ }
77
+ /**
78
+ * Get system prompt for single commit message generation
79
+ */
80
+ function getSingleCommitSystemPrompt() {
81
+ return `You are a git commit expert. You analyze git diffs and create Conventional Commits standard commit messages.
82
+
83
+ Conventional Commits format:
84
+ <type>(<scope>): <subject>
85
+
86
+ <body>
87
+
88
+ <footer>
89
+
90
+ Types:
91
+ - feat: New feature
92
+ - fix: Bug fix
93
+ - refactor: Code refactoring
94
+ - style: Formatting, styling changes
95
+ - docs: Documentation
96
+ - test: Tests
97
+ - chore: Maintenance tasks
98
+
99
+ Commit message should be short and descriptive. Body should contain details of the changes.`;
100
+ }
101
+ /**
102
+ * Get user prompt for single commit message
103
+ */
104
+ function getSingleCommitUserPrompt(diff) {
105
+ return `Analyze the following git diff and create a commit message in Conventional Commits format.
106
+
107
+ \`\`\`
108
+ ${diff}
109
+ \`\`\`
110
+
111
+ Respond in JSON format:
112
+ {
113
+ "commitMessage": "feat(auth): add OAuth2 authentication support",
114
+ "commitBody": "Detailed description here..."
115
+ }`;
116
+ }
117
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;AAGA,kEAsDC;AAKD,8DAQC;AAKD,kEAoBC;AAKD,8DAYC;AAhHD;;GAEG;AACH,SAAgB,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDP,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,OAAO;;;EAGP,IAAI;;;+BAGyB,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;4FAkBmF,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,OAAO;;;EAGP,IAAI;;;;;;;EAOJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Reset configuration
3
+ */
4
+ export declare function resetConfig(): Promise<void>;
5
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../src/reset.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCjD"}
package/dist/reset.js ADDED
@@ -0,0 +1,77 @@
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.resetConfig = resetConfig;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const inquirer_1 = __importDefault(require("inquirer"));
42
+ const config = __importStar(require("./config"));
43
+ /**
44
+ * Reset configuration
45
+ */
46
+ async function resetConfig() {
47
+ if (!config.configExists()) {
48
+ console.log(chalk_1.default.yellow('⚠ No configuration found.\n'));
49
+ return;
50
+ }
51
+ console.log(chalk_1.default.red.bold('\nāš ļø Reset Configuration\n'));
52
+ console.log(chalk_1.default.yellow('This will delete all configuration including:'));
53
+ console.log(chalk_1.default.yellow(' - OpenAI API key'));
54
+ console.log(chalk_1.default.yellow(' - All git user profiles'));
55
+ console.log(chalk_1.default.yellow(' - Default user settings\n'));
56
+ const { confirm } = await inquirer_1.default.prompt([
57
+ {
58
+ type: 'confirm',
59
+ name: 'confirm',
60
+ message: 'Are you sure you want to reset all configuration?',
61
+ default: false
62
+ }
63
+ ]);
64
+ if (!confirm) {
65
+ console.log(chalk_1.default.yellow('⚠ Reset cancelled.\n'));
66
+ return;
67
+ }
68
+ const success = config.resetConfig();
69
+ if (success) {
70
+ console.log(chalk_1.default.green('āœ“ Configuration reset successfully.\n'));
71
+ console.log(chalk_1.default.blue('Run "git-ai setup" to configure again.\n'));
72
+ }
73
+ else {
74
+ console.log(chalk_1.default.red('āŒ Failed to reset configuration.\n'));
75
+ }
76
+ }
77
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../src/reset.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kCAiCC;AAxCD,kDAA0B;AAC1B,wDAAgC;AAChC,iDAAmC;AAEnC;;GAEG;AACI,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAuB;QAC9D;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,mDAAmD;YAC5D,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Run setup command
3
+ */
4
+ export declare function runSetup(): Promise<void>;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuM9C"}
package/dist/setup.js ADDED
@@ -0,0 +1,234 @@
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.runSetup = runSetup;
40
+ const inquirer_1 = __importDefault(require("inquirer"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const config = __importStar(require("./config"));
43
+ const git = __importStar(require("./git"));
44
+ const userManagement = __importStar(require("./user-management"));
45
+ /**
46
+ * Run setup command
47
+ */
48
+ async function runSetup() {
49
+ console.log(chalk_1.default.blue.bold('\nšŸ”§ Git Commit AI Setup\n'));
50
+ const { openaiKey } = await inquirer_1.default.prompt([
51
+ {
52
+ type: 'password',
53
+ name: 'openaiKey',
54
+ message: 'Enter OpenAI API Key:',
55
+ validate: (input) => {
56
+ if (!input || input.trim().length === 0) {
57
+ return 'OpenAI API Key is required!';
58
+ }
59
+ if (!input.startsWith('sk-')) {
60
+ return 'OpenAI API Key must start with "sk-"!';
61
+ }
62
+ return true;
63
+ }
64
+ }
65
+ ]);
66
+ config.setOpenAIKey(openaiKey);
67
+ console.log(chalk_1.default.green('āœ“ OpenAI API Key saved\n'));
68
+ console.log(chalk_1.default.blue('Detecting git user profiles...\n'));
69
+ let gitProfiles = [];
70
+ try {
71
+ gitProfiles = await git.getAllGitUserProfiles();
72
+ }
73
+ catch (error) {
74
+ const err = error;
75
+ console.log(chalk_1.default.yellow(`⚠ Could not get git user profiles: ${err.message}`));
76
+ }
77
+ if (gitProfiles.length === 0) {
78
+ try {
79
+ const currentUser = await git.getGitUserInfo();
80
+ if (currentUser.name && currentUser.email) {
81
+ gitProfiles.push({
82
+ id: `current-${currentUser.email}`,
83
+ name: currentUser.name,
84
+ email: currentUser.email,
85
+ scope: 'current',
86
+ label: `${currentUser.name} <${currentUser.email}> (Current)`
87
+ });
88
+ }
89
+ }
90
+ catch (error) {
91
+ const err = error;
92
+ console.log(chalk_1.default.yellow(`⚠ Could not get current git user info: ${err.message}`));
93
+ }
94
+ }
95
+ if (gitProfiles.length === 0) {
96
+ const { addManual } = await inquirer_1.default.prompt([
97
+ {
98
+ type: 'confirm',
99
+ name: 'addManual',
100
+ message: 'No git user profile found. Would you like to add one manually?',
101
+ default: true
102
+ }
103
+ ]);
104
+ if (addManual) {
105
+ console.log(chalk_1.default.blue('šŸ’” Tip: Type "q" and press Enter at any input to cancel.\n'));
106
+ const { name, email } = await inquirer_1.default.prompt([
107
+ {
108
+ type: 'input',
109
+ name: 'name',
110
+ message: 'Git user name (or "q" to cancel):',
111
+ validate: (input) => {
112
+ const trimmed = input.trim();
113
+ if (trimmed.toLowerCase() === 'q') {
114
+ return true;
115
+ }
116
+ return trimmed.length > 0 || 'Name is required!';
117
+ }
118
+ },
119
+ {
120
+ type: 'input',
121
+ name: 'email',
122
+ message: 'Git user email (or "q" to cancel):',
123
+ validate: (input) => {
124
+ const trimmed = input.trim();
125
+ if (trimmed.toLowerCase() === 'q') {
126
+ return true;
127
+ }
128
+ if (!trimmed || trimmed.length === 0) {
129
+ return 'Email is required!';
130
+ }
131
+ if (!trimmed.includes('@')) {
132
+ return 'Please enter a valid email address!';
133
+ }
134
+ return true;
135
+ }
136
+ }
137
+ ]);
138
+ if (name.trim().toLowerCase() === 'q' || email.trim().toLowerCase() === 'q') {
139
+ console.log(chalk_1.default.yellow('⚠ Manual user addition cancelled.\n'));
140
+ }
141
+ else {
142
+ gitProfiles.push({
143
+ id: `manual-${email}`,
144
+ name,
145
+ email,
146
+ scope: 'manual',
147
+ label: `${name} <${email}> (Manual)`
148
+ });
149
+ }
150
+ }
151
+ }
152
+ if (gitProfiles.length > 0) {
153
+ gitProfiles = await userManagement.addShortcutsToProfiles(gitProfiles);
154
+ config.setGitUsers(gitProfiles);
155
+ console.log(chalk_1.default.green(`āœ“ Found ${gitProfiles.length} active git user profiles\n`));
156
+ console.log(chalk_1.default.blue('šŸ“‹ Active Git User Profiles:\n'));
157
+ gitProfiles.forEach((profile, index) => {
158
+ const shortcutInfo = profile.shortcut
159
+ ? chalk_1.default.yellow(` [shortcut: ${profile.shortcut}]`)
160
+ : '';
161
+ console.log(chalk_1.default.cyan(` ${index + 1}. ${profile.label}${shortcutInfo}`));
162
+ });
163
+ console.log('\n');
164
+ if (gitProfiles.length === 1) {
165
+ config.setDefaultGitUser(gitProfiles[0].id);
166
+ console.log(chalk_1.default.green(`āœ“ Set as default git user: ${gitProfiles[0].label}\n`));
167
+ }
168
+ else {
169
+ const { defaultUser } = await inquirer_1.default.prompt([
170
+ {
171
+ type: 'list',
172
+ name: 'defaultUser',
173
+ message: 'Select default git user:',
174
+ choices: gitProfiles.map(p => ({
175
+ name: p.label,
176
+ value: p.id
177
+ }))
178
+ }
179
+ ]);
180
+ config.setDefaultGitUser(defaultUser);
181
+ const selectedProfile = gitProfiles.find(p => p.id === defaultUser);
182
+ if (selectedProfile) {
183
+ console.log(chalk_1.default.green(`āœ“ Set as default git user: ${selectedProfile.label}\n`));
184
+ }
185
+ }
186
+ }
187
+ else {
188
+ console.log(chalk_1.default.yellow('⚠ No git user profile found.\n'));
189
+ }
190
+ const { addMore } = await inquirer_1.default.prompt([
191
+ {
192
+ type: 'confirm',
193
+ name: 'addMore',
194
+ message: 'Would you like to add more git user profiles?',
195
+ default: false
196
+ }
197
+ ]);
198
+ if (addMore) {
199
+ console.log(chalk_1.default.blue('\nšŸ’” Tip: Type "q" and press Enter at any input to cancel adding users.\n'));
200
+ await userManagement.addMoreGitUsers(gitProfiles);
201
+ const updatedProfiles = config.getGitUsers();
202
+ if (updatedProfiles.length > 1) {
203
+ const { updateDefault } = await inquirer_1.default.prompt([
204
+ {
205
+ type: 'confirm',
206
+ name: 'updateDefault',
207
+ message: 'Would you like to update the default git user?',
208
+ default: false
209
+ }
210
+ ]);
211
+ if (updateDefault) {
212
+ const { defaultUser } = await inquirer_1.default.prompt([
213
+ {
214
+ type: 'list',
215
+ name: 'defaultUser',
216
+ message: 'Select default git user:',
217
+ choices: updatedProfiles.map(p => ({
218
+ name: p.label,
219
+ value: p.id
220
+ }))
221
+ }
222
+ ]);
223
+ config.setDefaultGitUser(defaultUser);
224
+ const selectedProfile = updatedProfiles.find(p => p.id === defaultUser);
225
+ if (selectedProfile) {
226
+ console.log(chalk_1.default.green(`āœ“ Default git user updated: ${selectedProfile.label}\n`));
227
+ }
228
+ }
229
+ }
230
+ }
231
+ console.log(chalk_1.default.green.bold('āœ“ Setup completed!\n'));
232
+ console.log(chalk_1.default.blue('Usage: git-ai commit\n'));
233
+ }
234
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
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;
8
+ }
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;
18
+ }
19
+ export interface CommitGroup {
20
+ number: number;
21
+ description: string;
22
+ files: string[];
23
+ commitMessage: string;
24
+ commitBody?: string;
25
+ }
26
+ export interface AnalysisResult {
27
+ groups: CommitGroup[];
28
+ summary?: string;
29
+ }
30
+ export interface CommitResult {
31
+ group: number;
32
+ message: string;
33
+ files: number;
34
+ success: boolean;
35
+ error?: string;
36
+ }
37
+ export interface GitUserInfo {
38
+ name: string | null;
39
+ email: string | null;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { GitUserProfile } from './types';
2
+ /**
3
+ * Add shortcuts to each user profile
4
+ */
5
+ export declare function addShortcutsToProfiles(profiles: GitUserProfile[]): Promise<GitUserProfile[]>;
6
+ /**
7
+ * Add more git user profiles
8
+ */
9
+ export declare function addMoreGitUsers(existingProfiles: GitUserProfile[]): Promise<GitUserProfile[]>;
10
+ //# sourceMappingURL=user-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-management.d.ts","sourceRoot":"","sources":["../src/user-management.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAsDlG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0InG"}