@bradtaylorsf/alpha-loop 1.4.2 → 1.5.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 +136 -3
- package/dist/cli.js +73 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/eval.d.ts +59 -4
- package/dist/commands/eval.js +370 -55
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/evolve.d.ts +43 -4
- package/dist/commands/evolve.js +444 -66
- package/dist/commands/evolve.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/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 +20 -0
- package/dist/lib/config.js +55 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/eval-checks.d.ts +11 -1
- package/dist/lib/eval-checks.js +39 -0
- package/dist/lib/eval-checks.js.map +1 -1
- package/dist/lib/eval-fixtures.d.ts +55 -0
- package/dist/lib/eval-fixtures.js +172 -0
- package/dist/lib/eval-fixtures.js.map +1 -0
- package/dist/lib/eval-runner.d.ts +26 -2
- package/dist/lib/eval-runner.js +202 -17
- package/dist/lib/eval-runner.js.map +1 -1
- package/dist/lib/eval-skill-bridge.d.ts +53 -0
- package/dist/lib/eval-skill-bridge.js +121 -0
- package/dist/lib/eval-skill-bridge.js.map +1 -0
- package/dist/lib/eval-swebench.d.ts +68 -0
- package/dist/lib/eval-swebench.js +274 -0
- package/dist/lib/eval-swebench.js.map +1 -0
- package/dist/lib/eval.d.ts +9 -1
- package/dist/lib/eval.js +27 -7
- package/dist/lib/eval.js.map +1 -1
- package/dist/lib/github.d.ts +46 -0
- package/dist/lib/github.js +179 -0
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/pipeline.js +44 -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 +79 -0
- package/dist/lib/prompts.js +151 -2
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/score.d.ts +24 -2
- package/dist/lib/score.js +162 -3
- package/dist/lib/score.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Roadmap command — analyze open GitHub issues and organize them into
|
|
3
|
+
* milestones using an AI agent, then create milestones and assign issues.
|
|
4
|
+
*/
|
|
5
|
+
import { writeFileSync, unlinkSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { checkbox, confirm } from '@inquirer/prompts';
|
|
9
|
+
import { loadConfig, assertSafeShellArg } from '../lib/config.js';
|
|
10
|
+
import { buildOneShotCommand } from '../lib/agent.js';
|
|
11
|
+
import { buildRoadmapPrompt } from '../lib/prompts.js';
|
|
12
|
+
import { exec } from '../lib/shell.js';
|
|
13
|
+
import { log } from '../lib/logger.js';
|
|
14
|
+
import { extractJsonFromResponse, formatRoadmapTable, buildPlanningContext, } from '../lib/planning.js';
|
|
15
|
+
import { listOpenIssues, listMilestones, createMilestone, setIssueMilestone, addIssueToProject, } from '../lib/github.js';
|
|
16
|
+
/** Truncate issue bodies to stay within agent context limits. */
|
|
17
|
+
const MAX_BODY_CHARS = 500;
|
|
18
|
+
export async function roadmapCommand(options) {
|
|
19
|
+
const config = loadConfig({ dryRun: options.dryRun });
|
|
20
|
+
// ── Fetch open issues ──────────────────────────────────────────────────────
|
|
21
|
+
log.step('Fetching open issues...');
|
|
22
|
+
const issues = listOpenIssues(config.repo);
|
|
23
|
+
if (issues.length === 0) {
|
|
24
|
+
log.info('No open issues found. Nothing to organize.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
log.info(`Found ${issues.length} open issue(s)`);
|
|
28
|
+
// ── Fetch existing milestones ─────────────────────────────────────────────
|
|
29
|
+
log.step('Fetching existing milestones...');
|
|
30
|
+
const existingMilestones = listMilestones(config.repo);
|
|
31
|
+
log.info(`Found ${existingMilestones.length} existing milestone(s)`);
|
|
32
|
+
// Build a map of issue number → current milestone title
|
|
33
|
+
// Note: listOpenIssues doesn't return milestone info, so we rely on the agent
|
|
34
|
+
// to include currentMilestone from its analysis. We pass milestone names for context.
|
|
35
|
+
// Truncate issue bodies
|
|
36
|
+
const truncatedIssues = issues.map((issue) => ({
|
|
37
|
+
number: issue.number,
|
|
38
|
+
title: issue.title,
|
|
39
|
+
body: issue.body.length > MAX_BODY_CHARS
|
|
40
|
+
? issue.body.slice(0, MAX_BODY_CHARS) + '...'
|
|
41
|
+
: issue.body,
|
|
42
|
+
milestone: null,
|
|
43
|
+
}));
|
|
44
|
+
// ── Build context ──────────────────────────────────────────────────────────
|
|
45
|
+
const ctx = buildPlanningContext(config);
|
|
46
|
+
// ── AI analysis ────────────────────────────────────────────────────────────
|
|
47
|
+
log.step('Analyzing issues via AI agent...');
|
|
48
|
+
const roadmapPrompt = buildRoadmapPrompt({
|
|
49
|
+
issues: truncatedIssues,
|
|
50
|
+
milestones: existingMilestones.map((m) => ({
|
|
51
|
+
title: m.title,
|
|
52
|
+
description: m.description,
|
|
53
|
+
dueOn: m.dueOn,
|
|
54
|
+
})),
|
|
55
|
+
projectContext: ctx.projectContext,
|
|
56
|
+
visionContext: ctx.visionContext,
|
|
57
|
+
});
|
|
58
|
+
const safeModel = assertSafeShellArg(config.model, 'model');
|
|
59
|
+
const agentCmd = buildOneShotCommand(config.agent, safeModel);
|
|
60
|
+
const promptFile = join(tmpdir(), `alpha-loop-prompt-${Date.now()}`);
|
|
61
|
+
writeFileSync(promptFile, roadmapPrompt, 'utf-8');
|
|
62
|
+
let result;
|
|
63
|
+
try {
|
|
64
|
+
result = exec(`${agentCmd} < "${promptFile}" 2>/dev/null`, { cwd: process.cwd(), timeout: 10 * 60 * 1000 });
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
try {
|
|
68
|
+
unlinkSync(promptFile);
|
|
69
|
+
}
|
|
70
|
+
catch { /* cleanup best-effort */ }
|
|
71
|
+
}
|
|
72
|
+
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
73
|
+
log.error('Agent failed to analyze issues. Check agent configuration and try again.');
|
|
74
|
+
if (result.stderr)
|
|
75
|
+
log.error(result.stderr.slice(0, 500));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
let parsed;
|
|
79
|
+
try {
|
|
80
|
+
parsed = extractJsonFromResponse(result.stdout);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
log.error(`Failed to parse roadmap JSON: ${err.message}`);
|
|
84
|
+
log.error(`Agent response (first 500 chars): ${result.stdout.slice(0, 500)}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (!parsed.milestones || !parsed.assignments || parsed.assignments.length === 0) {
|
|
88
|
+
log.info('Agent returned no roadmap assignments.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// ── Display roadmap ────────────────────────────────────────────────────────
|
|
92
|
+
const existingTitles = existingMilestones.map((m) => m.title);
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log(formatRoadmapTable(parsed.milestones, parsed.assignments, existingTitles));
|
|
95
|
+
console.log('');
|
|
96
|
+
const newMilestones = parsed.milestones.filter((m) => !existingTitles.includes(m.title));
|
|
97
|
+
log.info(`${newMilestones.length} new milestone(s), ${parsed.assignments.length} assignment(s)`);
|
|
98
|
+
// ── Dry run exit ───────────────────────────────────────────────────────────
|
|
99
|
+
if (options.dryRun) {
|
|
100
|
+
log.dry('Dry run — no changes will be made.');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// ── Interactive review ─────────────────────────────────────────────────────
|
|
104
|
+
let selectedNums;
|
|
105
|
+
if (options.yes) {
|
|
106
|
+
selectedNums = parsed.assignments.filter((a) => a.selected).map((a) => a.issueNum);
|
|
107
|
+
log.info(`--yes: applying all ${selectedNums.length} milestone assignment(s)`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const choices = parsed.assignments.map((a) => {
|
|
111
|
+
const current = a.currentMilestone || 'unassigned';
|
|
112
|
+
return {
|
|
113
|
+
name: `#${a.issueNum} ${a.title} → ${a.milestone} [currently: ${current}]`,
|
|
114
|
+
value: a.issueNum,
|
|
115
|
+
checked: a.selected,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
selectedNums = await checkbox({
|
|
119
|
+
message: 'Select assignments to apply:',
|
|
120
|
+
choices,
|
|
121
|
+
});
|
|
122
|
+
if (selectedNums.length === 0) {
|
|
123
|
+
log.info('No assignments selected.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const proceed = await confirm({
|
|
127
|
+
message: `Create ${newMilestones.length} milestone(s) and assign ${selectedNums.length} issue(s)?`,
|
|
128
|
+
});
|
|
129
|
+
if (!proceed) {
|
|
130
|
+
log.info('Cancelled.');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ── Execute ────────────────────────────────────────────────────────────────
|
|
135
|
+
const failures = [];
|
|
136
|
+
// Create new milestones and build title → number map
|
|
137
|
+
const milestoneNumMap = new Map();
|
|
138
|
+
// Seed map with existing milestones
|
|
139
|
+
for (const m of existingMilestones) {
|
|
140
|
+
milestoneNumMap.set(m.title, m.number);
|
|
141
|
+
}
|
|
142
|
+
// Create new milestones
|
|
143
|
+
let milestonesCreated = 0;
|
|
144
|
+
for (const ms of newMilestones) {
|
|
145
|
+
try {
|
|
146
|
+
const num = createMilestone(config.repo, ms.title, ms.description, ms.dueOn ?? undefined);
|
|
147
|
+
if (num > 0) {
|
|
148
|
+
milestoneNumMap.set(ms.title, num);
|
|
149
|
+
milestonesCreated++;
|
|
150
|
+
log.success(`Created milestone: ${ms.title}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
failures.push(`Milestone "${ms.title}": creation returned 0`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
failures.push(`Milestone "${ms.title}": ${err.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Assign issues to milestones
|
|
161
|
+
let assigned = 0;
|
|
162
|
+
for (const assignment of parsed.assignments) {
|
|
163
|
+
if (!selectedNums.includes(assignment.issueNum))
|
|
164
|
+
continue;
|
|
165
|
+
const msNum = milestoneNumMap.get(assignment.milestone);
|
|
166
|
+
if (!msNum) {
|
|
167
|
+
failures.push(`#${assignment.issueNum}: milestone "${assignment.milestone}" not found`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
setIssueMilestone(config.repo, assignment.issueNum, msNum);
|
|
172
|
+
assigned++;
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
failures.push(`#${assignment.issueNum}: ${err.message}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Add untracked issues to project board if configured
|
|
179
|
+
if (config.project > 0) {
|
|
180
|
+
for (const assignment of parsed.assignments) {
|
|
181
|
+
if (!selectedNums.includes(assignment.issueNum))
|
|
182
|
+
continue;
|
|
183
|
+
try {
|
|
184
|
+
addIssueToProject(config.repoOwner, config.project, config.repo, assignment.issueNum);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Project board add is best-effort
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// ── Summary ────────────────────────────────────────────────────────────────
|
|
192
|
+
console.log('');
|
|
193
|
+
log.success(`Created ${milestonesCreated} milestone(s), assigned ${assigned} issue(s)`);
|
|
194
|
+
if (failures.length > 0) {
|
|
195
|
+
console.log('');
|
|
196
|
+
log.warn(`${failures.length} operation(s) failed:`);
|
|
197
|
+
for (const f of failures) {
|
|
198
|
+
console.log(` - ${f}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=roadmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roadmap.js","sourceRoot":"","sources":["../../src/commands/roadmap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triage command — analyze open GitHub issues for staleness, clarity, size,
|
|
3
|
+
* and duplicates using an AI agent, then apply user-selected fixes.
|
|
4
|
+
*/
|
|
5
|
+
export type TriageOptions = {
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
yes?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function triageCommand(options: TriageOptions): Promise<void>;
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triage command — analyze open GitHub issues for staleness, clarity, size,
|
|
3
|
+
* and duplicates using an AI agent, then apply user-selected fixes.
|
|
4
|
+
*/
|
|
5
|
+
import { writeFileSync, unlinkSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { checkbox, confirm } from '@inquirer/prompts';
|
|
9
|
+
import { loadConfig, assertSafeShellArg } from '../lib/config.js';
|
|
10
|
+
import { buildOneShotCommand } from '../lib/agent.js';
|
|
11
|
+
import { buildTriagePrompt } from '../lib/prompts.js';
|
|
12
|
+
import { exec } from '../lib/shell.js';
|
|
13
|
+
import { log } from '../lib/logger.js';
|
|
14
|
+
import { extractJsonFromResponse, formatTriageFindings, buildPlanningContext, } from '../lib/planning.js';
|
|
15
|
+
import { listOpenIssues, closeIssue, updateIssue, createIssue, commentIssue, getIssueComments, } from '../lib/github.js';
|
|
16
|
+
/** Truncate issue bodies to stay within agent context limits. */
|
|
17
|
+
const MAX_BODY_CHARS = 500;
|
|
18
|
+
export async function triageCommand(options) {
|
|
19
|
+
const config = loadConfig({ dryRun: options.dryRun });
|
|
20
|
+
// ── Fetch open issues ──────────────────────────────────────────────────────
|
|
21
|
+
log.step('Fetching open issues...');
|
|
22
|
+
const issues = listOpenIssues(config.repo);
|
|
23
|
+
if (issues.length === 0) {
|
|
24
|
+
log.info('No open issues found. Nothing to triage.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
log.info(`Found ${issues.length} open issue(s)`);
|
|
28
|
+
// Fetch comments and truncate issue bodies for context
|
|
29
|
+
log.step('Fetching issue comments...');
|
|
30
|
+
const truncatedIssues = issues.map((issue) => {
|
|
31
|
+
const comments = getIssueComments(config.repo, issue.number);
|
|
32
|
+
return {
|
|
33
|
+
...issue,
|
|
34
|
+
body: issue.body.length > MAX_BODY_CHARS
|
|
35
|
+
? issue.body.slice(0, MAX_BODY_CHARS) + '...'
|
|
36
|
+
: issue.body,
|
|
37
|
+
comments: comments.slice(0, 5), // Cap at 5 most recent comments
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
// ── Build context ──────────────────────────────────────────────────────────
|
|
41
|
+
const ctx = buildPlanningContext(config);
|
|
42
|
+
// ── AI analysis ────────────────────────────────────────────────────────────
|
|
43
|
+
log.step('Analyzing issues via AI agent...');
|
|
44
|
+
const triagePrompt = buildTriagePrompt({
|
|
45
|
+
issues: truncatedIssues,
|
|
46
|
+
projectContext: ctx.projectContext,
|
|
47
|
+
visionContext: ctx.visionContext,
|
|
48
|
+
});
|
|
49
|
+
const safeModel = assertSafeShellArg(config.model, 'model');
|
|
50
|
+
const agentCmd = buildOneShotCommand(config.agent, safeModel);
|
|
51
|
+
const promptFile = join(tmpdir(), `alpha-loop-prompt-${Date.now()}`);
|
|
52
|
+
writeFileSync(promptFile, triagePrompt, 'utf-8');
|
|
53
|
+
let result;
|
|
54
|
+
try {
|
|
55
|
+
result = exec(`${agentCmd} < "${promptFile}" 2>/dev/null`, { cwd: process.cwd(), timeout: 10 * 60 * 1000 });
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
unlinkSync(promptFile);
|
|
60
|
+
}
|
|
61
|
+
catch { /* cleanup best-effort */ }
|
|
62
|
+
}
|
|
63
|
+
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
64
|
+
log.error('Agent failed to analyze issues. Check agent configuration and try again.');
|
|
65
|
+
if (result.stderr)
|
|
66
|
+
log.error(result.stderr.slice(0, 500));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
let findings;
|
|
70
|
+
try {
|
|
71
|
+
findings = extractJsonFromResponse(result.stdout);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
log.error(`Failed to parse triage JSON: ${err.message}`);
|
|
75
|
+
log.error(`Agent response (first 500 chars): ${result.stdout.slice(0, 500)}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!Array.isArray(findings) || findings.length === 0) {
|
|
79
|
+
log.success('All issues look good — no triage actions needed.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// ── Display findings ───────────────────────────────────────────────────────
|
|
83
|
+
console.log('');
|
|
84
|
+
console.log(formatTriageFindings(findings));
|
|
85
|
+
console.log('');
|
|
86
|
+
log.info(`Found ${findings.length} issue(s) needing attention`);
|
|
87
|
+
// ── Dry run exit ───────────────────────────────────────────────────────────
|
|
88
|
+
if (options.dryRun) {
|
|
89
|
+
log.dry('Dry run — no changes will be made.');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// ── Interactive review ─────────────────────────────────────────────────────
|
|
93
|
+
let selectedNums;
|
|
94
|
+
if (options.yes) {
|
|
95
|
+
selectedNums = findings.filter((f) => f.selected).map((f) => f.issueNum);
|
|
96
|
+
log.info(`--yes: applying all ${selectedNums.length} triage action(s)`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const actionLabels = {
|
|
100
|
+
close: 'Close as stale',
|
|
101
|
+
rewrite: 'Rewrite body',
|
|
102
|
+
split: 'Split into sub-issues',
|
|
103
|
+
merge: 'Close as duplicate',
|
|
104
|
+
enrich: 'Enrich with details',
|
|
105
|
+
};
|
|
106
|
+
const choices = findings.map((f) => ({
|
|
107
|
+
name: `[${actionLabels[f.action]}] #${f.issueNum} ${f.title} — ${f.reason.slice(0, 60)}`,
|
|
108
|
+
value: f.issueNum,
|
|
109
|
+
checked: f.selected,
|
|
110
|
+
}));
|
|
111
|
+
selectedNums = await checkbox({
|
|
112
|
+
message: 'Select actions to apply:',
|
|
113
|
+
choices,
|
|
114
|
+
});
|
|
115
|
+
if (selectedNums.length === 0) {
|
|
116
|
+
log.info('No actions selected.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const proceed = await confirm({
|
|
120
|
+
message: `Apply ${selectedNums.length} change(s)?`,
|
|
121
|
+
});
|
|
122
|
+
if (!proceed) {
|
|
123
|
+
log.info('Cancelled.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── Execute actions ────────────────────────────────────────────────────────
|
|
128
|
+
const failures = [];
|
|
129
|
+
let applied = 0;
|
|
130
|
+
for (const finding of findings) {
|
|
131
|
+
if (!selectedNums.includes(finding.issueNum))
|
|
132
|
+
continue;
|
|
133
|
+
try {
|
|
134
|
+
switch (finding.category) {
|
|
135
|
+
case 'stale': {
|
|
136
|
+
commentIssue(config.repo, finding.issueNum, `Closing as stale: ${finding.reason}\n\n_Triaged by alpha-loop._`);
|
|
137
|
+
closeIssue(config.repo, finding.issueNum, 'not_planned');
|
|
138
|
+
log.success(`Closed stale issue #${finding.issueNum}`);
|
|
139
|
+
applied++;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'unclear': {
|
|
143
|
+
if (finding.rewrittenBody) {
|
|
144
|
+
// Preserve original body in a collapsed block
|
|
145
|
+
const original = issues.find((i) => i.number === finding.issueNum)?.body;
|
|
146
|
+
const preserved = original
|
|
147
|
+
? `<details><summary>Original description</summary>\n\n${original}\n\n</details>\n\n`
|
|
148
|
+
: '';
|
|
149
|
+
updateIssue(config.repo, finding.issueNum, { body: preserved + finding.rewrittenBody });
|
|
150
|
+
commentIssue(config.repo, finding.issueNum, '_Issue rewritten by alpha-loop triage. Original description preserved above._');
|
|
151
|
+
log.success(`Rewrote body for #${finding.issueNum}`);
|
|
152
|
+
applied++;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
log.warn(`No rewritten body for #${finding.issueNum}, skipping`);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case 'too_large': {
|
|
160
|
+
if (finding.splitInto && finding.splitInto.length > 0) {
|
|
161
|
+
const createdNums = [];
|
|
162
|
+
for (const subTitle of finding.splitInto) {
|
|
163
|
+
const num = createIssue(config.repo, subTitle, `Split from #${finding.issueNum}`, ['enhancement']);
|
|
164
|
+
if (num > 0) {
|
|
165
|
+
createdNums.push(num);
|
|
166
|
+
log.success(`Created sub-issue #${num}: ${subTitle}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
failures.push(`Sub-issue "${subTitle}": creation returned 0`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (createdNums.length > 0) {
|
|
173
|
+
const links = createdNums.map((n) => `- #${n}`).join('\n');
|
|
174
|
+
commentIssue(config.repo, finding.issueNum, `Split into smaller issues:\n${links}\n\n_Triaged by alpha-loop._`);
|
|
175
|
+
closeIssue(config.repo, finding.issueNum, 'completed');
|
|
176
|
+
log.success(`Closed #${finding.issueNum} after splitting`);
|
|
177
|
+
applied++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
log.warn(`No split suggestions for #${finding.issueNum}, skipping`);
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'duplicate': {
|
|
186
|
+
if (finding.duplicateOf != null) {
|
|
187
|
+
commentIssue(config.repo, finding.issueNum, `Closing as duplicate of #${finding.duplicateOf}.\n\n_Triaged by alpha-loop._`);
|
|
188
|
+
closeIssue(config.repo, finding.issueNum, 'not_planned');
|
|
189
|
+
log.success(`Closed duplicate #${finding.issueNum} (duplicate of #${finding.duplicateOf})`);
|
|
190
|
+
applied++;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
log.warn(`No duplicate reference for #${finding.issueNum}, skipping`);
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'enrich': {
|
|
198
|
+
if (finding.enrichedBody) {
|
|
199
|
+
updateIssue(config.repo, finding.issueNum, { body: finding.enrichedBody });
|
|
200
|
+
commentIssue(config.repo, finding.issueNum, '_Issue enriched by alpha-loop triage. Original description preserved in collapsed block above._');
|
|
201
|
+
log.success(`Enriched #${finding.issueNum}`);
|
|
202
|
+
applied++;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
log.warn(`No enriched body for #${finding.issueNum}, skipping`);
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
failures.push(`#${finding.issueNum}: ${err.message}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// ── Summary ────────────────────────────────────────────────────────────────
|
|
216
|
+
console.log('');
|
|
217
|
+
log.success(`Applied ${applied} triage action(s)`);
|
|
218
|
+
if (failures.length > 0) {
|
|
219
|
+
console.log('');
|
|
220
|
+
log.warn(`${failures.length} operation(s) failed:`);
|
|
221
|
+
for (const f of failures) {
|
|
222
|
+
console.log(` - ${f}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=triage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/commands/triage.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/vision.js
CHANGED
|
@@ -29,6 +29,7 @@ const PRIORITIES = {
|
|
|
29
29
|
'4': 'Security and compliance \u2014 harden, audit, meet regulatory requirements',
|
|
30
30
|
};
|
|
31
31
|
export async function visionCommand() {
|
|
32
|
+
log.warn('vision is deprecated — use "alpha-loop plan" instead');
|
|
32
33
|
if (!process.stdin.isTTY) {
|
|
33
34
|
log.info('Not running in an interactive terminal. Skipping vision setup.');
|
|
34
35
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -3,6 +3,15 @@ export type ModelPricing = {
|
|
|
3
3
|
input: number;
|
|
4
4
|
output: number;
|
|
5
5
|
};
|
|
6
|
+
/** The pipeline steps that support per-step agent/model overrides. */
|
|
7
|
+
export type PipelineStepName = 'plan' | 'implement' | 'test_fix' | 'review' | 'verify' | 'learn';
|
|
8
|
+
/** Per-step agent/model override. */
|
|
9
|
+
export type StepConfig = {
|
|
10
|
+
agent?: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
};
|
|
13
|
+
/** Per-step pipeline configuration. */
|
|
14
|
+
export type PipelineConfig = Partial<Record<PipelineStepName, StepConfig>>;
|
|
6
15
|
/**
|
|
7
16
|
* Estimate cost in USD from token counts and a pricing table.
|
|
8
17
|
* Returns 0 if the model is not in the pricing table.
|
|
@@ -52,8 +61,19 @@ export type Config = {
|
|
|
52
61
|
skipPostSessionSecurity: boolean;
|
|
53
62
|
/** Per-model pricing table (cost per million tokens). */
|
|
54
63
|
pricing: Record<string, ModelPricing>;
|
|
64
|
+
/** Per-step agent/model overrides. */
|
|
65
|
+
pipeline: PipelineConfig;
|
|
55
66
|
};
|
|
56
67
|
/** Validate a string contains only safe shell characters. Empty strings are allowed (model is optional). */
|
|
57
68
|
export declare function assertSafeShellArg(value: string, name: string): string;
|
|
58
69
|
export declare function detectRepo(): string | null;
|
|
59
70
|
export declare function loadConfig(overrides?: Partial<Config>): Config;
|
|
71
|
+
/**
|
|
72
|
+
* Resolve the agent and model for a specific pipeline step.
|
|
73
|
+
* Checks pipeline[step] overrides first, then falls back to top-level config.
|
|
74
|
+
* For 'review', falls back to reviewModel before model.
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveStepConfig(config: Config, step: PipelineStepName): {
|
|
77
|
+
agent: string;
|
|
78
|
+
model: string;
|
|
79
|
+
};
|
package/dist/lib/config.js
CHANGED
|
@@ -55,7 +55,12 @@ const DEFAULTS = {
|
|
|
55
55
|
'claude-sonnet-4-6': { input: 3.0, output: 15.0 },
|
|
56
56
|
'claude-haiku-4-5': { input: 0.80, output: 4.0 },
|
|
57
57
|
'codex-mini': { input: 1.50, output: 6.0 },
|
|
58
|
+
'gpt-4o': { input: 2.50, output: 10.0 },
|
|
59
|
+
'gpt-4o-mini': { input: 0.15, output: 0.60 },
|
|
60
|
+
'deepseek-v3': { input: 0.27, output: 1.10 },
|
|
61
|
+
'gemini-2.5-flash': { input: 0.15, output: 0.60 },
|
|
58
62
|
},
|
|
63
|
+
pipeline: {},
|
|
59
64
|
};
|
|
60
65
|
/** Map from YAML key (snake_case) to Config key (camelCase). */
|
|
61
66
|
const YAML_KEY_MAP = {
|
|
@@ -94,6 +99,7 @@ const YAML_KEY_MAP = {
|
|
|
94
99
|
skip_eval: 'skipEval',
|
|
95
100
|
eval_timeout: 'evalTimeout',
|
|
96
101
|
auto_capture: 'autoCapture',
|
|
102
|
+
pipeline: 'pipeline',
|
|
97
103
|
};
|
|
98
104
|
/** Map from env var name to Config key. */
|
|
99
105
|
const ENV_KEY_MAP = {
|
|
@@ -183,6 +189,28 @@ function loadYamlConfig(configPath) {
|
|
|
183
189
|
result[configKey] = parsed[yamlKey];
|
|
184
190
|
}
|
|
185
191
|
}
|
|
192
|
+
// Handle pipeline nested config (per-step agent/model overrides)
|
|
193
|
+
if (parsed.pipeline && typeof parsed.pipeline === 'object') {
|
|
194
|
+
const pipelineRaw = parsed.pipeline;
|
|
195
|
+
const pipeline = {};
|
|
196
|
+
const validSteps = ['plan', 'implement', 'test_fix', 'review', 'verify', 'learn'];
|
|
197
|
+
for (const step of validSteps) {
|
|
198
|
+
const entry = pipelineRaw[step];
|
|
199
|
+
if (entry && typeof entry === 'object') {
|
|
200
|
+
const e = entry;
|
|
201
|
+
const stepCfg = {};
|
|
202
|
+
if (typeof e.agent === 'string')
|
|
203
|
+
stepCfg.agent = e.agent;
|
|
204
|
+
if (typeof e.model === 'string')
|
|
205
|
+
stepCfg.model = e.model;
|
|
206
|
+
if (Object.keys(stepCfg).length > 0)
|
|
207
|
+
pipeline[step] = stepCfg;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (Object.keys(pipeline).length > 0) {
|
|
211
|
+
result.pipeline = pipeline;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
186
214
|
// Handle post_session nested config
|
|
187
215
|
if (parsed.post_session && typeof parsed.post_session === 'object') {
|
|
188
216
|
const ps = parsed.post_session;
|
|
@@ -232,6 +260,18 @@ export function loadConfig(overrides) {
|
|
|
232
260
|
...yamlConfig.pricing,
|
|
233
261
|
...overrides?.pricing,
|
|
234
262
|
};
|
|
263
|
+
// Pipeline is merged specially: overrides extend YAML rather than replacing
|
|
264
|
+
const mergedPipeline = {};
|
|
265
|
+
const allSteps = new Set([
|
|
266
|
+
...Object.keys(yamlConfig.pipeline ?? {}),
|
|
267
|
+
...Object.keys(overrides?.pipeline ?? {}),
|
|
268
|
+
]);
|
|
269
|
+
for (const step of allSteps) {
|
|
270
|
+
mergedPipeline[step] = {
|
|
271
|
+
...(yamlConfig.pipeline?.[step] ?? {}),
|
|
272
|
+
...(overrides?.pipeline?.[step] ?? {}),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
235
275
|
const merged = {
|
|
236
276
|
...DEFAULTS,
|
|
237
277
|
...autoDetect,
|
|
@@ -239,6 +279,7 @@ export function loadConfig(overrides) {
|
|
|
239
279
|
...envConfig,
|
|
240
280
|
...overrides,
|
|
241
281
|
pricing: mergedPricing,
|
|
282
|
+
pipeline: mergedPipeline,
|
|
242
283
|
};
|
|
243
284
|
// Validate agent is a known value
|
|
244
285
|
const VALID_AGENTS = ['claude', 'codex', 'opencode'];
|
|
@@ -251,4 +292,18 @@ export function loadConfig(overrides) {
|
|
|
251
292
|
}
|
|
252
293
|
return merged;
|
|
253
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Resolve the agent and model for a specific pipeline step.
|
|
297
|
+
* Checks pipeline[step] overrides first, then falls back to top-level config.
|
|
298
|
+
* For 'review', falls back to reviewModel before model.
|
|
299
|
+
*/
|
|
300
|
+
export function resolveStepConfig(config, step) {
|
|
301
|
+
const stepOverride = config.pipeline[step];
|
|
302
|
+
const agent = stepOverride?.agent ?? config.agent;
|
|
303
|
+
const fallbackModel = step === 'review'
|
|
304
|
+
? (config.reviewModel || config.model)
|
|
305
|
+
: config.model;
|
|
306
|
+
const model = stepOverride?.model ?? fallbackModel;
|
|
307
|
+
return { agent, model };
|
|
308
|
+
}
|
|
254
309
|
//# sourceMappingURL=config.js.map
|