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.
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +392 -0
- package/docs/configuration.md +262 -0
- package/docs/contracts.md +134 -0
- package/docs/getting-started.md +177 -0
- package/docs/integrations.md +85 -0
- package/docs/publish.md +135 -0
- package/docs/release-checklist.md +39 -0
- package/docs/releases/0.1.0-draft.md +52 -0
- package/docs/roadmap.md +94 -0
- package/examples/agent/bridge-agent.mjs +51 -0
- package/examples/agent/report-agent.mjs +48 -0
- package/examples/config/smart-commit.json +60 -0
- package/examples/hooks/cursor-bridge-wrapper.sh +12 -0
- package/examples/hooks/husky-pre-commit.sh +6 -0
- package/examples/hooks/smart-commit-bridge.sh +11 -0
- package/out/cli.js +19 -0
- package/out/cli.js.map +1 -0
- package/out/cliApp.js +239 -0
- package/out/cliApp.js.map +1 -0
- package/out/commands/bridge.js +607 -0
- package/out/commands/bridge.js.map +1 -0
- package/out/commands/report.js +266 -0
- package/out/commands/report.js.map +1 -0
- package/out/commands/types.js +3 -0
- package/out/commands/types.js.map +1 -0
- package/out/commitMessage/index.js +110 -0
- package/out/commitMessage/index.js.map +1 -0
- package/out/commitMessage/mockProvider.js +27 -0
- package/out/commitMessage/mockProvider.js.map +1 -0
- package/out/commitMessage/openaiProvider.js +44 -0
- package/out/commitMessage/openaiProvider.js.map +1 -0
- package/out/commitMessage/prompt.js +65 -0
- package/out/commitMessage/prompt.js.map +1 -0
- package/out/commitMessage/protocol.js +126 -0
- package/out/commitMessage/protocol.js.map +1 -0
- package/out/commitMessage/provider.js +3 -0
- package/out/commitMessage/provider.js.map +1 -0
- package/out/config/cliArgs.js +249 -0
- package/out/config/cliArgs.js.map +1 -0
- package/out/config/constants.js +47 -0
- package/out/config/constants.js.map +1 -0
- package/out/config/env.js +183 -0
- package/out/config/env.js.map +1 -0
- package/out/config/file.js +245 -0
- package/out/config/file.js.map +1 -0
- package/out/config/index.js +46 -0
- package/out/config/index.js.map +1 -0
- package/out/config/legacySmartCommit.js +200 -0
- package/out/config/legacySmartCommit.js.map +1 -0
- package/out/config/merge.js +70 -0
- package/out/config/merge.js.map +1 -0
- package/out/config/runtime.js +36 -0
- package/out/config/runtime.js.map +1 -0
- package/out/config/schema.js +204 -0
- package/out/config/schema.js.map +1 -0
- package/out/contracts.js +311 -0
- package/out/contracts.js.map +1 -0
- package/out/git.js +119 -0
- package/out/git.js.map +1 -0
- package/out/logger.js +17 -0
- package/out/logger.js.map +1 -0
- package/out/openaiCompatible.js +67 -0
- package/out/openaiCompatible.js.map +1 -0
- package/out/output.js +23 -0
- package/out/output.js.map +1 -0
- package/out/passHistory/index.js +119 -0
- package/out/passHistory/index.js.map +1 -0
- package/out/passHistory/store.js +252 -0
- package/out/passHistory/store.js.map +1 -0
- package/out/passHistory/types.js +6 -0
- package/out/passHistory/types.js.map +1 -0
- package/out/promptContext.js +72 -0
- package/out/promptContext.js.map +1 -0
- package/out/renderOutput.js +89 -0
- package/out/renderOutput.js.map +1 -0
- package/out/reporting/aggregate.js +113 -0
- package/out/reporting/aggregate.js.map +1 -0
- package/out/reporting/index.js +72 -0
- package/out/reporting/index.js.map +1 -0
- package/out/reporting/mockProvider.js +25 -0
- package/out/reporting/mockProvider.js.map +1 -0
- package/out/reporting/openaiProvider.js +19 -0
- package/out/reporting/openaiProvider.js.map +1 -0
- package/out/reporting/prompt.js +28 -0
- package/out/reporting/prompt.js.map +1 -0
- package/out/reporting/provider.js +3 -0
- package/out/reporting/provider.js.map +1 -0
- package/out/reporting/render.js +151 -0
- package/out/reporting/render.js.map +1 -0
- package/out/reporting/timeWindow.js +79 -0
- package/out/reporting/timeWindow.js.map +1 -0
- package/out/reporting/types.js +11 -0
- package/out/reporting/types.js.map +1 -0
- package/out/review/index.js +64 -0
- package/out/review/index.js.map +1 -0
- package/out/review/mockProvider.js +57 -0
- package/out/review/mockProvider.js.map +1 -0
- package/out/review/openaiProvider.js +40 -0
- package/out/review/openaiProvider.js.map +1 -0
- package/out/review/parser.js +92 -0
- package/out/review/parser.js.map +1 -0
- package/out/review/prompt.js +61 -0
- package/out/review/prompt.js.map +1 -0
- package/out/review/provider.js +3 -0
- package/out/review/provider.js.map +1 -0
- package/out/review/types.js +3 -0
- package/out/review/types.js.map +1 -0
- 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 @@
|
|
|
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"}
|