@bradtaylorsf/alpha-loop 1.4.3 → 1.6.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/README.md +57 -2
- package/dist/cli.js +33 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.js +3 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.d.ts +11 -0
- package/dist/commands/plan.js +298 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/roadmap.d.ts +9 -0
- package/dist/commands/roadmap.js +202 -0
- package/dist/commands/roadmap.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.js +80 -33
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/triage.d.ts +9 -0
- package/dist/commands/triage.js +226 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vision.js +1 -0
- package/dist/commands/vision.js.map +1 -1
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.js +6 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/github.d.ts +46 -0
- package/dist/lib/github.js +180 -1
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/pipeline.d.ts +12 -0
- package/dist/lib/pipeline.js +537 -2
- package/dist/lib/pipeline.js.map +1 -1
- package/dist/lib/planning.d.ts +91 -0
- package/dist/lib/planning.js +315 -0
- package/dist/lib/planning.js.map +1 -0
- package/dist/lib/prompts.d.ts +118 -0
- package/dist/lib/prompts.js +270 -2
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/session.d.ts +1 -1
- package/dist/lib/session.js +7 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/traces.d.ts +2 -0
- package/dist/lib/traces.js.map +1 -1
- package/package.json +2 -1
package/dist/lib/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/pipeline.d.ts
CHANGED
|
@@ -60,3 +60,15 @@ export type PipelineResult = {
|
|
|
60
60
|
* review → PR → learnings → update → auto-merge → cleanup
|
|
61
61
|
*/
|
|
62
62
|
export declare function processIssue(issueNum: number, title: string, body: string, config: Config, session: SessionContext): Promise<PipelineResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Process a batch of issues through a single plan → implement → test → review cycle.
|
|
65
|
+
* Instead of spawning separate agents per issue, combines all issues into one prompt
|
|
66
|
+
* for each stage, dramatically reducing agent spin-up and context loading overhead.
|
|
67
|
+
*
|
|
68
|
+
* After the batch completes, each issue is individually updated with labels, comments, and PR.
|
|
69
|
+
*/
|
|
70
|
+
export declare function processBatch(issues: Array<{
|
|
71
|
+
number: number;
|
|
72
|
+
title: string;
|
|
73
|
+
body: string;
|
|
74
|
+
}>, config: Config, session: SessionContext): Promise<PipelineResult[]>;
|
package/dist/lib/pipeline.js
CHANGED
|
@@ -7,8 +7,8 @@ import { log } from './logger.js';
|
|
|
7
7
|
import { exec } from './shell.js';
|
|
8
8
|
import { spawnAgent } from './agent.js';
|
|
9
9
|
import { setupWorktree, cleanupWorktree } from './worktree.js';
|
|
10
|
-
import { assignIssue, labelIssue, commentIssue, createPR, mergePR, updateProjectStatus, } from './github.js';
|
|
11
|
-
import { buildImplementPrompt, buildReviewPrompt } from './prompts.js';
|
|
10
|
+
import { assignIssue, labelIssue, commentIssue, createPR, mergePR, updateProjectStatus, getIssueComments, } from './github.js';
|
|
11
|
+
import { buildImplementPrompt, buildReviewPrompt, buildAssumptionsPrompt, buildBatchPlanPrompt, buildBatchImplementPrompt, buildBatchReviewPrompt, } from './prompts.js';
|
|
12
12
|
import { runTests } from './testing.js';
|
|
13
13
|
import { runVerify } from './verify.js';
|
|
14
14
|
import { extractLearnings, getLearningContext } from './learning.js';
|
|
@@ -322,6 +322,14 @@ Rules:
|
|
|
322
322
|
else {
|
|
323
323
|
log.dry('Would run planning agent');
|
|
324
324
|
}
|
|
325
|
+
// --- Step 3b: Fetch issue comments for full context ---
|
|
326
|
+
let issueComments = [];
|
|
327
|
+
if (!config.dryRun) {
|
|
328
|
+
issueComments = getIssueComments(config.repo, issueNum);
|
|
329
|
+
if (issueComments.length > 0) {
|
|
330
|
+
log.info(`Loaded ${issueComments.length} comment(s) from issue #${issueNum}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
325
333
|
// --- Step 4: Implement ---
|
|
326
334
|
log.step('Step 4: Implementing');
|
|
327
335
|
if (!config.dryRun) {
|
|
@@ -334,6 +342,7 @@ Rules:
|
|
|
334
342
|
issueNum,
|
|
335
343
|
title,
|
|
336
344
|
body,
|
|
345
|
+
comments: issueComments.length > 0 ? issueComments : undefined,
|
|
337
346
|
planContent: plan.implementation || undefined,
|
|
338
347
|
visionContext: visionContext ?? undefined,
|
|
339
348
|
projectContext: projectContext ?? undefined,
|
|
@@ -466,6 +475,7 @@ Rules:
|
|
|
466
475
|
issueNum,
|
|
467
476
|
title,
|
|
468
477
|
body,
|
|
478
|
+
comments: issueComments.length > 0 ? issueComments : undefined,
|
|
469
479
|
baseBranch: config.baseBranch,
|
|
470
480
|
visionContext: loadFileIfExists(join(projectDir, '.alpha-loop', 'vision.md')) ?? undefined,
|
|
471
481
|
});
|
|
@@ -661,6 +671,38 @@ Rules:
|
|
|
661
671
|
else {
|
|
662
672
|
log.dry('Would create PR');
|
|
663
673
|
}
|
|
674
|
+
// --- Step 8b: Post assumptions/decisions comment ---
|
|
675
|
+
if (!config.dryRun && prUrl) {
|
|
676
|
+
try {
|
|
677
|
+
const assumptionsDiff = exec(`git diff "origin/${config.baseBranch}...HEAD"`, { cwd: worktreePath });
|
|
678
|
+
const reviewSummary = reviewGate.summary || 'No review findings';
|
|
679
|
+
const assumptionsPrompt = buildAssumptionsPrompt({
|
|
680
|
+
issueNum,
|
|
681
|
+
title,
|
|
682
|
+
body,
|
|
683
|
+
diff: assumptionsDiff.stdout,
|
|
684
|
+
reviewSummary,
|
|
685
|
+
});
|
|
686
|
+
tracePrompt(session.name, issueNum, 'assumptions', assumptionsPrompt);
|
|
687
|
+
const assumptionsResult = await spawnAgent({
|
|
688
|
+
agent: config.agent,
|
|
689
|
+
model: config.model,
|
|
690
|
+
prompt: assumptionsPrompt,
|
|
691
|
+
cwd: worktreePath,
|
|
692
|
+
logFile: join(session.logsDir, `issue-${issueNum}-assumptions.log`),
|
|
693
|
+
verbose: config.verbose,
|
|
694
|
+
});
|
|
695
|
+
traceOutput(session.name, issueNum, 'assumptions', assumptionsResult.output);
|
|
696
|
+
stepCosts.push(buildStepCost('assumptions', issueNum, assumptionsResult, config));
|
|
697
|
+
if (assumptionsResult.exitCode === 0 && assumptionsResult.output.trim()) {
|
|
698
|
+
commentIssue(config.repo, issueNum, `## AI Implementation Notes\n\n${assumptionsResult.output.trim()}\n\n---\n_Posted by alpha-loop for user validation._`);
|
|
699
|
+
log.success('Posted assumptions/decisions comment');
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
catch (err) {
|
|
703
|
+
log.warn(`Failed to post assumptions comment: ${err}`);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
664
706
|
// --- Step 9: Extract learnings ---
|
|
665
707
|
log.step('Step 9: Extracting learnings');
|
|
666
708
|
const duration = Math.round((Date.now() - startTime) / 1000);
|
|
@@ -802,6 +844,459 @@ Rules:
|
|
|
802
844
|
log.info(`PR: ${prUrl}`);
|
|
803
845
|
return result;
|
|
804
846
|
}
|
|
847
|
+
/**
|
|
848
|
+
* Process a batch of issues through a single plan → implement → test → review cycle.
|
|
849
|
+
* Instead of spawning separate agents per issue, combines all issues into one prompt
|
|
850
|
+
* for each stage, dramatically reducing agent spin-up and context loading overhead.
|
|
851
|
+
*
|
|
852
|
+
* After the batch completes, each issue is individually updated with labels, comments, and PR.
|
|
853
|
+
*/
|
|
854
|
+
export async function processBatch(issues, config, session) {
|
|
855
|
+
const startTime = Date.now();
|
|
856
|
+
const projectDir = process.cwd();
|
|
857
|
+
const stepCosts = [];
|
|
858
|
+
const stepsCompleted = [];
|
|
859
|
+
const issueNums = issues.map((i) => i.number);
|
|
860
|
+
mkdirSync(session.logsDir, { recursive: true });
|
|
861
|
+
const logFile = join(session.logsDir, `batch-${issueNums.join('-')}.log`);
|
|
862
|
+
log.step(`Batch processing ${issues.length} issues: ${issueNums.map((n) => `#${n}`).join(', ')}`);
|
|
863
|
+
// --- Step 1: Update all issue statuses ---
|
|
864
|
+
log.step('Batch Step 1: Updating issue statuses');
|
|
865
|
+
if (!config.dryRun) {
|
|
866
|
+
for (const issue of issues) {
|
|
867
|
+
updateProjectStatus(config.repo, config.project, config.repoOwner, issue.number, 'In progress');
|
|
868
|
+
labelIssue(config.repo, issue.number, 'in-progress', config.labelReady);
|
|
869
|
+
assignIssue(config.repo, issue.number, '@me');
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
// --- Step 2: Setup single worktree for the batch ---
|
|
873
|
+
log.step('Batch Step 2: Setting up worktree');
|
|
874
|
+
const batchId = issueNums.join('-');
|
|
875
|
+
let worktreePath;
|
|
876
|
+
let worktreeBranch;
|
|
877
|
+
try {
|
|
878
|
+
const wt = await setupWorktree({
|
|
879
|
+
issueNum: issues[0].number, // Use first issue number for branch naming
|
|
880
|
+
projectDir,
|
|
881
|
+
baseBranch: config.baseBranch,
|
|
882
|
+
sessionBranch: session.branch,
|
|
883
|
+
autoMerge: config.autoMerge,
|
|
884
|
+
skipInstall: config.skipInstall,
|
|
885
|
+
setupCommand: config.setupCommand,
|
|
886
|
+
dryRun: config.dryRun,
|
|
887
|
+
});
|
|
888
|
+
worktreePath = wt.path;
|
|
889
|
+
worktreeBranch = wt.branch;
|
|
890
|
+
}
|
|
891
|
+
catch (err) {
|
|
892
|
+
log.error(`Failed to set up worktree for batch: ${err}`);
|
|
893
|
+
return issues.map((i) => failureResult(i.number, i.title, startTime, 'permanent'));
|
|
894
|
+
}
|
|
895
|
+
// --- Step 3: Fetch comments for all issues ---
|
|
896
|
+
const issueComments = new Map();
|
|
897
|
+
if (!config.dryRun) {
|
|
898
|
+
for (const issue of issues) {
|
|
899
|
+
const comments = getIssueComments(config.repo, issue.number);
|
|
900
|
+
if (comments.length > 0) {
|
|
901
|
+
issueComments.set(issue.number, comments);
|
|
902
|
+
log.info(`Loaded ${comments.length} comment(s) from issue #${issue.number}`);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
// Build BatchIssue array with comments
|
|
907
|
+
const batchIssues = issues.map((i) => ({
|
|
908
|
+
issueNum: i.number,
|
|
909
|
+
title: i.title,
|
|
910
|
+
body: i.body,
|
|
911
|
+
comments: issueComments.get(i.number)?.map((c) => ({
|
|
912
|
+
author: c.author,
|
|
913
|
+
body: c.body,
|
|
914
|
+
createdAt: c.createdAt,
|
|
915
|
+
})),
|
|
916
|
+
}));
|
|
917
|
+
// --- Step 4: Batch plan ---
|
|
918
|
+
log.step('Batch Step 3: Planning all issues');
|
|
919
|
+
const plans = new Map();
|
|
920
|
+
if (!config.dryRun) {
|
|
921
|
+
try {
|
|
922
|
+
const planPrompt = buildBatchPlanPrompt({ issues: batchIssues });
|
|
923
|
+
tracePrompt(session.name, issues[0].number, 'batch-plan', planPrompt);
|
|
924
|
+
const planResult = await spawnAgent({
|
|
925
|
+
agent: config.agent,
|
|
926
|
+
model: config.model,
|
|
927
|
+
prompt: planPrompt,
|
|
928
|
+
cwd: worktreePath,
|
|
929
|
+
logFile: join(session.logsDir, `batch-plan.log`),
|
|
930
|
+
verbose: config.verbose,
|
|
931
|
+
});
|
|
932
|
+
traceOutput(session.name, issues[0].number, 'batch-plan', planResult.output);
|
|
933
|
+
stepCosts.push(buildStepCost('plan', issues[0].number, planResult, config));
|
|
934
|
+
if (planResult.exitCode !== 0 && isTransientError(planResult.output)) {
|
|
935
|
+
log.warn('Agent hit a transient error during batch planning — re-queuing all issues');
|
|
936
|
+
for (const issue of issues)
|
|
937
|
+
requeueIssue(config, issue.number);
|
|
938
|
+
await cleanupWorktree({ issueNum: issues[0].number, projectDir, autoCleanup: config.autoCleanup });
|
|
939
|
+
return issues.map((i) => failureResult(i.number, i.title, startTime, 'transient'));
|
|
940
|
+
}
|
|
941
|
+
// Read plan files for each issue
|
|
942
|
+
for (const issue of issues) {
|
|
943
|
+
const planFile = join(worktreePath, `plan-issue-${issue.number}.json`);
|
|
944
|
+
const planFileSession = join(session.logsDir, `plan-issue-${issue.number}.json`);
|
|
945
|
+
const plan = readPlan(planFile);
|
|
946
|
+
plans.set(issue.number, plan);
|
|
947
|
+
moveToSessionLogs(planFile, planFileSession);
|
|
948
|
+
if (plan.summary) {
|
|
949
|
+
log.success(`Plan #${issue.number}: ${plan.summary}`);
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
stepsCompleted.push('plan');
|
|
953
|
+
}
|
|
954
|
+
catch {
|
|
955
|
+
log.warn('Batch planning failed, using defaults for all issues');
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
// --- Step 5: Batch implement ---
|
|
959
|
+
log.step('Batch Step 4: Implementing all issues');
|
|
960
|
+
if (!config.dryRun) {
|
|
961
|
+
const visionContext = loadFileIfExists(join(projectDir, '.alpha-loop', 'vision.md'));
|
|
962
|
+
const projectContext = loadFileIfExists(join(projectDir, '.alpha-loop', 'context.md'));
|
|
963
|
+
const learningContext = getLearningContext(join(projectDir, '.alpha-loop', 'learnings'));
|
|
964
|
+
// Combine all plans into one content block
|
|
965
|
+
const allPlans = issues.map((i) => {
|
|
966
|
+
const plan = plans.get(i.number) ?? DEFAULT_PLAN;
|
|
967
|
+
return `### Plan for #${i.number}: ${i.title}\n${plan.implementation || '(no plan)'}`;
|
|
968
|
+
}).join('\n\n');
|
|
969
|
+
const implementPrompt = buildBatchImplementPrompt({
|
|
970
|
+
issues: batchIssues,
|
|
971
|
+
planContent: allPlans,
|
|
972
|
+
visionContext: visionContext ?? undefined,
|
|
973
|
+
projectContext: projectContext ?? undefined,
|
|
974
|
+
learningContext: learningContext || undefined,
|
|
975
|
+
});
|
|
976
|
+
tracePrompt(session.name, issues[0].number, 'batch-implement', implementPrompt);
|
|
977
|
+
const implResult = await spawnAgent({
|
|
978
|
+
agent: config.agent,
|
|
979
|
+
model: config.model,
|
|
980
|
+
prompt: implementPrompt,
|
|
981
|
+
cwd: worktreePath,
|
|
982
|
+
logFile: join(session.logsDir, `batch-implement.log`),
|
|
983
|
+
verbose: config.verbose,
|
|
984
|
+
});
|
|
985
|
+
traceOutput(session.name, issues[0].number, 'batch-implement', implResult.output);
|
|
986
|
+
stepCosts.push(buildStepCost('implement', issues[0].number, implResult, config));
|
|
987
|
+
if (implResult.exitCode !== 0) {
|
|
988
|
+
if (isTransientError(implResult.output)) {
|
|
989
|
+
log.warn('Agent hit a transient error during batch implementation — re-queuing');
|
|
990
|
+
for (const issue of issues)
|
|
991
|
+
requeueIssue(config, issue.number);
|
|
992
|
+
await cleanupWorktree({ issueNum: issues[0].number, projectDir, autoCleanup: config.autoCleanup });
|
|
993
|
+
return issues.map((i) => failureResult(i.number, i.title, startTime, 'transient'));
|
|
994
|
+
}
|
|
995
|
+
log.error('Batch implementation failed');
|
|
996
|
+
for (const issue of issues) {
|
|
997
|
+
labelIssue(config.repo, issue.number, 'failed', 'in-progress');
|
|
998
|
+
commentIssue(config.repo, issue.number, 'Agent loop failed during batch implementation. See logs.');
|
|
999
|
+
}
|
|
1000
|
+
await cleanupWorktree({ issueNum: issues[0].number, projectDir, autoCleanup: config.autoCleanup });
|
|
1001
|
+
return issues.map((i) => failureResult(i.number, i.title, startTime, 'permanent'));
|
|
1002
|
+
}
|
|
1003
|
+
// Auto-commit if agent didn't
|
|
1004
|
+
const statusResult = exec('git status --porcelain', { cwd: worktreePath });
|
|
1005
|
+
if (statusResult.stdout.trim()) {
|
|
1006
|
+
exec('git add -A', { cwd: worktreePath });
|
|
1007
|
+
const issueRefs = issues.map((i) => `#${i.number}`).join(', ');
|
|
1008
|
+
exec(`git commit -m "feat: batch implement issues ${issueRefs}"`, { cwd: worktreePath });
|
|
1009
|
+
}
|
|
1010
|
+
stepsCompleted.push('implement');
|
|
1011
|
+
// Capture implement diff
|
|
1012
|
+
try {
|
|
1013
|
+
const implDiff = exec(`git diff "origin/${config.baseBranch}...HEAD"`, { cwd: worktreePath });
|
|
1014
|
+
if (implDiff.stdout)
|
|
1015
|
+
traceDiff(session.name, issues[0].number, 'batch-implement', implDiff.stdout);
|
|
1016
|
+
}
|
|
1017
|
+
catch { /* non-fatal */ }
|
|
1018
|
+
}
|
|
1019
|
+
// --- Step 6: Test + retry loop ---
|
|
1020
|
+
log.step('Batch Step 5: Running tests');
|
|
1021
|
+
let testOutput = '';
|
|
1022
|
+
let testsPassing = false;
|
|
1023
|
+
// Check if any plan says testing is needed
|
|
1024
|
+
const anyTestsNeeded = issues.some((i) => (plans.get(i.number) ?? DEFAULT_PLAN).testing.needed);
|
|
1025
|
+
if (!anyTestsNeeded) {
|
|
1026
|
+
log.info('Tests skipped by all plans');
|
|
1027
|
+
testsPassing = true;
|
|
1028
|
+
testOutput = 'Tests skipped by plan';
|
|
1029
|
+
}
|
|
1030
|
+
for (let attempt = 1; testsPassing ? false : attempt <= config.maxTestRetries; attempt++) {
|
|
1031
|
+
log.info(`Test attempt ${attempt} of ${config.maxTestRetries}`);
|
|
1032
|
+
const testResult = runTests(worktreePath, config, logFile);
|
|
1033
|
+
testOutput = testResult.output;
|
|
1034
|
+
traceTest(session.name, issues[0].number, attempt, testOutput);
|
|
1035
|
+
if (testResult.passed) {
|
|
1036
|
+
testsPassing = true;
|
|
1037
|
+
stepsCompleted.push('test');
|
|
1038
|
+
log.success(`All tests passed on attempt ${attempt}`);
|
|
1039
|
+
break;
|
|
1040
|
+
}
|
|
1041
|
+
if (attempt < config.maxTestRetries) {
|
|
1042
|
+
log.warn(`Tests failed on attempt ${attempt}, invoking agent to fix...`);
|
|
1043
|
+
if (!config.dryRun) {
|
|
1044
|
+
const issueRefs = issues.map((i) => `#${i.number}`).join(', ');
|
|
1045
|
+
const fixPrompt = `Tests are failing for batch implementation (issues ${issueRefs}, attempt ${attempt} of ${config.maxTestRetries}). Fix the failing tests.\n\nTest output:\n${testOutput}\n\nInstructions:\n1. Read the failing test output carefully and identify the ROOT CAUSE\n2. Fix ONLY code related to the batch issues — do NOT modify test infrastructure\n3. Run the tests again to verify\n4. Commit your fixes with a descriptive message`;
|
|
1046
|
+
tracePrompt(session.name, issues[0].number, `batch-fix-${attempt}`, fixPrompt);
|
|
1047
|
+
const fixResult = await spawnAgent({
|
|
1048
|
+
agent: config.agent,
|
|
1049
|
+
model: config.model,
|
|
1050
|
+
prompt: fixPrompt,
|
|
1051
|
+
cwd: worktreePath,
|
|
1052
|
+
resume: true,
|
|
1053
|
+
logFile: join(session.logsDir, `batch-fix-${attempt}.log`),
|
|
1054
|
+
verbose: config.verbose,
|
|
1055
|
+
});
|
|
1056
|
+
traceOutput(session.name, issues[0].number, `batch-fix-${attempt}`, fixResult.output);
|
|
1057
|
+
stepCosts.push(buildStepCost('test_fix', issues[0].number, fixResult, config));
|
|
1058
|
+
const fixStatus = exec('git status --porcelain', { cwd: worktreePath });
|
|
1059
|
+
if (fixStatus.stdout.trim()) {
|
|
1060
|
+
exec('git add -A', { cwd: worktreePath });
|
|
1061
|
+
exec(`git commit -m "fix: resolve batch test failures (attempt ${attempt})"`, { cwd: worktreePath });
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
else {
|
|
1066
|
+
log.warn(`Tests still failing after ${config.maxTestRetries} attempts`);
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
// --- Step 7: Batch review ---
|
|
1070
|
+
log.step('Batch Step 6: Code review');
|
|
1071
|
+
let reviewOutput = '';
|
|
1072
|
+
let reviewGate = DEFAULT_GATE;
|
|
1073
|
+
if (config.skipReview) {
|
|
1074
|
+
log.info('Code review skipped');
|
|
1075
|
+
}
|
|
1076
|
+
else if (!config.dryRun) {
|
|
1077
|
+
const reviewFileInWorktree = join(worktreePath, 'review-batch.json');
|
|
1078
|
+
const reviewFileInSession = join(session.logsDir, 'review-batch.json');
|
|
1079
|
+
for (let attempt = 1; attempt <= config.maxTestRetries; attempt++) {
|
|
1080
|
+
log.info(`Review attempt ${attempt} of ${config.maxTestRetries}`);
|
|
1081
|
+
try {
|
|
1082
|
+
const reviewPrompt = buildBatchReviewPrompt({
|
|
1083
|
+
issues: batchIssues,
|
|
1084
|
+
baseBranch: config.baseBranch,
|
|
1085
|
+
visionContext: loadFileIfExists(join(projectDir, '.alpha-loop', 'vision.md')) ?? undefined,
|
|
1086
|
+
});
|
|
1087
|
+
tracePrompt(session.name, issues[0].number, `batch-review${attempt > 1 ? `-${attempt}` : ''}`, reviewPrompt);
|
|
1088
|
+
const reviewResult = await spawnAgent({
|
|
1089
|
+
agent: config.agent,
|
|
1090
|
+
model: config.reviewModel,
|
|
1091
|
+
prompt: reviewPrompt,
|
|
1092
|
+
cwd: worktreePath,
|
|
1093
|
+
logFile: join(session.logsDir, `batch-review${attempt > 1 ? `-${attempt}` : ''}.log`),
|
|
1094
|
+
verbose: config.verbose,
|
|
1095
|
+
});
|
|
1096
|
+
traceOutput(session.name, issues[0].number, `batch-review${attempt > 1 ? `-${attempt}` : ''}`, reviewResult.output);
|
|
1097
|
+
stepCosts.push(buildStepCost('review', issues[0].number, reviewResult, config));
|
|
1098
|
+
reviewOutput = reviewResult.output;
|
|
1099
|
+
}
|
|
1100
|
+
catch {
|
|
1101
|
+
log.warn('Batch review failed, continuing without review');
|
|
1102
|
+
break;
|
|
1103
|
+
}
|
|
1104
|
+
reviewGate = readGateResult(reviewFileInWorktree);
|
|
1105
|
+
moveToSessionLogs(reviewFileInWorktree, reviewFileInSession);
|
|
1106
|
+
if (reviewGate.passed) {
|
|
1107
|
+
stepsCompleted.push('review');
|
|
1108
|
+
log.success(`Batch review passed: ${reviewGate.summary || 'no issues found'}`);
|
|
1109
|
+
break;
|
|
1110
|
+
}
|
|
1111
|
+
const unfixedCount = reviewGate.findings.filter((f) => !f.fixed).length;
|
|
1112
|
+
log.warn(`Review found ${unfixedCount} unfixed issue(s), sending back to implementer...`);
|
|
1113
|
+
if (attempt < config.maxTestRetries) {
|
|
1114
|
+
const findings = formatGateFindings(reviewGate, 'Code Review');
|
|
1115
|
+
const fixPrompt = `The code review for the batch found problems that need to be fixed.\n\n${findings}\n\nInstructions:\n1. Address each finding listed above\n2. Run tests to make sure nothing is broken\n3. Commit your fixes`;
|
|
1116
|
+
tracePrompt(session.name, issues[0].number, `batch-review-fix-${attempt}`, fixPrompt);
|
|
1117
|
+
const reviewFixResult = await spawnAgent({
|
|
1118
|
+
agent: config.agent,
|
|
1119
|
+
model: config.model,
|
|
1120
|
+
prompt: fixPrompt,
|
|
1121
|
+
cwd: worktreePath,
|
|
1122
|
+
resume: true,
|
|
1123
|
+
logFile: join(session.logsDir, `batch-review-fix-${attempt}.log`),
|
|
1124
|
+
verbose: config.verbose,
|
|
1125
|
+
});
|
|
1126
|
+
traceOutput(session.name, issues[0].number, `batch-review-fix-${attempt}`, reviewFixResult.output);
|
|
1127
|
+
stepCosts.push(buildStepCost('review', issues[0].number, reviewFixResult, config));
|
|
1128
|
+
const fixStatus = exec('git status --porcelain', { cwd: worktreePath });
|
|
1129
|
+
if (fixStatus.stdout.trim()) {
|
|
1130
|
+
exec('git add -A', { cwd: worktreePath });
|
|
1131
|
+
exec(`git commit -m "fix: address batch review findings (attempt ${attempt})"`, { cwd: worktreePath });
|
|
1132
|
+
}
|
|
1133
|
+
const retest = runTests(worktreePath, config, logFile);
|
|
1134
|
+
if (!retest.passed) {
|
|
1135
|
+
log.warn('Tests failed after review fixes');
|
|
1136
|
+
testOutput = retest.output;
|
|
1137
|
+
testsPassing = false;
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
// --- Step 8: Create single PR for the batch ---
|
|
1143
|
+
log.step('Batch Step 7: Creating PR');
|
|
1144
|
+
let prUrl;
|
|
1145
|
+
if (!config.dryRun) {
|
|
1146
|
+
const prBase = config.autoMerge ? session.branch : config.baseBranch;
|
|
1147
|
+
const issueRefs = issues.map((i) => `#${i.number}`).join(', ');
|
|
1148
|
+
const prBody = buildBatchPRBody(issues.map((i) => ({ issueNum: i.number, title: i.title })), reviewGate, testOutput, testsPassing);
|
|
1149
|
+
try {
|
|
1150
|
+
prUrl = createPR({
|
|
1151
|
+
repo: config.repo,
|
|
1152
|
+
base: prBase,
|
|
1153
|
+
head: worktreeBranch,
|
|
1154
|
+
title: `feat: batch implementation (${issueRefs})`,
|
|
1155
|
+
body: prBody,
|
|
1156
|
+
cwd: worktreePath,
|
|
1157
|
+
});
|
|
1158
|
+
stepsCompleted.push('pr');
|
|
1159
|
+
log.success(`Batch PR created: ${prUrl}`);
|
|
1160
|
+
}
|
|
1161
|
+
catch (err) {
|
|
1162
|
+
log.error(`Failed to create batch PR: ${err}`);
|
|
1163
|
+
for (const issue of issues) {
|
|
1164
|
+
labelIssue(config.repo, issue.number, 'failed', 'in-progress');
|
|
1165
|
+
commentIssue(config.repo, issue.number, `Agent loop failed: could not create PR. Branch: ${worktreeBranch}`);
|
|
1166
|
+
}
|
|
1167
|
+
await cleanupWorktree({ issueNum: issues[0].number, projectDir, autoCleanup: config.autoCleanup });
|
|
1168
|
+
return issues.map((i) => failureResult(i.number, i.title, startTime, 'permanent'));
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
// --- Step 9: Update each issue individually ---
|
|
1172
|
+
log.step('Batch Step 8: Updating individual issues');
|
|
1173
|
+
const duration = Math.round((Date.now() - startTime) / 1000);
|
|
1174
|
+
const perIssueDuration = Math.round(duration / issues.length);
|
|
1175
|
+
// Get diff for traces
|
|
1176
|
+
let runDiff = '';
|
|
1177
|
+
if (!config.dryRun) {
|
|
1178
|
+
const diffResult = exec(`git diff "origin/${config.baseBranch}...HEAD"`, { cwd: worktreePath });
|
|
1179
|
+
runDiff = diffResult.stdout.slice(0, MAX_DIFF_CHARS);
|
|
1180
|
+
}
|
|
1181
|
+
const filesChanged = runDiff ? (runDiff.match(/^diff --git/gm) ?? []).length : 0;
|
|
1182
|
+
const results = [];
|
|
1183
|
+
for (const issue of issues) {
|
|
1184
|
+
if (!config.dryRun) {
|
|
1185
|
+
const testsStatus = testsPassing ? 'PASSING' : 'FAILING';
|
|
1186
|
+
updateProjectStatus(config.repo, config.project, config.repoOwner, issue.number, 'In Review');
|
|
1187
|
+
labelIssue(config.repo, issue.number, 'in-review', 'in-progress');
|
|
1188
|
+
commentIssue(config.repo, issue.number, `Automated batch implementation complete.\n\n**PR**: ${prUrl ?? 'N/A'}\n**Tests**: ${testsStatus}\n**Batch**: ${issues.length} issues processed together\n\n---\n*Processed by alpha-loop batch mode in ${duration}s total*`);
|
|
1189
|
+
}
|
|
1190
|
+
const result = {
|
|
1191
|
+
issueNum: issue.number,
|
|
1192
|
+
title: issue.title,
|
|
1193
|
+
status: testsPassing ? 'success' : 'failure',
|
|
1194
|
+
prUrl,
|
|
1195
|
+
testsPassing,
|
|
1196
|
+
verifyPassing: true,
|
|
1197
|
+
verifySkipped: true,
|
|
1198
|
+
duration: perIssueDuration,
|
|
1199
|
+
filesChanged,
|
|
1200
|
+
};
|
|
1201
|
+
results.push(result);
|
|
1202
|
+
saveResult(session, result);
|
|
1203
|
+
// Write per-issue traces
|
|
1204
|
+
if (!config.dryRun) {
|
|
1205
|
+
try {
|
|
1206
|
+
const issueScoreResult = {
|
|
1207
|
+
issueNum: issue.number,
|
|
1208
|
+
status: testsPassing ? 'success' : 'failure',
|
|
1209
|
+
testsPassing,
|
|
1210
|
+
verifyPassing: true,
|
|
1211
|
+
verifySkipped: true,
|
|
1212
|
+
retries: 0,
|
|
1213
|
+
duration: perIssueDuration,
|
|
1214
|
+
filesChanged,
|
|
1215
|
+
stepsCompleted,
|
|
1216
|
+
};
|
|
1217
|
+
writeTraceMetadata(session.name, issue.number, {
|
|
1218
|
+
issueNum: issue.number,
|
|
1219
|
+
title: issue.title,
|
|
1220
|
+
status: testsPassing ? 'success' : 'failure',
|
|
1221
|
+
duration: perIssueDuration,
|
|
1222
|
+
retries: 0,
|
|
1223
|
+
testsPassing,
|
|
1224
|
+
verifyPassing: true,
|
|
1225
|
+
verifySkipped: true,
|
|
1226
|
+
filesChanged,
|
|
1227
|
+
prUrl,
|
|
1228
|
+
timestamp: new Date().toISOString(),
|
|
1229
|
+
agent: config.agent,
|
|
1230
|
+
model: config.model,
|
|
1231
|
+
batchMode: true,
|
|
1232
|
+
batchSize: issues.length,
|
|
1233
|
+
});
|
|
1234
|
+
}
|
|
1235
|
+
catch (err) {
|
|
1236
|
+
log.warn(`Failed to write traces for #${issue.number}: ${err}`);
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
log.success(`Issue #${issue.number} updated`);
|
|
1240
|
+
}
|
|
1241
|
+
// Write aggregate scores and costs
|
|
1242
|
+
if (!config.dryRun) {
|
|
1243
|
+
try {
|
|
1244
|
+
const scoreResults = results.map((r) => ({
|
|
1245
|
+
issueNum: r.issueNum,
|
|
1246
|
+
status: r.status,
|
|
1247
|
+
testsPassing: r.testsPassing,
|
|
1248
|
+
verifyPassing: r.verifyPassing,
|
|
1249
|
+
verifySkipped: r.verifySkipped,
|
|
1250
|
+
retries: 0,
|
|
1251
|
+
duration: r.duration,
|
|
1252
|
+
filesChanged: r.filesChanged,
|
|
1253
|
+
stepsCompleted,
|
|
1254
|
+
}));
|
|
1255
|
+
writeScores(session.name, computeScores(scoreResults));
|
|
1256
|
+
writeCosts(session.name, computeCosts(stepCosts));
|
|
1257
|
+
// Config snapshot
|
|
1258
|
+
try {
|
|
1259
|
+
const configPath = join(projectDir, '.alpha-loop.yaml');
|
|
1260
|
+
if (existsSync(configPath)) {
|
|
1261
|
+
writeConfigSnapshot(session.name, readFileSync(configPath, 'utf-8'));
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
catch { /* non-fatal */ }
|
|
1265
|
+
}
|
|
1266
|
+
catch (err) {
|
|
1267
|
+
log.warn(`Failed to write batch traces: ${err}`);
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
// --- Step 10: Auto-merge ---
|
|
1271
|
+
if (config.autoMerge && !config.dryRun && prUrl) {
|
|
1272
|
+
log.step('Batch Step 9: Auto-merging PR');
|
|
1273
|
+
try {
|
|
1274
|
+
mergePR(config.repo, worktreeBranch);
|
|
1275
|
+
exec('git fetch origin', { cwd: projectDir });
|
|
1276
|
+
const currentBranch = exec('git rev-parse --abbrev-ref HEAD', { cwd: projectDir }).stdout;
|
|
1277
|
+
if (currentBranch !== session.branch) {
|
|
1278
|
+
exec(`git checkout "${session.branch}"`, { cwd: projectDir });
|
|
1279
|
+
}
|
|
1280
|
+
exec(`git pull origin "${session.branch}"`, { cwd: projectDir });
|
|
1281
|
+
}
|
|
1282
|
+
catch (err) {
|
|
1283
|
+
log.warn(`Auto-merge failed: ${err}`);
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
// --- Step 11: Cleanup ---
|
|
1287
|
+
log.step('Batch Step 10: Cleanup');
|
|
1288
|
+
await cleanupWorktree({
|
|
1289
|
+
issueNum: issues[0].number,
|
|
1290
|
+
projectDir,
|
|
1291
|
+
autoCleanup: config.autoCleanup,
|
|
1292
|
+
dryRun: config.dryRun,
|
|
1293
|
+
});
|
|
1294
|
+
const successCount = results.filter((r) => r.status === 'success').length;
|
|
1295
|
+
log.success(`Batch complete: ${successCount}/${issues.length} issues succeeded in ${duration}s`);
|
|
1296
|
+
if (prUrl)
|
|
1297
|
+
log.info(`PR: ${prUrl}`);
|
|
1298
|
+
return results;
|
|
1299
|
+
}
|
|
805
1300
|
function failureResult(issueNum, title, startTime, reason) {
|
|
806
1301
|
return {
|
|
807
1302
|
issueNum,
|
|
@@ -883,6 +1378,46 @@ function extractTestSummary(testOutput) {
|
|
|
883
1378
|
parts.push(`${totalSkipped} skipped`);
|
|
884
1379
|
return parts.join(', ');
|
|
885
1380
|
}
|
|
1381
|
+
function buildBatchPRBody(issues, reviewGate, testOutput, testsPassing) {
|
|
1382
|
+
const testSummary = extractTestSummary(testOutput);
|
|
1383
|
+
const reviewStatus = reviewGate.passed ? 'PASS' : 'FAIL';
|
|
1384
|
+
const closesRefs = issues.map((i) => `Closes #${i.issueNum}`).join('\n');
|
|
1385
|
+
const lines = [
|
|
1386
|
+
closesRefs,
|
|
1387
|
+
'',
|
|
1388
|
+
'## Summary',
|
|
1389
|
+
'',
|
|
1390
|
+
`Batch implementation of ${issues.length} issues:`,
|
|
1391
|
+
...issues.map((i) => `- **#${i.issueNum}**: ${i.title}`),
|
|
1392
|
+
'',
|
|
1393
|
+
'## Test Results',
|
|
1394
|
+
'',
|
|
1395
|
+
`| Check | Status |`,
|
|
1396
|
+
`|-------|--------|`,
|
|
1397
|
+
`| Unit tests | ${testsPassing ? 'PASS' : 'FAIL'} |`,
|
|
1398
|
+
`| Code review | ${reviewStatus} |`,
|
|
1399
|
+
];
|
|
1400
|
+
if (testSummary) {
|
|
1401
|
+
lines.push(`| Details | ${testSummary} |`);
|
|
1402
|
+
}
|
|
1403
|
+
lines.push('');
|
|
1404
|
+
if (reviewGate.findings.length > 0) {
|
|
1405
|
+
lines.push('## Code Review', '');
|
|
1406
|
+
lines.push(reviewGate.summary || 'Review completed');
|
|
1407
|
+
lines.push('');
|
|
1408
|
+
for (const f of reviewGate.findings) {
|
|
1409
|
+
const status = f.fixed ? 'FIXED' : 'OPEN';
|
|
1410
|
+
const fileRef = f.file ? ` \`${f.file}\`` : '';
|
|
1411
|
+
lines.push(`- **${f.severity.toUpperCase()}** [${status}]${fileRef}: ${f.description}`);
|
|
1412
|
+
}
|
|
1413
|
+
lines.push('');
|
|
1414
|
+
}
|
|
1415
|
+
else {
|
|
1416
|
+
lines.push('## Code Review', '', reviewGate.summary || 'No issues found', '');
|
|
1417
|
+
}
|
|
1418
|
+
lines.push('---', `*Automated by [alpha-loop](https://github.com/bradtaylorsf/alpha-loop) · Batch mode · Full logs in \`.alpha-loop/sessions/\`*`);
|
|
1419
|
+
return lines.join('\n');
|
|
1420
|
+
}
|
|
886
1421
|
function buildPRBody(issueNum, title, reviewGate, testOutput, testsPassing, verifyPassing, verifySkipped, body) {
|
|
887
1422
|
const testSummary = extractTestSummary(testOutput);
|
|
888
1423
|
const verifyStatus = verifySkipped ? 'SKIPPED' : verifyPassing ? 'PASS' : 'FAIL';
|