smart-commit-copilot-cli 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +55 -7
  3. package/docs/configuration.md +55 -2
  4. package/docs/contracts.md +15 -2
  5. package/docs/getting-started.md +18 -4
  6. package/docs/publish.md +1 -1
  7. package/docs/releases/0.1.6-draft.md +72 -0
  8. package/docs/releases/0.1.7-draft.md +55 -0
  9. package/docs/roadmap.md +1 -1
  10. package/docs/verification.md +15 -0
  11. package/examples/config/smart-commit.json +10 -1
  12. package/out/cliApp.js +11 -1
  13. package/out/cliApp.js.map +1 -1
  14. package/out/commands/bridge.js +160 -17
  15. package/out/commands/bridge.js.map +1 -1
  16. package/out/commitMessage/index.js +30 -9
  17. package/out/commitMessage/index.js.map +1 -1
  18. package/out/commitMessage/prompt.js +60 -10
  19. package/out/commitMessage/prompt.js.map +1 -1
  20. package/out/commitMessage/protocol.js +283 -22
  21. package/out/commitMessage/protocol.js.map +1 -1
  22. package/out/config/cliArgs.js +33 -0
  23. package/out/config/cliArgs.js.map +1 -1
  24. package/out/config/constants.js +9 -0
  25. package/out/config/constants.js.map +1 -1
  26. package/out/config/env.js +30 -0
  27. package/out/config/env.js.map +1 -1
  28. package/out/config/file.js +36 -0
  29. package/out/config/file.js.map +1 -1
  30. package/out/config/legacySmartCommit.js +41 -1
  31. package/out/config/legacySmartCommit.js.map +1 -1
  32. package/out/config/merge.js +4 -0
  33. package/out/config/merge.js.map +1 -1
  34. package/out/config/schema.js +35 -1
  35. package/out/config/schema.js.map +1 -1
  36. package/out/contracts.js +44 -9
  37. package/out/contracts.js.map +1 -1
  38. package/out/llm/responseCorrection.js +32 -0
  39. package/out/llm/responseCorrection.js.map +1 -0
  40. package/out/passHistory/index.js +51 -22
  41. package/out/passHistory/index.js.map +1 -1
  42. package/out/passHistory/store.js +29 -1
  43. package/out/passHistory/store.js.map +1 -1
  44. package/out/passHistory/types.js +23 -1
  45. package/out/passHistory/types.js.map +1 -1
  46. package/out/promptContext.js +19 -3
  47. package/out/promptContext.js.map +1 -1
  48. package/out/pullRequestSummary/index.js +53 -0
  49. package/out/pullRequestSummary/index.js.map +1 -0
  50. package/out/pullRequestSummary/mockProvider.js +24 -0
  51. package/out/pullRequestSummary/mockProvider.js.map +1 -0
  52. package/out/pullRequestSummary/openaiProvider.js +19 -0
  53. package/out/pullRequestSummary/openaiProvider.js.map +1 -0
  54. package/out/pullRequestSummary/prompt.js +122 -0
  55. package/out/pullRequestSummary/prompt.js.map +1 -0
  56. package/out/pullRequestSummary/provider.js +3 -0
  57. package/out/pullRequestSummary/provider.js.map +1 -0
  58. package/out/pullRequestSummary/render.js +74 -0
  59. package/out/pullRequestSummary/render.js.map +1 -0
  60. package/out/renderOutput.js +8 -1
  61. package/out/renderOutput.js.map +1 -1
  62. package/out/reporting/prompt.js +13 -1
  63. package/out/reporting/prompt.js.map +1 -1
  64. package/out/reporting/timeWindow.js +7 -0
  65. package/out/reporting/timeWindow.js.map +1 -1
  66. package/out/reporting/types.js +1 -0
  67. package/out/reporting/types.js.map +1 -1
  68. package/out/review/diffClassifier.js +535 -0
  69. package/out/review/diffClassifier.js.map +1 -0
  70. package/out/review/index.js +27 -11
  71. package/out/review/index.js.map +1 -1
  72. package/out/review/mockProvider.js +157 -8
  73. package/out/review/mockProvider.js.map +1 -1
  74. package/out/review/openaiProvider.js +10 -4
  75. package/out/review/openaiProvider.js.map +1 -1
  76. package/out/review/parser.js +13 -0
  77. package/out/review/parser.js.map +1 -1
  78. package/out/review/prompt.js +76 -4
  79. package/out/review/prompt.js.map +1 -1
  80. package/out/skills/types.js +3 -0
  81. package/out/skills/types.js.map +1 -0
  82. package/package.json +2 -1
  83. package/src/code-review-skills/c-code-review/SKILL.md +165 -0
  84. package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
  85. package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
  86. package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
  87. package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
  88. package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
  89. package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
  90. package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
  91. package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
  92. package/src/code-review-skills/code-review/SKILL.md +150 -0
  93. package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
  94. package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
  95. package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
  96. package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
  97. package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
  98. package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
  99. package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
  100. package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
  101. package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
  102. package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
  103. package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
  104. package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
  105. package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
  106. package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
  107. package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
  108. package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
  109. package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
  110. package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
  111. package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
  112. package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
  113. package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
  114. package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
  115. package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
  116. package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
  117. package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
  118. package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
  119. package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
  120. package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
  121. package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
  122. package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
  123. package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
  124. package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
  125. package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
  126. package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
  127. package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
  128. package/src/code-review-skills/java-code-review/SKILL.md +153 -0
  129. package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
  130. package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
  131. package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
  132. package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
  133. package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
  134. package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
  135. package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
  136. package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
  137. package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
  138. package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
  139. package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
  140. package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
  141. package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
  142. package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
  143. package/src/code-review-skills/php-code-review/SKILL.md +159 -0
  144. package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
  145. package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
  146. package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
  147. package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
  148. package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
  149. package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
  150. package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
  151. package/src/code-review-skills/python-code-review/SKILL.md +147 -0
  152. package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
  153. package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
  154. package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
  155. package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
  156. package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
  157. package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
  158. package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
  159. package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
  160. package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
  161. package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
  162. package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
  163. package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
  164. package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
  165. package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
  166. package/src/git-commit-message-skills/conventional/SKILL.md +3 -3
  167. package/src/git-commit-message-skills/gitmoji/SKILL.md +3 -3
  168. package/src/git-commit-message-skills/semantic/SKILL.md +3 -3
@@ -4,11 +4,13 @@ exports.buildCommitMessageMessages = buildCommitMessageMessages;
4
4
  exports.buildCommitMessageRepairMessages = buildCommitMessageRepairMessages;
5
5
  function buildCommitMessageMessages(input, options = {}) {
6
6
  const protocolLabel = formatCommitMessageProtocolLabel(input.protocol);
7
+ const structure = input.structure ?? "subjectOnly";
7
8
  return [
8
9
  {
9
10
  role: "system",
10
11
  content: [
11
- "You generate a single-line git commit message.",
12
+ buildCommitMessageSystemIntro(structure),
13
+ "You must obey the requested commit message language.",
12
14
  protocolLabel === null
13
15
  ? "No built-in commit-message protocol is enforced."
14
16
  : `You must follow the configured commit-message protocol: ${protocolLabel}.`,
@@ -23,8 +25,9 @@ function buildCommitMessageMessages(input, options = {}) {
23
25
  `Repository: ${input.repositoryPath}`,
24
26
  `Branch: ${input.branchName ?? "(unknown)"}`,
25
27
  `Language: ${input.language}`,
28
+ `Commit message structure: ${structure}`,
26
29
  `Commit message protocol: ${protocolLabel ?? "none"}`,
27
- ...(buildCommitMessageOutputRules(input.protocol)),
30
+ ...(buildCommitMessageOutputRules(input.protocol, structure)),
28
31
  `Changed files (${input.changedFiles.length}):`,
29
32
  ...input.changedFiles.map((file) => `- ${file}`),
30
33
  "",
@@ -43,14 +46,16 @@ function buildCommitMessageMessages(input, options = {}) {
43
46
  }
44
47
  function buildCommitMessageRepairMessages(input, options = {}) {
45
48
  const protocolLabel = formatCommitMessageProtocolLabel(input.generationInput.protocol);
49
+ const structure = input.generationInput.structure ?? "subjectOnly";
46
50
  return [
47
51
  {
48
52
  role: "system",
49
53
  content: [
50
- "You are repairing an invalid single-line git commit message.",
54
+ buildCommitMessageRepairSystemIntro(structure),
55
+ "You must obey the requested commit message language.",
51
56
  protocolLabel === null
52
57
  ? "No built-in commit-message protocol is enforced."
53
- : `You must repair it into a valid ${protocolLabel} subject.`,
58
+ : `You must repair the subject into valid ${protocolLabel} format.`,
54
59
  "Return plain text only.",
55
60
  "Do not return explanations or JSON.",
56
61
  ...(options.promptAugmentation?.length ? ["", ...options.promptAugmentation] : [])
@@ -62,8 +67,9 @@ function buildCommitMessageRepairMessages(input, options = {}) {
62
67
  `Repository: ${input.generationInput.repositoryPath}`,
63
68
  `Branch: ${input.generationInput.branchName ?? "(unknown)"}`,
64
69
  `Language: ${input.generationInput.language}`,
70
+ `Commit message structure: ${structure}`,
65
71
  `Commit message protocol: ${protocolLabel ?? "none"}`,
66
- ...(buildCommitMessageOutputRules(input.generationInput.protocol)),
72
+ ...(buildCommitMessageOutputRules(input.generationInput.protocol, structure)),
67
73
  "",
68
74
  "Invalid previous response:",
69
75
  input.invalidResponse,
@@ -74,17 +80,18 @@ function buildCommitMessageRepairMessages(input, options = {}) {
74
80
  }
75
81
  ];
76
82
  }
77
- function buildCommitMessageOutputRules(protocol) {
83
+ function buildCommitMessageOutputRules(protocol, structure) {
84
+ const structureRules = buildCommitMessageStructureRules(structure);
78
85
  if (protocol === "gitmoji") {
79
- return ["Output rule: return a single-line Gitmoji subject only."];
86
+ return [...structureRules, "Protocol rule: the subject must be a single-line Gitmoji subject."];
80
87
  }
81
88
  if (protocol === "semantic") {
82
- return ["Output rule: return a single-line Semantic Commits subject only."];
89
+ return [...structureRules, "Protocol rule: the subject must be a single-line Semantic Commits subject."];
83
90
  }
84
91
  if (protocol === "conventional") {
85
- return ["Output rule: return a single-line Conventional Commits subject only."];
92
+ return [...structureRules, "Protocol rule: the subject must be a single-line Conventional Commits subject."];
86
93
  }
87
- return ["Output rule: return a single-line git commit subject only."];
94
+ return [...structureRules, "Protocol rule: no built-in subject protocol is enforced."];
88
95
  }
89
96
  function formatCommitMessageProtocolLabel(protocol) {
90
97
  if (protocol === "gitmoji") {
@@ -98,4 +105,47 @@ function formatCommitMessageProtocolLabel(protocol) {
98
105
  }
99
106
  return null;
100
107
  }
108
+ function buildCommitMessageSystemIntro(structure) {
109
+ if (structure === "subjectOnly") {
110
+ return "You generate a single-line git commit message.";
111
+ }
112
+ if (structure === "subjectBody") {
113
+ return "You generate a git commit message with a subject and optional body.";
114
+ }
115
+ return "You generate a git commit message with a subject, optional body, and optional footer.";
116
+ }
117
+ function buildCommitMessageRepairSystemIntro(structure) {
118
+ if (structure === "subjectOnly") {
119
+ return "You are repairing an invalid single-line git commit message.";
120
+ }
121
+ if (structure === "subjectBody") {
122
+ return "You are repairing an invalid git commit message with a subject and optional body.";
123
+ }
124
+ return "You are repairing an invalid git commit message with a subject, optional body, and optional footer.";
125
+ }
126
+ function buildCommitMessageStructureRules(structure) {
127
+ if (structure === "subjectOnly") {
128
+ return [
129
+ "Output rule: return exactly one git commit subject line only.",
130
+ "If the staged diff is ambiguous, choose the single best subject and return only that one line."
131
+ ];
132
+ }
133
+ if (structure === "subjectBody") {
134
+ return [
135
+ "Output rule: return a git commit message with this maximum structure: subject plus optional body.",
136
+ "The subject must be the first line.",
137
+ "Body is optional; if the staged diff is simple, return only the subject.",
138
+ "If you include a body, separate it from the subject with one blank line.",
139
+ "Do not include footer or trailer lines."
140
+ ];
141
+ }
142
+ return [
143
+ "Output rule: return a git commit message with this maximum structure: subject plus optional body plus optional footer.",
144
+ "The subject must be the first line.",
145
+ "Body and footer are optional; if the staged diff is simple, return only the subject.",
146
+ "If you include body or footer content, separate each section with one blank line.",
147
+ "Include footer/trailer lines only when there is explicit evidence for them, such as breaking changes, issue references, co-authors, or sign-offs.",
148
+ "Footer/trailer lines must use Git trailer or Conventional Commits footer style, such as `Refs: #123`, `Signed-off-by: Name <email>`, or `BREAKING CHANGE: description`."
149
+ ];
150
+ }
101
151
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commitMessage/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commitMessage/prompt.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CommitMessageFlowError = void 0;
4
4
  exports.normalizeCommitMessage = normalizeCommitMessage;
5
+ exports.normalizeCommitMessageForStructure = normalizeCommitMessageForStructure;
5
6
  exports.ensureTicketIdFromBranchIfMissing = ensureTicketIdFromBranchIfMissing;
6
7
  exports.validateAndFinalizeCommitMessage = validateAndFinalizeCommitMessage;
8
+ exports.validateLanguageText = validateLanguageText;
7
9
  exports.extractTicketLikeIdFromBranch = extractTicketLikeIdFromBranch;
8
10
  exports.containsTicketLikeId = containsTicketLikeId;
9
11
  const conventionalTypes = new Set([
@@ -21,12 +23,81 @@ const conventionalTypes = new Set([
21
23
  ]);
22
24
  const typedCommitSubjectPattern = /^([a-z]+)(\([^)]+\))?(!)?: (.+)$/;
23
25
  const gitmojiSubjectPattern = /^\S+\s+(.+)$/u;
26
+ const footerLinePattern = /^(?:BREAKING CHANGE|[A-Za-z0-9-]+):\s+\S.*$/;
27
+ const cjkPattern = /[\u3400-\u9fff]/;
28
+ const japaneseKanaPattern = /[\u3040-\u30FF\u31F0-\u31FF\uFF66-\uFF9D]/;
29
+ const japanesePattern = /[\u3040-\u30FF\u31F0-\u31FF\u3400-\u9fff\uFF66-\uFF9D]/;
30
+ const devanagariPattern = /[\u0900-\u097F\uA8E0-\uA8FF]/;
31
+ const cyrillicPattern = /[\u0400-\u04FF]/;
32
+ const hangulPattern = /[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]/;
33
+ const englishLetterPattern = /[A-Za-z]/;
34
+ const latinLetterPattern = /\p{Script=Latin}/u;
35
+ const inlineCodePattern = /`[^`]*`/g;
24
36
  const ticketLikeIdPatterns = [
25
37
  /\b[A-Z][A-Z0-9]+-\d+\b/i,
26
38
  /(^|[^\w])#\d+\b/,
27
39
  /\b(?:task|bugfix|bug|issue|story|feature|hotfix|ticket)-\d+\b/i
28
40
  ];
41
+ const leadingTicketLikeIdPattern = /^(?:[A-Z][A-Z0-9]+-\d+|#\d+|(?:task|bugfix|bug|issue|story|feature|hotfix|ticket)-\d+)\s+/i;
29
42
  const branchTicketLikeIdPattern = /[A-Za-z][A-Za-z0-9]+-\d+/g;
43
+ const outputLanguageDefinitions = {
44
+ zh: {
45
+ validationMode: "script",
46
+ requiredPattern: cjkPattern,
47
+ requiredDescription: "Chinese text"
48
+ },
49
+ en: {
50
+ validationMode: "english"
51
+ },
52
+ de: {
53
+ validationMode: "latin"
54
+ },
55
+ fr: {
56
+ validationMode: "latin"
57
+ },
58
+ es: {
59
+ validationMode: "latin"
60
+ },
61
+ it: {
62
+ validationMode: "latin"
63
+ },
64
+ pt: {
65
+ validationMode: "latin"
66
+ },
67
+ tr: {
68
+ validationMode: "latin"
69
+ },
70
+ id: {
71
+ validationMode: "latin"
72
+ },
73
+ hi: {
74
+ validationMode: "script",
75
+ requiredPattern: devanagariPattern,
76
+ requiredDescription: "Devanagari script"
77
+ },
78
+ ru: {
79
+ validationMode: "script",
80
+ requiredPattern: cyrillicPattern,
81
+ requiredDescription: "Cyrillic script"
82
+ },
83
+ ko: {
84
+ validationMode: "script",
85
+ requiredPattern: hangulPattern,
86
+ requiredDescription: "Hangul script"
87
+ },
88
+ ja: {
89
+ validationMode: "script",
90
+ requiredPattern: japanesePattern,
91
+ requiredDescription: "Japanese text (Hiragana, Katakana, or Kanji)"
92
+ }
93
+ };
94
+ const disallowedNonLatinScripts = [
95
+ { pattern: cjkPattern, description: "Chinese characters" },
96
+ { pattern: japaneseKanaPattern, description: "Japanese kana" },
97
+ { pattern: devanagariPattern, description: "Devanagari script" },
98
+ { pattern: cyrillicPattern, description: "Cyrillic script" },
99
+ { pattern: hangulPattern, description: "Hangul script" }
100
+ ];
30
101
  class CommitMessageFlowError extends Error {
31
102
  code;
32
103
  constructor(code, message) {
@@ -42,36 +113,54 @@ function normalizeCommitMessage(raw) {
42
113
  .split("\n")[0]
43
114
  .trim();
44
115
  }
116
+ function normalizeCommitMessageForStructure(raw, structure) {
117
+ const sections = parseCommitMessageSections(raw);
118
+ return structure === "subjectOnly" ? sections.subject : sections.normalized;
119
+ }
45
120
  function ensureTicketIdFromBranchIfMissing(commitMessage, branchName) {
46
121
  const subject = normalizeCommitMessage(commitMessage);
47
122
  if (!subject || !branchName?.trim()) {
48
- return subject;
123
+ return normalizeCommitMessageForStructure(commitMessage, "subjectBodyFooter");
49
124
  }
50
125
  if (containsTicketLikeId(subject)) {
51
- return subject;
126
+ return normalizeCommitMessageForStructure(commitMessage, "subjectBodyFooter");
52
127
  }
53
128
  const ticket = extractTicketLikeIdFromBranch(branchName);
54
129
  if (!ticket) {
55
- return subject;
130
+ return normalizeCommitMessageForStructure(commitMessage, "subjectBodyFooter");
56
131
  }
132
+ let updatedSubject;
57
133
  const typedMatch = subject.match(typedCommitSubjectPattern);
58
134
  if (typedMatch) {
59
135
  const type = typedMatch[1] ?? "";
60
136
  const scope = typedMatch[2] ?? "";
61
137
  const breaking = typedMatch[3] ?? "";
62
138
  const summary = (typedMatch[4] ?? "").trim();
63
- return `${type}${scope}${breaking}: ${ticket} ${summary}`;
139
+ updatedSubject = `${type}${scope}${breaking}: ${ticket} ${summary}`;
64
140
  }
65
- const gitmojiMatch = subject.match(gitmojiSubjectPattern);
66
- if (gitmojiMatch) {
67
- const emoji = subject.split(/\s+/u)[0] ?? "";
68
- const summary = gitmojiMatch[1]?.trim() ?? "";
69
- return `${emoji} ${ticket} ${summary}`.trim();
141
+ else {
142
+ const gitmojiMatch = subject.match(gitmojiSubjectPattern);
143
+ if (gitmojiMatch) {
144
+ const emoji = subject.split(/\s+/u)[0] ?? "";
145
+ const summary = gitmojiMatch[1]?.trim() ?? "";
146
+ updatedSubject = `${emoji} ${ticket} ${summary}`.trim();
147
+ }
148
+ else {
149
+ updatedSubject = `${ticket} ${subject}`;
150
+ }
70
151
  }
71
- return `${ticket} ${subject}`;
152
+ return replaceCommitMessageSubject(commitMessage, updatedSubject);
72
153
  }
73
154
  function validateAndFinalizeCommitMessage(input) {
74
- let commitMessage = normalizeCommitMessage(input.rawCommitMessage);
155
+ const structure = input.config.commitMessage.structure;
156
+ const structureIssues = validateCommitMessageStructure(input.rawCommitMessage, structure);
157
+ if (structureIssues.length > 0) {
158
+ if (structureIssues.includes("response must not be empty")) {
159
+ throw new CommitMessageFlowError("COMMIT_MESSAGE_REQUIRED", "Commit message must not be empty.");
160
+ }
161
+ throw new CommitMessageFlowError("COMMIT_MESSAGE_INVALID", `Commit message validation failed: ${structureIssues.join("; ")}`);
162
+ }
163
+ let commitMessage = normalizeCommitMessageForStructure(input.rawCommitMessage, structure);
75
164
  if (!commitMessage) {
76
165
  throw new CommitMessageFlowError("COMMIT_MESSAGE_REQUIRED", "Commit message must not be empty.");
77
166
  }
@@ -80,16 +169,17 @@ function validateAndFinalizeCommitMessage(input) {
80
169
  }
81
170
  const issues = [];
82
171
  const protocol = input.config.commitMessage.validation.protocol;
172
+ const subject = normalizeCommitMessage(commitMessage);
83
173
  if (protocol !== "none") {
84
- issues.push(...validateCommitMessageProtocol(commitMessage, protocol));
174
+ issues.push(...validateCommitMessageProtocol(subject, input.config.commitMessage.language, protocol));
85
175
  }
86
- if (input.config.commitMessage.validation.requireTicketIdInMessage && !containsTicketLikeId(commitMessage)) {
176
+ if (input.config.commitMessage.validation.requireTicketIdInMessage && !containsTicketLikeId(subject)) {
87
177
  issues.push("commit message must contain a ticket-like ID");
88
178
  }
89
179
  if (input.config.commitMessage.validation.pattern) {
90
180
  const regex = new RegExp(input.config.commitMessage.validation.pattern);
91
- if (!regex.test(commitMessage)) {
92
- issues.push("commit message does not match the configured validation pattern");
181
+ if (!regex.test(subject)) {
182
+ issues.push("commit message subject does not match the configured validation pattern");
93
183
  }
94
184
  }
95
185
  if (issues.length > 0) {
@@ -97,6 +187,28 @@ function validateAndFinalizeCommitMessage(input) {
97
187
  }
98
188
  return commitMessage;
99
189
  }
190
+ function validateLanguageText(raw, language, label, options = {}) {
191
+ const candidate = options.allowChineseInBackticks ? raw.replace(inlineCodePattern, " ") : raw;
192
+ const definition = outputLanguageDefinitions[language];
193
+ if (definition.validationMode === "script") {
194
+ return definition.requiredPattern?.test(candidate)
195
+ ? []
196
+ : [`${label} must contain ${definition.requiredDescription} when language is ${language}`];
197
+ }
198
+ const issues = [];
199
+ if (definition.validationMode === "english" && !englishLetterPattern.test(candidate)) {
200
+ issues.push(`${label} must contain English letters when language is en`);
201
+ }
202
+ if (definition.validationMode === "latin" && !latinLetterPattern.test(candidate)) {
203
+ issues.push(`${label} must contain Latin letters when language is ${language}`);
204
+ }
205
+ for (const disallowedScript of disallowedNonLatinScripts) {
206
+ if (disallowedScript.pattern.test(candidate)) {
207
+ issues.push(`${label} must not contain ${disallowedScript.description} when language is ${language}`);
208
+ }
209
+ }
210
+ return issues;
211
+ }
100
212
  function extractTicketLikeIdFromBranch(branchName) {
101
213
  const matches = [...branchName.matchAll(branchTicketLikeIdPattern)].map((match) => match[0]);
102
214
  return matches.length > 0 ? matches[matches.length - 1] : undefined;
@@ -105,22 +217,171 @@ function containsTicketLikeId(raw) {
105
217
  const subject = normalizeCommitMessage(raw);
106
218
  return subject.length > 0 && ticketLikeIdPatterns.some((pattern) => pattern.test(subject));
107
219
  }
108
- function validateCommitMessageProtocol(commitMessage, protocol) {
220
+ function validateCommitMessageStructure(raw, structure) {
221
+ const issues = [];
222
+ const trimmed = raw.trim();
223
+ if (!trimmed) {
224
+ return ["response must not be empty"];
225
+ }
226
+ if (trimmed.includes("```")) {
227
+ issues.push("response must not use markdown code fences");
228
+ }
229
+ const sections = parseCommitMessageSections(raw);
230
+ issues.push(...sections.issues);
231
+ if (!sections.subject) {
232
+ issues.push("response must contain a non-empty subject after normalization");
233
+ }
234
+ if (structure === "subjectOnly") {
235
+ const nonEmptyLines = trimmed
236
+ .split(/\r?\n/)
237
+ .map((line) => line.trim())
238
+ .filter((line) => line.length > 0);
239
+ if (nonEmptyLines.length !== 1) {
240
+ issues.push("response must contain exactly one non-empty line");
241
+ }
242
+ }
243
+ if (structure === "subjectBody" && sections.hasFooter) {
244
+ issues.push("response must not include a footer when commitMessage.structure is subjectBody");
245
+ }
246
+ return issues;
247
+ }
248
+ function validateCommitMessageProtocol(commitMessage, language, protocol) {
109
249
  if (protocol === "gitmoji") {
110
- return gitmojiSubjectPattern.test(commitMessage) ? [] : ["subject must match Gitmoji format"];
250
+ return validateGitmojiSubject(commitMessage, language);
111
251
  }
112
- const typedMatch = commitMessage.match(typedCommitSubjectPattern);
252
+ return validateTypedCommitSubject(commitMessage, language, protocol === "semantic" ? "Semantic Commits" : "Conventional Commits");
253
+ }
254
+ function validateTypedCommitSubject(subject, language, protocolDisplayName) {
255
+ const typedMatch = subject.match(typedCommitSubjectPattern);
113
256
  if (!typedMatch) {
114
257
  return [
115
- protocol === "semantic"
258
+ protocolDisplayName === "Semantic Commits"
116
259
  ? "subject must match Semantic Commits format"
117
260
  : "subject must match Conventional Commits format"
118
261
  ];
119
262
  }
120
263
  const type = typedMatch[1] ?? "";
121
- if (protocol === "conventional" && !conventionalTypes.has(type)) {
122
- return [`unknown Conventional Commits type: ${type}`];
264
+ const summary = (typedMatch[4] ?? "").trim();
265
+ const issues = [];
266
+ if (protocolDisplayName === "Conventional Commits" && !conventionalTypes.has(type)) {
267
+ issues.push(`unknown Conventional Commits type: ${type}`);
268
+ }
269
+ if (!summary) {
270
+ issues.push("summary must not be empty");
271
+ return issues;
272
+ }
273
+ const summaryWithoutLeadingTicket = summary.replace(leadingTicketLikeIdPattern, "").trim() || summary;
274
+ issues.push(...validateLanguageText(summaryWithoutLeadingTicket, language, "summary"));
275
+ return issues;
276
+ }
277
+ function validateGitmojiSubject(subject, language) {
278
+ const gitmojiMatch = subject.match(gitmojiSubjectPattern);
279
+ if (!gitmojiMatch) {
280
+ return ["subject must match Gitmoji format"];
281
+ }
282
+ const summary = (gitmojiMatch[1] ?? "").trim();
283
+ if (!summary) {
284
+ return ["summary must not be empty"];
285
+ }
286
+ const summaryWithoutLeadingTicket = summary.replace(leadingTicketLikeIdPattern, "").trim() || summary;
287
+ return validateLanguageText(summaryWithoutLeadingTicket, language, "summary");
288
+ }
289
+ function parseCommitMessageSections(raw) {
290
+ const trimmed = raw.trim();
291
+ if (!trimmed) {
292
+ return {
293
+ subject: "",
294
+ body: "",
295
+ footer: "",
296
+ hasFooter: false,
297
+ normalized: "",
298
+ issues: []
299
+ };
300
+ }
301
+ const lines = trimmed.split(/\r?\n/).map((line) => line.trimEnd());
302
+ const subjectIndex = lines.findIndex((line) => line.trim().length > 0);
303
+ if (subjectIndex === -1) {
304
+ return {
305
+ subject: "",
306
+ body: "",
307
+ footer: "",
308
+ hasFooter: false,
309
+ normalized: "",
310
+ issues: []
311
+ };
123
312
  }
124
- return [];
313
+ const subject = normalizeCommitMessage(lines[subjectIndex] ?? "");
314
+ const linesAfterSubject = lines.slice(subjectIndex + 1);
315
+ const hasContentAfterSubject = linesAfterSubject.some((line) => line.trim().length > 0);
316
+ const issues = [];
317
+ if (!hasContentAfterSubject) {
318
+ return {
319
+ subject,
320
+ body: "",
321
+ footer: "",
322
+ hasFooter: false,
323
+ normalized: subject,
324
+ issues
325
+ };
326
+ }
327
+ if ((linesAfterSubject[0] ?? "").trim().length > 0) {
328
+ issues.push("body or footer must be separated from the subject by a blank line");
329
+ }
330
+ const contentLines = trimBlankLines(linesAfterSubject);
331
+ const paragraphs = splitParagraphs(contentLines);
332
+ const footerParagraph = paragraphs.length > 0 && isFooterParagraph(paragraphs[paragraphs.length - 1] ?? [])
333
+ ? paragraphs[paragraphs.length - 1]
334
+ : undefined;
335
+ const bodyParagraphs = footerParagraph ? paragraphs.slice(0, -1) : paragraphs;
336
+ const body = bodyParagraphs
337
+ .map((paragraph) => paragraph.join("\n").trim())
338
+ .filter(Boolean)
339
+ .join("\n\n");
340
+ const footer = footerParagraph ? footerParagraph.join("\n").trim() : "";
341
+ const normalized = [subject, body, footer].filter((section) => section.length > 0).join("\n\n");
342
+ return {
343
+ subject,
344
+ body,
345
+ footer,
346
+ hasFooter: footer.length > 0,
347
+ normalized,
348
+ issues
349
+ };
350
+ }
351
+ function replaceCommitMessageSubject(raw, subject) {
352
+ const sections = parseCommitMessageSections(raw);
353
+ return [subject, sections.body, sections.footer].filter((section) => section.length > 0).join("\n\n");
354
+ }
355
+ function trimBlankLines(lines) {
356
+ let start = 0;
357
+ let end = lines.length;
358
+ while (start < end && lines[start]?.trim().length === 0) {
359
+ start += 1;
360
+ }
361
+ while (end > start && lines[end - 1]?.trim().length === 0) {
362
+ end -= 1;
363
+ }
364
+ return lines.slice(start, end);
365
+ }
366
+ function splitParagraphs(lines) {
367
+ const paragraphs = [];
368
+ let current = [];
369
+ for (const line of lines) {
370
+ if (line.trim().length === 0) {
371
+ if (current.length > 0) {
372
+ paragraphs.push(current);
373
+ current = [];
374
+ }
375
+ continue;
376
+ }
377
+ current.push(line);
378
+ }
379
+ if (current.length > 0) {
380
+ paragraphs.push(current);
381
+ }
382
+ return paragraphs;
383
+ }
384
+ function isFooterParagraph(lines) {
385
+ return lines.length > 0 && lines.every((line) => footerLinePattern.test(line.trim()));
125
386
  }
126
387
  //# sourceMappingURL=protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/commitMessage/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/commitMessage/protocol.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,12 @@ function parseCliArgs(argv) {
51
51
  language: (0, schema_1.parseOutputLanguage)(requireFlagValue(name, value), "--commit-language")
52
52
  };
53
53
  break;
54
+ case "commit-message-structure":
55
+ config.commitMessage = {
56
+ ...config.commitMessage,
57
+ structure: (0, schema_1.parseCommitMessageStructure)(requireFlagValue(name, value), "--commit-message-structure")
58
+ };
59
+ break;
54
60
  case "commit-message":
55
61
  config.commitMessage = { ...config.commitMessage, input: requireFlagValue(name, value) };
56
62
  break;
@@ -117,6 +123,12 @@ function parseCliArgs(argv) {
117
123
  case "request-timeout-ms":
118
124
  config.connection = { ...config.connection, requestTimeoutMs: parseNumberFlag(name, value) };
119
125
  break;
126
+ case "llm-response-correction-retry-count":
127
+ config.connection = {
128
+ ...config.connection,
129
+ llmResponseCorrectionRetryCount: parseNumberFlag(name, value)
130
+ };
131
+ break;
120
132
  case "push-timeout-ms":
121
133
  config.git = { ...config.git, pushTimeoutMs: parseNumberFlag(name, value) };
122
134
  break;
@@ -153,6 +165,12 @@ function parseCliArgs(argv) {
153
165
  case "enable-pass-history":
154
166
  config.passHistory = { ...config.passHistory, enabled: parseBooleanFlag(name, value) };
155
167
  break;
168
+ case "pass-history-write-stage":
169
+ config.passHistory = {
170
+ ...config.passHistory,
171
+ writeStage: (0, schema_1.parsePassHistoryWriteStage)(requireFlagValue(name, value), "--pass-history-write-stage")
172
+ };
173
+ break;
156
174
  case "pass-history-dir":
157
175
  config.passHistory = { ...config.passHistory, dirPath: requireFlagValue(name, value) };
158
176
  break;
@@ -189,6 +207,21 @@ function parseCliArgs(argv) {
189
207
  ai: { ...config.reporting?.ai, enabled: false }
190
208
  };
191
209
  break;
210
+ case "enable-pull-request-summary":
211
+ config.pullRequestSummary = { ...config.pullRequestSummary, enabled: parseBooleanFlag(name, value) };
212
+ break;
213
+ case "pull-request-summary-language":
214
+ config.pullRequestSummary = {
215
+ ...config.pullRequestSummary,
216
+ language: (0, schema_1.parseOutputLanguage)(requireFlagValue(name, value), "--pull-request-summary-language")
217
+ };
218
+ break;
219
+ case "pull-request-summary-output-dir":
220
+ config.pullRequestSummary = { ...config.pullRequestSummary, outputDirPath: requireFlagValue(name, value) };
221
+ break;
222
+ case "pull-request-summary-prompt":
223
+ config.pullRequestSummary = { ...config.pullRequestSummary, prompt: requireFlagValue(name, value) };
224
+ break;
192
225
  default:
193
226
  throw new Error(`Unknown CLI flag: --${name}`);
194
227
  }