steroids-cli 0.15.3 → 0.15.5
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/dist/commands/ai-proxy.d.ts +6 -0
- package/dist/commands/ai-proxy.d.ts.map +1 -0
- package/dist/commands/ai-proxy.js +79 -0
- package/dist/commands/ai-proxy.js.map +1 -0
- package/dist/commands/ai-run.d.ts.map +1 -1
- package/dist/commands/ai-run.js +10 -7
- package/dist/commands/ai-run.js.map +1 -1
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +5 -0
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/completion.js +2 -1
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/features.d.ts +5 -0
- package/dist/commands/features.d.ts.map +1 -0
- package/dist/commands/features.js +255 -0
- package/dist/commands/features.js.map +1 -0
- package/dist/commands/llm-content.d.ts +1 -1
- package/dist/commands/llm-content.d.ts.map +1 -1
- package/dist/commands/llm-content.js +36 -6
- package/dist/commands/llm-content.js.map +1 -1
- package/dist/commands/llm.d.ts.map +1 -1
- package/dist/commands/llm.js +1 -0
- package/dist/commands/llm.js.map +1 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +22 -3
- package/dist/commands/web.js.map +1 -1
- package/dist/database/queries.d.ts.map +1 -1
- package/dist/database/queries.js +13 -6
- package/dist/database/queries.js.map +1 -1
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/api-models.d.ts +5 -1
- package/dist/providers/api-models.d.ts.map +1 -1
- package/dist/providers/api-models.js +10 -107
- package/dist/providers/api-models.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +16 -1
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +16 -1
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/interface.d.ts.map +1 -1
- package/dist/providers/interface.js +11 -1
- package/dist/providers/interface.js.map +1 -1
- package/dist/providers/mistral-models.d.ts +18 -0
- package/dist/providers/mistral-models.d.ts.map +1 -0
- package/dist/providers/mistral-models.js +145 -0
- package/dist/providers/mistral-models.js.map +1 -0
- package/dist/providers/mistral.d.ts +6 -0
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js +31 -54
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/opencode.d.ts.map +1 -1
- package/dist/providers/opencode.js +5 -1
- package/dist/providers/opencode.js.map +1 -1
- package/dist/proxy/daemon-entry.d.ts +9 -0
- package/dist/proxy/daemon-entry.d.ts.map +1 -0
- package/dist/proxy/daemon-entry.js +29 -0
- package/dist/proxy/daemon-entry.js.map +1 -0
- package/dist/proxy/hf-proxy.d.ts +16 -0
- package/dist/proxy/hf-proxy.d.ts.map +1 -0
- package/dist/proxy/hf-proxy.js +200 -0
- package/dist/proxy/hf-proxy.js.map +1 -0
- package/dist/proxy/hf-token.d.ts +18 -0
- package/dist/proxy/hf-token.d.ts.map +1 -0
- package/dist/proxy/hf-token.js +57 -0
- package/dist/proxy/hf-token.js.map +1 -0
- package/dist/proxy/lifecycle.d.ts +26 -0
- package/dist/proxy/lifecycle.d.ts.map +1 -0
- package/dist/proxy/lifecycle.js +129 -0
- package/dist/proxy/lifecycle.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/merge.d.ts +0 -3
- package/dist/commands/merge.d.ts.map +0 -1
- package/dist/commands/merge.js +0 -246
- package/dist/commands/merge.js.map +0 -1
- package/dist/parallel/merge-commit-checks.d.ts +0 -6
- package/dist/parallel/merge-commit-checks.d.ts.map +0 -1
- package/dist/parallel/merge-commit-checks.js +0 -28
- package/dist/parallel/merge-commit-checks.js.map +0 -1
- package/dist/parallel/merge-conflict-attempts.d.ts +0 -8
- package/dist/parallel/merge-conflict-attempts.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-attempts.js +0 -60
- package/dist/parallel/merge-conflict-attempts.js.map +0 -1
- package/dist/parallel/merge-conflict-invoke.d.ts +0 -2
- package/dist/parallel/merge-conflict-invoke.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-invoke.js +0 -41
- package/dist/parallel/merge-conflict-invoke.js.map +0 -1
- package/dist/parallel/merge-conflict-prompts.d.ts +0 -23
- package/dist/parallel/merge-conflict-prompts.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-prompts.js +0 -40
- package/dist/parallel/merge-conflict-prompts.js.map +0 -1
- package/dist/parallel/merge-conflict-task.d.ts +0 -3
- package/dist/parallel/merge-conflict-task.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-task.js +0 -59
- package/dist/parallel/merge-conflict-task.js.map +0 -1
- package/dist/parallel/merge-conflict.d.ts +0 -22
- package/dist/parallel/merge-conflict.d.ts.map +0 -1
- package/dist/parallel/merge-conflict.js +0 -176
- package/dist/parallel/merge-conflict.js.map +0 -1
- package/dist/parallel/merge-errors.d.ts +0 -12
- package/dist/parallel/merge-errors.d.ts.map +0 -1
- package/dist/parallel/merge-errors.js +0 -18
- package/dist/parallel/merge-errors.js.map +0 -1
- package/dist/parallel/merge-git.d.ts +0 -25
- package/dist/parallel/merge-git.d.ts.map +0 -1
- package/dist/parallel/merge-git.js +0 -141
- package/dist/parallel/merge-git.js.map +0 -1
- package/dist/parallel/merge-lock.d.ts +0 -28
- package/dist/parallel/merge-lock.d.ts.map +0 -1
- package/dist/parallel/merge-lock.js +0 -91
- package/dist/parallel/merge-lock.js.map +0 -1
- package/dist/parallel/merge-process.d.ts +0 -21
- package/dist/parallel/merge-process.d.ts.map +0 -1
- package/dist/parallel/merge-process.js +0 -104
- package/dist/parallel/merge-process.js.map +0 -1
- package/dist/parallel/merge-progress.d.ts +0 -22
- package/dist/parallel/merge-progress.d.ts.map +0 -1
- package/dist/parallel/merge-progress.js +0 -41
- package/dist/parallel/merge-progress.js.map +0 -1
- package/dist/parallel/merge-sealing.d.ts +0 -8
- package/dist/parallel/merge-sealing.d.ts.map +0 -1
- package/dist/parallel/merge-sealing.js +0 -60
- package/dist/parallel/merge-sealing.js.map +0 -1
- package/dist/parallel/merge-validation.d.ts +0 -6
- package/dist/parallel/merge-validation.d.ts.map +0 -1
- package/dist/parallel/merge-validation.js +0 -57
- package/dist/parallel/merge-validation.js.map +0 -1
- package/dist/parallel/merge-workspace.d.ts +0 -8
- package/dist/parallel/merge-workspace.d.ts.map +0 -1
- package/dist/parallel/merge-workspace.js +0 -37
- package/dist/parallel/merge-workspace.js.map +0 -1
- package/dist/parallel/merge.d.ts +0 -48
- package/dist/parallel/merge.d.ts.map +0 -1
- package/dist/parallel/merge.js +0 -228
- package/dist/parallel/merge.js.map +0 -1
- package/dist/workspace/git-lifecycle-merge.d.ts +0 -23
- package/dist/workspace/git-lifecycle-merge.d.ts.map +0 -1
- package/dist/workspace/git-lifecycle-merge.js +0 -159
- package/dist/workspace/git-lifecycle-merge.js.map +0 -1
- package/dist/workspace/merge-pipeline.d.ts +0 -21
- package/dist/workspace/merge-pipeline.d.ts.map +0 -1
- package/dist/workspace/merge-pipeline.js +0 -74
- package/dist/workspace/merge-pipeline.js.map +0 -1
package/dist/commands/merge.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeCommand = mergeCommand;
|
|
4
|
-
/**
|
|
5
|
-
* steroids merge - Merge completed parallel workstreams
|
|
6
|
-
*/
|
|
7
|
-
const node_util_1 = require("node:util");
|
|
8
|
-
const node_crypto_1 = require("node:crypto");
|
|
9
|
-
const node_fs_1 = require("node:fs");
|
|
10
|
-
const node_path_1 = require("node:path");
|
|
11
|
-
const output_js_1 = require("../cli/output.js");
|
|
12
|
-
const help_js_1 = require("../cli/help.js");
|
|
13
|
-
const errors_js_1 = require("../cli/errors.js");
|
|
14
|
-
const connection_js_1 = require("../database/connection.js");
|
|
15
|
-
const global_db_js_1 = require("../runners/global-db.js");
|
|
16
|
-
const loader_js_1 = require("../config/loader.js");
|
|
17
|
-
const merge_js_1 = require("../parallel/merge.js");
|
|
18
|
-
const HELP = (0, help_js_1.generateHelp)({
|
|
19
|
-
command: 'merge',
|
|
20
|
-
description: 'Merge completed parallel workstreams into main',
|
|
21
|
-
details: `When running parallel sessions, each workstream is merged via cherry-pick.
|
|
22
|
-
This command runs the final merge step for a completed parallel session and recovers
|
|
23
|
-
from stale merge locks or interrupted conflict resolution when needed.`,
|
|
24
|
-
usage: [
|
|
25
|
-
'steroids merge [options]',
|
|
26
|
-
],
|
|
27
|
-
options: [
|
|
28
|
-
{ long: 'project', description: 'Project directory to merge (defaults to cwd)', values: '<path>' },
|
|
29
|
-
{ long: 'session', description: 'Parallel session ID (defaults to latest session for project)', values: '<id>' },
|
|
30
|
-
{ long: 'session-id', description: 'Alias for --session', values: '<id>' },
|
|
31
|
-
{ long: 'remote', description: 'Git remote to fetch from', values: '<name>', default: 'origin' },
|
|
32
|
-
{ long: 'main-branch', description: 'Target branch for cherry-picks', values: '<name>', default: 'main' },
|
|
33
|
-
{ long: 'integration-branch', description: 'Temporary integration branch name', values: '<name>' },
|
|
34
|
-
{ long: 'validation-command', description: 'Shell command to validate merged state before push', values: '<cmd>' },
|
|
35
|
-
],
|
|
36
|
-
examples: [
|
|
37
|
-
{ command: 'steroids merge', description: 'Merge latest parallel session in current project' },
|
|
38
|
-
{ command: 'steroids merge --project ~/projects/my-app', description: 'Merge using an explicit project path' },
|
|
39
|
-
{ command: 'steroids merge --session abc123', description: 'Merge a specific parallel session' },
|
|
40
|
-
],
|
|
41
|
-
related: [
|
|
42
|
-
{ command: 'steroids runners start --parallel', description: 'Start parallel runners' },
|
|
43
|
-
],
|
|
44
|
-
});
|
|
45
|
-
function parseSectionIds(sectionIdsJson) {
|
|
46
|
-
try {
|
|
47
|
-
const parsed = JSON.parse(sectionIdsJson);
|
|
48
|
-
if (!Array.isArray(parsed)) {
|
|
49
|
-
return [];
|
|
50
|
-
}
|
|
51
|
-
return parsed.filter((entry) => typeof entry === 'string');
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return [];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function parseTimestamp(value) {
|
|
58
|
-
if (!value) {
|
|
59
|
-
return Number.MAX_SAFE_INTEGER;
|
|
60
|
-
}
|
|
61
|
-
const parsed = Date.parse(value);
|
|
62
|
-
return Number.isNaN(parsed) ? Number.MAX_SAFE_INTEGER : parsed;
|
|
63
|
-
}
|
|
64
|
-
function orderByCompletion(planRows) {
|
|
65
|
-
return [...planRows].sort((left, right) => {
|
|
66
|
-
const completedLeft = parseTimestamp(left.completed_at);
|
|
67
|
-
const completedRight = parseTimestamp(right.completed_at);
|
|
68
|
-
if (completedLeft !== completedRight) {
|
|
69
|
-
return completedLeft - completedRight;
|
|
70
|
-
}
|
|
71
|
-
return parseTimestamp(left.created_at) - parseTimestamp(right.created_at);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
function buildPlanForSession(db, session, includeRunning) {
|
|
75
|
-
const statusFilter = includeRunning ? '' : ' AND status = \'completed\'';
|
|
76
|
-
const rows = db
|
|
77
|
-
.prepare(`SELECT id, branch_name, section_ids, status, completed_at, created_at
|
|
78
|
-
FROM workstreams
|
|
79
|
-
WHERE session_id = ?${statusFilter}`)
|
|
80
|
-
.all(session.id);
|
|
81
|
-
if (rows.length === 0) {
|
|
82
|
-
return {
|
|
83
|
-
sessionId: session.id,
|
|
84
|
-
sessionStatus: session.status,
|
|
85
|
-
createdAt: session.created_at,
|
|
86
|
-
workstreams: [],
|
|
87
|
-
sectionPlans: rows,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
const orderedRows = orderByCompletion(rows);
|
|
91
|
-
const workstreams = orderedRows
|
|
92
|
-
.map((row) => ({
|
|
93
|
-
id: row.id,
|
|
94
|
-
branchName: row.branch_name,
|
|
95
|
-
}));
|
|
96
|
-
return {
|
|
97
|
-
sessionId: session.id,
|
|
98
|
-
sessionStatus: session.status,
|
|
99
|
-
createdAt: session.created_at,
|
|
100
|
-
workstreams,
|
|
101
|
-
sectionPlans: orderedRows,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function findLatestSessionForProject(db, projectPath) {
|
|
105
|
-
return db
|
|
106
|
-
.prepare(`SELECT id, status, created_at
|
|
107
|
-
FROM parallel_sessions
|
|
108
|
-
WHERE project_path = ?
|
|
109
|
-
ORDER BY created_at DESC`)
|
|
110
|
-
.get(projectPath) ?? null;
|
|
111
|
-
}
|
|
112
|
-
function getSessionById(db, projectPath, sessionId) {
|
|
113
|
-
return db
|
|
114
|
-
.prepare(`SELECT id, status, created_at
|
|
115
|
-
FROM parallel_sessions
|
|
116
|
-
WHERE id = ? AND project_path = ?`)
|
|
117
|
-
.get(sessionId, projectPath) ?? null;
|
|
118
|
-
}
|
|
119
|
-
function resolveProjectPath(projectArg) {
|
|
120
|
-
const projectPath = (0, node_path_1.resolve)(projectArg ?? process.cwd());
|
|
121
|
-
const steroidsDbPath = (0, node_path_1.join)(projectPath, '.steroids', 'steroids.db');
|
|
122
|
-
if (!(0, node_fs_1.existsSync)(projectPath)) {
|
|
123
|
-
throw new Error(`Project directory does not exist: ${projectPath}`);
|
|
124
|
-
}
|
|
125
|
-
if (!(0, node_fs_1.existsSync)(steroidsDbPath)) {
|
|
126
|
-
throw new Error(`Not a steroids project: ${projectPath}`);
|
|
127
|
-
}
|
|
128
|
-
return projectPath;
|
|
129
|
-
}
|
|
130
|
-
function resolveMergePlan(db, projectPath, explicitSessionId) {
|
|
131
|
-
const targetSession = explicitSessionId
|
|
132
|
-
? getSessionById(db, projectPath, explicitSessionId)
|
|
133
|
-
: findLatestSessionForProject(db, projectPath);
|
|
134
|
-
if (!targetSession) {
|
|
135
|
-
if (explicitSessionId) {
|
|
136
|
-
throw new Error(`Parallel session not found: ${explicitSessionId}`);
|
|
137
|
-
}
|
|
138
|
-
throw new Error(`No parallel sessions found for project: ${projectPath}`);
|
|
139
|
-
}
|
|
140
|
-
const includeRunning = targetSession.status === 'running' || targetSession.status === 'merging';
|
|
141
|
-
const plan = buildPlanForSession(db, targetSession, includeRunning);
|
|
142
|
-
if (plan.sectionPlans.length === 0) {
|
|
143
|
-
throw new Error(`No completed workstreams found for session: ${targetSession.id}`);
|
|
144
|
-
}
|
|
145
|
-
return plan;
|
|
146
|
-
}
|
|
147
|
-
function summarizeError(errors) {
|
|
148
|
-
if (errors.length === 1) {
|
|
149
|
-
return errors[0];
|
|
150
|
-
}
|
|
151
|
-
return errors.join('; ');
|
|
152
|
-
}
|
|
153
|
-
async function mergeCommand(args, flags) {
|
|
154
|
-
const out = (0, output_js_1.createOutput)({ command: 'merge', flags });
|
|
155
|
-
if (flags.help) {
|
|
156
|
-
console.log(HELP);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const { values } = (0, node_util_1.parseArgs)({
|
|
160
|
-
args,
|
|
161
|
-
options: {
|
|
162
|
-
project: { type: 'string', short: 'p' },
|
|
163
|
-
session: { type: 'string' },
|
|
164
|
-
'session-id': { type: 'string' },
|
|
165
|
-
remote: { type: 'string', default: 'origin' },
|
|
166
|
-
'main-branch': { type: 'string', default: 'main' },
|
|
167
|
-
'integration-branch': { type: 'string' },
|
|
168
|
-
'validation-command': { type: 'string' },
|
|
169
|
-
},
|
|
170
|
-
allowPositionals: false,
|
|
171
|
-
});
|
|
172
|
-
const explicitSession = values['session-id']
|
|
173
|
-
?? values.session;
|
|
174
|
-
const projectPath = resolveProjectPath(values.project);
|
|
175
|
-
// Merge command performs only project-scoped work and never touches other repos.
|
|
176
|
-
const { db: globalDb, close: closeGlobalDb } = (0, global_db_js_1.openGlobalDatabase)();
|
|
177
|
-
let plan;
|
|
178
|
-
try {
|
|
179
|
-
plan = resolveMergePlan(globalDb, projectPath, explicitSession);
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
closeGlobalDb();
|
|
183
|
-
}
|
|
184
|
-
if (flags.dryRun) {
|
|
185
|
-
out.success({
|
|
186
|
-
project_path: projectPath,
|
|
187
|
-
session_id: plan.sessionId,
|
|
188
|
-
session_status: plan.sessionStatus,
|
|
189
|
-
session_created_at: plan.createdAt,
|
|
190
|
-
workstreams: plan.sectionPlans.map((row) => ({
|
|
191
|
-
id: row.id,
|
|
192
|
-
branch_name: row.branch_name,
|
|
193
|
-
section_ids: parseSectionIds(row.section_ids),
|
|
194
|
-
status: row.status,
|
|
195
|
-
completed_at: row.completed_at,
|
|
196
|
-
})),
|
|
197
|
-
});
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
let result;
|
|
201
|
-
const remote = values.remote;
|
|
202
|
-
const mainBranch = values['main-branch'];
|
|
203
|
-
const integrationBranch = values['integration-branch'];
|
|
204
|
-
const configuredValidationCommand = (0, loader_js_1.loadConfig)(projectPath).runners?.parallel?.validationCommand;
|
|
205
|
-
const validationCommand = values['validation-command']
|
|
206
|
-
?? (typeof configuredValidationCommand === 'string' ? configuredValidationCommand : undefined);
|
|
207
|
-
try {
|
|
208
|
-
const { close } = (0, connection_js_1.openDatabase)(projectPath);
|
|
209
|
-
close();
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
out.error(errors_js_1.ErrorCode.NOT_INITIALIZED, `Not a steroids project: ${projectPath}`);
|
|
213
|
-
process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.NOT_INITIALIZED));
|
|
214
|
-
}
|
|
215
|
-
result = await (0, merge_js_1.runParallelMerge)({
|
|
216
|
-
projectPath,
|
|
217
|
-
sessionId: plan.sessionId,
|
|
218
|
-
runnerId: (0, node_crypto_1.randomUUID)(),
|
|
219
|
-
workstreams: plan.workstreams,
|
|
220
|
-
remote,
|
|
221
|
-
mainBranch,
|
|
222
|
-
integrationBranchName: integrationBranch,
|
|
223
|
-
validationCommand,
|
|
224
|
-
});
|
|
225
|
-
if (!result.success) {
|
|
226
|
-
const isLockContention = result.errors.some((entry) => entry.includes('Could not acquire merge lock'));
|
|
227
|
-
const code = isLockContention ? errors_js_1.ErrorCode.RESOURCE_LOCKED : errors_js_1.ErrorCode.GENERAL_ERROR;
|
|
228
|
-
const message = summarizeError(result.errors);
|
|
229
|
-
out.error(code, message || 'Merge failed', {
|
|
230
|
-
session_id: plan.sessionId,
|
|
231
|
-
project_path: projectPath,
|
|
232
|
-
merge_result: result,
|
|
233
|
-
});
|
|
234
|
-
process.exit((0, errors_js_1.getExitCode)(code));
|
|
235
|
-
}
|
|
236
|
-
out.success({
|
|
237
|
-
session_id: plan.sessionId,
|
|
238
|
-
project_path: projectPath,
|
|
239
|
-
session_status: plan.sessionStatus,
|
|
240
|
-
workstreams: plan.sectionPlans.length,
|
|
241
|
-
completed_commits: result.completedCommits,
|
|
242
|
-
conflicts: result.conflicts,
|
|
243
|
-
skipped: result.skipped,
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=merge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Commit integration checks and SHA resolution
|
|
3
|
-
*/
|
|
4
|
-
export declare function isAppliedCommitIntegrated(projectPath: string, commitSha: string | null): boolean;
|
|
5
|
-
export declare function resolveGitSha(output: string): string | null;
|
|
6
|
-
//# sourceMappingURL=merge-commit-checks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-commit-checks.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-commit-checks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAiBhG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Commit integration checks and SHA resolution
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isAppliedCommitIntegrated = isAppliedCommitIntegrated;
|
|
7
|
-
exports.resolveGitSha = resolveGitSha;
|
|
8
|
-
const merge_git_js_1 = require("./merge-git.js");
|
|
9
|
-
function isAppliedCommitIntegrated(projectPath, commitSha) {
|
|
10
|
-
if (!commitSha) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
const output = (0, merge_git_js_1.runGitCommand)(projectPath, ['branch', '--contains', commitSha, '--list', 'HEAD'], { allowFailure: true });
|
|
14
|
-
const lower = output.toLowerCase();
|
|
15
|
-
if (lower.includes('fatal:') || lower.includes('error:')) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
return output.trim().length > 0;
|
|
19
|
-
}
|
|
20
|
-
function resolveGitSha(output) {
|
|
21
|
-
const trimmed = output.trim();
|
|
22
|
-
if (!trimmed)
|
|
23
|
-
return null;
|
|
24
|
-
if (/fatal:|error:/i.test(trimmed))
|
|
25
|
-
return null;
|
|
26
|
-
return trimmed.split('\n').at(-1)?.trim() ?? null;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=merge-commit-checks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-commit-checks.js","sourceRoot":"","sources":["../../src/parallel/merge-commit-checks.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,8DAiBC;AAED,sCAKC;AA1BD,iDAA+C;AAE/C,SAAgB,yBAAyB,CAAC,WAAmB,EAAE,SAAwB;IACrF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,4BAAa,EAC1B,WAAW,EACX,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EACrD,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpD,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const MAX_CONFLICT_ATTEMPTS = 5;
|
|
2
|
-
export declare function recordConflictAttempt(sessionId: string, workstreamId: string): {
|
|
3
|
-
attempts: number;
|
|
4
|
-
blocked: boolean;
|
|
5
|
-
backoffMinutes: number | null;
|
|
6
|
-
};
|
|
7
|
-
export declare function clearConflictAttemptState(sessionId: string, workstreamId: string): void;
|
|
8
|
-
//# sourceMappingURL=merge-conflict-attempts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-attempts.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict-attempts.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAGvC,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAuDvE;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAYvF"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MAX_CONFLICT_ATTEMPTS = void 0;
|
|
4
|
-
exports.recordConflictAttempt = recordConflictAttempt;
|
|
5
|
-
exports.clearConflictAttemptState = clearConflictAttemptState;
|
|
6
|
-
const global_db_js_1 = require("../runners/global-db.js");
|
|
7
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
8
|
-
exports.MAX_CONFLICT_ATTEMPTS = 5;
|
|
9
|
-
const MAX_CONFLICT_BACKOFF_MINUTES = 30;
|
|
10
|
-
function recordConflictAttempt(sessionId, workstreamId) {
|
|
11
|
-
return (0, global_db_js_1.withGlobalDatabase)((db) => {
|
|
12
|
-
const row = db
|
|
13
|
-
.prepare(`SELECT conflict_attempts
|
|
14
|
-
FROM workstreams
|
|
15
|
-
WHERE session_id = ?
|
|
16
|
-
AND id = ?
|
|
17
|
-
LIMIT 1`)
|
|
18
|
-
.get(sessionId, workstreamId);
|
|
19
|
-
if (!row) {
|
|
20
|
-
throw new merge_errors_js_1.ParallelMergeError('Parallel workstream row not found while recording conflict attempt', 'LEASE_ROW_MISSING');
|
|
21
|
-
}
|
|
22
|
-
const attempts = (row.conflict_attempts ?? 0) + 1;
|
|
23
|
-
if (attempts >= exports.MAX_CONFLICT_ATTEMPTS) {
|
|
24
|
-
db.prepare(`UPDATE workstreams
|
|
25
|
-
SET conflict_attempts = ?,
|
|
26
|
-
status = 'failed',
|
|
27
|
-
next_retry_at = NULL,
|
|
28
|
-
last_reconcile_action = 'blocked_conflict',
|
|
29
|
-
last_reconciled_at = datetime('now')
|
|
30
|
-
WHERE session_id = ?
|
|
31
|
-
AND id = ?`).run(attempts, sessionId, workstreamId);
|
|
32
|
-
db.prepare(`UPDATE parallel_sessions
|
|
33
|
-
SET status = 'blocked_conflict',
|
|
34
|
-
completed_at = NULL
|
|
35
|
-
WHERE id = ?`).run(sessionId);
|
|
36
|
-
return { attempts, blocked: true, backoffMinutes: null };
|
|
37
|
-
}
|
|
38
|
-
const backoffMinutes = Math.min(2 ** Math.max(0, attempts - 1), MAX_CONFLICT_BACKOFF_MINUTES);
|
|
39
|
-
db.prepare(`UPDATE workstreams
|
|
40
|
-
SET conflict_attempts = ?,
|
|
41
|
-
next_retry_at = datetime('now', ?),
|
|
42
|
-
last_reconcile_action = 'conflict_retry',
|
|
43
|
-
last_reconciled_at = datetime('now')
|
|
44
|
-
WHERE session_id = ?
|
|
45
|
-
AND id = ?`).run(attempts, `+${backoffMinutes} minutes`, sessionId, workstreamId);
|
|
46
|
-
return { attempts, blocked: false, backoffMinutes };
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
function clearConflictAttemptState(sessionId, workstreamId) {
|
|
50
|
-
(0, global_db_js_1.withGlobalDatabase)((db) => {
|
|
51
|
-
db.prepare(`UPDATE workstreams
|
|
52
|
-
SET conflict_attempts = 0,
|
|
53
|
-
next_retry_at = NULL,
|
|
54
|
-
last_reconcile_action = 'conflict_resolved',
|
|
55
|
-
last_reconciled_at = datetime('now')
|
|
56
|
-
WHERE session_id = ?
|
|
57
|
-
AND id = ?`).run(sessionId, workstreamId);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=merge-conflict-attempts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-attempts.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-attempts.ts"],"names":[],"mappings":";;;AAMA,sDA0DC;AAED,8DAYC;AA9ED,0DAAiF;AACjF,uDAAuD;AAE1C,QAAA,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,SAAgB,qBAAqB,CACnC,SAAiB,EACjB,YAAoB;IAEpB,OAAO,IAAA,iCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CACN;;;;iBAIS,CACV;aACA,GAAG,CAAC,SAAS,EAAE,YAAY,CAA8C,CAAC;QAE7E,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,oCAAkB,CAC1B,oEAAoE,EACpE,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,6BAAqB,EAAE,CAAC;YACtC,EAAE,CAAC,OAAO,CACR;;;;;;;sBAOc,CACf,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAEzC,EAAE,CAAC,OAAO,CACR;;;sBAGc,CACf,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAC9F,EAAE,CAAC,OAAO,CACR;;;;;;oBAMc,CACf,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,cAAc,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEvE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,yBAAyB,CAAC,SAAiB,EAAE,YAAoB;IAC/E,IAAA,iCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QACxB,EAAE,CAAC,OAAO,CACR;;;;;;oBAMc,CACf,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-invoke.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict-invoke.ts"],"names":[],"mappings":"AAKA,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,OAAO,GAAG,UAAU,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAiDjB"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.invokeMergeConflictModel = invokeMergeConflictModel;
|
|
4
|
-
const loader_js_1 = require("../config/loader.js");
|
|
5
|
-
const invocation_logger_js_1 = require("../providers/invocation-logger.js");
|
|
6
|
-
const registry_js_1 = require("../providers/registry.js");
|
|
7
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
8
|
-
async function invokeMergeConflictModel(role, projectPath, taskId, prompt) {
|
|
9
|
-
const config = (0, loader_js_1.loadConfig)(projectPath);
|
|
10
|
-
const modelConfig = role === 'coder' ? config.ai?.coder : config.ai?.reviewer;
|
|
11
|
-
if (!modelConfig?.provider || !modelConfig?.model) {
|
|
12
|
-
throw new merge_errors_js_1.ParallelMergeError(`Missing AI ${role} configuration. Configure via config.ai.${role}.`, 'AI_CONFIG_MISSING');
|
|
13
|
-
}
|
|
14
|
-
const providerName = modelConfig.provider;
|
|
15
|
-
const model = modelConfig.model;
|
|
16
|
-
const registry = await (0, registry_js_1.getProviderRegistry)();
|
|
17
|
-
const provider = registry.get(providerName);
|
|
18
|
-
const result = await (0, invocation_logger_js_1.logInvocation)(prompt, (ctx) => provider.invoke(prompt, {
|
|
19
|
-
model,
|
|
20
|
-
timeout: 60 * 60 * 1000,
|
|
21
|
-
cwd: projectPath,
|
|
22
|
-
role,
|
|
23
|
-
streamOutput: false,
|
|
24
|
-
onActivity: ctx?.onActivity,
|
|
25
|
-
}), {
|
|
26
|
-
role,
|
|
27
|
-
provider: providerName,
|
|
28
|
-
model,
|
|
29
|
-
taskId,
|
|
30
|
-
projectPath,
|
|
31
|
-
});
|
|
32
|
-
if (!result.success) {
|
|
33
|
-
const details = result.stderr || result.stdout || 'model returned non-zero exit code';
|
|
34
|
-
throw new merge_errors_js_1.ParallelMergeError(`${role.toUpperCase()} invocation failed during merge conflict handling: ${details}`, 'AI_INVOCATION_FAILED');
|
|
35
|
-
}
|
|
36
|
-
if (result.timedOut) {
|
|
37
|
-
throw new merge_errors_js_1.ParallelMergeError(`${role} invocation timed out`, 'AI_INVOKE_TIMEOUT');
|
|
38
|
-
}
|
|
39
|
-
return result.stdout;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=merge-conflict-invoke.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-invoke.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-invoke.ts"],"names":[],"mappings":";;AAKA,4DAsDC;AA3DD,mDAAiD;AACjD,4EAAkE;AAClE,0DAA+D;AAC/D,uDAAuD;AAEhD,KAAK,UAAU,wBAAwB,CAC5C,IAA0B,EAC1B,WAAmB,EACnB,MAA0B,EAC1B,MAAc;IAEd,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,WAAW,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAClD,MAAM,IAAI,oCAAkB,CAC1B,cAAc,IAAI,2CAA2C,IAAI,GAAG,EACpE,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC;IAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAEhC,MAAM,QAAQ,GAAG,MAAM,IAAA,iCAAmB,GAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAa,EAChC,MAAM,EACN,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QACtB,KAAK;QACL,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACvB,GAAG,EAAE,WAAW;QAChB,IAAI;QACJ,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,GAAG,EAAE,UAAU;KAC5B,CAAC,EACJ;QACE,IAAI;QACJ,QAAQ,EAAE,YAAY;QACtB,KAAK;QACL,MAAM;QACN,WAAW;KACZ,CACF,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,mCAAmC,CAAC;QACtF,MAAM,IAAI,oCAAkB,CAC1B,GAAG,IAAI,CAAC,WAAW,EAAE,sDAAsD,OAAO,EAAE,EACpF,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,oCAAkB,CAAC,GAAG,IAAI,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface ParseReviewDecisionResult {
|
|
2
|
-
decision: 'approve' | 'reject';
|
|
3
|
-
notes: string;
|
|
4
|
-
}
|
|
5
|
-
export declare function parseReviewDecision(raw: string): ParseReviewDecisionResult;
|
|
6
|
-
export declare function createPromptForConflictCoder(options: {
|
|
7
|
-
workstreamId: string;
|
|
8
|
-
shortSha: string;
|
|
9
|
-
branchName: string;
|
|
10
|
-
commitMessage: string;
|
|
11
|
-
conflictedFiles: string[];
|
|
12
|
-
conflictPatch: string;
|
|
13
|
-
rejectionNotes?: string;
|
|
14
|
-
}): string;
|
|
15
|
-
export declare function createPromptForConflictReviewer(options: {
|
|
16
|
-
workstreamId: string;
|
|
17
|
-
shortSha: string;
|
|
18
|
-
branchName: string;
|
|
19
|
-
commitMessage: string;
|
|
20
|
-
stagedDiff: string;
|
|
21
|
-
stagedFiles: string[];
|
|
22
|
-
}): string;
|
|
23
|
-
//# sourceMappingURL=merge-conflict-prompts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-prompts.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict-prompts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,CAwB1E;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAMT;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GAAG,MAAM,CAMT"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseReviewDecision = parseReviewDecision;
|
|
4
|
-
exports.createPromptForConflictCoder = createPromptForConflictCoder;
|
|
5
|
-
exports.createPromptForConflictReviewer = createPromptForConflictReviewer;
|
|
6
|
-
function parseReviewDecision(raw) {
|
|
7
|
-
const trimmed = raw.trim();
|
|
8
|
-
const upper = trimmed.toUpperCase();
|
|
9
|
-
const hasApprove = upper.includes('APPROVE');
|
|
10
|
-
const hasReject = upper.includes('REJECT');
|
|
11
|
-
if (hasApprove && !hasReject) {
|
|
12
|
-
return {
|
|
13
|
-
decision: 'approve',
|
|
14
|
-
notes: trimmed || 'APPROVED by merge-conflict reviewer',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
if (hasReject) {
|
|
18
|
-
return {
|
|
19
|
-
decision: 'reject',
|
|
20
|
-
notes: trimmed || 'Please review and correct conflict resolution',
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
decision: 'reject',
|
|
25
|
-
notes: trimmed || 'Decision was not clear. Please provide explicit APPROVE/REJECT.',
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function createPromptForConflictCoder(options) {
|
|
29
|
-
const notesSection = options.rejectionNotes
|
|
30
|
-
? `\n\nLatest review note from the resolver:\n${options.rejectionNotes}\n`
|
|
31
|
-
: '';
|
|
32
|
-
return `You are resolving a merge conflict for a cherry-pick during parallel merge.\n\n## Conflict context\nWorkstream: ${options.workstreamId}\nBranch: ${options.branchName}\nCommit: ${options.shortSha}\nCommit Message:\n${options.commitMessage}\n\nConflicted files:\n${options.conflictedFiles.map((file) => `- ${file}`).join('\n')}\n\nIntended patch:\n${options.conflictPatch}\n\nRules:\n1) Edit conflicted files to a correct resolution.\n2) Remove ALL conflict markers (<<<<<<, =======, >>>>>>) in resolved files.\n3) Stage only the resolved files using git add.\n4) Do NOT commit.\n5) Be surgical; change only files required for this commit.\n${notesSection}\n\nRespond with a short confirmation when done.`;
|
|
33
|
-
}
|
|
34
|
-
function createPromptForConflictReviewer(options) {
|
|
35
|
-
const files = options.stagedFiles.length > 0
|
|
36
|
-
? options.stagedFiles.map((file) => `- ${file}`).join('\n')
|
|
37
|
-
: 'No files staged yet';
|
|
38
|
-
return `You are reviewing a staged resolution for a cherry-pick conflict in parallel merge.\n\nWorkstream: ${options.workstreamId}\nBranch: ${options.branchName}\nCommit: ${options.shortSha}\nOriginal message: ${options.commitMessage}\n\nCurrent staged diff to be committed by cherry-pick --continue:\n${options.stagedDiff || '(empty diff)'}\n\nFiles staged:\n${files}\n\nDecision rules:\n- Reply with APPROVE if the resolution is correct.\n- Reply with REJECT and actionable notes if any conflict marker remains or logic is incorrect.\n\nFormat:\nAPPROVE - <optional note> or\nREJECT - <checklist itemized note>`;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=merge-conflict-prompts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-prompts.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-prompts.ts"],"names":[],"mappings":";;AAKA,kDAwBC;AAED,oEAcC;AAED,0EAaC;AAvDD,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,OAAO,IAAI,qCAAqC;SACxD,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,OAAO,IAAI,+CAA+C;SAClE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO,IAAI,iEAAiE;KACpF,CAAC;AACJ,CAAC;AAED,SAAgB,4BAA4B,CAAC,OAQ5C;IACC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc;QACzC,CAAC,CAAC,8CAA8C,OAAO,CAAC,cAAc,IAAI;QAC1E,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,mHAAmH,OAAO,CAAC,YAAY,aAAa,OAAO,CAAC,UAAU,aAAa,OAAO,CAAC,QAAQ,sBAAsB,OAAO,CAAC,aAAa,0BAA0B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,aAAa,gRAAgR,YAAY,kDAAkD,CAAC;AAC1sB,CAAC;AAED,SAAgB,+BAA+B,CAAC,OAO/C;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAC,qBAAqB,CAAC;IAE1B,OAAO,sGAAsG,OAAO,CAAC,YAAY,aAAa,OAAO,CAAC,UAAU,aAAa,OAAO,CAAC,QAAQ,uBAAuB,OAAO,CAAC,aAAa,uEAAuE,OAAO,CAAC,UAAU,IAAI,cAAc,sBAAsB,KAAK,sPAAsP,CAAC;AACxmB,CAAC"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
|
-
export declare function ensureMergeConflictTask(db: Database.Database, workstreamId: string, shortSha: string, branchName: string, commitMessage: string, conflictedFiles: string[], conflictPatch: string, forceNew?: boolean): string;
|
|
3
|
-
//# sourceMappingURL=merge-conflict-task.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-task.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqC3C,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,UAAQ,GACf,MAAM,CA2CR"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ensureMergeConflictTask = ensureMergeConflictTask;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const queries_js_1 = require("../database/queries.js");
|
|
6
|
-
function buildMergeConflictSectionName() {
|
|
7
|
-
return 'merge-conflicts';
|
|
8
|
-
}
|
|
9
|
-
function getNowISOString() {
|
|
10
|
-
return new Date().toISOString();
|
|
11
|
-
}
|
|
12
|
-
function createMergeConflictSection(db) {
|
|
13
|
-
const sectionName = buildMergeConflictSectionName();
|
|
14
|
-
const existing = db
|
|
15
|
-
.prepare('SELECT id FROM sections WHERE name = ? LIMIT 1')
|
|
16
|
-
.get(sectionName);
|
|
17
|
-
if (existing) {
|
|
18
|
-
return existing.id;
|
|
19
|
-
}
|
|
20
|
-
const maxPosRow = db
|
|
21
|
-
.prepare('SELECT MAX(position) as maxPos FROM sections')
|
|
22
|
-
.get();
|
|
23
|
-
const position = (maxPosRow?.maxPos ?? -1) + 1;
|
|
24
|
-
const sectionId = (0, node_crypto_1.createHash)('sha1').update(sectionName + position).digest('hex');
|
|
25
|
-
db.prepare(`INSERT INTO sections (id, name, position, priority, skipped, created_at)
|
|
26
|
-
VALUES (?, ?, ?, ?, ?, ?)`).run(sectionId, sectionName, position, 80, 0, getNowISOString());
|
|
27
|
-
return sectionId;
|
|
28
|
-
}
|
|
29
|
-
function ensureMergeConflictTask(db, workstreamId, shortSha, branchName, commitMessage, conflictedFiles, conflictPatch, forceNew = false) {
|
|
30
|
-
const sectionId = createMergeConflictSection(db);
|
|
31
|
-
if (!forceNew) {
|
|
32
|
-
const existing = db
|
|
33
|
-
.prepare(`SELECT t.id
|
|
34
|
-
FROM tasks t
|
|
35
|
-
INNER JOIN sections s ON s.id = t.section_id
|
|
36
|
-
WHERE s.name = ? AND t.title LIKE ?
|
|
37
|
-
ORDER BY t.created_at DESC
|
|
38
|
-
LIMIT 1`)
|
|
39
|
-
.get(buildMergeConflictSectionName(), `Merge conflict: cherry-pick ${shortSha}%`);
|
|
40
|
-
if (existing?.id) {
|
|
41
|
-
return existing.id;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const title = `Merge conflict: cherry-pick ${shortSha} from ${branchName}`;
|
|
45
|
-
const created = (0, queries_js_1.createTask)(db, title, {
|
|
46
|
-
sectionId,
|
|
47
|
-
sourceFile: `merge-conflict (${workstreamId})`,
|
|
48
|
-
filePath: conflictedFiles.join(', '),
|
|
49
|
-
status: 'pending',
|
|
50
|
-
fileContentHash: conflictPatch.substring(0, 2048),
|
|
51
|
-
fileCommitSha: commitMessage,
|
|
52
|
-
});
|
|
53
|
-
(0, queries_js_1.addAuditEntry)(db, created.id, 'null', 'pending', 'merge', {
|
|
54
|
-
actorType: 'orchestrator',
|
|
55
|
-
notes: `Generated from conflict while cherry-picking ${shortSha} from ${branchName}:\n${commitMessage}`,
|
|
56
|
-
});
|
|
57
|
-
return created.id;
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=merge-conflict-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict-task.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-task.ts"],"names":[],"mappings":";;AAqCA,0DAoDC;AAxFD,6CAAyC;AACzC,uDAAmE;AAEnE,SAAS,6BAA6B;IACpC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,0BAA0B,CAAC,EAAqB;IACvD,MAAM,WAAW,GAAG,6BAA6B,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,gDAAgD,CAAC;SACzD,GAAG,CAAC,WAAW,CAA+B,CAAC;IAElD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CAAC,8CAA8C,CAAC;SACvD,GAAG,EAA+B,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElF,EAAE,CAAC,OAAO,CACR;+BAC2B,CAC5B,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IAElE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,uBAAuB,CACrC,EAAqB,EACrB,YAAoB,EACpB,QAAgB,EAChB,UAAkB,EAClB,aAAqB,EACrB,eAAyB,EACzB,aAAqB,EACrB,QAAQ,GAAG,KAAK;IAEhB,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,EAAE;aAChB,OAAO,CACN;;;;;iBAKS,CACV;aACA,GAAG,CAAC,6BAA6B,EAAE,EAAE,+BAA+B,QAAQ,GAAG,CAA+B,CAAC;QAElH,IAAI,QAAQ,EAAE,EAAE,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,+BAA+B,QAAQ,SAAS,UAAU,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,EAAE,EAAE,KAAK,EAAE;QACpC,SAAS;QACT,UAAU,EAAE,mBAAmB,YAAY,GAAG;QAC9C,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QACjD,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,IAAA,0BAAa,EACX,EAAE,EACF,OAAO,CAAC,EAAE,EACV,MAAM,EACN,SAAS,EACT,OAAO,EACP;QACE,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,gDAAgD,QAAQ,SAAS,UAAU,MAAM,aAAa,EAAE;KACxG,CACF,CAAC;IAEF,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Merge conflict resolution orchestrator.
|
|
3
|
-
*/
|
|
4
|
-
import type Database from 'better-sqlite3';
|
|
5
|
-
export { parseReviewDecision } from './merge-conflict-prompts.js';
|
|
6
|
-
export interface ConflictRunOptions {
|
|
7
|
-
db: Database.Database;
|
|
8
|
-
projectPath: string;
|
|
9
|
-
sessionId: string;
|
|
10
|
-
workstreamId: string;
|
|
11
|
-
runnerId: string;
|
|
12
|
-
mergeLockHeartbeat?: {
|
|
13
|
-
lockEpoch: number;
|
|
14
|
-
timeoutMinutes: number;
|
|
15
|
-
};
|
|
16
|
-
branchName: string;
|
|
17
|
-
position: number;
|
|
18
|
-
commitSha: string;
|
|
19
|
-
existingTaskId?: string;
|
|
20
|
-
}
|
|
21
|
-
export declare function runConflictResolutionCycle(options: ConflictRunOptions): Promise<'continued' | 'skipped'>;
|
|
22
|
-
//# sourceMappingURL=merge-conflict.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-conflict.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqGD,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAyN9G"}
|