@elsikora/commitizen-plugin-commitlint-ai 1.0.0-dev.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/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/cjs/ManualProcess.d.ts +6 -0
- package/dist/cjs/ManualProcess.d.ts.map +1 -0
- package/dist/cjs/ManualProcess.js +111 -0
- package/dist/cjs/ManualProcess.js.map +1 -0
- package/dist/cjs/Process.d.ts +6 -0
- package/dist/cjs/Process.d.ts.map +1 -0
- package/dist/cjs/Process.js +165 -0
- package/dist/cjs/Process.js.map +1 -0
- package/dist/cjs/Question.d.ts +46 -0
- package/dist/cjs/Question.d.ts.map +1 -0
- package/dist/cjs/SectionBody.d.ts +4 -0
- package/dist/cjs/SectionBody.d.ts.map +1 -0
- package/dist/cjs/SectionFooter.d.ts +13 -0
- package/dist/cjs/SectionFooter.d.ts.map +1 -0
- package/dist/cjs/SectionHeader.d.ts +15 -0
- package/dist/cjs/SectionHeader.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +70 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/services/commitlintConfig.d.ts +4 -0
- package/dist/cjs/services/commitlintConfig.d.ts.map +1 -0
- package/dist/cjs/services/commitlintConfig.js +198 -0
- package/dist/cjs/services/commitlintConfig.js.map +1 -0
- package/dist/cjs/services/commitlintValidator.d.ts +20 -0
- package/dist/cjs/services/commitlintValidator.d.ts.map +1 -0
- package/dist/cjs/services/commitlintValidator.js +145 -0
- package/dist/cjs/services/commitlintValidator.js.map +1 -0
- package/dist/cjs/services/getRuleQuestionConfig.d.ts +4 -0
- package/dist/cjs/services/getRuleQuestionConfig.d.ts.map +1 -0
- package/dist/cjs/services/llm/anthropic.d.ts +3 -0
- package/dist/cjs/services/llm/anthropic.d.ts.map +1 -0
- package/dist/cjs/services/llm/anthropic.js +118 -0
- package/dist/cjs/services/llm/anthropic.js.map +1 -0
- package/dist/cjs/services/llm/config.d.ts +5 -0
- package/dist/cjs/services/llm/config.d.ts.map +1 -0
- package/dist/cjs/services/llm/config.js +181 -0
- package/dist/cjs/services/llm/config.js.map +1 -0
- package/dist/cjs/services/llm/index.d.ts +6 -0
- package/dist/cjs/services/llm/index.d.ts.map +1 -0
- package/dist/cjs/services/llm/index.js +398 -0
- package/dist/cjs/services/llm/index.js.map +1 -0
- package/dist/cjs/services/llm/models.d.ts +34 -0
- package/dist/cjs/services/llm/models.d.ts.map +1 -0
- package/dist/cjs/services/llm/models.js +65 -0
- package/dist/cjs/services/llm/models.js.map +1 -0
- package/dist/cjs/services/llm/openai.d.ts +3 -0
- package/dist/cjs/services/llm/openai.d.ts.map +1 -0
- package/dist/cjs/services/llm/openai.js +111 -0
- package/dist/cjs/services/llm/openai.js.map +1 -0
- package/dist/cjs/services/llm/types.d.ts +71 -0
- package/dist/cjs/services/llm/types.d.ts.map +1 -0
- package/dist/cjs/store/defaultPromptConfigs.d.ts +33 -0
- package/dist/cjs/store/defaultPromptConfigs.d.ts.map +1 -0
- package/dist/cjs/store/defaultPromptConfigs.js +39 -0
- package/dist/cjs/store/defaultPromptConfigs.js.map +1 -0
- package/dist/cjs/store/prompts.d.ts +6 -0
- package/dist/cjs/store/prompts.d.ts.map +1 -0
- package/dist/cjs/store/prompts.js +40 -0
- package/dist/cjs/store/prompts.js.map +1 -0
- package/dist/cjs/store/rules.d.ts +7 -0
- package/dist/cjs/store/rules.d.ts.map +1 -0
- package/dist/cjs/types.d.ts +3 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/utils/case-function.d.ts +9 -0
- package/dist/cjs/utils/case-function.d.ts.map +1 -0
- package/dist/cjs/utils/full-stop-function.d.ts +9 -0
- package/dist/cjs/utils/full-stop-function.d.ts.map +1 -0
- package/dist/cjs/utils/leading-blank-function.d.ts +8 -0
- package/dist/cjs/utils/leading-blank-function.d.ts.map +1 -0
- package/dist/cjs/utils/rules.d.ts +26 -0
- package/dist/cjs/utils/rules.d.ts.map +1 -0
- package/dist/esm/ManualProcess.d.ts +6 -0
- package/dist/esm/ManualProcess.d.ts.map +1 -0
- package/dist/esm/ManualProcess.js +107 -0
- package/dist/esm/ManualProcess.js.map +1 -0
- package/dist/esm/Process.d.ts +6 -0
- package/dist/esm/Process.d.ts.map +1 -0
- package/dist/esm/Process.js +161 -0
- package/dist/esm/Process.js.map +1 -0
- package/dist/esm/Question.d.ts +46 -0
- package/dist/esm/Question.d.ts.map +1 -0
- package/dist/esm/SectionBody.d.ts +4 -0
- package/dist/esm/SectionBody.d.ts.map +1 -0
- package/dist/esm/SectionFooter.d.ts +13 -0
- package/dist/esm/SectionFooter.d.ts.map +1 -0
- package/dist/esm/SectionHeader.d.ts +15 -0
- package/dist/esm/SectionHeader.d.ts.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +67 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/services/commitlintConfig.d.ts +4 -0
- package/dist/esm/services/commitlintConfig.d.ts.map +1 -0
- package/dist/esm/services/commitlintConfig.js +196 -0
- package/dist/esm/services/commitlintConfig.js.map +1 -0
- package/dist/esm/services/commitlintValidator.d.ts +20 -0
- package/dist/esm/services/commitlintValidator.d.ts.map +1 -0
- package/dist/esm/services/commitlintValidator.js +142 -0
- package/dist/esm/services/commitlintValidator.js.map +1 -0
- package/dist/esm/services/getRuleQuestionConfig.d.ts +4 -0
- package/dist/esm/services/getRuleQuestionConfig.d.ts.map +1 -0
- package/dist/esm/services/llm/anthropic.d.ts +3 -0
- package/dist/esm/services/llm/anthropic.d.ts.map +1 -0
- package/dist/esm/services/llm/anthropic.js +116 -0
- package/dist/esm/services/llm/anthropic.js.map +1 -0
- package/dist/esm/services/llm/config.d.ts +5 -0
- package/dist/esm/services/llm/config.d.ts.map +1 -0
- package/dist/esm/services/llm/config.js +178 -0
- package/dist/esm/services/llm/config.js.map +1 -0
- package/dist/esm/services/llm/index.d.ts +6 -0
- package/dist/esm/services/llm/index.d.ts.map +1 -0
- package/dist/esm/services/llm/index.js +393 -0
- package/dist/esm/services/llm/index.js.map +1 -0
- package/dist/esm/services/llm/models.d.ts +34 -0
- package/dist/esm/services/llm/models.d.ts.map +1 -0
- package/dist/esm/services/llm/models.js +60 -0
- package/dist/esm/services/llm/models.js.map +1 -0
- package/dist/esm/services/llm/openai.d.ts +3 -0
- package/dist/esm/services/llm/openai.d.ts.map +1 -0
- package/dist/esm/services/llm/openai.js +109 -0
- package/dist/esm/services/llm/openai.js.map +1 -0
- package/dist/esm/services/llm/types.d.ts +71 -0
- package/dist/esm/services/llm/types.d.ts.map +1 -0
- package/dist/esm/store/defaultPromptConfigs.d.ts +33 -0
- package/dist/esm/store/defaultPromptConfigs.d.ts.map +1 -0
- package/dist/esm/store/defaultPromptConfigs.js +35 -0
- package/dist/esm/store/defaultPromptConfigs.js.map +1 -0
- package/dist/esm/store/prompts.d.ts +6 -0
- package/dist/esm/store/prompts.d.ts.map +1 -0
- package/dist/esm/store/prompts.js +38 -0
- package/dist/esm/store/prompts.js.map +1 -0
- package/dist/esm/store/rules.d.ts +7 -0
- package/dist/esm/store/rules.d.ts.map +1 -0
- package/dist/esm/types.d.ts +3 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/utils/case-function.d.ts +9 -0
- package/dist/esm/utils/case-function.d.ts.map +1 -0
- package/dist/esm/utils/full-stop-function.d.ts +9 -0
- package/dist/esm/utils/full-stop-function.d.ts.map +1 -0
- package/dist/esm/utils/leading-blank-function.d.ts +8 -0
- package/dist/esm/utils/leading-blank-function.d.ts.map +1 -0
- package/dist/esm/utils/rules.d.ts +26 -0
- package/dist/esm/utils/rules.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/index.cjs +6 -0
- package/package.json +101 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_fs = require('node:fs');
|
|
4
|
+
var node_path = require('node:path');
|
|
5
|
+
var chalk = require('chalk');
|
|
6
|
+
|
|
7
|
+
// Store config in project directory
|
|
8
|
+
const CONFIG_DIR = "./.elsikora";
|
|
9
|
+
const CONFIG_FILE = node_path.join(CONFIG_DIR, "commitlint-ai.config.js");
|
|
10
|
+
// In-memory cache
|
|
11
|
+
let llmConfig = null;
|
|
12
|
+
// Track if we've already shown mode error
|
|
13
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
14
|
+
let modeErrorShown = false;
|
|
15
|
+
// Check for API keys in environment variables
|
|
16
|
+
const getApiKeyFromEnvironment = (provider) => {
|
|
17
|
+
try {
|
|
18
|
+
if (typeof process === "undefined" || !process?.env) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (provider === "openai") {
|
|
22
|
+
return process.env.OPENAI_API_KEY ?? null;
|
|
23
|
+
}
|
|
24
|
+
else if (provider === "anthropic") {
|
|
25
|
+
return process.env.ANTHROPIC_API_KEY ?? null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.warn("Error accessing environment variables:", error);
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
// Try to load config from file
|
|
34
|
+
const loadConfigFromFile = () => {
|
|
35
|
+
try {
|
|
36
|
+
if (node_fs.existsSync(CONFIG_FILE)) {
|
|
37
|
+
// Check if there's an old JSON file and migrate it
|
|
38
|
+
const oldJsonFile = node_path.join(CONFIG_DIR, "commitlint-ai.json");
|
|
39
|
+
if (node_fs.existsSync(oldJsonFile)) {
|
|
40
|
+
try {
|
|
41
|
+
const oldConfigString = node_fs.readFileSync(oldJsonFile, "utf8");
|
|
42
|
+
const oldConfig = JSON.parse(oldConfigString);
|
|
43
|
+
// Save to the new JS format
|
|
44
|
+
saveConfigToFile({
|
|
45
|
+
...oldConfig,
|
|
46
|
+
apiKey: "",
|
|
47
|
+
});
|
|
48
|
+
return oldConfig;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Ignore errors with old file
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Parse the ESM module format
|
|
55
|
+
const configContent = node_fs.readFileSync(CONFIG_FILE, "utf8");
|
|
56
|
+
try {
|
|
57
|
+
// Use a safer approach than regex + JSON.parse
|
|
58
|
+
// Execute the file as a JavaScript module using Node's module system
|
|
59
|
+
// This is a workaround since we can't directly import a dynamic path in ESM
|
|
60
|
+
// Simple approach: parse the JS object manually
|
|
61
|
+
const objectPattern = /export\s+default\s+(\{[\s\S]*?\});/;
|
|
62
|
+
const match = objectPattern.exec(configContent);
|
|
63
|
+
if (match?.[1]) {
|
|
64
|
+
// Extract the object text
|
|
65
|
+
const objectText = match[1];
|
|
66
|
+
// Extract property assignments with a more robust approach
|
|
67
|
+
const properties = {};
|
|
68
|
+
// Match each property in the format: key: value,
|
|
69
|
+
// eslint-disable-next-line @elsikora-sonar/slow-regex
|
|
70
|
+
const propertyRegex = /\s*(\w+)\s*:\s*["']?([^,"'}\s]+)["']?\s*,?/g;
|
|
71
|
+
// eslint-disable-next-line @elsikora-typescript/typedef
|
|
72
|
+
let propertyMatch;
|
|
73
|
+
// eslint-disable-next-line @elsikora-typescript/no-unsafe-argument
|
|
74
|
+
while ((propertyMatch = propertyRegex.exec(objectText)) !== null) {
|
|
75
|
+
const [, key, value] = propertyMatch;
|
|
76
|
+
// Remove quotes if present
|
|
77
|
+
// eslint-disable-next-line @elsikora-sonar/anchor-precedence,@elsikora-typescript/no-unsafe-assignment,@elsikora-typescript/no-unsafe-member-access,@elsikora-typescript/no-unsafe-call
|
|
78
|
+
const cleanValue = value.replaceAll(/^["']|["']$/g, "");
|
|
79
|
+
// eslint-disable-next-line @elsikora-typescript/no-unsafe-assignment,@elsikora-typescript/no-unsafe-member-access
|
|
80
|
+
properties[key] = cleanValue;
|
|
81
|
+
}
|
|
82
|
+
// Validate mode if present (but only show the error once)
|
|
83
|
+
if (properties.mode && properties.mode !== "auto" && properties.mode !== "manual") {
|
|
84
|
+
if (!modeErrorShown) {
|
|
85
|
+
// eslint-disable-next-line @elsikora-typescript/restrict-template-expressions
|
|
86
|
+
console.log(chalk.yellow(`Invalid mode "${properties.mode}" in config. Valid values are "auto" or "manual". Using default mode.`));
|
|
87
|
+
modeErrorShown = true;
|
|
88
|
+
}
|
|
89
|
+
properties.mode = "auto";
|
|
90
|
+
}
|
|
91
|
+
return properties;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
catch (parseError) {
|
|
96
|
+
console.warn("Error parsing config file:", parseError);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.warn("Error loading LLM config from file:", error);
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
};
|
|
106
|
+
// Save config to file (without API key)
|
|
107
|
+
const saveConfigToFile = (config) => {
|
|
108
|
+
try {
|
|
109
|
+
if (!node_fs.existsSync(CONFIG_DIR)) {
|
|
110
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
111
|
+
node_fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
// Only store provider, model, and mode (not the API key)
|
|
114
|
+
const storageConfig = {
|
|
115
|
+
mode: config.mode,
|
|
116
|
+
model: config.model,
|
|
117
|
+
provider: config.provider,
|
|
118
|
+
};
|
|
119
|
+
// Format as an ESM module with proper JS object format (no quotes around keys)
|
|
120
|
+
// Always include the mode field, using 'auto' as default if not specified
|
|
121
|
+
const jsContent = `export default {
|
|
122
|
+
provider: ${JSON.stringify(storageConfig.provider)},
|
|
123
|
+
model: ${JSON.stringify(storageConfig.model)},
|
|
124
|
+
mode: ${JSON.stringify(storageConfig.mode ?? "auto")}
|
|
125
|
+
};`;
|
|
126
|
+
node_fs.writeFileSync(CONFIG_FILE, jsContent, "utf8");
|
|
127
|
+
// Remove old JSON file if it exists
|
|
128
|
+
const oldJsonFile = node_path.join(CONFIG_DIR, "commitlint-ai.json");
|
|
129
|
+
if (node_fs.existsSync(oldJsonFile)) {
|
|
130
|
+
try {
|
|
131
|
+
// Use fs.unlink to delete the file - but we'll use writeFileSync with empty content instead
|
|
132
|
+
// to avoid needing to import fs.unlink
|
|
133
|
+
node_fs.writeFileSync(oldJsonFile, "", "utf8");
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Ignore errors with old file deletion
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.warn("Error saving LLM config to file:", error);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const setLLMConfig = (config) => {
|
|
145
|
+
llmConfig = config;
|
|
146
|
+
if (config) {
|
|
147
|
+
// For debugging
|
|
148
|
+
console.log("Saving config:", JSON.stringify({ ...config, apiKey: "[REDACTED]" }));
|
|
149
|
+
saveConfigToFile(config);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const getLLMConfig = () => {
|
|
153
|
+
// If we already have a config in memory, return it
|
|
154
|
+
if (llmConfig) {
|
|
155
|
+
return llmConfig;
|
|
156
|
+
}
|
|
157
|
+
// Otherwise try to load from file
|
|
158
|
+
const fileConfig = loadConfigFromFile();
|
|
159
|
+
if (fileConfig) {
|
|
160
|
+
// Check if we have API key in environment
|
|
161
|
+
const apiKey = getApiKeyFromEnvironment(fileConfig.provider);
|
|
162
|
+
// We have both the saved config and an API key
|
|
163
|
+
if (apiKey) {
|
|
164
|
+
llmConfig = {
|
|
165
|
+
...fileConfig,
|
|
166
|
+
apiKey,
|
|
167
|
+
};
|
|
168
|
+
return llmConfig;
|
|
169
|
+
}
|
|
170
|
+
// Return the partial config (without API key) so we can ask for it
|
|
171
|
+
return {
|
|
172
|
+
...fileConfig,
|
|
173
|
+
apiKey: "", // Empty string signals that we need to ask for the key
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
exports.getLLMConfig = getLLMConfig;
|
|
180
|
+
exports.setLLMConfig = setLLMConfig;
|
|
181
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../../../src/services/llm/config.ts"],"sourcesContent":[null],"names":["join","existsSync","readFileSync","mkdirSync","writeFileSync"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CommitConfig, LLMPromptContext } from "./types.js";
|
|
2
|
+
export { getLLMConfig, setLLMConfig } from "./config.js";
|
|
3
|
+
export type * from "./types.js";
|
|
4
|
+
export declare function generateCommitMessage(context: LLMPromptContext): Promise<CommitConfig>;
|
|
5
|
+
export declare function selectLLMProvider(inquirer: any): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/llm/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAA+B,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAe3G,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,mBAAmB,YAAY,CAAC;AAEhC,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyD5F;AAGD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoWpE"}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var node_child_process = require('node:child_process');
|
|
4
|
+
var node_util = require('node:util');
|
|
5
|
+
var chalk = require('chalk');
|
|
6
|
+
var anthropic = require('./anthropic.js');
|
|
7
|
+
var config = require('./config.js');
|
|
8
|
+
var models = require('./models.js');
|
|
9
|
+
var openai = require('./openai.js');
|
|
10
|
+
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
const execAsync = node_util.promisify(node_child_process.exec);
|
|
13
|
+
async function generateCommitMessage(context) {
|
|
14
|
+
const config$1 = config.getLLMConfig();
|
|
15
|
+
if (!config$1) {
|
|
16
|
+
throw new Error("LLM not configured. Please run selectLLMProvider first.");
|
|
17
|
+
}
|
|
18
|
+
// Check if we're in manual mode
|
|
19
|
+
if (config$1.mode === "manual") {
|
|
20
|
+
throw new Error("Manual mode enabled. Skipping AI generation.");
|
|
21
|
+
}
|
|
22
|
+
// Validate provider only, not model
|
|
23
|
+
if (!isValidProvider(config$1.provider)) {
|
|
24
|
+
throw new Error(`Invalid LLM provider: ${config$1.provider}. Please reconfigure with a valid provider.`);
|
|
25
|
+
}
|
|
26
|
+
// Get git diff for better context
|
|
27
|
+
try {
|
|
28
|
+
// Get staged files for scope inference
|
|
29
|
+
const { stdout: stagedFiles } = await execAsync("git diff --name-only --cached");
|
|
30
|
+
context.files = stagedFiles;
|
|
31
|
+
// Get directory structure for better scope inference
|
|
32
|
+
if (stagedFiles.trim()) {
|
|
33
|
+
const directories = stagedFiles
|
|
34
|
+
.split("\n")
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.map((file) => {
|
|
37
|
+
const parts = file.split("/");
|
|
38
|
+
return parts.length > 1 ? parts[0] : "root";
|
|
39
|
+
})
|
|
40
|
+
.filter((v, index, a) => a.indexOf(v) === index) // Remove duplicates
|
|
41
|
+
.join(", ");
|
|
42
|
+
// eslint-disable-next-line @elsikora-typescript/restrict-plus-operands
|
|
43
|
+
context.files += `\n\nModified directories: ${directories}`;
|
|
44
|
+
}
|
|
45
|
+
// Get the diff for content analysis
|
|
46
|
+
const { stdout: diff } = await execAsync("git diff --cached");
|
|
47
|
+
if (!context.diff)
|
|
48
|
+
context.diff = diff;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
console.warn("Failed to get git diff information, continuing without it");
|
|
52
|
+
}
|
|
53
|
+
// Generate commit with selected provider
|
|
54
|
+
if (config$1.provider === "openai") {
|
|
55
|
+
return openai.generateCommitWithOpenAI(config$1.apiKey, config$1.model, context);
|
|
56
|
+
}
|
|
57
|
+
else if (config$1.provider === "anthropic") {
|
|
58
|
+
return anthropic.generateCommitWithAnthropic(config$1.apiKey, config$1.model, context);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// This shouldn't happen due to the validation above, but just in case
|
|
62
|
+
throw new Error(`Unsupported provider: ${config$1.provider}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-module-boundary-types
|
|
66
|
+
async function selectLLMProvider(inquirer) {
|
|
67
|
+
// Check if we have a partial config
|
|
68
|
+
const existingConfig = config.getLLMConfig();
|
|
69
|
+
let provider;
|
|
70
|
+
let model;
|
|
71
|
+
let mode = "auto"; // Default mode
|
|
72
|
+
if (existingConfig) {
|
|
73
|
+
// We have a saved config
|
|
74
|
+
provider = existingConfig.provider;
|
|
75
|
+
model = existingConfig.model;
|
|
76
|
+
mode = existingConfig.mode ?? "auto";
|
|
77
|
+
const modelDisplay = model ?? "[not set]";
|
|
78
|
+
// eslint-disable-next-line @elsikora-sonar/no-nested-conditional
|
|
79
|
+
const providerDisplay = provider ? (provider === "openai" ? "OpenAI" : "Anthropic") : "[not set]";
|
|
80
|
+
const modeDisplay = mode || "auto";
|
|
81
|
+
// First check if we want to use the existing config at all
|
|
82
|
+
const { useExisting } = await inquirer.prompt([
|
|
83
|
+
{
|
|
84
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
85
|
+
default: true,
|
|
86
|
+
message: `Use saved configuration? (Provider: ${providerDisplay}, Model: ${modelDisplay}, Mode: ${modeDisplay})`,
|
|
87
|
+
name: "useExisting",
|
|
88
|
+
type: "confirm",
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
if (useExisting) {
|
|
92
|
+
// We're using existing config, but we need to check if it's complete
|
|
93
|
+
// We have a provider but it's invalid
|
|
94
|
+
if (provider && !isValidProvider(provider)) {
|
|
95
|
+
console.log(chalk.yellow(`Provider "${provider}" is not supported. Please select a valid provider below.`));
|
|
96
|
+
// Fall through to ask for a new provider
|
|
97
|
+
}
|
|
98
|
+
else if (!provider) {
|
|
99
|
+
console.log(chalk.yellow(`No AI provider specified in configuration. Please select a provider below.`));
|
|
100
|
+
// Fall through to ask for a provider
|
|
101
|
+
}
|
|
102
|
+
else if (!model && mode === "auto") {
|
|
103
|
+
// We have a valid provider but no model in auto mode
|
|
104
|
+
console.log(chalk.yellow("No model saved in configuration. Please select a model."));
|
|
105
|
+
if (provider === "openai") {
|
|
106
|
+
const response = await inquirer.prompt([
|
|
107
|
+
{
|
|
108
|
+
choices: models.OPENAI_MODEL_CHOICES,
|
|
109
|
+
message: "Select an OpenAI model:",
|
|
110
|
+
name: "model",
|
|
111
|
+
type: "list",
|
|
112
|
+
},
|
|
113
|
+
]);
|
|
114
|
+
if (response.model === "custom") {
|
|
115
|
+
const customResponse = await inquirer.prompt([
|
|
116
|
+
{
|
|
117
|
+
message: "Enter the OpenAI model name:",
|
|
118
|
+
name: "customModel",
|
|
119
|
+
type: "input",
|
|
120
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type
|
|
121
|
+
validate: (input) => {
|
|
122
|
+
if (!input)
|
|
123
|
+
return "Model name is required";
|
|
124
|
+
return true;
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
]);
|
|
128
|
+
model = customResponse.customModel;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
model = response.model;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (provider === "anthropic") {
|
|
135
|
+
const response = await inquirer.prompt([
|
|
136
|
+
{
|
|
137
|
+
choices: models.ANTHROPIC_MODEL_CHOICES,
|
|
138
|
+
message: "Select an Anthropic model:",
|
|
139
|
+
name: "model",
|
|
140
|
+
type: "list",
|
|
141
|
+
},
|
|
142
|
+
]);
|
|
143
|
+
if (response.model === "custom") {
|
|
144
|
+
const customResponse = await inquirer.prompt([
|
|
145
|
+
{
|
|
146
|
+
message: "Enter the Anthropic model name:",
|
|
147
|
+
name: "customModel",
|
|
148
|
+
type: "input",
|
|
149
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type
|
|
150
|
+
validate: (input) => {
|
|
151
|
+
if (!input)
|
|
152
|
+
return "Model name is required";
|
|
153
|
+
return true;
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
]);
|
|
157
|
+
model = customResponse.customModel;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
model = response.model;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Update the existing config with the selected model
|
|
164
|
+
existingConfig.model = model;
|
|
165
|
+
// Save the updated config to file with the selected model
|
|
166
|
+
config.setLLMConfig({
|
|
167
|
+
apiKey: existingConfig.apiKey || "",
|
|
168
|
+
mode: existingConfig.mode ?? "auto",
|
|
169
|
+
model,
|
|
170
|
+
provider: existingConfig.provider,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// In manual mode, we don't need a model or provider, so skip forward
|
|
174
|
+
if (mode === "manual") {
|
|
175
|
+
// Even in manual mode, save the config to remember the mode choice
|
|
176
|
+
config.setLLMConfig({
|
|
177
|
+
apiKey: "",
|
|
178
|
+
mode: "manual",
|
|
179
|
+
model: model || "",
|
|
180
|
+
provider: provider || "",
|
|
181
|
+
});
|
|
182
|
+
console.log(chalk.green(`✅ Manual commit mode configured successfully!`));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Now check if we need an API key (only in auto mode)
|
|
186
|
+
if (existingConfig.apiKey) {
|
|
187
|
+
// We have a complete config with API key
|
|
188
|
+
console.log(chalk.green(`✅ Using existing configuration.`));
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Double-check environment variables again
|
|
193
|
+
const environmentVariableName = provider === "openai" ? "OPENAI_API_KEY" : "ANTHROPIC_API_KEY";
|
|
194
|
+
let environmentApiKey;
|
|
195
|
+
try {
|
|
196
|
+
if (typeof process !== "undefined" && process?.env) {
|
|
197
|
+
environmentApiKey = provider === "openai" ? process.env.OPENAI_API_KEY : process.env.ANTHROPIC_API_KEY;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Ignore error
|
|
202
|
+
}
|
|
203
|
+
if (environmentApiKey) {
|
|
204
|
+
// Found API key in environment variable
|
|
205
|
+
console.log(chalk.green(`✅ Found ${provider === "openai" ? "OpenAI" : "Anthropic"} API key in environment variable ${environmentVariableName}`));
|
|
206
|
+
existingConfig.apiKey = environmentApiKey;
|
|
207
|
+
config.setLLMConfig(existingConfig);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
console.log(chalk.yellow(`No ${provider === "openai" ? "OpenAI" : "Anthropic"} API key found in environment.`));
|
|
211
|
+
console.log(chalk.blue(`Tip: Set the ${environmentVariableName} environment variable to avoid entering your API key each time.`));
|
|
212
|
+
console.log(chalk.blue(`You can create a .env file in your project root with ${environmentVariableName}=your-key-here`));
|
|
213
|
+
const { apiKey } = await inquirer.prompt([
|
|
214
|
+
{
|
|
215
|
+
message: `Enter your ${provider === "openai" ? "OpenAI" : "Anthropic"} API key:`,
|
|
216
|
+
name: "apiKey",
|
|
217
|
+
type: "password",
|
|
218
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type,@elsikora-sonar/function-return-type
|
|
219
|
+
validate: (input) => {
|
|
220
|
+
if (!input)
|
|
221
|
+
return "API key is required";
|
|
222
|
+
if (provider === "openai" && !input.startsWith("sk-")) {
|
|
223
|
+
return 'OpenAI API keys typically start with "sk-"';
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
]);
|
|
229
|
+
// Update the config with the API key for this session only
|
|
230
|
+
// @ts-ignore
|
|
231
|
+
const config$1 = { apiKey, mode, model, provider };
|
|
232
|
+
config.setLLMConfig(config$1);
|
|
233
|
+
console.log(chalk.green(`✅ Configuration completed successfully!`));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// No config or user wants to change it, run the full setup
|
|
239
|
+
// First ask for commit mode preference
|
|
240
|
+
const modeResponse = await inquirer.prompt([
|
|
241
|
+
{
|
|
242
|
+
choices: [
|
|
243
|
+
{ name: "AI-powered (auto)", value: "auto" },
|
|
244
|
+
{ name: "Manual (traditional commitizen)", value: "manual" },
|
|
245
|
+
],
|
|
246
|
+
default: "auto",
|
|
247
|
+
message: "Select your preferred commit mode:",
|
|
248
|
+
name: "mode",
|
|
249
|
+
type: "list",
|
|
250
|
+
},
|
|
251
|
+
]);
|
|
252
|
+
mode = modeResponse.mode;
|
|
253
|
+
// If the user selected manual mode, we don't need provider or model
|
|
254
|
+
if (mode === "manual") {
|
|
255
|
+
// Save minimal config with just the mode
|
|
256
|
+
// Note: explicit provider/model values to make debugging easier
|
|
257
|
+
config.setLLMConfig({
|
|
258
|
+
apiKey: "",
|
|
259
|
+
mode: "manual",
|
|
260
|
+
model: "none",
|
|
261
|
+
// @ts-ignore
|
|
262
|
+
provider: "none",
|
|
263
|
+
});
|
|
264
|
+
console.log(chalk.green(`✅ Manual commit mode configured successfully!`));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// Only proceed with provider/model selection if in auto mode
|
|
268
|
+
const providerResponse = await inquirer.prompt([
|
|
269
|
+
{
|
|
270
|
+
choices: [
|
|
271
|
+
{ name: "OpenAI", value: "openai" },
|
|
272
|
+
{ name: "Anthropic", value: "anthropic" },
|
|
273
|
+
],
|
|
274
|
+
message: "Select an LLM provider:",
|
|
275
|
+
name: "provider",
|
|
276
|
+
type: "list",
|
|
277
|
+
},
|
|
278
|
+
]);
|
|
279
|
+
provider = providerResponse.provider;
|
|
280
|
+
// Check if API key is in environment variables
|
|
281
|
+
let environmentApiKey = null;
|
|
282
|
+
const environmentVariableName = provider === "openai" ? "OPENAI_API_KEY" : "ANTHROPIC_API_KEY";
|
|
283
|
+
try {
|
|
284
|
+
if (typeof process !== "undefined" && process?.env) {
|
|
285
|
+
environmentApiKey = provider === "openai" ? (process.env.OPENAI_API_KEY ?? null) : (process.env.ANTHROPIC_API_KEY ?? null);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
console.warn("Error accessing environment variables:", error);
|
|
290
|
+
}
|
|
291
|
+
let apiKey;
|
|
292
|
+
if (environmentApiKey) {
|
|
293
|
+
console.log(chalk.green(`✅ Found ${provider === "openai" ? "OpenAI" : "Anthropic"} API key in environment variable ${environmentVariableName}`));
|
|
294
|
+
apiKey = environmentApiKey;
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
console.log(chalk.yellow(`No ${provider === "openai" ? "OpenAI" : "Anthropic"} API key found in environment.`));
|
|
298
|
+
console.log(chalk.blue(`Tip: Set the ${environmentVariableName} environment variable to avoid entering your API key each time.`));
|
|
299
|
+
const response = await inquirer.prompt([
|
|
300
|
+
{
|
|
301
|
+
message: `Enter your ${provider === "openai" ? "OpenAI" : "Anthropic"} API key:`,
|
|
302
|
+
name: "apiKey",
|
|
303
|
+
type: "password",
|
|
304
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type,@elsikora-sonar/function-return-type
|
|
305
|
+
validate: (input) => {
|
|
306
|
+
if (!input)
|
|
307
|
+
return "API key is required";
|
|
308
|
+
if (provider === "openai" && !input.startsWith("sk-")) {
|
|
309
|
+
return 'OpenAI API keys typically start with "sk-"';
|
|
310
|
+
}
|
|
311
|
+
return true;
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
]);
|
|
315
|
+
apiKey = response.apiKey;
|
|
316
|
+
}
|
|
317
|
+
// Now get models based on provider
|
|
318
|
+
if (provider === "openai") {
|
|
319
|
+
// Display model selection
|
|
320
|
+
const response = await inquirer.prompt([
|
|
321
|
+
{
|
|
322
|
+
choices: models.OPENAI_MODEL_CHOICES,
|
|
323
|
+
message: "Select an OpenAI model:",
|
|
324
|
+
name: "model",
|
|
325
|
+
type: "list",
|
|
326
|
+
},
|
|
327
|
+
]);
|
|
328
|
+
// If user selected custom, ask for model name
|
|
329
|
+
if (response.model === "custom") {
|
|
330
|
+
const customResponse = await inquirer.prompt([
|
|
331
|
+
{
|
|
332
|
+
message: "Enter the OpenAI model name:",
|
|
333
|
+
name: "customModel",
|
|
334
|
+
type: "input",
|
|
335
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type
|
|
336
|
+
validate: (input) => {
|
|
337
|
+
if (!input)
|
|
338
|
+
return "Model name is required";
|
|
339
|
+
return true;
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
]);
|
|
343
|
+
model = customResponse.customModel;
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
model = response.model;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
else if (provider === "anthropic") {
|
|
350
|
+
// For Anthropic, use hardcoded list
|
|
351
|
+
const response = await inquirer.prompt([
|
|
352
|
+
{
|
|
353
|
+
choices: models.ANTHROPIC_MODEL_CHOICES,
|
|
354
|
+
message: "Select an Anthropic model:",
|
|
355
|
+
name: "model",
|
|
356
|
+
type: "list",
|
|
357
|
+
},
|
|
358
|
+
]);
|
|
359
|
+
// If user selected custom, ask for model name
|
|
360
|
+
if (response.model === "custom") {
|
|
361
|
+
const customResponse = await inquirer.prompt([
|
|
362
|
+
{
|
|
363
|
+
message: "Enter the Anthropic model name:",
|
|
364
|
+
name: "customModel",
|
|
365
|
+
type: "input",
|
|
366
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type
|
|
367
|
+
validate: (input) => {
|
|
368
|
+
if (!input)
|
|
369
|
+
return "Model name is required";
|
|
370
|
+
return true;
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
]);
|
|
374
|
+
model = customResponse.customModel;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
model = response.model;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
throw new Error(`Invalid provider: ${provider}`);
|
|
382
|
+
}
|
|
383
|
+
// Save the complete config
|
|
384
|
+
// @ts-ignore
|
|
385
|
+
const config$1 = { apiKey, mode, model, provider };
|
|
386
|
+
config.setLLMConfig(config$1);
|
|
387
|
+
console.log(chalk.green(`✅ AI-powered commit mode configured successfully!`));
|
|
388
|
+
}
|
|
389
|
+
// We'll only validate provider, not model
|
|
390
|
+
function isValidProvider(provider) {
|
|
391
|
+
return provider === "openai" || provider === "anthropic";
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
exports.getLLMConfig = config.getLLMConfig;
|
|
395
|
+
exports.setLLMConfig = config.setLLMConfig;
|
|
396
|
+
exports.generateCommitMessage = generateCommitMessage;
|
|
397
|
+
exports.selectLLMProvider = selectLLMProvider;
|
|
398
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/services/llm/index.ts"],"sourcesContent":[null],"names":["promisify","exec","config","getLLMConfig","generateCommitWithOpenAI","generateCommitWithAnthropic","OPENAI_MODEL_CHOICES","ANTHROPIC_MODEL_CHOICES","setLLMConfig"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized model definitions for LLM providers
|
|
3
|
+
*/
|
|
4
|
+
export declare const OPENAI_MODELS: {
|
|
5
|
+
GPT35_TURBO: string;
|
|
6
|
+
GPT4: string;
|
|
7
|
+
GPT4_TURBO: string;
|
|
8
|
+
GPT45_PREVIEW: string;
|
|
9
|
+
GPT4O: string;
|
|
10
|
+
GPT4O_MINI: string;
|
|
11
|
+
O1: string;
|
|
12
|
+
O1_MINI: string;
|
|
13
|
+
O3_MINI: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const ANTHROPIC_MODELS: {
|
|
16
|
+
CLAUDE_3_HAIKU: string;
|
|
17
|
+
CLAUDE_3_OPUS: string;
|
|
18
|
+
CLAUDE_3_SONNET: string;
|
|
19
|
+
CLAUDE_35_HAIKU: string;
|
|
20
|
+
CLAUDE_35_SONNET: string;
|
|
21
|
+
CLAUDE_35_SONNET_V2: string;
|
|
22
|
+
CLAUDE_37_SONNET: string;
|
|
23
|
+
};
|
|
24
|
+
export declare const OPENAI_MODEL_CHOICES: Array<{
|
|
25
|
+
name: string;
|
|
26
|
+
value: string;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const ANTHROPIC_MODEL_CHOICES: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function getAnthropicModels(): Array<string>;
|
|
33
|
+
export declare function getOpenAIModels(): Array<string>;
|
|
34
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/services/llm/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,aAAa,EAAE;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAoBhB,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAczB,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAWA,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CASA,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,CAElD;AAGD,wBAAgB,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,CAE/C"}
|