@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.
Files changed (61) hide show
  1. package/dist/add.d.ts +5 -0
  2. package/dist/add.d.ts.map +1 -0
  3. package/dist/add.js +98 -0
  4. package/dist/add.js.map +1 -0
  5. package/dist/commit.d.ts +1 -1
  6. package/dist/commit.d.ts.map +1 -1
  7. package/dist/commit.js +37 -4
  8. package/dist/commit.js.map +1 -1
  9. package/dist/config.d.ts +11 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +64 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/git.d.ts +8 -2
  14. package/dist/git.d.ts.map +1 -1
  15. package/dist/git.js +138 -2
  16. package/dist/git.js.map +1 -1
  17. package/dist/index.js +148 -62
  18. package/dist/index.js.map +1 -1
  19. package/dist/openai.d.ts +3 -0
  20. package/dist/openai.d.ts.map +1 -1
  21. package/dist/openai.js +18 -0
  22. package/dist/openai.js.map +1 -1
  23. package/dist/prompts.d.ts +2 -0
  24. package/dist/prompts.d.ts.map +1 -1
  25. package/dist/prompts.js +46 -0
  26. package/dist/prompts.js.map +1 -1
  27. package/dist/set-editor.d.ts +5 -0
  28. package/dist/set-editor.d.ts.map +1 -0
  29. package/dist/set-editor.js +59 -0
  30. package/dist/set-editor.js.map +1 -0
  31. package/dist/summary.d.ts +5 -0
  32. package/dist/summary.d.ts.map +1 -0
  33. package/dist/summary.js +175 -0
  34. package/dist/summary.js.map +1 -0
  35. package/dist/types.d.ts +24 -0
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/update.d.ts +9 -0
  38. package/dist/update.d.ts.map +1 -0
  39. package/dist/update.js +68 -0
  40. package/dist/update.js.map +1 -0
  41. package/dist/user-management.d.ts +10 -0
  42. package/dist/user-management.d.ts.map +1 -0
  43. package/dist/user-management.js +175 -0
  44. package/dist/user-management.js.map +1 -0
  45. package/dist/users.d.ts +9 -0
  46. package/dist/users.d.ts.map +1 -0
  47. package/dist/users.js +129 -0
  48. package/dist/users.js.map +1 -0
  49. package/dist/utils/commit-file.d.ts +30 -0
  50. package/dist/utils/commit-file.d.ts.map +1 -0
  51. package/dist/utils/commit-file.js +192 -0
  52. package/dist/utils/commit-file.js.map +1 -0
  53. package/dist/utils/editor.d.ts +29 -0
  54. package/dist/utils/editor.d.ts.map +1 -0
  55. package/dist/utils/editor.js +245 -0
  56. package/dist/utils/editor.js.map +1 -0
  57. package/dist/utils/validation.d.ts +24 -0
  58. package/dist/utils/validation.d.ts.map +1 -0
  59. package/dist/utils/validation.js +81 -0
  60. package/dist/utils/validation.js.map +1 -0
  61. 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
- program
54
- .name("git-ai")
55
- .description("AI-powered git commit tool")
56
- .version(require("../package.json").version);
57
- program
58
- .command("setup")
59
- .description("Configure OpenAI API key")
60
- .action(async () => {
61
- try {
62
- await setup.runSetup();
63
- }
64
- catch (error) {
65
- handleError(error);
66
- }
67
- });
68
- program
69
- .command("commit")
70
- .description("Analyze changes and create commits")
71
- .action(async () => {
72
- try {
73
- await commit.runCommit();
74
- }
75
- catch (error) {
76
- handleError(error);
77
- }
78
- });
79
- program
80
- .command("reset")
81
- .description("Reset configuration")
82
- .action(async () => {
83
- try {
84
- await reset.resetConfig();
85
- }
86
- catch (error) {
87
- handleError(error);
88
- }
89
- });
90
- program
91
- .command("stash")
92
- .description("View git stashes in browser")
93
- .action(async () => {
94
- try {
95
- await stash.runStashViewer();
96
- }
97
- catch (error) {
98
- handleError(error);
99
- }
100
- });
101
- program
102
- .command("ui")
103
- .description("Open web UI for managing commits")
104
- .action(async () => {
105
- try {
106
- await ui.runUI();
107
- }
108
- catch (error) {
109
- handleError(error);
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;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4BAA4B,CAAC;KACzC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0CAuBC;AA3BD,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"}
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
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;AAAA,0CAwCC;AAED,sCAUC;AApDD,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"}
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,5 @@
1
+ /**
2
+ * Set or change editor preference
3
+ */
4
+ export declare function setEditorPreference(): Promise<void>;
5
+ //# sourceMappingURL=set-editor.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Run summary command
3
+ */
4
+ export declare function runSummary(outputFile?: string): Promise<void>;
5
+ //# sourceMappingURL=summary.d.ts.map
@@ -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"}
@@ -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":"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"}