@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.
- package/README.md +365 -0
- package/bin/git-ai +4 -0
- package/dist/add.d.ts +5 -0
- package/dist/add.d.ts.map +1 -0
- package/dist/add.js +98 -0
- package/dist/add.js.map +1 -0
- package/dist/commit-processor.d.ts +6 -0
- package/dist/commit-processor.d.ts.map +1 -0
- package/dist/commit-processor.js +138 -0
- package/dist/commit-processor.js.map +1 -0
- package/dist/commit.d.ts +5 -0
- package/dist/commit.d.ts.map +1 -0
- package/dist/commit.js +245 -0
- package/dist/commit.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +185 -0
- package/dist/config.js.map +1 -0
- package/dist/git.d.ts +54 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +256 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +138 -0
- package/dist/index.js.map +1 -0
- package/dist/openai.d.ts +22 -0
- package/dist/openai.d.ts.map +1 -0
- package/dist/openai.js +137 -0
- package/dist/openai.js.map +1 -0
- package/dist/prompts.d.ts +17 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +117 -0
- package/dist/prompts.js.map +1 -0
- package/dist/reset.d.ts +5 -0
- package/dist/reset.d.ts.map +1 -0
- package/dist/reset.js +77 -0
- package/dist/reset.js.map +1 -0
- package/dist/setup.d.ts +5 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +234 -0
- package/dist/setup.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/user-management.d.ts +10 -0
- package/dist/user-management.d.ts.map +1 -0
- package/dist/user-management.js +225 -0
- package/dist/user-management.js.map +1 -0
- package/dist/users.d.ts +9 -0
- package/dist/users.d.ts.map +1 -0
- package/dist/users.js +129 -0
- package/dist/users.js.map +1 -0
- package/package.json +46 -0
package/dist/git.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
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.getStagedDiff = getStagedDiff;
|
|
7
|
+
exports.getUnstagedDiff = getUnstagedDiff;
|
|
8
|
+
exports.getAllDiff = getAllDiff;
|
|
9
|
+
exports.hasChanges = hasChanges;
|
|
10
|
+
exports.getGitUserInfo = getGitUserInfo;
|
|
11
|
+
exports.getAllGitUserProfiles = getAllGitUserProfiles;
|
|
12
|
+
exports.setGitUser = setGitUser;
|
|
13
|
+
exports.stageFiles = stageFiles;
|
|
14
|
+
exports.unstageAll = unstageAll;
|
|
15
|
+
exports.createCommit = createCommit;
|
|
16
|
+
exports.getStagedFiles = getStagedFiles;
|
|
17
|
+
exports.getAllChangedFiles = getAllChangedFiles;
|
|
18
|
+
exports.isGitRepository = isGitRepository;
|
|
19
|
+
const simple_git_1 = __importDefault(require("simple-git"));
|
|
20
|
+
/**
|
|
21
|
+
* Create git repository instance
|
|
22
|
+
*/
|
|
23
|
+
function getGitInstance(repoPath = process.cwd()) {
|
|
24
|
+
return (0, simple_git_1.default)(repoPath);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get staged changes
|
|
28
|
+
*/
|
|
29
|
+
async function getStagedDiff() {
|
|
30
|
+
try {
|
|
31
|
+
const git = getGitInstance();
|
|
32
|
+
const diff = await git.diff(['--cached']);
|
|
33
|
+
return diff;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const err = error;
|
|
37
|
+
throw new Error(`Error getting staged diff: ${err.message}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get unstaged changes
|
|
42
|
+
*/
|
|
43
|
+
async function getUnstagedDiff() {
|
|
44
|
+
try {
|
|
45
|
+
const git = getGitInstance();
|
|
46
|
+
const diff = await git.diff();
|
|
47
|
+
return diff;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const err = error;
|
|
51
|
+
throw new Error(`Error getting unstaged diff: ${err.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get all changes (staged + unstaged)
|
|
56
|
+
*/
|
|
57
|
+
async function getAllDiff() {
|
|
58
|
+
try {
|
|
59
|
+
const staged = await getStagedDiff();
|
|
60
|
+
const unstaged = await getUnstagedDiff();
|
|
61
|
+
return {
|
|
62
|
+
staged,
|
|
63
|
+
unstaged,
|
|
64
|
+
all: `${staged}\n${unstaged}`.trim()
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const err = error;
|
|
69
|
+
throw new Error(`Error getting diff: ${err.message}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if there are changes
|
|
74
|
+
*/
|
|
75
|
+
async function hasChanges() {
|
|
76
|
+
try {
|
|
77
|
+
const git = getGitInstance();
|
|
78
|
+
const status = await git.status();
|
|
79
|
+
return status.files.length > 0;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const err = error;
|
|
83
|
+
throw new Error(`Error checking for changes: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get git user info (global and local)
|
|
88
|
+
*/
|
|
89
|
+
async function getGitUserInfo() {
|
|
90
|
+
try {
|
|
91
|
+
const git = getGitInstance();
|
|
92
|
+
const [name, email] = await Promise.all([
|
|
93
|
+
git.getConfig('user.name').then(config => config.value || null).catch(() => null),
|
|
94
|
+
git.getConfig('user.email').then(config => config.value || null).catch(() => null)
|
|
95
|
+
]);
|
|
96
|
+
return { name, email };
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const err = error;
|
|
100
|
+
throw new Error(`Error getting git user info: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Collect user profiles from all git configs
|
|
105
|
+
*/
|
|
106
|
+
async function getAllGitUserProfiles() {
|
|
107
|
+
try {
|
|
108
|
+
const git = getGitInstance();
|
|
109
|
+
const profiles = [];
|
|
110
|
+
// Global config
|
|
111
|
+
try {
|
|
112
|
+
const globalName = await git.getConfig('user.name', 'global').then(c => c.value).catch(() => null);
|
|
113
|
+
const globalEmail = await git.getConfig('user.email', 'global').then(c => c.value).catch(() => null);
|
|
114
|
+
if (globalName && globalEmail) {
|
|
115
|
+
profiles.push({
|
|
116
|
+
id: `global-${globalEmail}`,
|
|
117
|
+
name: globalName,
|
|
118
|
+
email: globalEmail,
|
|
119
|
+
scope: 'global',
|
|
120
|
+
label: `${globalName} <${globalEmail}> (Global)`
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
// Continue if global config doesn't exist
|
|
126
|
+
}
|
|
127
|
+
// Local config
|
|
128
|
+
try {
|
|
129
|
+
const localName = await git.getConfig('user.name', 'local').then(c => c.value).catch(() => null);
|
|
130
|
+
const localEmail = await git.getConfig('user.email', 'local').then(c => c.value).catch(() => null);
|
|
131
|
+
if (localName && localEmail) {
|
|
132
|
+
const isDuplicate = profiles.some(p => p.email === localEmail && p.name === localName);
|
|
133
|
+
if (!isDuplicate) {
|
|
134
|
+
profiles.push({
|
|
135
|
+
id: `local-${localEmail}`,
|
|
136
|
+
name: localName,
|
|
137
|
+
email: localEmail,
|
|
138
|
+
scope: 'local',
|
|
139
|
+
label: `${localName} <${localEmail}> (Local)`
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
// Continue if local config doesn't exist
|
|
146
|
+
}
|
|
147
|
+
return profiles;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const err = error;
|
|
151
|
+
throw new Error(`Error getting git user profiles: ${err.message}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Set git user
|
|
156
|
+
*/
|
|
157
|
+
async function setGitUser(name, email, scope = 'local') {
|
|
158
|
+
try {
|
|
159
|
+
const git = getGitInstance();
|
|
160
|
+
await git.addConfig('user.name', name, scope === 'global');
|
|
161
|
+
await git.addConfig('user.email', email, scope === 'global');
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const err = error;
|
|
166
|
+
throw new Error(`Error setting git user: ${err.message}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Stage files
|
|
171
|
+
*/
|
|
172
|
+
async function stageFiles(files) {
|
|
173
|
+
try {
|
|
174
|
+
const git = getGitInstance();
|
|
175
|
+
await git.add(files);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
const err = error;
|
|
180
|
+
throw new Error(`Error staging files: ${err.message}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Unstage all staged files
|
|
185
|
+
*/
|
|
186
|
+
async function unstageAll() {
|
|
187
|
+
try {
|
|
188
|
+
const git = getGitInstance();
|
|
189
|
+
await git.reset();
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const err = error;
|
|
194
|
+
throw new Error(`Error unstaging: ${err.message}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Create commit
|
|
199
|
+
*/
|
|
200
|
+
async function createCommit(message, authorName = null, authorEmail = null) {
|
|
201
|
+
try {
|
|
202
|
+
const git = getGitInstance();
|
|
203
|
+
const options = {};
|
|
204
|
+
if (authorName && authorEmail) {
|
|
205
|
+
options['--author'] = `${authorName} <${authorEmail}>`;
|
|
206
|
+
}
|
|
207
|
+
await git.commit(message, options);
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
const err = error;
|
|
212
|
+
throw new Error(`Error creating commit: ${err.message}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* List staged files
|
|
217
|
+
*/
|
|
218
|
+
async function getStagedFiles() {
|
|
219
|
+
try {
|
|
220
|
+
const git = getGitInstance();
|
|
221
|
+
const status = await git.status();
|
|
222
|
+
return status.staged;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const err = error;
|
|
226
|
+
throw new Error(`Error getting staged files: ${err.message}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* List all changed files
|
|
231
|
+
*/
|
|
232
|
+
async function getAllChangedFiles() {
|
|
233
|
+
try {
|
|
234
|
+
const git = getGitInstance();
|
|
235
|
+
const status = await git.status();
|
|
236
|
+
return [...status.staged, ...status.not_added, ...status.modified];
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
const err = error;
|
|
240
|
+
throw new Error(`Error getting changed files: ${err.message}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Check if git repository
|
|
245
|
+
*/
|
|
246
|
+
async function isGitRepository() {
|
|
247
|
+
try {
|
|
248
|
+
const git = getGitInstance();
|
|
249
|
+
await git.status();
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const setup = __importStar(require("./setup"));
|
|
43
|
+
const commit = __importStar(require("./commit"));
|
|
44
|
+
const users = __importStar(require("./users"));
|
|
45
|
+
const reset = __importStar(require("./reset"));
|
|
46
|
+
const add = __importStar(require("./add"));
|
|
47
|
+
const package_json_1 = __importDefault(require("../package.json"));
|
|
48
|
+
const program = new commander_1.Command();
|
|
49
|
+
/**
|
|
50
|
+
* Handle command errors consistently
|
|
51
|
+
*/
|
|
52
|
+
function handleError(error, showStack = false) {
|
|
53
|
+
const err = error;
|
|
54
|
+
console.error(chalk_1.default.red(`\n❌ Error: ${err.message}\n`));
|
|
55
|
+
if (showStack && err.stack) {
|
|
56
|
+
console.error(chalk_1.default.gray(err.stack));
|
|
57
|
+
}
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
program
|
|
61
|
+
.name('git-ai')
|
|
62
|
+
.description('AI-powered git commit tool that analyzes diffs and creates conventional commit messages')
|
|
63
|
+
.version(package_json_1.default.version);
|
|
64
|
+
program
|
|
65
|
+
.command('setup')
|
|
66
|
+
.description('Initial setup - OpenAI API key and git user configuration')
|
|
67
|
+
.action(async () => {
|
|
68
|
+
try {
|
|
69
|
+
await setup.runSetup();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
handleError(error);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
program
|
|
76
|
+
.command('commit')
|
|
77
|
+
.description('Analyze git diffs and create commits')
|
|
78
|
+
.option('-u, --user <user>', 'Git user ID or email to use (instead of default user)')
|
|
79
|
+
.action(async (options) => {
|
|
80
|
+
try {
|
|
81
|
+
await commit.runCommit(options.user);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
handleError(error, true);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
program
|
|
88
|
+
.command('add')
|
|
89
|
+
.alias('add-user')
|
|
90
|
+
.description('Add a new git user profile')
|
|
91
|
+
.action(async () => {
|
|
92
|
+
try {
|
|
93
|
+
await add.addUser();
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
handleError(error);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
program
|
|
100
|
+
.command('list')
|
|
101
|
+
.alias('users')
|
|
102
|
+
.description('List all configured git user profiles')
|
|
103
|
+
.action(() => {
|
|
104
|
+
try {
|
|
105
|
+
users.listUsers();
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
handleError(error);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
program
|
|
112
|
+
.command('remove')
|
|
113
|
+
.alias('delete')
|
|
114
|
+
.description('Remove a git user profile')
|
|
115
|
+
.action(async () => {
|
|
116
|
+
try {
|
|
117
|
+
await users.removeUser();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
handleError(error);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
program
|
|
124
|
+
.command('reset')
|
|
125
|
+
.description('Reset all configuration (deletes OpenAI key and all git users)')
|
|
126
|
+
.action(async () => {
|
|
127
|
+
try {
|
|
128
|
+
await reset.resetConfig();
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
handleError(error);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (process.argv.length === 2) {
|
|
135
|
+
program.help();
|
|
136
|
+
}
|
|
137
|
+
program.parse(process.argv);
|
|
138
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/openai.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import { AnalysisResult } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Initialize OpenAI client
|
|
5
|
+
*/
|
|
6
|
+
export declare function initOpenAI(apiKey: string): OpenAI;
|
|
7
|
+
/**
|
|
8
|
+
* Get OpenAI client
|
|
9
|
+
*/
|
|
10
|
+
export declare function getOpenAIClient(): OpenAI;
|
|
11
|
+
/**
|
|
12
|
+
* Analyze git diff and create commit groups
|
|
13
|
+
*/
|
|
14
|
+
export declare function analyzeDiffAndGroup(diff: string, apiKey: string): Promise<AnalysisResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Generate commit message for a single diff (simple usage)
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateCommitMessage(diff: string, apiKey: string): Promise<{
|
|
19
|
+
commitMessage: string;
|
|
20
|
+
commitBody: string;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmC/F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAmChI"}
|
package/dist/openai.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
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.initOpenAI = initOpenAI;
|
|
40
|
+
exports.getOpenAIClient = getOpenAIClient;
|
|
41
|
+
exports.analyzeDiffAndGroup = analyzeDiffAndGroup;
|
|
42
|
+
exports.generateCommitMessage = generateCommitMessage;
|
|
43
|
+
const openai_1 = __importDefault(require("openai"));
|
|
44
|
+
const prompts = __importStar(require("./prompts"));
|
|
45
|
+
let openaiClient = null;
|
|
46
|
+
/**
|
|
47
|
+
* Initialize OpenAI client
|
|
48
|
+
*/
|
|
49
|
+
function initOpenAI(apiKey) {
|
|
50
|
+
if (!apiKey) {
|
|
51
|
+
throw new Error('OpenAI API key is required');
|
|
52
|
+
}
|
|
53
|
+
openaiClient = new openai_1.default({ apiKey });
|
|
54
|
+
return openaiClient;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get OpenAI client
|
|
58
|
+
*/
|
|
59
|
+
function getOpenAIClient() {
|
|
60
|
+
if (!openaiClient) {
|
|
61
|
+
throw new Error('OpenAI client not initialized. Call initOpenAI() first.');
|
|
62
|
+
}
|
|
63
|
+
return openaiClient;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Analyze git diff and create commit groups
|
|
67
|
+
*/
|
|
68
|
+
async function analyzeDiffAndGroup(diff, apiKey) {
|
|
69
|
+
if (!apiKey) {
|
|
70
|
+
throw new Error('OpenAI API key is required');
|
|
71
|
+
}
|
|
72
|
+
initOpenAI(apiKey);
|
|
73
|
+
const client = getOpenAIClient();
|
|
74
|
+
const systemPrompt = prompts.getDiffAnalysisSystemPrompt();
|
|
75
|
+
const userPrompt = prompts.getDiffAnalysisUserPrompt(diff);
|
|
76
|
+
try {
|
|
77
|
+
const response = await client.chat.completions.create({
|
|
78
|
+
model: 'gpt-4o-mini',
|
|
79
|
+
messages: [
|
|
80
|
+
{ role: 'system', content: systemPrompt },
|
|
81
|
+
{ role: 'user', content: userPrompt }
|
|
82
|
+
],
|
|
83
|
+
temperature: 0.3,
|
|
84
|
+
response_format: { type: 'json_object' }
|
|
85
|
+
});
|
|
86
|
+
const content = response.choices[0]?.message?.content;
|
|
87
|
+
if (!content) {
|
|
88
|
+
throw new Error('No response from OpenAI');
|
|
89
|
+
}
|
|
90
|
+
const result = JSON.parse(content);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const err = error;
|
|
95
|
+
if (err.message.includes('API key')) {
|
|
96
|
+
throw new Error('Invalid OpenAI API key');
|
|
97
|
+
}
|
|
98
|
+
throw new Error(`OpenAI API error: ${err.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Generate commit message for a single diff (simple usage)
|
|
103
|
+
*/
|
|
104
|
+
async function generateCommitMessage(diff, apiKey) {
|
|
105
|
+
if (!apiKey) {
|
|
106
|
+
throw new Error('OpenAI API key is required');
|
|
107
|
+
}
|
|
108
|
+
initOpenAI(apiKey);
|
|
109
|
+
const client = getOpenAIClient();
|
|
110
|
+
const systemPrompt = prompts.getSingleCommitSystemPrompt();
|
|
111
|
+
const userPrompt = prompts.getSingleCommitUserPrompt(diff);
|
|
112
|
+
try {
|
|
113
|
+
const response = await client.chat.completions.create({
|
|
114
|
+
model: 'gpt-4o-mini',
|
|
115
|
+
messages: [
|
|
116
|
+
{ role: 'system', content: systemPrompt },
|
|
117
|
+
{ role: 'user', content: userPrompt }
|
|
118
|
+
],
|
|
119
|
+
temperature: 0.3,
|
|
120
|
+
response_format: { type: 'json_object' }
|
|
121
|
+
});
|
|
122
|
+
const content = response.choices[0]?.message?.content;
|
|
123
|
+
if (!content) {
|
|
124
|
+
throw new Error('No response from OpenAI');
|
|
125
|
+
}
|
|
126
|
+
const result = JSON.parse(content);
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const err = error;
|
|
131
|
+
if (err.message.includes('API key')) {
|
|
132
|
+
throw new Error('Invalid OpenAI API key');
|
|
133
|
+
}
|
|
134
|
+
throw new Error(`OpenAI API error: ${err.message}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get system prompt for diff analysis and grouping
|
|
3
|
+
*/
|
|
4
|
+
export declare function getDiffAnalysisSystemPrompt(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Get user prompt for diff analysis
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDiffAnalysisUserPrompt(diff: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get system prompt for single commit message generation
|
|
11
|
+
*/
|
|
12
|
+
export declare function getSingleCommitSystemPrompt(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Get user prompt for single commit message
|
|
15
|
+
*/
|
|
16
|
+
export declare function getSingleCommitUserPrompt(diff: string): string;
|
|
17
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAsDpD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAoBpD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY9D"}
|