@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,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Centralized model definitions for LLM providers
|
|
5
|
+
*/
|
|
6
|
+
// OpenAI Models
|
|
7
|
+
const OPENAI_MODELS = {
|
|
8
|
+
// GPT-3.5 models
|
|
9
|
+
GPT35_TURBO: "gpt-3.5-turbo",
|
|
10
|
+
// Legacy GPT-4 models
|
|
11
|
+
GPT4: "gpt-4",
|
|
12
|
+
GPT4_TURBO: "gpt-4-turbo",
|
|
13
|
+
// GPT-4.5 Preview
|
|
14
|
+
GPT45_PREVIEW: "gpt-4.5-preview",
|
|
15
|
+
// GPT-4o Family
|
|
16
|
+
GPT4O: "gpt-4o",
|
|
17
|
+
GPT4O_MINI: "gpt-4o-mini",
|
|
18
|
+
// O1 Family (Next-gen models)
|
|
19
|
+
O1: "o1",
|
|
20
|
+
O1_MINI: "o1-mini",
|
|
21
|
+
O3_MINI: "o3-mini",
|
|
22
|
+
};
|
|
23
|
+
// Anthropic Models
|
|
24
|
+
const ANTHROPIC_MODELS = {
|
|
25
|
+
CLAUDE_3_HAIKU: "claude-3-haiku-20240307",
|
|
26
|
+
// Claude 3 Family
|
|
27
|
+
CLAUDE_3_OPUS: "claude-3-opus-20240229",
|
|
28
|
+
CLAUDE_3_SONNET: "claude-3-sonnet-20240229",
|
|
29
|
+
CLAUDE_35_HAIKU: "claude-3-5-haiku-20241022",
|
|
30
|
+
CLAUDE_35_SONNET: "claude-3-5-sonnet-20240620",
|
|
31
|
+
// Claude 3.5 Family
|
|
32
|
+
CLAUDE_35_SONNET_V2: "claude-3-5-sonnet-20241022",
|
|
33
|
+
// Claude 3.7 Family
|
|
34
|
+
CLAUDE_37_SONNET: "claude-3-7-sonnet-20250219",
|
|
35
|
+
};
|
|
36
|
+
// Model choices for OpenAI UI
|
|
37
|
+
const OPENAI_MODEL_CHOICES = [
|
|
38
|
+
{ name: "GPT-4o", value: OPENAI_MODELS.GPT4O },
|
|
39
|
+
{ name: "GPT-4o Mini", value: OPENAI_MODELS.GPT4O_MINI },
|
|
40
|
+
{ name: "O1", value: OPENAI_MODELS.O1 },
|
|
41
|
+
{ name: "O1 Mini", value: OPENAI_MODELS.O1_MINI },
|
|
42
|
+
{ name: "O3 Mini", value: OPENAI_MODELS.O3_MINI },
|
|
43
|
+
{ name: "GPT-4.5 Preview", value: OPENAI_MODELS.GPT45_PREVIEW },
|
|
44
|
+
{ name: "GPT-4 Turbo", value: OPENAI_MODELS.GPT4_TURBO },
|
|
45
|
+
{ name: "GPT-4", value: OPENAI_MODELS.GPT4 },
|
|
46
|
+
{ name: "GPT-3.5 Turbo", value: OPENAI_MODELS.GPT35_TURBO },
|
|
47
|
+
{ name: "Custom Model...", value: "custom" },
|
|
48
|
+
];
|
|
49
|
+
// Model choices for Anthropic UI
|
|
50
|
+
const ANTHROPIC_MODEL_CHOICES = [
|
|
51
|
+
{ name: "Claude 3.7 Sonnet", value: ANTHROPIC_MODELS.CLAUDE_37_SONNET },
|
|
52
|
+
{ name: "Claude 3.5 Sonnet v2", value: ANTHROPIC_MODELS.CLAUDE_35_SONNET_V2 },
|
|
53
|
+
{ name: "Claude 3.5 Sonnet", value: ANTHROPIC_MODELS.CLAUDE_35_SONNET },
|
|
54
|
+
{ name: "Claude 3.5 Haiku", value: ANTHROPIC_MODELS.CLAUDE_35_HAIKU },
|
|
55
|
+
{ name: "Claude 3 Opus", value: ANTHROPIC_MODELS.CLAUDE_3_OPUS },
|
|
56
|
+
{ name: "Claude 3 Sonnet", value: ANTHROPIC_MODELS.CLAUDE_3_SONNET },
|
|
57
|
+
{ name: "Claude 3 Haiku", value: ANTHROPIC_MODELS.CLAUDE_3_HAIKU },
|
|
58
|
+
{ name: "Custom Model...", value: "custom" },
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
exports.ANTHROPIC_MODELS = ANTHROPIC_MODELS;
|
|
62
|
+
exports.ANTHROPIC_MODEL_CHOICES = ANTHROPIC_MODEL_CHOICES;
|
|
63
|
+
exports.OPENAI_MODELS = OPENAI_MODELS;
|
|
64
|
+
exports.OPENAI_MODEL_CHOICES = OPENAI_MODEL_CHOICES;
|
|
65
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sources":["../../../../../src/services/llm/models.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;AAEG;AAEH;AACa,MAAA,aAAa,GAUtB;;AAEH,IAAA,WAAW,EAAE,eAAe;;AAE5B,IAAA,IAAI,EAAE,OAAO;AAEb,IAAA,UAAU,EAAE,aAAa;;AAEzB,IAAA,aAAa,EAAE,iBAAiB;;AAEhC,IAAA,KAAK,EAAE,QAAQ;AAEf,IAAA,UAAU,EAAE,aAAa;;AAGzB,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,OAAO,EAAE,SAAS;AAElB,IAAA,OAAO,EAAE,SAAS;;AAGnB;AACa,MAAA,gBAAgB,GAQzB;AACH,IAAA,cAAc,EAAE,yBAAyB;;AAGzC,IAAA,aAAa,EAAE,wBAAwB;AACvC,IAAA,eAAe,EAAE,0BAA0B;AAC3C,IAAA,eAAe,EAAE,2BAA2B;AAE5C,IAAA,gBAAgB,EAAE,4BAA4B;;AAE9C,IAAA,mBAAmB,EAAE,4BAA4B;;AAEjD,IAAA,gBAAgB,EAAE,4BAA4B;;AAG/C;AACa,MAAA,oBAAoB,GAG5B;IACJ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE;IAC9C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE;IACxD,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE;IACjD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE;IACjD,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE;IAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE;IACxD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE;IAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE;AAC3D,IAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;;AAG7C;AACa,MAAA,uBAAuB,GAG/B;IACJ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,EAAE;IACvE,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,gBAAgB,CAAC,mBAAmB,EAAE;IAC7E,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,EAAE;IACvE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,CAAC,eAAe,EAAE;IACrE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,aAAa,EAAE;IAChE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,CAAC,eAAe,EAAE;IACpE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,CAAC,cAAc,EAAE;AAClE,IAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/services/llm/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIjE,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgH9H"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var OpenAI = require('openai');
|
|
4
|
+
|
|
5
|
+
async function generateCommitWithOpenAI(apiKey, model, context) {
|
|
6
|
+
const openai = new OpenAI({
|
|
7
|
+
apiKey: apiKey,
|
|
8
|
+
});
|
|
9
|
+
const typeOptions = context.typeEnum
|
|
10
|
+
?.map((type) => {
|
|
11
|
+
const description = context.typeDescriptions?.[type]?.description ?? "";
|
|
12
|
+
const emoji = context.typeDescriptions?.[type]?.emoji ?? "";
|
|
13
|
+
const title = context.typeDescriptions?.[type]?.title ?? "";
|
|
14
|
+
// eslint-disable-next-line @elsikora-sonar/no-nested-template-literals
|
|
15
|
+
return `${type}${emoji ? ` (${emoji})` : ""}: ${description}${title ? ` (${title})` : ""}`;
|
|
16
|
+
})
|
|
17
|
+
.join("\n") ?? "";
|
|
18
|
+
const systemPrompt = `You are a commit message generator. Based on the git changes, generate a conventional commit message that follows the commit conventions.
|
|
19
|
+
|
|
20
|
+
The commit should follow this format:
|
|
21
|
+
<type>[(scope)]: <subject>
|
|
22
|
+
[BLANK LINE]
|
|
23
|
+
[body]
|
|
24
|
+
[BLANK LINE]
|
|
25
|
+
[footer]
|
|
26
|
+
|
|
27
|
+
Type constraints:
|
|
28
|
+
${context.typeEnum ? "- Allowed types: " + context.typeEnum.join(", ") : ""}
|
|
29
|
+
${context.typeCase ? "- Case style: " + context.typeCase.join(", ") : ""}
|
|
30
|
+
${context.typeEmpty === undefined ? "" : "- Can be empty: " + (context.typeEmpty ? "yes" : "no")}
|
|
31
|
+
|
|
32
|
+
Available types:
|
|
33
|
+
${typeOptions}
|
|
34
|
+
|
|
35
|
+
Scope constraints:
|
|
36
|
+
${context.scopeCase ? "- Case style: " + context.scopeCase.join(", ") : ""}
|
|
37
|
+
${context.scopeEmpty === undefined ? "" : "- Can be empty: " + (context.scopeEmpty ? "yes" : "no")}
|
|
38
|
+
${context.scopeMaxLength ? "- Max length: " + context.scopeMaxLength + " characters" : ""}
|
|
39
|
+
|
|
40
|
+
Scope guidelines:
|
|
41
|
+
- The scope should represent the area of the codebase being modified
|
|
42
|
+
- If the changes affect multiple areas, use a comma-separated list or select the most significant area
|
|
43
|
+
- If unsure, use "global" as the scope
|
|
44
|
+
- If the scope is not relevant, it can be omitted
|
|
45
|
+
- Analyze the changed files and determine the most appropriate scope based on directories, modules or components
|
|
46
|
+
- Scopes are usually short (one or two words) and lowercase
|
|
47
|
+
|
|
48
|
+
Subject constraints:
|
|
49
|
+
${context.subject.case ? "- Case style: " + context.subject.case.join(", ") : ""}
|
|
50
|
+
${context.subject.empty === undefined ? "" : "- Can be empty: " + (context.subject.empty ? "yes" : "no")}
|
|
51
|
+
${context.subject.maxLength ? "- Max length: " + context.subject.maxLength + " characters" : ""}
|
|
52
|
+
${context.subject.minLength ? "- Min length: " + context.subject.minLength + " characters" : ""}
|
|
53
|
+
${context.subject.fullStop ? "- End with '" + context.subject.fullStop.value + "': " + (context.subject.fullStop.required ? "yes" : "no") : ""}
|
|
54
|
+
|
|
55
|
+
Header constraints:
|
|
56
|
+
${context.headerCase ? "- Case style: " + context.headerCase.join(", ") : ""}
|
|
57
|
+
${context.headerMaxLength ? "- Max length: " + context.headerMaxLength + " characters" : ""}
|
|
58
|
+
${context.headerMinLength ? "- Min length: " + context.headerMinLength + " characters" : ""}
|
|
59
|
+
${context.headerFullStop ? "- End with '" + context.headerFullStop.value + "': " + (context.headerFullStop.required ? "yes" : "no") : ""}
|
|
60
|
+
|
|
61
|
+
Body constraints:
|
|
62
|
+
${context.body?.maxLength ? "- Max length: " + context.body.maxLength + " characters" : ""}
|
|
63
|
+
${context.body?.maxLineLength ? "- Max line length: " + context.body.maxLineLength + " characters" : ""}
|
|
64
|
+
${context.body?.leadingBlank === undefined ? "" : "- Leading blank line: " + (context.body.leadingBlank ? "required" : "not required")}
|
|
65
|
+
${context.body?.fullStop ? "- End with '" + context.body.fullStop.value + "': " + (context.body.fullStop.required ? "yes" : "no") : ""}
|
|
66
|
+
|
|
67
|
+
Footer constraints:
|
|
68
|
+
${context.footerLeadingBlank === undefined ? "" : "- Leading blank line: " + (context.footerLeadingBlank ? "required" : "not required")}
|
|
69
|
+
${context.footerMaxLineLength ? "- Max line length: " + context.footerMaxLineLength + " characters" : ""}
|
|
70
|
+
|
|
71
|
+
Return a JSON object with these fields:
|
|
72
|
+
{
|
|
73
|
+
"type": "the commit type",
|
|
74
|
+
"scope": "the commit scope (optional)",
|
|
75
|
+
"subject": "the commit subject line",
|
|
76
|
+
"body": "the commit body (optional)",
|
|
77
|
+
"isBreaking": boolean,
|
|
78
|
+
"breakingBody": "description of breaking changes (if isBreaking is true)",
|
|
79
|
+
"issues": ["list of issue references"],
|
|
80
|
+
"references": ["list of other references"]
|
|
81
|
+
}`;
|
|
82
|
+
const userPrompt = `Here are the changes to commit:
|
|
83
|
+
${context.diff ? `Diff:\n${context.diff}\n` : ""}
|
|
84
|
+
${context.files ? `Files changed:\n${context.files}` : ""}
|
|
85
|
+
|
|
86
|
+
Based on these changes, generate an appropriate commit message following the conventions.`;
|
|
87
|
+
try {
|
|
88
|
+
const response = await openai.chat.completions.create({
|
|
89
|
+
messages: [
|
|
90
|
+
{ content: systemPrompt, role: "system" },
|
|
91
|
+
{ content: userPrompt, role: "user" },
|
|
92
|
+
],
|
|
93
|
+
model: model,
|
|
94
|
+
response_format: { type: "json_object" },
|
|
95
|
+
});
|
|
96
|
+
// eslint-disable-next-line @elsikora-typescript/no-unsafe-member-access,@elsikora-typescript/no-unsafe-assignment
|
|
97
|
+
const content = response.choices[0]?.message.content;
|
|
98
|
+
if (!content) {
|
|
99
|
+
throw new Error("Empty response from OpenAI");
|
|
100
|
+
}
|
|
101
|
+
// eslint-disable-next-line @elsikora-typescript/no-unsafe-argument
|
|
102
|
+
return JSON.parse(content);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error("Error generating commit with OpenAI:", error);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
exports.generateCommitWithOpenAI = generateCommitWithOpenAI;
|
|
111
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sources":["../../../../../src/services/llm/openai.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export type CommitConfig = {
|
|
2
|
+
body?: string;
|
|
3
|
+
breakingBody?: string;
|
|
4
|
+
isBreaking?: boolean;
|
|
5
|
+
issues?: Array<string>;
|
|
6
|
+
references?: Array<string>;
|
|
7
|
+
scope?: string;
|
|
8
|
+
subject: string;
|
|
9
|
+
type: string;
|
|
10
|
+
};
|
|
11
|
+
export type CommitMode = "auto" | "manual";
|
|
12
|
+
export type LLMConfig = {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
} & LLMConfigStorage;
|
|
15
|
+
export type LLMConfigStorage = {
|
|
16
|
+
mode?: CommitMode;
|
|
17
|
+
model: LLMModel;
|
|
18
|
+
provider: LLMProvider;
|
|
19
|
+
};
|
|
20
|
+
export type LLMModel = string;
|
|
21
|
+
export type LLMPromptContext = {
|
|
22
|
+
body?: {
|
|
23
|
+
description?: string;
|
|
24
|
+
fullStop?: {
|
|
25
|
+
required: boolean;
|
|
26
|
+
value: string;
|
|
27
|
+
};
|
|
28
|
+
leadingBlank?: boolean;
|
|
29
|
+
maxLength?: number;
|
|
30
|
+
maxLineLength?: number;
|
|
31
|
+
minLength?: number;
|
|
32
|
+
};
|
|
33
|
+
caseFnOptions?: Array<string>;
|
|
34
|
+
diff?: string;
|
|
35
|
+
files?: string;
|
|
36
|
+
footerLeadingBlank?: boolean;
|
|
37
|
+
footerMaxLineLength?: number;
|
|
38
|
+
headerCase?: Array<string>;
|
|
39
|
+
headerFullStop?: {
|
|
40
|
+
required: boolean;
|
|
41
|
+
value: string;
|
|
42
|
+
};
|
|
43
|
+
headerMaxLength?: number;
|
|
44
|
+
headerMinLength?: number;
|
|
45
|
+
scopeCase?: Array<string>;
|
|
46
|
+
scopeDescription?: string;
|
|
47
|
+
scopeEmpty?: boolean;
|
|
48
|
+
scopeMaxLength?: number;
|
|
49
|
+
subject: {
|
|
50
|
+
case?: Array<string>;
|
|
51
|
+
description?: string;
|
|
52
|
+
empty?: boolean;
|
|
53
|
+
fullStop?: {
|
|
54
|
+
required: boolean;
|
|
55
|
+
value: string;
|
|
56
|
+
};
|
|
57
|
+
maxLength?: number;
|
|
58
|
+
minLength?: number;
|
|
59
|
+
};
|
|
60
|
+
typeCase?: Array<string>;
|
|
61
|
+
typeDescription?: string;
|
|
62
|
+
typeDescriptions?: Record<string, {
|
|
63
|
+
description: string;
|
|
64
|
+
emoji?: string;
|
|
65
|
+
title?: string;
|
|
66
|
+
}>;
|
|
67
|
+
typeEmpty?: boolean;
|
|
68
|
+
typeEnum?: Array<string>;
|
|
69
|
+
};
|
|
70
|
+
export type LLMProvider = "anthropic" | "openai";
|
|
71
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/llm/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
messages: {
|
|
3
|
+
emptyWarning: string;
|
|
4
|
+
lowerLimitWarning: string;
|
|
5
|
+
max: string;
|
|
6
|
+
min: string;
|
|
7
|
+
skip: string;
|
|
8
|
+
upperLimitWarning: string;
|
|
9
|
+
};
|
|
10
|
+
questions: {
|
|
11
|
+
body: {
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
footer: {
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
scope: {
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
subject: {
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
type: {
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
settings: {
|
|
28
|
+
enableMultipleScopes: boolean;
|
|
29
|
+
scopeEnumSeparator: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export default _default;
|
|
33
|
+
//# sourceMappingURL=defaultPromptConfigs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultPromptConfigs.d.ts","sourceRoot":"","sources":["../../../src/store/defaultPromptConfigs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA+BE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var defaultPromptConfigs = {
|
|
6
|
+
messages: {
|
|
7
|
+
emptyWarning: "(%s is required)",
|
|
8
|
+
lowerLimitWarning: "%s is %d characters less than the lower limit",
|
|
9
|
+
max: "(max %d chars)",
|
|
10
|
+
min: "(min %d chars)",
|
|
11
|
+
skip: "(press enter to skip)",
|
|
12
|
+
upperLimitWarning: "%s is %d characters longer than the upper limit",
|
|
13
|
+
},
|
|
14
|
+
questions: {
|
|
15
|
+
body: {
|
|
16
|
+
description: "<body> holds additional information about the change",
|
|
17
|
+
},
|
|
18
|
+
footer: {
|
|
19
|
+
description: "<footer> holds further meta data, such as breaking changes and issue ids",
|
|
20
|
+
},
|
|
21
|
+
scope: {
|
|
22
|
+
description: "<scope> marks which sub-component of the project is affected",
|
|
23
|
+
},
|
|
24
|
+
subject: {
|
|
25
|
+
description: "<subject> is a short, high-level description of the change",
|
|
26
|
+
},
|
|
27
|
+
type: {
|
|
28
|
+
description: "<type> holds information about the goal of a change.",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
settings: {
|
|
32
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
33
|
+
enableMultipleScopes: false,
|
|
34
|
+
scopeEnumSeparator: ",",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.default = defaultPromptConfigs;
|
|
39
|
+
//# sourceMappingURL=defaultPromptConfigs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultPromptConfigs.js","sources":["../../../../src/store/defaultPromptConfigs.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA,2BAAe;AACd,IAAA,QAAQ,EAAE;AACT,QAAA,YAAY,EAAE,kBAAkB;AAChC,QAAA,iBAAiB,EAAE,+CAA+C;AAClE,QAAA,GAAG,EAAE,gBAAgB;AACrB,QAAA,GAAG,EAAE,gBAAgB;AACrB,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,iBAAiB,EAAE,iDAAiD;AACpE,KAAA;AACD,IAAA,SAAS,EAAE;AACV,QAAA,IAAI,EAAE;AACL,YAAA,WAAW,EAAE,sDAAsD;AACnE,SAAA;AACD,QAAA,MAAM,EAAE;AACP,YAAA,WAAW,EAAE,0EAA0E;AACvF,SAAA;AACD,QAAA,KAAK,EAAE;AACN,YAAA,WAAW,EAAE,8DAA8D;AAC3E,SAAA;AACD,QAAA,OAAO,EAAE;AACR,YAAA,WAAW,EAAE,4DAA4D;AACzE,SAAA;AACD,QAAA,IAAI,EAAE;AACL,YAAA,WAAW,EAAE,sDAAsD;AACnE,SAAA;AACD,KAAA;AACD,IAAA,QAAQ,EAAE;;AAET,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,kBAAkB,EAAE,GAAG;AACvB,KAAA;CACD;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PromptConfig, UserPromptConfig } from "@commitlint/types";
|
|
2
|
+
export declare function getPromptMessages(): Readonly<PromptConfig["messages"]>;
|
|
3
|
+
export declare function getPromptQuestions(): Readonly<PromptConfig["questions"]>;
|
|
4
|
+
export declare function getPromptSettings(): Readonly<PromptConfig["settings"]>;
|
|
5
|
+
export declare function setPromptConfig(newPromptConfig: UserPromptConfig): void;
|
|
6
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/store/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAcxE,wBAAgB,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAExE;AAED,wBAAgB,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAEtE;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CA+BvE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var isPlainObject = require('lodash.isplainobject');
|
|
4
|
+
var defaultPromptConfigs = require('./defaultPromptConfigs.js');
|
|
5
|
+
|
|
6
|
+
const storeKey = Symbol("promptConfig");
|
|
7
|
+
const store = {
|
|
8
|
+
[storeKey]: defaultPromptConfigs.default,
|
|
9
|
+
};
|
|
10
|
+
function setPromptConfig(newPromptConfig) {
|
|
11
|
+
const { messages, questions, settings } = newPromptConfig;
|
|
12
|
+
if (messages) {
|
|
13
|
+
const requiredMessageKeys = Object.keys(defaultPromptConfigs.default.messages);
|
|
14
|
+
// eslint-disable-next-line @elsikora-unicorn/no-array-for-each
|
|
15
|
+
requiredMessageKeys.forEach((key) => {
|
|
16
|
+
const message = messages[key];
|
|
17
|
+
if (typeof message === "string") {
|
|
18
|
+
store[storeKey].messages[key] = message;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (questions && isPlainObject(questions)) {
|
|
23
|
+
store[storeKey].questions = questions;
|
|
24
|
+
}
|
|
25
|
+
if (settings && isPlainObject(settings)) {
|
|
26
|
+
// eslint-disable-next-line @elsikora-sonar/anchor-precedence
|
|
27
|
+
if (settings.scopeEnumSeparator && !/^\/|\\|,$/.test(settings.scopeEnumSeparator)) {
|
|
28
|
+
console.log(`prompt.settings.scopeEnumSeparator must be one of ',', '\\', '/'.`);
|
|
29
|
+
// eslint-disable-next-line @elsikora-unicorn/no-process-exit,elsikora-node/no-process-exit
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
store[storeKey].settings = {
|
|
33
|
+
...defaultPromptConfigs.default.settings,
|
|
34
|
+
...settings,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
exports.setPromptConfig = setPromptConfig;
|
|
40
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sources":["../../../../src/store/prompts.ts"],"sourcesContent":[null],"names":["defaultPromptConfigs"],"mappings":";;;;;AAMA,MAAM,QAAQ,GAAkB,MAAM,CAAC,cAAc,CAAC;AAEtD,MAAM,KAAK,GAEP;IACH,CAAC,QAAQ,GAAGA,4BAAoB;CAChC;AAcK,SAAU,eAAe,CAAC,eAAiC,EAAA;IAChE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAqB,eAAe;IAE3E,IAAI,QAAQ,EAAE;QACb,MAAM,mBAAmB,GAAkB,MAAM,CAAC,IAAI,CAACA,4BAAoB,CAAC,QAAQ,CAAC;;AAErF,QAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AAC3C,YAAA,MAAM,OAAO,GAAQ,QAAQ,CAAC,GAAG,CAAC;AAElC,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAChC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO;;AAEzC,SAAC,CAAC;;AAGH,IAAA,IAAI,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;AAC1C,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,SAAS;;AAGtC,IAAA,IAAI,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;;AAExC,QAAA,IAAI,QAAQ,CAAC,kBAAkB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAClF,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iEAAA,CAAmE,CAAC;;AAEhF,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEhB,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG;YAC1B,GAAGA,4BAAoB,CAAC,QAAQ;AAChC,YAAA,GAAG,QAAQ;SACX;;AAEH;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { QualifiedRules } from "@commitlint/types";
|
|
2
|
+
import type { Rule } from "../types.js";
|
|
3
|
+
export type GetRuleMethod = typeof getRule;
|
|
4
|
+
export type SetRulesMethod = typeof setRules;
|
|
5
|
+
export declare function getRule(key: string, property: string): Rule | undefined;
|
|
6
|
+
export declare function setRules(newRules: QualifiedRules): void;
|
|
7
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/store/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWxC,MAAM,MAAM,aAAa,GAAG,OAAO,OAAO,CAAC;AAG3C,MAAM,MAAM,cAAc,GAAG,OAAO,QAAQ,CAAC;AAE7C,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAMvE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAEvD"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RuleConfigCondition, RuleConfigSeverity } from "@commitlint/types";
|
|
2
|
+
export type Rule = Readonly<[RuleConfigSeverity, RuleConfigCondition, unknown]> | Readonly<[RuleConfigSeverity, RuleConfigCondition]> | Readonly<[RuleConfigSeverity.Disabled]>;
|
|
3
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
export type CaseFunction = (input: Array<string> | string, delimiter?: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* Get forced case for rule
|
|
5
|
+
* @param rule to parse
|
|
6
|
+
* @return transform function applying the enforced case
|
|
7
|
+
*/
|
|
8
|
+
export default function getCaseFunction(rule?: Rule): CaseFunction;
|
|
9
|
+
//# sourceMappingURL=case-function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"case-function.d.ts","sourceRoot":"","sources":["../../../src/utils/case-function.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAOxC,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEzF;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,CAwCjE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
export type FullStopFunction = (input: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* Get forced case for rule
|
|
5
|
+
* @param rule to parse
|
|
6
|
+
* @return transform function applying the enforced case
|
|
7
|
+
*/
|
|
8
|
+
export default function getFullStopFunction(rule?: Rule): FullStopFunction;
|
|
9
|
+
//# sourceMappingURL=full-stop-function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-stop-function.d.ts","sourceRoot":"","sources":["../../../src/utils/full-stop-function.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKxC,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,gBAAgB,CAyBzE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Get forced leading for rule
|
|
4
|
+
* @param rule to parse
|
|
5
|
+
* @return transform function applying the leading
|
|
6
|
+
*/
|
|
7
|
+
export default function getLeadingBlankFunction(rule?: Rule): (input: string) => string;
|
|
8
|
+
//# sourceMappingURL=leading-blank-function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leading-blank-function.d.ts","sourceRoot":"","sources":["../../../src/utils/leading-blank-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAIxC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAwBtF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Rule } from "../types.js";
|
|
2
|
+
import { RuleConfigSeverity } from "@commitlint/types";
|
|
3
|
+
export declare function enumRuleIsActive(rule: Rule): rule is Readonly<[RuleConfigSeverity.Error | RuleConfigSeverity.Warning, "always", Array<string>]>;
|
|
4
|
+
export declare function getEnumList(rule: Rule): Array<string>;
|
|
5
|
+
export declare function getMaxLength(rule?: Rule): number;
|
|
6
|
+
export declare function getMinLength(rule?: Rule): number;
|
|
7
|
+
/**
|
|
8
|
+
* Check if a rule definition is active
|
|
9
|
+
* @param rule to check
|
|
10
|
+
* @return if the rule definition is active
|
|
11
|
+
*/
|
|
12
|
+
export declare function ruleIsActive<T extends Rule>(rule: T): rule is Exclude<T, Readonly<[RuleConfigSeverity.Disabled]>>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a rule definition is applicable
|
|
15
|
+
* @param rule to check
|
|
16
|
+
* @return if the rule definition is applicable
|
|
17
|
+
*/
|
|
18
|
+
export declare function ruleIsApplicable(rule: Rule): rule is Readonly<[RuleConfigSeverity, "always", unknown]> | Readonly<[RuleConfigSeverity, "always"]>;
|
|
19
|
+
export declare function ruleIsDisabled(rule: Rule): rule is Readonly<[RuleConfigSeverity.Disabled]>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a rule definition is applicable
|
|
22
|
+
* @param rule to check
|
|
23
|
+
* @return if the rule definition is applicable
|
|
24
|
+
*/
|
|
25
|
+
export declare function ruleIsNotApplicable(rule: Rule): rule is Readonly<[RuleConfigSeverity, "never", unknown]> | Readonly<[RuleConfigSeverity, "never"]>;
|
|
26
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/utils/rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAE/I;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAGrD;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAMhD;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAMhD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAMjH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,kBAAkB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAMjJ;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAMlJ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QualifiedRules, UserPromptConfig } from "@commitlint/types";
|
|
2
|
+
import type { Answers, DistinctQuestion } from "inquirer";
|
|
3
|
+
export default function ManualProcess(rules: QualifiedRules, prompts: UserPromptConfig, inquirer: {
|
|
4
|
+
prompt(questions: Array<DistinctQuestion>): Promise<Answers>;
|
|
5
|
+
}): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=ManualProcess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualProcess.d.ts","sourceRoot":"","sources":["../../src/ManualProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAU1D,wBAA8B,aAAa,CAC1C,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE;IACT,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D,GACC,OAAO,CAAC,MAAM,CAAC,CA4IjB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { extractLLMPromptContext } from './services/commitlintConfig.js';
|
|
3
|
+
import { setPromptConfig } from './store/prompts.js';
|
|
4
|
+
|
|
5
|
+
async function ManualProcess(rules, prompts, inquirer) {
|
|
6
|
+
setPromptConfig(prompts);
|
|
7
|
+
// Extract context from commitlint config
|
|
8
|
+
const promptContext = extractLLMPromptContext(rules, prompts);
|
|
9
|
+
// Message removed as it's now handled in the index.ts file
|
|
10
|
+
// Manual entry prompts
|
|
11
|
+
const commitQuestions = [
|
|
12
|
+
{
|
|
13
|
+
choices: promptContext.typeEnum?.map((type) => {
|
|
14
|
+
const desc = promptContext.typeDescriptions?.[type]?.description ?? "";
|
|
15
|
+
const emoji = promptContext.typeDescriptions?.[type]?.emoji ?? "";
|
|
16
|
+
// Remove emoji from description if it already appears at the beginning
|
|
17
|
+
let cleanDesc = desc;
|
|
18
|
+
if (emoji && desc.startsWith(emoji)) {
|
|
19
|
+
cleanDesc = desc.slice(emoji.length).trim();
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
// eslint-disable-next-line @elsikora-sonar/no-nested-template-literals
|
|
23
|
+
name: `${type}${emoji ? ` ${emoji}` : ""}: ${cleanDesc}`,
|
|
24
|
+
value: type,
|
|
25
|
+
};
|
|
26
|
+
}) ?? [],
|
|
27
|
+
message: promptContext.typeDescription ?? "Select the type of change that you're committing:",
|
|
28
|
+
name: "type",
|
|
29
|
+
type: "list",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
message: promptContext.scopeDescription ?? 'What is the scope of this change:\n - Use component, directory or area of codebase\n - Use comma-separated list for multiple areas\n - Type "global" for project-wide changes\n - Press enter to skip if scope is not applicable',
|
|
33
|
+
name: "scope",
|
|
34
|
+
type: "input",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
message: promptContext.subject.description ?? "Write a short, imperative mood description of the change:",
|
|
38
|
+
name: "subject",
|
|
39
|
+
type: "input",
|
|
40
|
+
// eslint-disable-next-line @elsikora-typescript/explicit-function-return-type
|
|
41
|
+
validate: (input) => {
|
|
42
|
+
if (!input)
|
|
43
|
+
return "Subject is required";
|
|
44
|
+
return true;
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
message: promptContext.body?.description ?? "Provide a longer description of the change: (press enter to skip)",
|
|
49
|
+
name: "body",
|
|
50
|
+
type: "input",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
54
|
+
default: false,
|
|
55
|
+
message: "Are there any breaking changes?",
|
|
56
|
+
name: "isBreaking",
|
|
57
|
+
type: "confirm",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
message: "Describe the breaking changes:",
|
|
61
|
+
name: "breakingBody",
|
|
62
|
+
type: "input",
|
|
63
|
+
// eslint-disable-next-line @elsikora-typescript/no-unsafe-return
|
|
64
|
+
when: (answers) => answers.isBreaking,
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
// First get all commit details
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
const answers = await inquirer.prompt(commitQuestions);
|
|
70
|
+
// Construct message from manual answers
|
|
71
|
+
// eslint-disable-next-line @elsikora-typescript/restrict-template-expressions,@elsikora-sonar/no-nested-template-literals
|
|
72
|
+
const header = `${answers.type}${answers.scope ? `(${answers.scope})` : ""}: ${answers.subject}`;
|
|
73
|
+
let body = "";
|
|
74
|
+
if (answers.isBreaking) {
|
|
75
|
+
// eslint-disable-next-line @elsikora-typescript/restrict-template-expressions
|
|
76
|
+
body = `BREAKING CHANGE: ${answers.breakingBody || "This commit introduces breaking changes."}\n\n`;
|
|
77
|
+
}
|
|
78
|
+
if (answers.body) {
|
|
79
|
+
// eslint-disable-next-line @elsikora-typescript/restrict-plus-operands
|
|
80
|
+
body += answers.body;
|
|
81
|
+
}
|
|
82
|
+
const commitMessage = [header, body].filter(Boolean).join("\n\n");
|
|
83
|
+
// Display the commit message to the user
|
|
84
|
+
console.log("\n" + chalk.yellow("Your commit message:"));
|
|
85
|
+
console.log(chalk.white("-----------------------------------"));
|
|
86
|
+
console.log(chalk.white(commitMessage));
|
|
87
|
+
console.log(chalk.white("-----------------------------------\n"));
|
|
88
|
+
// Now ask for confirmation
|
|
89
|
+
const { confirmCommit } = await inquirer.prompt([
|
|
90
|
+
{
|
|
91
|
+
// eslint-disable-next-line @elsikora-typescript/naming-convention
|
|
92
|
+
default: true,
|
|
93
|
+
message: "Are you sure you want to proceed with the commit above?",
|
|
94
|
+
name: "confirmCommit",
|
|
95
|
+
type: "confirm",
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
// Check confirmation
|
|
99
|
+
if (!confirmCommit) {
|
|
100
|
+
console.log(chalk.yellow("Commit canceled."));
|
|
101
|
+
throw new Error("User canceled the commit");
|
|
102
|
+
}
|
|
103
|
+
return commitMessage;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export { ManualProcess as default };
|
|
107
|
+
//# sourceMappingURL=ManualProcess.js.map
|