gitcoach-cli 1.0.0
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/bin/run.js +80 -0
- package/dist/analytics/index.d.ts +3 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +3 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/stats-calculator.d.ts +24 -0
- package/dist/analytics/stats-calculator.d.ts.map +1 -0
- package/dist/analytics/stats-calculator.js +135 -0
- package/dist/analytics/stats-calculator.js.map +1 -0
- package/dist/analytics/tracker.d.ts +36 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +103 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +12 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +154 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +45 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/quick.d.ts +12 -0
- package/dist/commands/quick.d.ts.map +1 -0
- package/dist/commands/quick.js +112 -0
- package/dist/commands/quick.js.map +1 -0
- package/dist/commands/stats.d.ts +7 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +42 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/config/defaults.d.ts +37 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/user-config.d.ts +33 -0
- package/dist/config/user-config.d.ts.map +1 -0
- package/dist/config/user-config.js +106 -0
- package/dist/config/user-config.js.map +1 -0
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +45 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.json +353 -0
- package/dist/i18n/locales/es.json +353 -0
- package/dist/i18n/locales/fr.json +353 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/services/analysis-service.d.ts +24 -0
- package/dist/services/analysis-service.d.ts.map +1 -0
- package/dist/services/analysis-service.js +158 -0
- package/dist/services/analysis-service.js.map +1 -0
- package/dist/services/copilot-service.d.ts +30 -0
- package/dist/services/copilot-service.d.ts.map +1 -0
- package/dist/services/copilot-service.js +385 -0
- package/dist/services/copilot-service.js.map +1 -0
- package/dist/services/git-service.d.ts +75 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +230 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/prevention-service.d.ts +29 -0
- package/dist/services/prevention-service.d.ts.map +1 -0
- package/dist/services/prevention-service.js +213 -0
- package/dist/services/prevention-service.js.map +1 -0
- package/dist/ui/components/box.d.ts +16 -0
- package/dist/ui/components/box.d.ts.map +1 -0
- package/dist/ui/components/box.js +100 -0
- package/dist/ui/components/box.js.map +1 -0
- package/dist/ui/components/index.d.ts +5 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +5 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/components/prompt.d.ts +19 -0
- package/dist/ui/components/prompt.d.ts.map +1 -0
- package/dist/ui/components/prompt.js +62 -0
- package/dist/ui/components/prompt.js.map +1 -0
- package/dist/ui/components/spinner.d.ts +8 -0
- package/dist/ui/components/spinner.d.ts.map +1 -0
- package/dist/ui/components/spinner.js +24 -0
- package/dist/ui/components/spinner.js.map +1 -0
- package/dist/ui/components/table.d.ts +25 -0
- package/dist/ui/components/table.d.ts.map +1 -0
- package/dist/ui/components/table.js +72 -0
- package/dist/ui/components/table.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/menus/add-menu.d.ts +6 -0
- package/dist/ui/menus/add-menu.d.ts.map +1 -0
- package/dist/ui/menus/add-menu.js +60 -0
- package/dist/ui/menus/add-menu.js.map +1 -0
- package/dist/ui/menus/branch-menu.d.ts +8 -0
- package/dist/ui/menus/branch-menu.d.ts.map +1 -0
- package/dist/ui/menus/branch-menu.js +141 -0
- package/dist/ui/menus/branch-menu.js.map +1 -0
- package/dist/ui/menus/commit-menu.d.ts +7 -0
- package/dist/ui/menus/commit-menu.d.ts.map +1 -0
- package/dist/ui/menus/commit-menu.js +129 -0
- package/dist/ui/menus/commit-menu.js.map +1 -0
- package/dist/ui/menus/config-menu.d.ts +3 -0
- package/dist/ui/menus/config-menu.d.ts.map +1 -0
- package/dist/ui/menus/config-menu.js +97 -0
- package/dist/ui/menus/config-menu.js.map +1 -0
- package/dist/ui/menus/help-menu.d.ts +3 -0
- package/dist/ui/menus/help-menu.d.ts.map +1 -0
- package/dist/ui/menus/help-menu.js +133 -0
- package/dist/ui/menus/help-menu.js.map +1 -0
- package/dist/ui/menus/history-menu.d.ts +3 -0
- package/dist/ui/menus/history-menu.d.ts.map +1 -0
- package/dist/ui/menus/history-menu.js +129 -0
- package/dist/ui/menus/history-menu.js.map +1 -0
- package/dist/ui/menus/index.d.ts +8 -0
- package/dist/ui/menus/index.d.ts.map +1 -0
- package/dist/ui/menus/index.js +8 -0
- package/dist/ui/menus/index.js.map +1 -0
- package/dist/ui/menus/main-menu.d.ts +4 -0
- package/dist/ui/menus/main-menu.d.ts.map +1 -0
- package/dist/ui/menus/main-menu.js +134 -0
- package/dist/ui/menus/main-menu.js.map +1 -0
- package/dist/ui/menus/pull-menu.d.ts +7 -0
- package/dist/ui/menus/pull-menu.d.ts.map +1 -0
- package/dist/ui/menus/pull-menu.js +69 -0
- package/dist/ui/menus/pull-menu.js.map +1 -0
- package/dist/ui/menus/push-menu.d.ts +8 -0
- package/dist/ui/menus/push-menu.d.ts.map +1 -0
- package/dist/ui/menus/push-menu.js +160 -0
- package/dist/ui/menus/push-menu.js.map +1 -0
- package/dist/ui/menus/setup-menu.d.ts +5 -0
- package/dist/ui/menus/setup-menu.d.ts.map +1 -0
- package/dist/ui/menus/setup-menu.js +234 -0
- package/dist/ui/menus/setup-menu.js.map +1 -0
- package/dist/ui/menus/stash-menu.d.ts +3 -0
- package/dist/ui/menus/stash-menu.d.ts.map +1 -0
- package/dist/ui/menus/stash-menu.js +205 -0
- package/dist/ui/menus/stash-menu.js.map +1 -0
- package/dist/ui/menus/undo-menu.d.ts +3 -0
- package/dist/ui/menus/undo-menu.d.ts.map +1 -0
- package/dist/ui/menus/undo-menu.js +197 -0
- package/dist/ui/menus/undo-menu.js.map +1 -0
- package/dist/ui/themes/colored.d.ts +35 -0
- package/dist/ui/themes/colored.d.ts.map +1 -0
- package/dist/ui/themes/colored.js +85 -0
- package/dist/ui/themes/colored.js.map +1 -0
- package/dist/ui/themes/index.d.ts +39 -0
- package/dist/ui/themes/index.d.ts.map +1 -0
- package/dist/ui/themes/index.js +9 -0
- package/dist/ui/themes/index.js.map +1 -0
- package/dist/ui/themes/monochrome.d.ts +35 -0
- package/dist/ui/themes/monochrome.d.ts.map +1 -0
- package/dist/ui/themes/monochrome.js +80 -0
- package/dist/ui/themes/monochrome.js.map +1 -0
- package/dist/utils/error-helper.d.ts +10 -0
- package/dist/utils/error-helper.d.ts.map +1 -0
- package/dist/utils/error-helper.js +55 -0
- package/dist/utils/error-helper.js.map +1 -0
- package/dist/utils/helpers.d.ts +16 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +95 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validators.d.ts +10 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +78 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import { executeCommand } from '../utils/helpers.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
class CopilotService {
|
|
4
|
+
available = null;
|
|
5
|
+
async isAvailable() {
|
|
6
|
+
if (this.available !== null) {
|
|
7
|
+
return this.available;
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
// Use the new GitHub Copilot CLI (not gh copilot extension)
|
|
11
|
+
const { stdout, stderr } = await executeCommand('copilot --version');
|
|
12
|
+
// Check for version number in output (e.g., "0.0.393")
|
|
13
|
+
const hasVersion = /\d+\.\d+/.test(stdout);
|
|
14
|
+
const hasError = stderr.includes('not found') || stderr.includes('not recognized');
|
|
15
|
+
this.available = hasVersion && !hasError;
|
|
16
|
+
logger.debug('Copilot CLI availability check:', { stdout, stderr, available: this.available });
|
|
17
|
+
return this.available;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
logger.debug('Copilot CLI availability check failed:', error);
|
|
21
|
+
this.available = false;
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Reset cached availability (useful for testing)
|
|
26
|
+
resetAvailability() {
|
|
27
|
+
this.available = null;
|
|
28
|
+
}
|
|
29
|
+
async generateCommitMessage(diff) {
|
|
30
|
+
if (!(await this.isAvailable())) {
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
message: 'GitHub Copilot CLI is not available'
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!diff || diff.trim().length === 0) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
message: 'No changes to analyze'
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Summarize the diff for the prompt (extract file names only for safety)
|
|
44
|
+
const diffSummary = this.summarizeDiff(diff);
|
|
45
|
+
// Build a simple prompt - keep it clean with only alphanumeric chars
|
|
46
|
+
const prompt = `Generate a conventional commit message for these file changes: ${diffSummary}. Use format type: description where type is feat fix docs refactor test or chore. Reply with only the commit message.`;
|
|
47
|
+
logger.debug('Copilot prompt:', prompt);
|
|
48
|
+
// Use copilot CLI in non-interactive mode with silent output
|
|
49
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 60000 // 60 second timeout for AI response
|
|
50
|
+
);
|
|
51
|
+
logger.debug('Copilot CLI response:', { stdout: stdout.substring(0, 500), stderr });
|
|
52
|
+
// Parse the response to extract the suggested commit message
|
|
53
|
+
const message = this.parseCommitMessage(stdout, stderr);
|
|
54
|
+
if (message) {
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
message
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
message: 'Could not generate a commit message'
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger.debug('Copilot CLI suggestion failed:', error);
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
summarizeDiff(diff) {
|
|
74
|
+
const lines = diff.split('\n');
|
|
75
|
+
const files = [];
|
|
76
|
+
let additions = 0;
|
|
77
|
+
let deletions = 0;
|
|
78
|
+
for (const line of lines) {
|
|
79
|
+
// Extract file names
|
|
80
|
+
if (line.startsWith('diff --git')) {
|
|
81
|
+
const match = line.match(/b\/(.+)$/);
|
|
82
|
+
if (match) {
|
|
83
|
+
files.push(match[1]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Count additions and deletions (safer than including code content)
|
|
87
|
+
else if (line.startsWith('+') && !line.startsWith('+++')) {
|
|
88
|
+
additions++;
|
|
89
|
+
}
|
|
90
|
+
else if (line.startsWith('-') && !line.startsWith('---')) {
|
|
91
|
+
deletions++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Build a safe single-line summary (no code content, just metadata)
|
|
95
|
+
const parts = [];
|
|
96
|
+
if (files.length > 0) {
|
|
97
|
+
// Clean file names (remove special chars)
|
|
98
|
+
const cleanFiles = files.slice(0, 5).map(f => f.replace(/[^a-zA-Z0-9._/-]/g, ''));
|
|
99
|
+
parts.push(`Files: ${cleanFiles.join(', ')}`);
|
|
100
|
+
}
|
|
101
|
+
if (additions > 0 || deletions > 0) {
|
|
102
|
+
parts.push(`${additions} additions, ${deletions} deletions`);
|
|
103
|
+
}
|
|
104
|
+
return parts.join('. ');
|
|
105
|
+
}
|
|
106
|
+
escapeForShell(str) {
|
|
107
|
+
return str
|
|
108
|
+
.replace(/\\/g, '\\\\')
|
|
109
|
+
.replace(/"/g, '\\"')
|
|
110
|
+
.replace(/`/g, '\\`')
|
|
111
|
+
.replace(/\$/g, '\\$')
|
|
112
|
+
.replace(/\n/g, '\\n')
|
|
113
|
+
.replace(/\r/g, '');
|
|
114
|
+
}
|
|
115
|
+
async analyzeContext(branch, stagedFiles, modifiedFiles) {
|
|
116
|
+
if (!(await this.isAvailable())) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: 'GitHub Copilot CLI is not available'
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const context = `Branch: ${branch}. Staged files: ${stagedFiles.join(', ') || 'none'}. Modified files: ${modifiedFiles.join(', ') || 'none'}.`;
|
|
124
|
+
const prompt = `Given this git state: ${context} What should the user do next? Reply with a single brief suggestion in one sentence.`;
|
|
125
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 30000);
|
|
126
|
+
const suggestion = this.parseSuggestion(stdout, stderr);
|
|
127
|
+
return {
|
|
128
|
+
success: !!suggestion,
|
|
129
|
+
message: suggestion || 'No suggestion available'
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async predictProblems(action, currentBranch, hasUncommitted) {
|
|
140
|
+
if (!(await this.isAvailable())) {
|
|
141
|
+
return {
|
|
142
|
+
success: false,
|
|
143
|
+
message: 'GitHub Copilot CLI is not available'
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const context = `Action: ${action}. Branch: ${currentBranch}. Uncommitted changes: ${hasUncommitted}.`;
|
|
148
|
+
const prompt = `Will this git action cause problems? ${context} Reply briefly in one sentence.`;
|
|
149
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 30000);
|
|
150
|
+
const prediction = this.parseSuggestion(stdout, stderr);
|
|
151
|
+
return {
|
|
152
|
+
success: true,
|
|
153
|
+
message: prediction || 'No issues predicted'
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async explainConcept(concept) {
|
|
164
|
+
if (!(await this.isAvailable())) {
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
message: 'GitHub Copilot CLI is not available'
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const prompt = `Explain this Git concept briefly for a beginner in 2-3 sentences: ${concept}`;
|
|
172
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 30000);
|
|
173
|
+
const explanation = this.parseSuggestion(stdout, stderr);
|
|
174
|
+
return {
|
|
175
|
+
success: !!explanation,
|
|
176
|
+
message: explanation || 'No explanation available'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Ask a Git question in natural language
|
|
188
|
+
*/
|
|
189
|
+
async askGitQuestion(question) {
|
|
190
|
+
if (!(await this.isAvailable())) {
|
|
191
|
+
return {
|
|
192
|
+
success: false,
|
|
193
|
+
message: 'GitHub Copilot CLI is not available'
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (!question || question.trim().length === 0) {
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
message: 'Please provide a question'
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const prompt = `You are a Git expert assistant. Answer this Git question clearly and concisely. If it involves commands, show the exact command to use.
|
|
204
|
+
|
|
205
|
+
Question: ${question}
|
|
206
|
+
|
|
207
|
+
Provide a helpful answer in 2-4 sentences. If relevant, include the Git command.`;
|
|
208
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 45000);
|
|
209
|
+
const answer = this.parseAnswer(stdout, stderr);
|
|
210
|
+
return {
|
|
211
|
+
success: !!answer,
|
|
212
|
+
message: answer || 'Could not get an answer'
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
logger.debug('askGitQuestion failed:', error);
|
|
217
|
+
return {
|
|
218
|
+
success: false,
|
|
219
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Explain a Git error and suggest solutions
|
|
225
|
+
*/
|
|
226
|
+
async explainGitError(errorMessage, command) {
|
|
227
|
+
if (!(await this.isAvailable())) {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
message: 'GitHub Copilot CLI is not available'
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (!errorMessage || errorMessage.trim().length === 0) {
|
|
234
|
+
return {
|
|
235
|
+
success: false,
|
|
236
|
+
message: 'No error message provided'
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
const commandContext = command ? `Command executed: ${command}\n` : '';
|
|
241
|
+
const prompt = `You are a Git expert. Explain this Git error simply and provide a solution.
|
|
242
|
+
|
|
243
|
+
${commandContext}Error message: ${errorMessage}
|
|
244
|
+
|
|
245
|
+
1. Explain what this error means in simple terms (1 sentence)
|
|
246
|
+
2. Provide the solution or command to fix it (1-2 sentences)
|
|
247
|
+
|
|
248
|
+
Be concise and practical.`;
|
|
249
|
+
const { stdout, stderr } = await executeCommand(`copilot -p "${this.escapeForShell(prompt)}" -s`, 45000);
|
|
250
|
+
const explanation = this.parseAnswer(stdout, stderr);
|
|
251
|
+
return {
|
|
252
|
+
success: !!explanation,
|
|
253
|
+
message: explanation || 'Could not explain the error'
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
logger.debug('explainGitError failed:', error);
|
|
258
|
+
return {
|
|
259
|
+
success: false,
|
|
260
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
parseAnswer(output, stderr) {
|
|
265
|
+
const combined = `${output}\n${stderr || ''}`.trim();
|
|
266
|
+
const lines = combined.split('\n');
|
|
267
|
+
// Patterns to filter out (CLI stats)
|
|
268
|
+
const filterPatterns = [
|
|
269
|
+
/^\s*$/,
|
|
270
|
+
/tokens?/i,
|
|
271
|
+
/model/i,
|
|
272
|
+
/session/i,
|
|
273
|
+
/^\d+\s*(tokens?|ms|s)\b/i,
|
|
274
|
+
/^Time:/i,
|
|
275
|
+
/^Cost:/i,
|
|
276
|
+
/^Input:/i,
|
|
277
|
+
/^Output:/i
|
|
278
|
+
];
|
|
279
|
+
// Collect all meaningful lines
|
|
280
|
+
const meaningfulLines = [];
|
|
281
|
+
for (const line of lines) {
|
|
282
|
+
const trimmed = line.trim();
|
|
283
|
+
if (filterPatterns.some(pattern => pattern.test(trimmed))) {
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (trimmed.length >= 5) {
|
|
287
|
+
meaningfulLines.push(trimmed);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (meaningfulLines.length > 0) {
|
|
291
|
+
return meaningfulLines.join('\n');
|
|
292
|
+
}
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
parseCommitMessage(output, stderr) {
|
|
296
|
+
// Combine stdout and stderr
|
|
297
|
+
const combined = `${output}\n${stderr || ''}`.trim();
|
|
298
|
+
const lines = combined.split('\n');
|
|
299
|
+
// Patterns to filter out (CLI noise, stats, etc.)
|
|
300
|
+
const filterPatterns = [
|
|
301
|
+
/^\s*$/,
|
|
302
|
+
/^#/,
|
|
303
|
+
/^\$/,
|
|
304
|
+
/^>/,
|
|
305
|
+
/tokens?/i,
|
|
306
|
+
/model/i,
|
|
307
|
+
/session/i,
|
|
308
|
+
/^\d+\s*(tokens?|ms|s)\b/i,
|
|
309
|
+
/^Time:/i,
|
|
310
|
+
/^Cost:/i,
|
|
311
|
+
/^Input:/i,
|
|
312
|
+
/^Output:/i
|
|
313
|
+
];
|
|
314
|
+
// First pass: look for conventional commit pattern
|
|
315
|
+
for (const line of lines) {
|
|
316
|
+
const trimmed = line.trim();
|
|
317
|
+
// Skip filtered patterns
|
|
318
|
+
if (filterPatterns.some(pattern => pattern.test(trimmed))) {
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
// Match conventional commit format
|
|
322
|
+
if (/^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?!?:\s*.+/i.test(trimmed)) {
|
|
323
|
+
// Clean up the message (remove quotes, backticks)
|
|
324
|
+
return trimmed.replace(/^["'`]|["'`]$/g, '').substring(0, 100);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Second pass: look for any meaningful commit-like message
|
|
328
|
+
for (const line of lines) {
|
|
329
|
+
const trimmed = line.trim();
|
|
330
|
+
// Skip filtered patterns
|
|
331
|
+
if (filterPatterns.some(pattern => pattern.test(trimmed))) {
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
// Accept lines that look like commit messages (start with verb, reasonable length)
|
|
335
|
+
if (trimmed.length >= 10 && trimmed.length <= 100) {
|
|
336
|
+
// Check if it starts with a common commit verb
|
|
337
|
+
if (/^(add|update|fix|remove|refactor|implement|create|delete|change|improve|move|rename)/i.test(trimmed)) {
|
|
338
|
+
return trimmed.replace(/^["'`]|["'`]$/g, '');
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// Third pass: return first clean line as fallback
|
|
343
|
+
for (const line of lines) {
|
|
344
|
+
const trimmed = line.trim();
|
|
345
|
+
if (filterPatterns.some(pattern => pattern.test(trimmed))) {
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
if (trimmed.length >= 5 && trimmed.length <= 100) {
|
|
349
|
+
return trimmed.replace(/^["'`]|["'`]$/g, '');
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
parseSuggestion(output, stderr) {
|
|
355
|
+
const combined = `${output}\n${stderr || ''}`.trim();
|
|
356
|
+
const lines = combined.split('\n');
|
|
357
|
+
// Patterns to filter out
|
|
358
|
+
const filterPatterns = [
|
|
359
|
+
/^\s*$/,
|
|
360
|
+
/^#/,
|
|
361
|
+
/^\$/,
|
|
362
|
+
/^>/,
|
|
363
|
+
/tokens?/i,
|
|
364
|
+
/model/i,
|
|
365
|
+
/session/i,
|
|
366
|
+
/^\d+\s*(tokens?|ms|s)\b/i,
|
|
367
|
+
/^Time:/i,
|
|
368
|
+
/^Cost:/i
|
|
369
|
+
];
|
|
370
|
+
// Return meaningful content, filtering out CLI stats
|
|
371
|
+
for (const line of lines) {
|
|
372
|
+
const trimmed = line.trim();
|
|
373
|
+
if (filterPatterns.some(pattern => pattern.test(trimmed))) {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
if (trimmed.length >= 10 && trimmed.length <= 500) {
|
|
377
|
+
return trimmed;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
export const copilotService = new CopilotService();
|
|
384
|
+
export default copilotService;
|
|
385
|
+
//# sourceMappingURL=copilot-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-service.js","sourceRoot":"","sources":["../../src/services/copilot-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { StatusResult, DiffResult } from 'simple-git';
|
|
2
|
+
export interface GitStatus {
|
|
3
|
+
isClean: boolean;
|
|
4
|
+
current: string | null;
|
|
5
|
+
tracking: string | null;
|
|
6
|
+
staged: string[];
|
|
7
|
+
modified: string[];
|
|
8
|
+
deleted: string[];
|
|
9
|
+
untracked: string[];
|
|
10
|
+
ahead: number;
|
|
11
|
+
behind: number;
|
|
12
|
+
}
|
|
13
|
+
export interface BranchInfo {
|
|
14
|
+
name: string;
|
|
15
|
+
current: boolean;
|
|
16
|
+
commit: string;
|
|
17
|
+
label: string;
|
|
18
|
+
}
|
|
19
|
+
export interface CommitInfo {
|
|
20
|
+
hash: string;
|
|
21
|
+
date: string;
|
|
22
|
+
message: string;
|
|
23
|
+
author: string;
|
|
24
|
+
}
|
|
25
|
+
declare class GitService {
|
|
26
|
+
private git;
|
|
27
|
+
constructor(basePath?: string);
|
|
28
|
+
setWorkingDirectory(path: string): void;
|
|
29
|
+
isGitRepo(): Promise<boolean>;
|
|
30
|
+
getStatus(): Promise<GitStatus>;
|
|
31
|
+
getRawStatus(): Promise<StatusResult>;
|
|
32
|
+
getCurrentBranch(): Promise<string | null>;
|
|
33
|
+
isDetachedHead(): Promise<boolean>;
|
|
34
|
+
getBranches(): Promise<BranchInfo[]>;
|
|
35
|
+
getStagedFiles(): Promise<string[]>;
|
|
36
|
+
getUnstagedFiles(): Promise<string[]>;
|
|
37
|
+
hasUncommittedChanges(): Promise<boolean>;
|
|
38
|
+
getDiff(staged?: boolean): Promise<string>;
|
|
39
|
+
getDiffSummary(staged?: boolean): Promise<DiffResult>;
|
|
40
|
+
add(files: string | string[]): Promise<void>;
|
|
41
|
+
addAll(): Promise<void>;
|
|
42
|
+
commit(message: string): Promise<string>;
|
|
43
|
+
push(remote?: string, branch?: string, force?: boolean, setUpstream?: boolean): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Check if there are local commits that haven't been pushed
|
|
46
|
+
* Works even when there's no upstream branch set
|
|
47
|
+
*/
|
|
48
|
+
hasUnpushedCommits(): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Get the number of unpushed commits
|
|
51
|
+
* Returns -1 if no upstream is set (meaning all commits are unpushed)
|
|
52
|
+
*/
|
|
53
|
+
getUnpushedCommitCount(): Promise<number>;
|
|
54
|
+
pull(remote?: string, branch?: string): Promise<void>;
|
|
55
|
+
checkout(branch: string): Promise<void>;
|
|
56
|
+
createBranch(name: string, checkout?: boolean): Promise<void>;
|
|
57
|
+
deleteBranch(name: string, force?: boolean): Promise<void>;
|
|
58
|
+
getLog(maxCount?: number): Promise<CommitInfo[]>;
|
|
59
|
+
getRemotes(): Promise<string[]>;
|
|
60
|
+
hasRemote(): Promise<boolean>;
|
|
61
|
+
fetch(remote?: string): Promise<void>;
|
|
62
|
+
reset(mode?: 'soft' | 'mixed' | 'hard', ref?: string): Promise<void>;
|
|
63
|
+
stash(message?: string): Promise<void>;
|
|
64
|
+
stashPop(): Promise<void>;
|
|
65
|
+
stashApply(index?: number): Promise<void>;
|
|
66
|
+
stashDrop(index?: number): Promise<void>;
|
|
67
|
+
getStashList(): Promise<string[]>;
|
|
68
|
+
getFileContent(file: string, ref?: string): Promise<string>;
|
|
69
|
+
init(): Promise<void>;
|
|
70
|
+
addRemote(name: string, url: string): Promise<void>;
|
|
71
|
+
clone(repoUrl: string, directory?: string): Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
export declare const gitService: GitService;
|
|
74
|
+
export default gitService;
|
|
75
|
+
//# sourceMappingURL=git-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-service.d.ts","sourceRoot":"","sources":["../../src/services/git-service.ts"],"names":[],"mappings":"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"}
|