smart-commit-copilot-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/LICENSE +21 -0
  3. package/README.md +392 -0
  4. package/docs/configuration.md +262 -0
  5. package/docs/contracts.md +134 -0
  6. package/docs/getting-started.md +177 -0
  7. package/docs/integrations.md +85 -0
  8. package/docs/publish.md +135 -0
  9. package/docs/release-checklist.md +39 -0
  10. package/docs/releases/0.1.0-draft.md +52 -0
  11. package/docs/roadmap.md +94 -0
  12. package/examples/agent/bridge-agent.mjs +51 -0
  13. package/examples/agent/report-agent.mjs +48 -0
  14. package/examples/config/smart-commit.json +60 -0
  15. package/examples/hooks/cursor-bridge-wrapper.sh +12 -0
  16. package/examples/hooks/husky-pre-commit.sh +6 -0
  17. package/examples/hooks/smart-commit-bridge.sh +11 -0
  18. package/out/cli.js +19 -0
  19. package/out/cli.js.map +1 -0
  20. package/out/cliApp.js +239 -0
  21. package/out/cliApp.js.map +1 -0
  22. package/out/commands/bridge.js +607 -0
  23. package/out/commands/bridge.js.map +1 -0
  24. package/out/commands/report.js +266 -0
  25. package/out/commands/report.js.map +1 -0
  26. package/out/commands/types.js +3 -0
  27. package/out/commands/types.js.map +1 -0
  28. package/out/commitMessage/index.js +110 -0
  29. package/out/commitMessage/index.js.map +1 -0
  30. package/out/commitMessage/mockProvider.js +27 -0
  31. package/out/commitMessage/mockProvider.js.map +1 -0
  32. package/out/commitMessage/openaiProvider.js +44 -0
  33. package/out/commitMessage/openaiProvider.js.map +1 -0
  34. package/out/commitMessage/prompt.js +65 -0
  35. package/out/commitMessage/prompt.js.map +1 -0
  36. package/out/commitMessage/protocol.js +126 -0
  37. package/out/commitMessage/protocol.js.map +1 -0
  38. package/out/commitMessage/provider.js +3 -0
  39. package/out/commitMessage/provider.js.map +1 -0
  40. package/out/config/cliArgs.js +249 -0
  41. package/out/config/cliArgs.js.map +1 -0
  42. package/out/config/constants.js +47 -0
  43. package/out/config/constants.js.map +1 -0
  44. package/out/config/env.js +183 -0
  45. package/out/config/env.js.map +1 -0
  46. package/out/config/file.js +245 -0
  47. package/out/config/file.js.map +1 -0
  48. package/out/config/index.js +46 -0
  49. package/out/config/index.js.map +1 -0
  50. package/out/config/legacySmartCommit.js +200 -0
  51. package/out/config/legacySmartCommit.js.map +1 -0
  52. package/out/config/merge.js +70 -0
  53. package/out/config/merge.js.map +1 -0
  54. package/out/config/runtime.js +36 -0
  55. package/out/config/runtime.js.map +1 -0
  56. package/out/config/schema.js +204 -0
  57. package/out/config/schema.js.map +1 -0
  58. package/out/contracts.js +311 -0
  59. package/out/contracts.js.map +1 -0
  60. package/out/git.js +119 -0
  61. package/out/git.js.map +1 -0
  62. package/out/logger.js +17 -0
  63. package/out/logger.js.map +1 -0
  64. package/out/openaiCompatible.js +67 -0
  65. package/out/openaiCompatible.js.map +1 -0
  66. package/out/output.js +23 -0
  67. package/out/output.js.map +1 -0
  68. package/out/passHistory/index.js +119 -0
  69. package/out/passHistory/index.js.map +1 -0
  70. package/out/passHistory/store.js +252 -0
  71. package/out/passHistory/store.js.map +1 -0
  72. package/out/passHistory/types.js +6 -0
  73. package/out/passHistory/types.js.map +1 -0
  74. package/out/promptContext.js +72 -0
  75. package/out/promptContext.js.map +1 -0
  76. package/out/renderOutput.js +89 -0
  77. package/out/renderOutput.js.map +1 -0
  78. package/out/reporting/aggregate.js +113 -0
  79. package/out/reporting/aggregate.js.map +1 -0
  80. package/out/reporting/index.js +72 -0
  81. package/out/reporting/index.js.map +1 -0
  82. package/out/reporting/mockProvider.js +25 -0
  83. package/out/reporting/mockProvider.js.map +1 -0
  84. package/out/reporting/openaiProvider.js +19 -0
  85. package/out/reporting/openaiProvider.js.map +1 -0
  86. package/out/reporting/prompt.js +28 -0
  87. package/out/reporting/prompt.js.map +1 -0
  88. package/out/reporting/provider.js +3 -0
  89. package/out/reporting/provider.js.map +1 -0
  90. package/out/reporting/render.js +151 -0
  91. package/out/reporting/render.js.map +1 -0
  92. package/out/reporting/timeWindow.js +79 -0
  93. package/out/reporting/timeWindow.js.map +1 -0
  94. package/out/reporting/types.js +11 -0
  95. package/out/reporting/types.js.map +1 -0
  96. package/out/review/index.js +64 -0
  97. package/out/review/index.js.map +1 -0
  98. package/out/review/mockProvider.js +57 -0
  99. package/out/review/mockProvider.js.map +1 -0
  100. package/out/review/openaiProvider.js +40 -0
  101. package/out/review/openaiProvider.js.map +1 -0
  102. package/out/review/parser.js +92 -0
  103. package/out/review/parser.js.map +1 -0
  104. package/out/review/prompt.js +61 -0
  105. package/out/review/prompt.js.map +1 -0
  106. package/out/review/provider.js +3 -0
  107. package/out/review/provider.js.map +1 -0
  108. package/out/review/types.js +3 -0
  109. package/out/review/types.js.map +1 -0
  110. package/package.json +44 -0
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EXIT_CODE_RUNTIME_ERROR = exports.EXIT_CODE_CONFIG_ERROR = exports.EXIT_CODE_SUCCESS = void 0;
37
+ exports.runReportGenerateCommand = runReportGenerateCommand;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const config_1 = require("../config");
41
+ const contracts_1 = require("../contracts");
42
+ const output_1 = require("../output");
43
+ const passHistory_1 = require("../passHistory");
44
+ const reporting_1 = require("../reporting");
45
+ const git_1 = require("../git");
46
+ exports.EXIT_CODE_SUCCESS = 0;
47
+ exports.EXIT_CODE_CONFIG_ERROR = 3;
48
+ exports.EXIT_CODE_RUNTIME_ERROR = 4;
49
+ class ReportConfigError extends Error {
50
+ constructor(message) {
51
+ super(message);
52
+ this.name = "ReportConfigError";
53
+ }
54
+ }
55
+ async function runReportGenerateCommand(argv, env = process.env, options = {}) {
56
+ const fallbackConfig = (0, output_1.redactCliConfig)((0, config_1.resolveCliConfig)({
57
+ argv: [],
58
+ env: {},
59
+ validate: false,
60
+ requireConnection: false
61
+ }).config);
62
+ let parsedPeriod = null;
63
+ let configArgv = [];
64
+ try {
65
+ parsedPeriod = parseReportPeriodFlag(argv);
66
+ configArgv = filterReportCommandFlags(argv);
67
+ }
68
+ catch (error) {
69
+ return buildConfigErrorResult(error instanceof Error ? error.message : String(error), null, null, fallbackConfig);
70
+ }
71
+ let resolved;
72
+ try {
73
+ resolved = (0, config_1.resolveCliConfig)({
74
+ argv: configArgv,
75
+ env,
76
+ validate: true,
77
+ requireConnection: false
78
+ });
79
+ }
80
+ catch (error) {
81
+ return buildConfigErrorResult(error instanceof Error ? error.message : String(error), null, parsedPeriod, fallbackConfig);
82
+ }
83
+ try {
84
+ const repositoryPath = await resolveRepositoryPath(resolved.runtime.repositoryPath);
85
+ const periodType = parsedPeriod ?? "weekly";
86
+ const passHistoryFilePath = (0, passHistory_1.resolvePassHistoryFilePath)({
87
+ configuredDirPath: resolved.config.passHistory.dirPath,
88
+ repositoryPath
89
+ });
90
+ const loaded = await (0, passHistory_1.loadPassHistoryRecords)(passHistoryFilePath);
91
+ const reportInput = {
92
+ records: loaded.records,
93
+ periodType,
94
+ weekStartsOn: resolved.config.reporting.weekStartsOn,
95
+ language: resolved.config.reporting.language,
96
+ customPrompt: resolved.config.reporting.prompt,
97
+ now: options.now
98
+ };
99
+ let report = (0, reporting_1.generateLocalWorkReport)(reportInput);
100
+ let renderMode = "local";
101
+ let reportProvider = null;
102
+ if (resolved.config.reporting.ai.enabled) {
103
+ ensureReportAiConnectionConfig(resolved.config);
104
+ try {
105
+ const aiReport = await (0, reporting_1.generateAiWorkReport)(reportInput, {
106
+ config: resolved.config,
107
+ providerMode: resolveReportProviderMode(env),
108
+ mockMode: env.SMART_COMMIT_REPORT_MODE
109
+ });
110
+ report = aiReport;
111
+ renderMode = "ai";
112
+ reportProvider = aiReport.provider;
113
+ }
114
+ catch (error) {
115
+ loaded.warnings.push(`AI report generation failed. Fell back to local rendering: ${error instanceof Error ? error.message : String(error)}`);
116
+ renderMode = "ai-fallback-local";
117
+ }
118
+ }
119
+ const outputDirectoryPath = (0, reporting_1.resolveReportOutputDirectoryPath)({
120
+ configuredDirPath: resolved.config.reporting.outputDirPath,
121
+ repositoryPath
122
+ });
123
+ const fileName = (0, reporting_1.buildReportFileName)(periodType, options.now ?? new Date());
124
+ const outputFilePath = await (0, reporting_1.writeReportFile)(outputDirectoryPath, fileName, report.markdown);
125
+ return {
126
+ exitCode: exports.EXIT_CODE_SUCCESS,
127
+ payload: {
128
+ status: "ok",
129
+ schemaVersion: contracts_1.SMART_COMMIT_CLI_SCHEMA_VERSION,
130
+ command: "report generate",
131
+ repositoryPath,
132
+ periodType,
133
+ passHistoryFilePath,
134
+ outputFilePath,
135
+ warnings: loaded.warnings,
136
+ renderMode,
137
+ reportProvider,
138
+ facts: report.facts,
139
+ config: (0, output_1.redactCliConfig)(resolved.config),
140
+ summary: `Generated ${periodType} report with ${report.facts.recordCount} record(s).`
141
+ }
142
+ };
143
+ }
144
+ catch (error) {
145
+ const message = error instanceof Error ? error.message : String(error);
146
+ const code = error instanceof ReportConfigError ? "CONFIG_ERROR" : "RUNTIME_ERROR";
147
+ return {
148
+ exitCode: code === "CONFIG_ERROR" ? exports.EXIT_CODE_CONFIG_ERROR : exports.EXIT_CODE_RUNTIME_ERROR,
149
+ payload: {
150
+ status: "error",
151
+ schemaVersion: contracts_1.SMART_COMMIT_CLI_SCHEMA_VERSION,
152
+ command: "report generate",
153
+ repositoryPath: resolved.runtime.repositoryPath ? path.resolve(resolved.runtime.repositoryPath) : null,
154
+ periodType: parsedPeriod ?? "weekly",
155
+ passHistoryFilePath: null,
156
+ outputFilePath: null,
157
+ warnings: [],
158
+ renderMode: "local",
159
+ reportProvider: null,
160
+ facts: null,
161
+ config: (0, output_1.redactCliConfig)(resolved.config),
162
+ summary: message,
163
+ error: {
164
+ code,
165
+ message
166
+ }
167
+ }
168
+ };
169
+ }
170
+ }
171
+ function buildConfigErrorResult(message, repositoryPath, periodType, config) {
172
+ return {
173
+ exitCode: exports.EXIT_CODE_CONFIG_ERROR,
174
+ payload: {
175
+ status: "error",
176
+ schemaVersion: contracts_1.SMART_COMMIT_CLI_SCHEMA_VERSION,
177
+ command: "report generate",
178
+ repositoryPath,
179
+ periodType,
180
+ passHistoryFilePath: null,
181
+ outputFilePath: null,
182
+ warnings: [],
183
+ renderMode: "local",
184
+ reportProvider: null,
185
+ facts: null,
186
+ config,
187
+ summary: message,
188
+ error: {
189
+ code: "CONFIG_ERROR",
190
+ message
191
+ }
192
+ }
193
+ };
194
+ }
195
+ function resolveReportProviderMode(env) {
196
+ return env.SMART_COMMIT_REPORT_PROVIDER?.trim().toLowerCase() === "mock"
197
+ ? "mock"
198
+ : "openai-compatible";
199
+ }
200
+ function ensureReportAiConnectionConfig(config) {
201
+ try {
202
+ (0, config_1.validateCliConfig)(config, { requireConnection: true });
203
+ }
204
+ catch (error) {
205
+ throw new ReportConfigError(error instanceof Error ? error.message : String(error));
206
+ }
207
+ }
208
+ async function resolveRepositoryPath(repositoryPath) {
209
+ if (!repositoryPath) {
210
+ throw new ReportConfigError("--repo is required for report generate.");
211
+ }
212
+ const resolved = path.resolve(repositoryPath);
213
+ if (!fs.existsSync(resolved)) {
214
+ throw new ReportConfigError(`Repository path not found: ${repositoryPath}`);
215
+ }
216
+ if (!fs.statSync(resolved).isDirectory()) {
217
+ throw new ReportConfigError(`Repository path must be a directory: ${repositoryPath}`);
218
+ }
219
+ try {
220
+ return await (0, git_1.resolveGitRepositoryRoot)(resolved);
221
+ }
222
+ catch (error) {
223
+ if (error instanceof git_1.GitExecutionError) {
224
+ throw new ReportConfigError(`Repository path is not inside a Git repository: ${repositoryPath}`);
225
+ }
226
+ throw error;
227
+ }
228
+ }
229
+ function parseReportPeriodFlag(argv) {
230
+ for (let index = 0; index < argv.length; index += 1) {
231
+ const token = argv[index];
232
+ if (token === "--period") {
233
+ return parseReportPeriodValue(argv[index + 1]);
234
+ }
235
+ if (token.startsWith("--period=")) {
236
+ return parseReportPeriodValue(token.slice("--period=".length));
237
+ }
238
+ }
239
+ return null;
240
+ }
241
+ function parseReportPeriodValue(value) {
242
+ if (!value) {
243
+ throw new Error("--period requires a value.");
244
+ }
245
+ const normalized = value.trim().toLowerCase();
246
+ if (reporting_1.REPORT_PERIOD_TYPES.includes(normalized)) {
247
+ return normalized;
248
+ }
249
+ throw new Error(`--period must be one of: ${reporting_1.REPORT_PERIOD_TYPES.join(", ")}.`);
250
+ }
251
+ function filterReportCommandFlags(argv) {
252
+ const result = [];
253
+ for (let index = 0; index < argv.length; index += 1) {
254
+ const token = argv[index];
255
+ if (token === "--period") {
256
+ index += 1;
257
+ continue;
258
+ }
259
+ if (token.startsWith("--period=")) {
260
+ continue;
261
+ }
262
+ result.push(token);
263
+ }
264
+ return result;
265
+ }
266
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.resolveCommitMessage = resolveCommitMessage;
18
+ const mockProvider_1 = require("./mockProvider");
19
+ const openaiProvider_1 = require("./openaiProvider");
20
+ const protocol_1 = require("./protocol");
21
+ __exportStar(require("./protocol"), exports);
22
+ __exportStar(require("./prompt"), exports);
23
+ __exportStar(require("./provider"), exports);
24
+ async function resolveCommitMessage(input, options = {}) {
25
+ const initial = input.config.commitMessage.input.trim();
26
+ const provider = options.provider ?? createProvider(input.config, options.providerMode, options.mockMode);
27
+ if (initial && !input.config.commitMessage.hybridGenerate) {
28
+ return {
29
+ message: (0, protocol_1.validateAndFinalizeCommitMessage)({
30
+ rawCommitMessage: initial,
31
+ config: input.config,
32
+ branchName: input.branchName
33
+ }),
34
+ source: "provided",
35
+ provider: null
36
+ };
37
+ }
38
+ if (initial && input.config.commitMessage.hybridGenerate) {
39
+ const generationInput = buildGenerationInput(input, initial);
40
+ const message = await generateAndRepairCommitMessage(generationInput, provider, input.config, input.branchName);
41
+ return {
42
+ message,
43
+ source: "hybrid",
44
+ provider: provider.name
45
+ };
46
+ }
47
+ if (input.config.commitMessage.autoGenerate) {
48
+ const generationInput = buildGenerationInput(input);
49
+ const message = await generateAndRepairCommitMessage(generationInput, provider, input.config, input.branchName);
50
+ return {
51
+ message,
52
+ source: "generated",
53
+ provider: provider.name
54
+ };
55
+ }
56
+ throw new protocol_1.CommitMessageFlowError("COMMIT_MESSAGE_REQUIRED", "Commit message is empty and auto-generation is disabled.");
57
+ }
58
+ function createProvider(config, providerMode, mockMode) {
59
+ const mode = providerMode ?? resolveProviderMode();
60
+ return mode === "mock"
61
+ ? (0, mockProvider_1.createMockCommitMessageProvider)({ mode: mockMode })
62
+ : (0, openaiProvider_1.createOpenAICompatibleCommitMessageProvider)(config);
63
+ }
64
+ function resolveProviderMode() {
65
+ return process.env.SMART_COMMIT_COMMIT_PROVIDER?.trim().toLowerCase() === "mock"
66
+ ? "mock"
67
+ : "openai-compatible";
68
+ }
69
+ function buildGenerationInput(input, userDraft) {
70
+ return {
71
+ repositoryPath: input.repositoryPath,
72
+ branchName: input.branchName,
73
+ diff: input.diff,
74
+ changedFiles: input.changedFiles,
75
+ language: input.config.commitMessage.language,
76
+ ...(userDraft ? { userDraft } : {})
77
+ };
78
+ }
79
+ async function generateAndRepairCommitMessage(generationInput, provider, config, branchName) {
80
+ const first = await provider.generateCommitMessage(generationInput);
81
+ const validated = tryValidateGeneratedCommitMessage(first, config, branchName);
82
+ if (validated.ok) {
83
+ return validated.message;
84
+ }
85
+ const repaired = await provider.repairCommitMessage(generationInput, first, validated.issues);
86
+ const repairedValidation = tryValidateGeneratedCommitMessage(repaired, config, branchName);
87
+ if (!repairedValidation.ok) {
88
+ throw new protocol_1.CommitMessageFlowError("COMMIT_MESSAGE_INVALID", `Commit message generation failed after repair: ${repairedValidation.issues.join("; ")}`);
89
+ }
90
+ return repairedValidation.message;
91
+ }
92
+ function tryValidateGeneratedCommitMessage(rawCommitMessage, config, branchName) {
93
+ try {
94
+ return {
95
+ ok: true,
96
+ message: (0, protocol_1.validateAndFinalizeCommitMessage)({
97
+ rawCommitMessage: (0, protocol_1.normalizeCommitMessage)(rawCommitMessage),
98
+ config,
99
+ branchName
100
+ })
101
+ };
102
+ }
103
+ catch (error) {
104
+ return {
105
+ ok: false,
106
+ issues: [error instanceof Error ? error.message : String(error)]
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commitMessage/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMockCommitMessageProvider = createMockCommitMessageProvider;
4
+ function createMockCommitMessageProvider(config = {}) {
5
+ return {
6
+ name: "mock",
7
+ async generateCommitMessage(input) {
8
+ const mode = config.mode?.trim().toLowerCase() ?? process.env.SMART_COMMIT_COMMIT_MODE?.trim().toLowerCase();
9
+ if (mode === "invalid") {
10
+ return "";
11
+ }
12
+ if (input.userDraft?.trim()) {
13
+ return `feat: refine ${input.userDraft.trim()}`;
14
+ }
15
+ return "feat: mock generated summary";
16
+ },
17
+ async repairCommitMessage(input, invalidResponse, issues) {
18
+ void invalidResponse;
19
+ void issues;
20
+ if (input.userDraft?.trim()) {
21
+ return `feat: repaired ${input.userDraft.trim()}`;
22
+ }
23
+ return "feat: repaired generated summary";
24
+ }
25
+ };
26
+ }
27
+ //# sourceMappingURL=mockProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockProvider.js","sourceRoot":"","sources":["../../src/commitMessage/mockProvider.ts"],"names":[],"mappings":";;AAGA,0EAyBC;AAzBD,SAAgB,+BAA+B,CAAC,SAA4B,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,CAAC,qBAAqB,CAAC,KAAmC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7G,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC5B,OAAO,gBAAgB,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,CAAC;YAED,OAAO,8BAA8B,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,KAAmC,EAAE,eAAuB,EAAE,MAAgB;YACtG,KAAK,eAAe,CAAC;YACrB,KAAK,MAAM,CAAC;YACZ,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC5B,OAAO,kBAAkB,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,CAAC;YAED,OAAO,kCAAkC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOpenAICompatibleCommitMessageProvider = createOpenAICompatibleCommitMessageProvider;
4
+ const openaiCompatible_1 = require("../openaiCompatible");
5
+ const promptContext_1 = require("../promptContext");
6
+ const prompt_1 = require("./prompt");
7
+ function createOpenAICompatibleCommitMessageProvider(config) {
8
+ return {
9
+ name: "openai-compatible",
10
+ async generateCommitMessage(input) {
11
+ return (0, openaiCompatible_1.requestOpenAICompatibleText)({
12
+ config,
13
+ messages: (0, prompt_1.buildCommitMessageMessages)(input, {
14
+ promptAugmentation: (0, promptContext_1.buildPromptAugmentation)({
15
+ repositoryPath: input.repositoryPath,
16
+ skill: config.commitMessage.skill,
17
+ categoryLabel: "commit-message skill"
18
+ })
19
+ }),
20
+ temperature: 0.1,
21
+ taskLabel: "commit-message"
22
+ });
23
+ },
24
+ async repairCommitMessage(input, invalidResponse, issues) {
25
+ return (0, openaiCompatible_1.requestOpenAICompatibleText)({
26
+ config,
27
+ messages: (0, prompt_1.buildCommitMessageRepairMessages)({
28
+ generationInput: input,
29
+ invalidResponse,
30
+ issues
31
+ }, {
32
+ promptAugmentation: (0, promptContext_1.buildPromptAugmentation)({
33
+ repositoryPath: input.repositoryPath,
34
+ skill: config.commitMessage.skill,
35
+ categoryLabel: "commit-message skill"
36
+ })
37
+ }),
38
+ temperature: 0.1,
39
+ taskLabel: "commit-message"
40
+ });
41
+ }
42
+ };
43
+ }
44
+ //# sourceMappingURL=openaiProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiProvider.js","sourceRoot":"","sources":["../../src/commitMessage/openaiProvider.ts"],"names":[],"mappings":";;AAMA,kGAuCC;AA5CD,0DAAkE;AAClE,oDAA2D;AAC3D,qCAAsH;AAGtH,SAAgB,2CAA2C,CAAC,MAAiB;IAC3E,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,KAAK,CAAC,qBAAqB,CAAC,KAAmC;YAC7D,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,mCAA0B,EAAC,KAAK,EAAE;oBAC1C,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK;wBACjC,aAAa,EAAE,sBAAsB;qBACtC,CAAC;iBACH,CAAC;gBACF,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,KAAmC,EAAE,eAAuB,EAAE,MAAgB;YACtG,OAAO,IAAA,8CAA2B,EAAC;gBACjC,MAAM;gBACN,QAAQ,EAAE,IAAA,yCAAgC,EACxC;oBACE,eAAe,EAAE,KAAK;oBACtB,eAAe;oBACf,MAAM;iBACP,EACD;oBACE,kBAAkB,EAAE,IAAA,uCAAuB,EAAC;wBAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;wBACpC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK;wBACjC,aAAa,EAAE,sBAAsB;qBACtC,CAAC;iBACH,CACF;gBACD,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCommitMessageMessages = buildCommitMessageMessages;
4
+ exports.buildCommitMessageRepairMessages = buildCommitMessageRepairMessages;
5
+ function buildCommitMessageMessages(input, options = {}) {
6
+ return [
7
+ {
8
+ role: "system",
9
+ content: [
10
+ "You generate a single-line git commit message.",
11
+ "Return plain text only.",
12
+ "Do not return Markdown, bullets, JSON, or explanations.",
13
+ ...(options.promptAugmentation?.length ? ["", ...options.promptAugmentation] : [])
14
+ ].join(" ")
15
+ },
16
+ {
17
+ role: "user",
18
+ content: [
19
+ `Repository: ${input.repositoryPath}`,
20
+ `Branch: ${input.branchName ?? "(unknown)"}`,
21
+ `Language: ${input.language}`,
22
+ `Changed files (${input.changedFiles.length}):`,
23
+ ...input.changedFiles.map((file) => `- ${file}`),
24
+ "",
25
+ ...(input.userDraft
26
+ ? [
27
+ "User draft:",
28
+ input.userDraft,
29
+ ""
30
+ ]
31
+ : []),
32
+ "Staged diff:",
33
+ input.diff
34
+ ].join("\n")
35
+ }
36
+ ];
37
+ }
38
+ function buildCommitMessageRepairMessages(input, options = {}) {
39
+ return [
40
+ {
41
+ role: "system",
42
+ content: [
43
+ "You are repairing an invalid single-line git commit message.",
44
+ "Return plain text only.",
45
+ "Do not return explanations or JSON.",
46
+ ...(options.promptAugmentation?.length ? ["", ...options.promptAugmentation] : [])
47
+ ].join(" ")
48
+ },
49
+ {
50
+ role: "user",
51
+ content: [
52
+ `Repository: ${input.generationInput.repositoryPath}`,
53
+ `Branch: ${input.generationInput.branchName ?? "(unknown)"}`,
54
+ `Language: ${input.generationInput.language}`,
55
+ "",
56
+ "Invalid previous response:",
57
+ input.invalidResponse,
58
+ "",
59
+ "Repair issues:",
60
+ ...input.issues.map((issue) => `- ${issue}`)
61
+ ].join("\n")
62
+ }
63
+ ];
64
+ }
65
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commitMessage/prompt.ts"],"names":[],"mappings":";;AAWA,gEAmCC;AAED,4EA8BC;AAnED,SAAgB,0BAA0B,CACxC,KAAmC,EACnC,UAAsD,EAAE;IAExD,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,gDAAgD;gBAChD,yBAAyB;gBACzB,yDAAyD;gBACzD,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,eAAe,KAAK,CAAC,cAAc,EAAE;gBACrC,WAAW,KAAK,CAAC,UAAU,IAAI,WAAW,EAAE;gBAC5C,aAAa,KAAK,CAAC,QAAQ,EAAE;gBAC7B,kBAAkB,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI;gBAC/C,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChD,EAAE;gBACF,GAAG,CAAC,KAAK,CAAC,SAAS;oBACjB,CAAC,CAAC;wBACE,aAAa;wBACb,KAAK,CAAC,SAAS;wBACf,EAAE;qBACH;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,cAAc;gBACd,KAAK,CAAC,IAAI;aACX,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,gCAAgC,CAAC,KAIhD,EAAE,UAAsD,EAAE;IACzD,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,8DAA8D;gBAC9D,yBAAyB;gBACzB,qCAAqC;gBACrC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,eAAe,KAAK,CAAC,eAAe,CAAC,cAAc,EAAE;gBACrD,WAAW,KAAK,CAAC,eAAe,CAAC,UAAU,IAAI,WAAW,EAAE;gBAC5D,aAAa,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC7C,EAAE;gBACF,4BAA4B;gBAC5B,KAAK,CAAC,eAAe;gBACrB,EAAE;gBACF,gBAAgB;gBAChB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;aAC7C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF,CAAC;AACJ,CAAC"}