@dongowu/git-ai-cli 1.0.21 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -157
- package/bin/git-ai.cjs +57 -0
- package/install.cjs +107 -0
- package/package.json +27 -28
- package/.claude/settings.local.json +0 -17
- package/CHANGELOG.md +0 -46
- package/README_EN.md +0 -264
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -17
- package/dist/cli.js.map +0 -1
- package/dist/cli_main.d.ts +0 -2
- package/dist/cli_main.d.ts.map +0 -1
- package/dist/cli_main.js +0 -255
- package/dist/cli_main.js.map +0 -1
- package/dist/commands/branch.d.ts +0 -11
- package/dist/commands/branch.d.ts.map +0 -1
- package/dist/commands/branch.js +0 -279
- package/dist/commands/branch.js.map +0 -1
- package/dist/commands/commit.d.ts +0 -9
- package/dist/commands/commit.d.ts.map +0 -1
- package/dist/commands/commit.js +0 -326
- package/dist/commands/commit.js.map +0 -1
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -164
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/config_manage.d.ts +0 -14
- package/dist/commands/config_manage.d.ts.map +0 -1
- package/dist/commands/config_manage.js +0 -394
- package/dist/commands/config_manage.js.map +0 -1
- package/dist/commands/hook.d.ts +0 -5
- package/dist/commands/hook.d.ts.map +0 -1
- package/dist/commands/hook.js +0 -528
- package/dist/commands/hook.js.map +0 -1
- package/dist/commands/msg.d.ts +0 -20
- package/dist/commands/msg.d.ts.map +0 -1
- package/dist/commands/msg.js +0 -148
- package/dist/commands/msg.js.map +0 -1
- package/dist/commands/pr.d.ts +0 -8
- package/dist/commands/pr.d.ts.map +0 -1
- package/dist/commands/pr.js +0 -96
- package/dist/commands/pr.js.map +0 -1
- package/dist/commands/release.d.ts +0 -8
- package/dist/commands/release.d.ts.map +0 -1
- package/dist/commands/release.js +0 -95
- package/dist/commands/release.js.map +0 -1
- package/dist/commands/report.d.ts +0 -9
- package/dist/commands/report.d.ts.map +0 -1
- package/dist/commands/report.js +0 -162
- package/dist/commands/report.js.map +0 -1
- package/dist/types.d.ts +0 -46
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -86
- package/dist/types.js.map +0 -1
- package/dist/utils/agent.d.ts +0 -5
- package/dist/utils/agent.d.ts.map +0 -1
- package/dist/utils/agent.js +0 -308
- package/dist/utils/agent.js.map +0 -1
- package/dist/utils/agent_lite.d.ts +0 -5
- package/dist/utils/agent_lite.d.ts.map +0 -1
- package/dist/utils/agent_lite.js +0 -263
- package/dist/utils/agent_lite.js.map +0 -1
- package/dist/utils/ai.d.ts +0 -43
- package/dist/utils/ai.d.ts.map +0 -1
- package/dist/utils/ai.js +0 -1103
- package/dist/utils/ai.js.map +0 -1
- package/dist/utils/config.d.ts +0 -11
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -239
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/git.d.ts +0 -42
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -456
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/update.d.ts +0 -4
- package/dist/utils/update.d.ts.map +0 -1
- package/dist/utils/update.js +0 -122
- package/dist/utils/update.js.map +0 -1
- package/release_notes.md +0 -9
- package/scripts/release.sh +0 -34
- package/test_agent_feature.ts +0 -1
package/dist/commands/commit.js
DELETED
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import ora from 'ora';
|
|
4
|
-
import { getConfig, getLocalConfigError } from '../utils/config.js';
|
|
5
|
-
import { isGitInstalled, isInGitRepo, getStagedFiles, getFilteredDiff, commit, getBranchName, getRecentCommits, getUnstagedFileEntries, addFiles, } from '../utils/git.js';
|
|
6
|
-
import { createAIClient, generateCommitMessage, validateCommitRules, validateCommitMessage, } from '../utils/ai.js';
|
|
7
|
-
function exitWithError(message, hint, silent = false) {
|
|
8
|
-
if (!silent) {
|
|
9
|
-
console.error(chalk.red(`❌ ${message}`));
|
|
10
|
-
if (hint) {
|
|
11
|
-
console.log(chalk.gray(` ${hint}`));
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
process.exit(1);
|
|
15
|
-
}
|
|
16
|
-
export async function runCommit(options = {}) {
|
|
17
|
-
const { autoCommit = false, numChoices = 1, hookMode = false, locale } = options;
|
|
18
|
-
// Recursion guard - prevent hook from triggering another git-ai
|
|
19
|
-
if (process.env.GIT_AI_RUNNING === '1') {
|
|
20
|
-
if (!hookMode) {
|
|
21
|
-
console.log(chalk.yellow('⚠️ git-ai is already running (recursion prevented)'));
|
|
22
|
-
}
|
|
23
|
-
process.exit(0);
|
|
24
|
-
}
|
|
25
|
-
process.env.GIT_AI_RUNNING = '1';
|
|
26
|
-
// Environment checks
|
|
27
|
-
if (!(await isGitInstalled())) {
|
|
28
|
-
exitWithError('Git is not installed. Please install git first.', undefined, hookMode);
|
|
29
|
-
}
|
|
30
|
-
if (!(await isInGitRepo())) {
|
|
31
|
-
exitWithError('Not in a git repository.', undefined, hookMode);
|
|
32
|
-
}
|
|
33
|
-
let stagedFiles = await getStagedFiles();
|
|
34
|
-
if (stagedFiles.length === 0) {
|
|
35
|
-
// Interactive add
|
|
36
|
-
const unstagedEntries = await getUnstagedFileEntries();
|
|
37
|
-
if (unstagedEntries.length > 0 && !hookMode) {
|
|
38
|
-
console.log(chalk.yellow('⚠️ No staged changes found.'));
|
|
39
|
-
const allPaths = unstagedEntries.map((entry) => entry.path);
|
|
40
|
-
const choices = [
|
|
41
|
-
{ name: '✅ Stage all files', value: '__ALL__' },
|
|
42
|
-
...unstagedEntries.map((entry) => ({
|
|
43
|
-
name: `${entry.status.replace(/ /g, '.')} ${entry.path}`,
|
|
44
|
-
value: entry.path,
|
|
45
|
-
})),
|
|
46
|
-
];
|
|
47
|
-
const { selectedFiles } = await inquirer.prompt([
|
|
48
|
-
{
|
|
49
|
-
type: 'checkbox',
|
|
50
|
-
name: 'selectedFiles',
|
|
51
|
-
message: 'Select files to stage:',
|
|
52
|
-
choices,
|
|
53
|
-
pageSize: 15,
|
|
54
|
-
},
|
|
55
|
-
]);
|
|
56
|
-
if (selectedFiles.length > 0) {
|
|
57
|
-
const finalSelection = selectedFiles.includes('__ALL__') ? allPaths : selectedFiles;
|
|
58
|
-
await addFiles(finalSelection);
|
|
59
|
-
stagedFiles = await getStagedFiles();
|
|
60
|
-
console.log(chalk.green(`✅ Staged ${finalSelection.length} files.`));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
console.log(chalk.gray('No files selected. Exiting.'));
|
|
64
|
-
process.exit(0);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
exitWithError('No staged changes found.', 'Use `git add <files>` to stage your changes first.', hookMode);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// Check config
|
|
72
|
-
const config = getConfig();
|
|
73
|
-
if (!config) {
|
|
74
|
-
const localError = getLocalConfigError();
|
|
75
|
-
const hint = localError
|
|
76
|
-
? `Invalid local config at ${localError.path}: ${localError.error}`
|
|
77
|
-
: 'Run `git-ai config` to set up your AI provider.';
|
|
78
|
-
exitWithError('Configuration not found.', hint);
|
|
79
|
-
}
|
|
80
|
-
const localConfigError = getLocalConfigError();
|
|
81
|
-
if (localConfigError && !hookMode) {
|
|
82
|
-
console.log(chalk.yellow(`⚠️ Failed to parse ${localConfigError.path}: ${localConfigError.error}`));
|
|
83
|
-
}
|
|
84
|
-
const rulesIssues = validateCommitRules(config.rules);
|
|
85
|
-
if ((rulesIssues.errors.length || rulesIssues.warnings.length) && !hookMode) {
|
|
86
|
-
const combined = [...rulesIssues.errors, ...rulesIssues.warnings];
|
|
87
|
-
console.log(chalk.yellow(`⚠️ Rules config issues: ${combined.join('; ')}`));
|
|
88
|
-
}
|
|
89
|
-
// Override locale if provided
|
|
90
|
-
if (locale && (locale === 'zh' || locale === 'en')) {
|
|
91
|
-
config.locale = locale;
|
|
92
|
-
}
|
|
93
|
-
// Show staged files (skip in hook mode)
|
|
94
|
-
if (!hookMode) {
|
|
95
|
-
console.log(chalk.cyan('\n📁 Staged files:'));
|
|
96
|
-
stagedFiles.forEach((file) => {
|
|
97
|
-
console.log(chalk.gray(` ${file}`));
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
const branchName = await getBranchName();
|
|
101
|
-
const recentCommits = await getRecentCommits(10); // Get last 10 commits for style reference
|
|
102
|
-
const policyStrict = config.policy?.strict === true;
|
|
103
|
-
let diffCache = null;
|
|
104
|
-
let diffInfoPrinted = false;
|
|
105
|
-
const maybePrintDiffInfo = (ignoredFiles, truncated) => {
|
|
106
|
-
if (hookMode || diffInfoPrinted)
|
|
107
|
-
return;
|
|
108
|
-
if (ignoredFiles.length > 0) {
|
|
109
|
-
const preview = ignoredFiles.slice(0, 8).join(', ');
|
|
110
|
-
const more = ignoredFiles.length > 8 ? ` (+${ignoredFiles.length - 8} more)` : '';
|
|
111
|
-
console.log(chalk.gray(`\n📦 Ignored from diff (token optimization): ${preview}${more}`));
|
|
112
|
-
}
|
|
113
|
-
if (truncated) {
|
|
114
|
-
console.log(chalk.yellow('\n⚠️ Diff was truncated due to size limits.'));
|
|
115
|
-
console.log(chalk.gray(' Tip: add large files to .git-aiignore or set GIT_AI_MAX_DIFF_CHARS / OCO_TOKENS_MAX_INPUT.'));
|
|
116
|
-
}
|
|
117
|
-
diffInfoPrinted = true;
|
|
118
|
-
};
|
|
119
|
-
const loadDiff = async () => {
|
|
120
|
-
if (!diffCache) {
|
|
121
|
-
diffCache = await getFilteredDiff(stagedFiles);
|
|
122
|
-
maybePrintDiffInfo(diffCache.ignoredFiles, diffCache.truncated);
|
|
123
|
-
}
|
|
124
|
-
return diffCache;
|
|
125
|
-
};
|
|
126
|
-
const shouldLazyDiff = options.agentMode && numChoices === 1;
|
|
127
|
-
let diff;
|
|
128
|
-
let ignoredFiles;
|
|
129
|
-
let truncated;
|
|
130
|
-
let diffLoader;
|
|
131
|
-
if (shouldLazyDiff) {
|
|
132
|
-
diffLoader = loadDiff;
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
const loaded = await loadDiff();
|
|
136
|
-
diff = loaded.diff;
|
|
137
|
-
ignoredFiles = loaded.ignoredFiles;
|
|
138
|
-
truncated = loaded.truncated;
|
|
139
|
-
}
|
|
140
|
-
// Create AI client
|
|
141
|
-
const client = createAIClient(config);
|
|
142
|
-
const input = {
|
|
143
|
-
diff,
|
|
144
|
-
diffLoader,
|
|
145
|
-
stagedFiles,
|
|
146
|
-
ignoredFiles,
|
|
147
|
-
truncated,
|
|
148
|
-
branchName,
|
|
149
|
-
recentCommits,
|
|
150
|
-
forceAgent: options.agentMode,
|
|
151
|
-
};
|
|
152
|
-
// Generate commit message(s)
|
|
153
|
-
let commitMessage;
|
|
154
|
-
if (hookMode) {
|
|
155
|
-
// Hook mode: silent generation, output only the message
|
|
156
|
-
try {
|
|
157
|
-
const messages = await generateCommitMessage(client, input, config);
|
|
158
|
-
commitMessage = messages[0];
|
|
159
|
-
console.log(commitMessage);
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (numChoices > 1) {
|
|
167
|
-
// Generate multiple choices
|
|
168
|
-
const messages = await generateMultipleWithSpinner(client, input, config, numChoices);
|
|
169
|
-
if (autoCommit) {
|
|
170
|
-
// Auto mode: use first message
|
|
171
|
-
commitMessage = messages[0];
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
commitMessage = await selectFromChoices(messages);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
commitMessage = await generateWithSpinner(client, input, config);
|
|
179
|
-
}
|
|
180
|
-
// Auto commit mode
|
|
181
|
-
if (autoCommit) {
|
|
182
|
-
console.log(chalk.green('\n✨ Generated commit message:\n'));
|
|
183
|
-
console.log(chalk.white.bold(` ${commitMessage.split('\n').join('\n ')}`));
|
|
184
|
-
const validation = validateCommitMessage(commitMessage, config, { branchName, stagedFiles });
|
|
185
|
-
if (validation.errors.length) {
|
|
186
|
-
const msg = `Commit policy violation: ${validation.errors.join('; ')}`;
|
|
187
|
-
if (policyStrict) {
|
|
188
|
-
exitWithError(msg);
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
console.log(chalk.yellow(`⚠️ ${msg}`));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
await performCommit(commitMessage);
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
// Interactive loop
|
|
198
|
-
while (true) {
|
|
199
|
-
console.log(chalk.green('\n✨ Generated commit message:\n'));
|
|
200
|
-
console.log(chalk.white.bold(` ${commitMessage.split('\n').join('\n ')}`));
|
|
201
|
-
console.log('');
|
|
202
|
-
const { action } = await inquirer.prompt([
|
|
203
|
-
{
|
|
204
|
-
type: 'list',
|
|
205
|
-
name: 'action',
|
|
206
|
-
message: 'What would you like to do?',
|
|
207
|
-
choices: [
|
|
208
|
-
{ name: '🚀 Commit', value: 'commit' },
|
|
209
|
-
{ name: '📝 Edit', value: 'edit' },
|
|
210
|
-
{ name: '🔄 Regenerate', value: 'regenerate' },
|
|
211
|
-
{ name: '❌ Cancel', value: 'cancel' },
|
|
212
|
-
],
|
|
213
|
-
},
|
|
214
|
-
]);
|
|
215
|
-
if (action === 'commit') {
|
|
216
|
-
const validation = validateCommitMessage(commitMessage, config, { branchName, stagedFiles });
|
|
217
|
-
if (validation.errors.length) {
|
|
218
|
-
const msg = `Commit policy violation: ${validation.errors.join('; ')}`;
|
|
219
|
-
if (policyStrict) {
|
|
220
|
-
console.log(chalk.red(`❌ ${msg}`));
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
console.log(chalk.yellow(`⚠️ ${msg}`));
|
|
224
|
-
}
|
|
225
|
-
await performCommit(commitMessage);
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
else if (action === 'edit') {
|
|
229
|
-
const { editedMessage } = await inquirer.prompt([
|
|
230
|
-
{
|
|
231
|
-
type: 'editor',
|
|
232
|
-
name: 'editedMessage',
|
|
233
|
-
message: 'Edit your commit message:',
|
|
234
|
-
default: commitMessage,
|
|
235
|
-
},
|
|
236
|
-
]);
|
|
237
|
-
commitMessage = editedMessage.trim();
|
|
238
|
-
if (!commitMessage) {
|
|
239
|
-
console.log(chalk.yellow('⚠️ Commit message cannot be empty.'));
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
else if (action === 'regenerate') {
|
|
244
|
-
if (numChoices > 1) {
|
|
245
|
-
const messages = await generateMultipleWithSpinner(client, input, config, numChoices);
|
|
246
|
-
commitMessage = await selectFromChoices(messages);
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
commitMessage = await generateWithSpinner(client, input, config);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
console.log(chalk.gray('\n👋 Commit cancelled.\n'));
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
async function selectFromChoices(messages) {
|
|
259
|
-
if (messages.length === 1) {
|
|
260
|
-
return messages[0];
|
|
261
|
-
}
|
|
262
|
-
const { selected } = await inquirer.prompt([
|
|
263
|
-
{
|
|
264
|
-
type: 'list',
|
|
265
|
-
name: 'selected',
|
|
266
|
-
message: 'Select a commit message:',
|
|
267
|
-
choices: messages.map((msg, i) => ({
|
|
268
|
-
name: `${i + 1}. ${msg.split('\n')[0]}`,
|
|
269
|
-
value: msg,
|
|
270
|
-
})),
|
|
271
|
-
},
|
|
272
|
-
]);
|
|
273
|
-
return selected;
|
|
274
|
-
}
|
|
275
|
-
async function generateWithSpinner(client, input, config) {
|
|
276
|
-
const spinner = ora({
|
|
277
|
-
text: 'Generating commit message...',
|
|
278
|
-
color: 'cyan',
|
|
279
|
-
}).start();
|
|
280
|
-
try {
|
|
281
|
-
const messages = await generateCommitMessage(client, input, config);
|
|
282
|
-
spinner.succeed('Commit message generated!');
|
|
283
|
-
return messages[0];
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
spinner.fail('Failed to generate commit message');
|
|
287
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
288
|
-
exitWithError(errorMessage);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
async function generateMultipleWithSpinner(client, input, config, count) {
|
|
292
|
-
const spinner = ora({
|
|
293
|
-
text: `Generating ${count} commit messages...`,
|
|
294
|
-
color: 'cyan',
|
|
295
|
-
}).start();
|
|
296
|
-
try {
|
|
297
|
-
// Optimized: Single request for multiple choices
|
|
298
|
-
const messages = await generateCommitMessage(client, input, config, count);
|
|
299
|
-
// Dedupe
|
|
300
|
-
const unique = [...new Set(messages)];
|
|
301
|
-
spinner.succeed(`Generated ${unique.length} commit message(s)!`);
|
|
302
|
-
return unique;
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
spinner.fail('Failed to generate commit messages');
|
|
306
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
307
|
-
exitWithError(errorMessage);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
async function performCommit(message) {
|
|
311
|
-
const spinner = ora({
|
|
312
|
-
text: 'Creating commit...',
|
|
313
|
-
color: 'cyan',
|
|
314
|
-
}).start();
|
|
315
|
-
try {
|
|
316
|
-
await commit(message);
|
|
317
|
-
spinner.succeed('Commit created successfully!');
|
|
318
|
-
console.log(chalk.green('\n🎉 Done!\n'));
|
|
319
|
-
}
|
|
320
|
-
catch (error) {
|
|
321
|
-
spinner.fail('Failed to create commit');
|
|
322
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
323
|
-
exitWithError(errorMessage);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
//# sourceMappingURL=commit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AAaxB,SAAS,aAAa,CAAC,OAAe,EAAE,IAAa,EAAE,MAAM,GAAG,KAAK;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAyB,EAAE;IACzD,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEjF,gEAAgE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;IAEjC,qBAAqB;IACrB,IAAI,CAAC,CAAC,MAAM,cAAc,EAAE,CAAC,EAAE,CAAC;QAC9B,aAAa,CAAC,iDAAiD,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,0BAA0B,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAEzC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,kBAAkB;QAClB,MAAM,eAAe,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAEvD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG;gBACd,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC/C,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACjC,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE;oBACxD,KAAK,EAAE,KAAK,CAAC,IAAI;iBAClB,CAAC,CAAC;aACJ,CAAC;YACF,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA8B;gBAC3E;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,wBAAwB;oBACjC,OAAO;oBACP,QAAQ,EAAE,EAAE;iBACb;aACF,CAAC,CAAC;YAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;gBACpF,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAC/B,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,CACX,0BAA0B,EAC1B,oDAAoD,EACpD,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,UAAU;YACrB,CAAC,CAAC,2BAA2B,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,EAAE;YACnE,CAAC,CAAC,iDAAiD,CAAC;QACtD,aAAa,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,uBAAuB,gBAAgB,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,MAAM,GAAG,MAAqB,CAAC;IACxC,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C;IAC5F,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpD,IAAI,SAAS,GAAwE,IAAI,CAAC;IAC1F,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,MAAM,kBAAkB,GAAG,CAAC,YAAsB,EAAE,SAAkB,EAAQ,EAAE;QAC9E,IAAI,QAAQ,IAAI,eAAe;YAAE,OAAO;QACxC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,+FAA+F,CAChG,CACF,CAAC;QACJ,CAAC;QACD,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,IAA2E,EAAE;QACjG,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;YAC/C,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,KAAK,CAAC,CAAC;IAC7D,IAAI,IAAwB,CAAC;IAC7B,IAAI,YAAkC,CAAC;IACvC,IAAI,SAA8B,CAAC;IACnC,IAAI,UAAkE,CAAC;IAEvE,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;QAChC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACnB,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAiC;QAC1C,IAAI;QACJ,UAAU;QACV,WAAW;QACX,YAAY;QACZ,SAAS;QACT,UAAU;QACV,aAAa;QACb,UAAU,EAAE,OAAO,CAAC,SAAS;KAC9B,CAAC;IAEF,6BAA6B;IAC7B,IAAI,aAAqB,CAAC;IAE1B,IAAI,QAAQ,EAAE,CAAC;QACb,wDAAwD;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACpE,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACtF,IAAI,UAAU,EAAE,CAAC;YACf,+BAA+B;YAC/B,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,mBAAmB;IACnB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7F,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,4BAA4B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,IAAI,YAAY,EAAE,CAAC;gBACjB,aAAa,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,OAAO,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA2B;YACjE;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;oBAClC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE;oBAC9C,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;iBACtC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7F,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,4BAA4B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;oBACnC,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM;QACR,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA4B;gBACzE;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE,aAAa;iBACvB;aACF,CAAC,CAAC;YACH,aAAa,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBACjE,SAAS;YACX,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;gBACtF,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAkB;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;QAC/D;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvC,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;SACJ;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAAyC,EACzC,KAAmC,EACnC,MAAgB;IAEhB,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,MAAyC,EACzC,KAAmC,EACnC,MAAgB,EAChB,KAAa;IAEb,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,cAAc,KAAK,qBAAqB;QAC9C,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3E,SAAS;QACT,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,MAAM,qBAAqB,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,aAAa,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAgL/C"}
|
package/dist/commands/config.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { setConfig, getConfigPath } from '../utils/config.js';
|
|
4
|
-
import { PROVIDER_PRESETS } from '../types.js';
|
|
5
|
-
export async function runConfig() {
|
|
6
|
-
console.log(chalk.cyan('\n🔧 Git AI Configuration\n'));
|
|
7
|
-
const providerChoices = Object.entries(PROVIDER_PRESETS).map(([key, preset]) => ({
|
|
8
|
-
name: preset.name,
|
|
9
|
-
value: key,
|
|
10
|
-
}));
|
|
11
|
-
const { provider } = await inquirer.prompt([
|
|
12
|
-
{
|
|
13
|
-
type: 'list',
|
|
14
|
-
name: 'provider',
|
|
15
|
-
message: 'Select your AI provider:',
|
|
16
|
-
choices: providerChoices,
|
|
17
|
-
},
|
|
18
|
-
]);
|
|
19
|
-
const preset = PROVIDER_PRESETS[provider];
|
|
20
|
-
let baseUrl = preset.baseUrl;
|
|
21
|
-
let apiKey = '';
|
|
22
|
-
if (provider === 'custom') {
|
|
23
|
-
const customAnswers = await inquirer.prompt([
|
|
24
|
-
{
|
|
25
|
-
type: 'input',
|
|
26
|
-
name: 'baseUrl',
|
|
27
|
-
message: 'Enter the API base URL:',
|
|
28
|
-
validate: (input) => input.trim() ? true : 'Base URL is required',
|
|
29
|
-
},
|
|
30
|
-
]);
|
|
31
|
-
baseUrl = customAnswers.baseUrl;
|
|
32
|
-
}
|
|
33
|
-
if (preset.requiresKey) {
|
|
34
|
-
const keyAnswer = await inquirer.prompt([
|
|
35
|
-
{
|
|
36
|
-
type: 'password',
|
|
37
|
-
name: 'apiKey',
|
|
38
|
-
message: 'Enter your API Key:',
|
|
39
|
-
mask: '*',
|
|
40
|
-
validate: (input) => input.trim() ? true : 'API Key is required',
|
|
41
|
-
},
|
|
42
|
-
]);
|
|
43
|
-
apiKey = keyAnswer.apiKey;
|
|
44
|
-
}
|
|
45
|
-
let model;
|
|
46
|
-
let modelChoices = [];
|
|
47
|
-
// Auto-detect Ollama models
|
|
48
|
-
if (provider === 'ollama') {
|
|
49
|
-
try {
|
|
50
|
-
// Remove /v1 if present to access the tags endpoint
|
|
51
|
-
const base = baseUrl.replace(/\/v1\/?$/, '');
|
|
52
|
-
const response = await fetch(`${base}/api/tags`);
|
|
53
|
-
if (response.ok) {
|
|
54
|
-
const data = (await response.json());
|
|
55
|
-
if (data.models && Array.isArray(data.models)) {
|
|
56
|
-
modelChoices = data.models.map((m) => m.name);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
// Fallback to manual input if connection fails
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (modelChoices.length > 0) {
|
|
65
|
-
const answer = await inquirer.prompt([
|
|
66
|
-
{
|
|
67
|
-
type: 'list',
|
|
68
|
-
name: 'model',
|
|
69
|
-
message: 'Select a local model:',
|
|
70
|
-
choices: modelChoices,
|
|
71
|
-
},
|
|
72
|
-
]);
|
|
73
|
-
model = answer.model;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const answer = await inquirer.prompt([
|
|
77
|
-
{
|
|
78
|
-
type: 'input',
|
|
79
|
-
name: 'model',
|
|
80
|
-
message: 'Enter the model name:',
|
|
81
|
-
default: preset.defaultModel,
|
|
82
|
-
},
|
|
83
|
-
]);
|
|
84
|
-
model = answer.model;
|
|
85
|
-
}
|
|
86
|
-
// Optional: separate model for Agent mode (tool calling)
|
|
87
|
-
const modelLower = model.trim().toLowerCase();
|
|
88
|
-
const suggestToolModel = provider === 'deepseek' && modelLower.includes('reasoner');
|
|
89
|
-
const { useAgentModel } = await inquirer.prompt([
|
|
90
|
-
{
|
|
91
|
-
type: 'confirm',
|
|
92
|
-
name: 'useAgentModel',
|
|
93
|
-
message: suggestToolModel
|
|
94
|
-
? 'Agent mode needs tool calling. Use a tool-capable model for Agent mode?'
|
|
95
|
-
: 'Use a separate model for Agent mode (tool calling)?',
|
|
96
|
-
default: suggestToolModel,
|
|
97
|
-
},
|
|
98
|
-
]);
|
|
99
|
-
let agentModel = '';
|
|
100
|
-
if (useAgentModel) {
|
|
101
|
-
const agentAnswer = await inquirer.prompt([
|
|
102
|
-
{
|
|
103
|
-
type: 'input',
|
|
104
|
-
name: 'agentModel',
|
|
105
|
-
message: 'Enter the Agent mode model name:',
|
|
106
|
-
default: suggestToolModel ? 'deepseek-chat' : model,
|
|
107
|
-
},
|
|
108
|
-
]);
|
|
109
|
-
agentModel = agentAnswer.agentModel.trim();
|
|
110
|
-
}
|
|
111
|
-
const { locale } = await inquirer.prompt([
|
|
112
|
-
{
|
|
113
|
-
type: 'list',
|
|
114
|
-
name: 'locale',
|
|
115
|
-
message: 'Select output language for commit messages:',
|
|
116
|
-
choices: [
|
|
117
|
-
{ name: 'English', value: 'en' },
|
|
118
|
-
{ name: '中文', value: 'zh' },
|
|
119
|
-
],
|
|
120
|
-
},
|
|
121
|
-
]);
|
|
122
|
-
const { configurePrompt } = await inquirer.prompt([
|
|
123
|
-
{
|
|
124
|
-
type: 'confirm',
|
|
125
|
-
name: 'configurePrompt',
|
|
126
|
-
message: 'Would you like to configure a custom system prompt?',
|
|
127
|
-
default: false,
|
|
128
|
-
},
|
|
129
|
-
]);
|
|
130
|
-
let customPrompt;
|
|
131
|
-
if (configurePrompt) {
|
|
132
|
-
const promptAnswer = await inquirer.prompt([
|
|
133
|
-
{
|
|
134
|
-
type: 'editor',
|
|
135
|
-
name: 'customPrompt',
|
|
136
|
-
message: 'Enter your custom system prompt:',
|
|
137
|
-
},
|
|
138
|
-
]);
|
|
139
|
-
customPrompt = promptAnswer.customPrompt.trim() || undefined;
|
|
140
|
-
}
|
|
141
|
-
const { enableFooter } = await inquirer.prompt([
|
|
142
|
-
{
|
|
143
|
-
type: 'confirm',
|
|
144
|
-
name: 'enableFooter',
|
|
145
|
-
message: 'Enable "Generated by git-ai" footer?',
|
|
146
|
-
default: true,
|
|
147
|
-
},
|
|
148
|
-
]);
|
|
149
|
-
const config = {
|
|
150
|
-
provider,
|
|
151
|
-
apiKey,
|
|
152
|
-
baseUrl,
|
|
153
|
-
model,
|
|
154
|
-
agentModel,
|
|
155
|
-
locale,
|
|
156
|
-
customPrompt,
|
|
157
|
-
enableFooter,
|
|
158
|
-
};
|
|
159
|
-
setConfig(config);
|
|
160
|
-
console.log(chalk.green('\n✅ Configuration saved successfully!'));
|
|
161
|
-
console.log(chalk.gray(` Config file: ${getConfigPath()}`));
|
|
162
|
-
console.log(chalk.cyan('\n💡 You can now use `git-ai` to generate commit messages.\n'));
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface ConfigGetOptions {
|
|
2
|
-
json?: boolean;
|
|
3
|
-
local?: boolean;
|
|
4
|
-
}
|
|
5
|
-
export interface ConfigSetOptions {
|
|
6
|
-
local?: boolean;
|
|
7
|
-
json?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function runConfigDescribe(options?: {
|
|
10
|
-
json?: boolean;
|
|
11
|
-
}): void;
|
|
12
|
-
export declare function runConfigGet(options?: ConfigGetOptions): void;
|
|
13
|
-
export declare function runConfigSet(key: string, value: string, options?: ConfigSetOptions): void;
|
|
14
|
-
//# sourceMappingURL=config_manage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config_manage.d.ts","sourceRoot":"","sources":["../../src/commands/config_manage.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyKD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAmExE;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CA+CjE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CA8F7F"}
|