@mehmetsagir/git-ai 0.0.25 ā 0.0.27
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/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.d.ts +1 -1
- package/dist/commit.d.ts.map +1 -1
- package/dist/commit.js +37 -4
- package/dist/commit.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts +8 -2
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +138 -2
- package/dist/git.js.map +1 -1
- package/dist/index.js +148 -62
- package/dist/index.js.map +1 -1
- package/dist/openai.d.ts +3 -0
- package/dist/openai.d.ts.map +1 -1
- package/dist/openai.js +18 -0
- package/dist/openai.js.map +1 -1
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +46 -0
- package/dist/prompts.js.map +1 -1
- package/dist/set-editor.d.ts +5 -0
- package/dist/set-editor.d.ts.map +1 -0
- package/dist/set-editor.js +59 -0
- package/dist/set-editor.js.map +1 -0
- package/dist/summary.d.ts +5 -0
- package/dist/summary.d.ts.map +1 -0
- package/dist/summary.js +175 -0
- package/dist/summary.js.map +1 -0
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts +9 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +68 -0
- package/dist/update.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 +175 -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/dist/utils/commit-file.d.ts +30 -0
- package/dist/utils/commit-file.d.ts.map +1 -0
- package/dist/utils/commit-file.js +192 -0
- package/dist/utils/commit-file.js.map +1 -0
- package/dist/utils/editor.d.ts +29 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +245 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/validation.d.ts +24 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +81 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -44,74 +44,160 @@ const commit = __importStar(require("./commit"));
|
|
|
44
44
|
const reset = __importStar(require("./reset"));
|
|
45
45
|
const stash = __importStar(require("./stash"));
|
|
46
46
|
const ui = __importStar(require("./ui"));
|
|
47
|
+
const add = __importStar(require("./add"));
|
|
48
|
+
const users = __importStar(require("./users"));
|
|
49
|
+
const setEditor = __importStar(require("./set-editor"));
|
|
50
|
+
const summary = __importStar(require("./summary"));
|
|
51
|
+
const update = __importStar(require("./update"));
|
|
47
52
|
const errors_1 = require("./utils/errors");
|
|
48
53
|
const program = new commander_1.Command();
|
|
49
54
|
function handleError(error) {
|
|
50
55
|
console.error(chalk_1.default.red(`\nā Error: ${(0, errors_1.getErrorMessage)(error)}\n`));
|
|
51
56
|
process.exit(1);
|
|
52
57
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
58
|
+
// Check for --update flag before parsing
|
|
59
|
+
if (process.argv.includes("--update")) {
|
|
60
|
+
(async () => {
|
|
61
|
+
try {
|
|
62
|
+
await update.checkAndUpdate();
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
handleError(error);
|
|
67
|
+
}
|
|
68
|
+
})();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Check for updates silently in background
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
update.checkForUpdates();
|
|
74
|
+
}, 1000);
|
|
75
|
+
program
|
|
76
|
+
.name("git-ai")
|
|
77
|
+
.description("AI-powered git commit tool")
|
|
78
|
+
.version(require("../package.json").version)
|
|
79
|
+
.option("--update", "Check for updates and update to latest version");
|
|
80
|
+
program
|
|
81
|
+
.command("setup")
|
|
82
|
+
.description("Configure OpenAI API key")
|
|
83
|
+
.action(async () => {
|
|
84
|
+
try {
|
|
85
|
+
await setup.runSetup();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
handleError(error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
program
|
|
92
|
+
.command("commit")
|
|
93
|
+
.description("Analyze changes and create commits")
|
|
94
|
+
.option("-u, --user <user>", "Git user ID, email, or shortcut to use as author")
|
|
95
|
+
.action(async (options) => {
|
|
96
|
+
try {
|
|
97
|
+
await commit.runCommit(options.user);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
handleError(error);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
program
|
|
104
|
+
.command("add")
|
|
105
|
+
.alias("add-user")
|
|
106
|
+
.description("Add a new git user profile")
|
|
107
|
+
.action(async () => {
|
|
108
|
+
try {
|
|
109
|
+
await add.addUser();
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
handleError(error);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
program
|
|
116
|
+
.command("list")
|
|
117
|
+
.alias("users")
|
|
118
|
+
.description("List all configured git user profiles")
|
|
119
|
+
.action(() => {
|
|
120
|
+
try {
|
|
121
|
+
users.listUsers();
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
handleError(error);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
program
|
|
128
|
+
.command("remove")
|
|
129
|
+
.alias("delete")
|
|
130
|
+
.description("Remove a git user profile")
|
|
131
|
+
.action(async () => {
|
|
132
|
+
try {
|
|
133
|
+
await users.removeUser();
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
handleError(error);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
program
|
|
140
|
+
.command("reset")
|
|
141
|
+
.description("Reset configuration")
|
|
142
|
+
.action(async () => {
|
|
143
|
+
try {
|
|
144
|
+
await reset.resetConfig();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
handleError(error);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
program
|
|
151
|
+
.command("set-editor")
|
|
152
|
+
.alias("editor")
|
|
153
|
+
.description("Change your preferred editor for commit messages")
|
|
154
|
+
.action(async () => {
|
|
155
|
+
try {
|
|
156
|
+
await setEditor.setEditorPreference();
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
handleError(error);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
program
|
|
163
|
+
.command("summary")
|
|
164
|
+
.alias("sum")
|
|
165
|
+
.description("Generate a summary of current changes using AI")
|
|
166
|
+
.option("-o, --output <file>", "Output file path (default: CHANGES_SUMMARY.md)")
|
|
167
|
+
.action(async (options) => {
|
|
168
|
+
try {
|
|
169
|
+
await summary.runSummary(options.output);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
handleError(error);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
program
|
|
176
|
+
.command("stash")
|
|
177
|
+
.description("View git stashes in browser")
|
|
178
|
+
.action(async () => {
|
|
179
|
+
try {
|
|
180
|
+
await stash.runStashViewer();
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
handleError(error);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
program
|
|
187
|
+
.command("ui")
|
|
188
|
+
.description("Open web UI for managing commits")
|
|
189
|
+
.action(async () => {
|
|
190
|
+
try {
|
|
191
|
+
await ui.runUI();
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
handleError(error);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
// Show help if no command provided
|
|
198
|
+
if (process.argv.length === 2) {
|
|
199
|
+
program.help();
|
|
110
200
|
}
|
|
111
|
-
|
|
112
|
-
// Show help if no command provided
|
|
113
|
-
if (process.argv.length === 2) {
|
|
114
|
-
program.help();
|
|
201
|
+
program.parse(process.argv);
|
|
115
202
|
}
|
|
116
|
-
program.parse(process.argv);
|
|
117
203
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,+CAAiC;AACjC,iDAAmC;AACnC,+CAAiC;AACjC,+CAAiC;AACjC,yCAA2B;AAC3B,2CAAiD;AAEjD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,IAAA,wBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,+CAAiC;AACjC,iDAAmC;AACnC,+CAAiC;AACjC,+CAAiC;AACjC,yCAA2B;AAC3B,2CAA6B;AAC7B,+CAAiC;AACjC,wDAA0C;AAC1C,mDAAqC;AACrC,iDAAmC;AACnC,2CAAiD;AAEjD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,IAAA,wBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,yCAAyC;AACzC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IACtC,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;KAAM,CAAC;IACN,2CAA2C;IAC3C,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,4BAA4B,CAAC;SACzC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;SAC3C,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC,CAAC;IAExE,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,KAAK,CAAC,UAAU,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,OAAO,CAAC;SACd,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC;YACH,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,KAAK,CAAC,QAAQ,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,KAAK,CAAC,QAAQ,CAAC;SACf,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,mBAAmB,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CACL,qBAAqB,EACrB,gDAAgD,CACjD;SACA,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,mCAAmC;IACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/openai.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { AnalysisResult } from "./types";
|
|
2
2
|
export declare function analyzeAndGroup(formattedDiff: string, stats: string, apiKey: string): Promise<AnalysisResult>;
|
|
3
|
+
export declare function generateChangesSummary(diff: string, apiKey: string): Promise<{
|
|
4
|
+
summary: string | null;
|
|
5
|
+
}>;
|
|
3
6
|
//# sourceMappingURL=openai.d.ts.map
|
package/dist/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAmBrC"}
|
package/dist/openai.js
CHANGED
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.analyzeAndGroup = analyzeAndGroup;
|
|
40
|
+
exports.generateChangesSummary = generateChangesSummary;
|
|
40
41
|
const openai_1 = __importDefault(require("openai"));
|
|
41
42
|
const prompts = __importStar(require("./prompts"));
|
|
42
43
|
async function analyzeAndGroup(formattedDiff, stats, apiKey) {
|
|
@@ -56,4 +57,21 @@ async function analyzeAndGroup(formattedDiff, stats, apiKey) {
|
|
|
56
57
|
}
|
|
57
58
|
return JSON.parse(content);
|
|
58
59
|
}
|
|
60
|
+
async function generateChangesSummary(diff, apiKey) {
|
|
61
|
+
const client = new openai_1.default({ apiKey });
|
|
62
|
+
const response = await client.chat.completions.create({
|
|
63
|
+
model: "gpt-4o-mini",
|
|
64
|
+
messages: [
|
|
65
|
+
{ role: "system", content: prompts.getChangesSummarySystemPrompt() },
|
|
66
|
+
{ role: "user", content: prompts.getChangesSummaryUserPrompt(diff) },
|
|
67
|
+
],
|
|
68
|
+
temperature: 0.3,
|
|
69
|
+
response_format: { type: "json_object" },
|
|
70
|
+
});
|
|
71
|
+
const content = response.choices[0]?.message?.content;
|
|
72
|
+
if (!content) {
|
|
73
|
+
return { summary: null };
|
|
74
|
+
}
|
|
75
|
+
return JSON.parse(content);
|
|
76
|
+
}
|
|
59
77
|
//# sourceMappingURL=openai.js.map
|
package/dist/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0CAuBC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0CAuBC;AAED,wDAsBC;AAnDD,oDAA4B;AAC5B,mDAAqC;AAG9B,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,KAAa,EACb,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACpD,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE;YACtD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;SACvE;QACD,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACpD,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,6BAA6B,EAAE,EAAE;YACpE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;SACrE;QACD,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;AAC3D,CAAC"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export declare function getSystemPrompt(): string;
|
|
2
2
|
export declare function getUserPrompt(formattedDiff: string, stats: string): string;
|
|
3
|
+
export declare function getChangesSummarySystemPrompt(): string;
|
|
4
|
+
export declare function getChangesSummaryUserPrompt(diff: string): string;
|
|
3
5
|
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CAwCxC;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAU1E"}
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CAwCxC;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAU1E;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAwBtD;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBhE"}
|
package/dist/prompts.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getSystemPrompt = getSystemPrompt;
|
|
4
4
|
exports.getUserPrompt = getUserPrompt;
|
|
5
|
+
exports.getChangesSummarySystemPrompt = getChangesSummarySystemPrompt;
|
|
6
|
+
exports.getChangesSummaryUserPrompt = getChangesSummaryUserPrompt;
|
|
5
7
|
function getSystemPrompt() {
|
|
6
8
|
return `You are a git commit expert. Analyze diff hunks and group them into logical commits.
|
|
7
9
|
|
|
@@ -54,4 +56,48 @@ ${formattedDiff}
|
|
|
54
56
|
Group related hunks together. If a file has multiple unrelated changes, put them in separate commits.
|
|
55
57
|
Each hunk must be in exactly one group. Respond in JSON format.`;
|
|
56
58
|
}
|
|
59
|
+
function getChangesSummarySystemPrompt() {
|
|
60
|
+
return `You are a code review expert. You analyze git diffs and create concise, clear summaries of changes.
|
|
61
|
+
|
|
62
|
+
Your task is to:
|
|
63
|
+
1. Analyze the git diff and understand what changed
|
|
64
|
+
2. Identify the main purpose and impact of the changes
|
|
65
|
+
3. Group related changes together
|
|
66
|
+
4. Highlight important modifications
|
|
67
|
+
5. Note any potential issues or concerns
|
|
68
|
+
6. Create a clear, readable summary
|
|
69
|
+
|
|
70
|
+
The summary should be:
|
|
71
|
+
- Concise but informative
|
|
72
|
+
- Well-structured with clear sections
|
|
73
|
+
- Focused on what changed and why it matters
|
|
74
|
+
- Easy to understand for developers
|
|
75
|
+
|
|
76
|
+
Format the summary with:
|
|
77
|
+
- Overview section (what changed overall)
|
|
78
|
+
- Key changes section (main modifications)
|
|
79
|
+
- Files affected section (list of changed files)
|
|
80
|
+
- Notes section (any important observations)
|
|
81
|
+
|
|
82
|
+
Respond in JSON format with the summary content.`;
|
|
83
|
+
}
|
|
84
|
+
function getChangesSummaryUserPrompt(diff) {
|
|
85
|
+
return `Analyze the following git diff and create a concise summary of the changes.
|
|
86
|
+
|
|
87
|
+
\`\`\`
|
|
88
|
+
${diff}
|
|
89
|
+
\`\`\`
|
|
90
|
+
|
|
91
|
+
Create a clear, well-structured summary that:
|
|
92
|
+
- Explains what changed in simple terms
|
|
93
|
+
- Highlights the main purpose of the changes
|
|
94
|
+
- Lists key modifications
|
|
95
|
+
- Notes any important files or areas affected
|
|
96
|
+
- Mentions any potential concerns or breaking changes
|
|
97
|
+
|
|
98
|
+
Respond in JSON format:
|
|
99
|
+
{
|
|
100
|
+
"summary": "# Changes Summary\\n\\n## Overview\\nBrief description of what changed overall.\\n\\n## Key Changes\\n- Main change 1\\n- Main change 2\\n- Main change 3\\n\\n## Files Affected\\n- file1.ts (description)\\n- file2.ts (description)\\n\\n## Notes\\nAny important observations or concerns."
|
|
101
|
+
}`;
|
|
102
|
+
}
|
|
57
103
|
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;AAAA,0CAwCC;AAED,sCAUC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;AAAA,0CAwCC;AAED,sCAUC;AAED,sEAwBC;AAED,kEAkBC;AAlGD,SAAgB,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCP,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,aAAqB,EAAE,KAAa;IAChE,OAAO;;EAEP,KAAK;;;EAGL,aAAa;;;gEAGiD,CAAC;AACjE,CAAC;AAED,SAAgB,6BAA6B;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;iDAsBwC,CAAC;AAClD,CAAC;AAED,SAAgB,2BAA2B,CAAC,IAAY;IACtD,OAAO;;;EAGP,IAAI;;;;;;;;;;;;;EAaJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-editor.d.ts","sourceRoot":"","sources":["../src/set-editor.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBzD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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.setEditorPreference = setEditorPreference;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const config = __importStar(require("./config"));
|
|
42
|
+
const editorUtils = __importStar(require("./utils/editor"));
|
|
43
|
+
/**
|
|
44
|
+
* Set or change editor preference
|
|
45
|
+
*/
|
|
46
|
+
async function setEditorPreference() {
|
|
47
|
+
console.log(chalk_1.default.blue.bold("\nāļø Editor Configuration\n"));
|
|
48
|
+
const currentEditor = config.getEditor();
|
|
49
|
+
if (currentEditor) {
|
|
50
|
+
console.log(chalk_1.default.gray(`Current editor: ${currentEditor}\n`));
|
|
51
|
+
}
|
|
52
|
+
// Prompt for new editor
|
|
53
|
+
const newEditor = await editorUtils.promptForEditor();
|
|
54
|
+
// Save preference
|
|
55
|
+
config.setEditor(newEditor);
|
|
56
|
+
console.log(chalk_1.default.green(`\nā Editor preference updated: ${newEditor}\n`));
|
|
57
|
+
console.log(chalk_1.default.gray("You can change this anytime with: git-ai set-editor\n"));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=set-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-editor.js","sourceRoot":"","sources":["../src/set-editor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kDAkBC;AAzBD,kDAA0B;AAC1B,iDAAmC;AACnC,4DAA8C;AAE9C;;GAEG;AACI,KAAK,UAAU,mBAAmB;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IACzC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;IAEtD,kBAAkB;IAClB,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kCAAkC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJnE"}
|
package/dist/summary.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
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.runSummary = runSummary;
|
|
40
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const ora_1 = __importDefault(require("ora"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const config = __importStar(require("./config"));
|
|
46
|
+
const git = __importStar(require("./git"));
|
|
47
|
+
const openai = __importStar(require("./openai"));
|
|
48
|
+
const errors_1 = require("./utils/errors");
|
|
49
|
+
/**
|
|
50
|
+
* Run summary command
|
|
51
|
+
*/
|
|
52
|
+
async function runSummary(outputFile) {
|
|
53
|
+
console.log(chalk_1.default.blue.bold("\nš Changes Summary\n"));
|
|
54
|
+
if (!config.configExists()) {
|
|
55
|
+
console.log(chalk_1.default.yellow("ā Configuration not found. Please run setup first.\n"));
|
|
56
|
+
console.log(chalk_1.default.blue("Run: git-ai setup\n"));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const openaiKey = config.getOpenAIKey();
|
|
60
|
+
if (!openaiKey) {
|
|
61
|
+
console.log(chalk_1.default.yellow("ā OpenAI API key not found. Please run setup first.\n"));
|
|
62
|
+
console.log(chalk_1.default.blue("Run: git-ai setup\n"));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const isRepo = await git.isGitRepository();
|
|
66
|
+
if (!isRepo) {
|
|
67
|
+
console.log(chalk_1.default.red("ā This directory is not a git repository!\n"));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const hasChanges = await git.hasChanges();
|
|
71
|
+
if (!hasChanges) {
|
|
72
|
+
console.log(chalk_1.default.yellow("ā No changes found.\n"));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Check git status and inform user
|
|
76
|
+
const stagedFiles = await git.getStagedFiles();
|
|
77
|
+
const allChangedFiles = await git.getAllChangedFiles();
|
|
78
|
+
const unstagedFiles = allChangedFiles.filter((file) => !stagedFiles.includes(file));
|
|
79
|
+
if (stagedFiles.length > 0) {
|
|
80
|
+
console.log(chalk_1.default.blue(`š¦ Found ${stagedFiles.length} staged file(s)\n`));
|
|
81
|
+
}
|
|
82
|
+
if (unstagedFiles.length > 0) {
|
|
83
|
+
console.log(chalk_1.default.blue(`š Found ${unstagedFiles.length} unstaged file(s)\n`));
|
|
84
|
+
}
|
|
85
|
+
const diffSpinner = (0, ora_1.default)("Analyzing changes...").start();
|
|
86
|
+
let diffData;
|
|
87
|
+
try {
|
|
88
|
+
diffData = await git.getAllDiff();
|
|
89
|
+
const hasStaged = diffData.staged && diffData.staged.trim().length > 0;
|
|
90
|
+
const hasUnstaged = diffData.unstaged && diffData.unstaged.trim().length > 0;
|
|
91
|
+
if (!hasStaged && !hasUnstaged) {
|
|
92
|
+
diffSpinner.fail("No diff content found");
|
|
93
|
+
console.log(chalk_1.default.yellow(`ā¹ Found ${allChangedFiles.length} file(s) but no diff content (may be renames/permissions only).\n`));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Combine staged and unstaged diffs
|
|
97
|
+
if (!hasStaged && hasUnstaged) {
|
|
98
|
+
diffData.all = diffData.unstaged;
|
|
99
|
+
}
|
|
100
|
+
else if (hasStaged && !hasUnstaged) {
|
|
101
|
+
diffData.all = diffData.staged;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
diffData.all = `${diffData.staged}\n${diffData.unstaged}`.trim();
|
|
105
|
+
}
|
|
106
|
+
diffSpinner.succeed("Changes analyzed");
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
diffSpinner.fail(`Error: ${(0, errors_1.getErrorMessage)(error)}`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!diffData.all || diffData.all.trim().length === 0) {
|
|
113
|
+
diffSpinner.fail("No diff content found to analyze");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const aiSpinner = (0, ora_1.default)("š¤ Generating summary with AI...").start();
|
|
117
|
+
let summaryResult;
|
|
118
|
+
try {
|
|
119
|
+
summaryResult = await openai.generateChangesSummary(diffData.all, openaiKey);
|
|
120
|
+
aiSpinner.succeed("Summary generated");
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
aiSpinner.fail(`OpenAI error: ${(0, errors_1.getErrorMessage)(error)}`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!summaryResult.summary) {
|
|
127
|
+
console.log(chalk_1.default.yellow("ā Could not generate summary.\n"));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk_1.default.green.bold("\nā Summary Generated\n"));
|
|
131
|
+
console.log(chalk_1.default.blue("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n"));
|
|
132
|
+
console.log(chalk_1.default.white(summaryResult.summary));
|
|
133
|
+
console.log(chalk_1.default.blue("\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n"));
|
|
134
|
+
// If output file is specified via command line, save directly
|
|
135
|
+
if (outputFile) {
|
|
136
|
+
try {
|
|
137
|
+
const fullPath = path.resolve(process.cwd(), outputFile);
|
|
138
|
+
fs.writeFileSync(fullPath, summaryResult.summary, "utf8");
|
|
139
|
+
console.log(chalk_1.default.green(`ā Summary saved to: ${outputFile}\n`));
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.log(chalk_1.default.red(`ā Error saving file: ${(0, errors_1.getErrorMessage)(error)}\n`));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Ask if user wants to save to file
|
|
147
|
+
const { saveToFile } = await inquirer_1.default.prompt([
|
|
148
|
+
{
|
|
149
|
+
type: "confirm",
|
|
150
|
+
name: "saveToFile",
|
|
151
|
+
message: "Save summary to file?",
|
|
152
|
+
default: false,
|
|
153
|
+
},
|
|
154
|
+
]);
|
|
155
|
+
if (saveToFile) {
|
|
156
|
+
const { filePath } = await inquirer_1.default.prompt([
|
|
157
|
+
{
|
|
158
|
+
type: "input",
|
|
159
|
+
name: "filePath",
|
|
160
|
+
message: "File path (default: CHANGES_SUMMARY.md):",
|
|
161
|
+
default: "CHANGES_SUMMARY.md",
|
|
162
|
+
},
|
|
163
|
+
]);
|
|
164
|
+
try {
|
|
165
|
+
const fullPath = path.resolve(process.cwd(), filePath);
|
|
166
|
+
fs.writeFileSync(fullPath, summaryResult.summary, "utf8");
|
|
167
|
+
console.log(chalk_1.default.green(`ā Summary saved to: ${filePath}\n`));
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.log(chalk_1.default.red(`ā Error saving file: ${(0, errors_1.getErrorMessage)(error)}\n`));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,gCAyJC;AAtKD,wDAAgC;AAChC,kDAA0B;AAC1B,8CAAsB;AACtB,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAmC;AACnC,2CAA6B;AAC7B,iDAAmC;AACnC,2CAAiD;AAEjD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CACrE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CACtE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACvD,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtC,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,MAAM,mBAAmB,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC,MAAM,qBAAqB,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,MAAM,WAAW,GACf,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3D,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,WAAW,eAAe,CAAC,MAAM,mEAAmE,CACrG,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC;YAC9B,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,CAAC;aAAM,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACnE,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,CAAC,UAAU,IAAA,wBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,aAAG,EAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;IAClE,IAAI,aAAa,CAAC;IAClB,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,MAAM,CAAC,sBAAsB,CACjD,QAAQ,CAAC,GAAG,EACZ,SAAS,CACV,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,IAAI,CAAC,iBAAiB,IAAA,wBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAExE,8DAA8D;IAC9D,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;YACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,UAAU,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,wBAAwB,IAAA,wBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAA0B;YACpE;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAuB;gBAC/D;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,0CAA0C;oBACnD,OAAO,EAAE,oBAAoB;iBAC9B;aACF,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACvD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,wBAAwB,IAAA,wBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|