@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
|
@@ -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
|
@@ -59,6 +59,10 @@ export type Config = {
|
|
|
59
59
|
skipPostSessionReview: boolean;
|
|
60
60
|
/** Skip security scanning in post-session review (default: false). */
|
|
61
61
|
skipPostSessionSecurity: boolean;
|
|
62
|
+
/** Enable batch mode — process multiple issues per agent call (default: false). */
|
|
63
|
+
batch: boolean;
|
|
64
|
+
/** Number of issues per batch when batch mode is enabled (default: 5). */
|
|
65
|
+
batchSize: number;
|
|
62
66
|
/** Per-model pricing table (cost per million tokens). */
|
|
63
67
|
pricing: Record<string, ModelPricing>;
|
|
64
68
|
/** Per-step agent/model overrides. */
|
package/dist/lib/config.js
CHANGED
|
@@ -50,6 +50,8 @@ const DEFAULTS = {
|
|
|
50
50
|
autoCapture: true,
|
|
51
51
|
skipPostSessionReview: false,
|
|
52
52
|
skipPostSessionSecurity: false,
|
|
53
|
+
batch: false,
|
|
54
|
+
batchSize: 5,
|
|
53
55
|
pricing: {
|
|
54
56
|
'claude-opus-4-6': { input: 15.0, output: 75.0 },
|
|
55
57
|
'claude-sonnet-4-6': { input: 3.0, output: 15.0 },
|
|
@@ -99,6 +101,8 @@ const YAML_KEY_MAP = {
|
|
|
99
101
|
skip_eval: 'skipEval',
|
|
100
102
|
eval_timeout: 'evalTimeout',
|
|
101
103
|
auto_capture: 'autoCapture',
|
|
104
|
+
batch: 'batch',
|
|
105
|
+
batch_size: 'batchSize',
|
|
102
106
|
pipeline: 'pipeline',
|
|
103
107
|
};
|
|
104
108
|
/** Map from env var name to Config key. */
|
|
@@ -139,6 +143,8 @@ const ENV_KEY_MAP = {
|
|
|
139
143
|
AUTO_CAPTURE: 'autoCapture',
|
|
140
144
|
SKIP_POST_SESSION_REVIEW: 'skipPostSessionReview',
|
|
141
145
|
SKIP_POST_SESSION_SECURITY: 'skipPostSessionSecurity',
|
|
146
|
+
BATCH: 'batch',
|
|
147
|
+
BATCH_SIZE: 'batchSize',
|
|
142
148
|
};
|
|
143
149
|
function coerce(value, current) {
|
|
144
150
|
if (typeof current === 'number')
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAoB1C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,OAAqC;IAErC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AACvE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/github.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
export type Comment = {
|
|
2
|
+
author: string;
|
|
3
|
+
body: string;
|
|
4
|
+
createdAt: string;
|
|
5
|
+
};
|
|
1
6
|
export type Issue = {
|
|
2
7
|
number: number;
|
|
3
8
|
title: string;
|
|
4
9
|
body: string;
|
|
5
10
|
labels: string[];
|
|
11
|
+
comments?: Comment[];
|
|
6
12
|
};
|
|
7
13
|
export type Milestone = {
|
|
8
14
|
number: number;
|
|
@@ -64,3 +70,43 @@ export declare function mergePR(repo: string, head: string, method?: 'squash' |
|
|
|
64
70
|
* This is a multi-step operation using gh project commands.
|
|
65
71
|
*/
|
|
66
72
|
export declare function updateProjectStatus(repo: string, projectNum: number, owner: string, issueNum: number, status: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Create a new issue. Returns the created issue number.
|
|
75
|
+
* Uses --body-file for shell safety (same pattern as commentIssue).
|
|
76
|
+
*/
|
|
77
|
+
export declare function createIssue(repo: string, title: string, body: string, labels: string[], milestone?: number): number;
|
|
78
|
+
/**
|
|
79
|
+
* Update an existing issue's title and/or body.
|
|
80
|
+
*/
|
|
81
|
+
export declare function updateIssue(repo: string, issueNum: number, updates: {
|
|
82
|
+
title?: string;
|
|
83
|
+
body?: string;
|
|
84
|
+
}): void;
|
|
85
|
+
/**
|
|
86
|
+
* Close an issue with an optional reason.
|
|
87
|
+
*/
|
|
88
|
+
export declare function closeIssue(repo: string, issueNum: number, reason?: 'completed' | 'not_planned'): void;
|
|
89
|
+
/**
|
|
90
|
+
* Create a milestone. Returns the milestone number.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createMilestone(repo: string, title: string, description: string, dueOn?: string): number;
|
|
93
|
+
/**
|
|
94
|
+
* Assign an issue to a milestone by milestone number.
|
|
95
|
+
*/
|
|
96
|
+
export declare function setIssueMilestone(repo: string, issueNum: number, milestoneNum: number): void;
|
|
97
|
+
/**
|
|
98
|
+
* List all open issues (no label filter). Default limit 100.
|
|
99
|
+
*/
|
|
100
|
+
export declare function listOpenIssues(repo: string, limit?: number): Issue[];
|
|
101
|
+
/**
|
|
102
|
+
* Fetch comments for a specific issue.
|
|
103
|
+
*/
|
|
104
|
+
export declare function getIssueComments(repo: string, issueNum: number): Comment[];
|
|
105
|
+
/**
|
|
106
|
+
* Fetch a single issue with its full body and comments.
|
|
107
|
+
*/
|
|
108
|
+
export declare function getIssueWithComments(repo: string, issueNum: number): Issue | null;
|
|
109
|
+
/**
|
|
110
|
+
* Add an issue to a GitHub Project v2.
|
|
111
|
+
*/
|
|
112
|
+
export declare function addIssueToProject(owner: string, projectNum: number, repo: string, issueNum: number): void;
|
package/dist/lib/github.js
CHANGED
|
@@ -193,7 +193,7 @@ export function createPR(options) {
|
|
|
193
193
|
if (existing.length > 0) {
|
|
194
194
|
const prUrl = existing[0].url;
|
|
195
195
|
log.info(`PR already exists: ${prUrl}, updating...`);
|
|
196
|
-
exec(`gh pr edit ${existing[0].number} --repo "${repo}" --body-file "${bodyFile}"`);
|
|
196
|
+
exec(`gh pr edit ${existing[0].number} --repo "${repo}" --base "${base}" --body-file "${bodyFile}"`);
|
|
197
197
|
return prUrl;
|
|
198
198
|
}
|
|
199
199
|
}
|
|
@@ -322,6 +322,185 @@ export function updateProjectStatus(repo, projectNum, owner, issueNum, status) {
|
|
|
322
322
|
}
|
|
323
323
|
log.info(`Project board: #${issueNum} -> ${status}`);
|
|
324
324
|
}
|
|
325
|
+
/**
|
|
326
|
+
* Create a new issue. Returns the created issue number.
|
|
327
|
+
* Uses --body-file for shell safety (same pattern as commentIssue).
|
|
328
|
+
*/
|
|
329
|
+
export function createIssue(repo, title, body, labels, milestone) {
|
|
330
|
+
const bodyFile = join(tmpdir(), `alpha-loop-issue-body-${Date.now()}`);
|
|
331
|
+
writeFileSync(bodyFile, body, 'utf-8');
|
|
332
|
+
try {
|
|
333
|
+
const labelFlags = labels.map((l) => `--label ${JSON.stringify(l)}`).join(' ');
|
|
334
|
+
const milestoneFlag = milestone ? ` --milestone ${milestone}` : '';
|
|
335
|
+
const result = exec(`gh issue create --repo "${repo}" --title ${JSON.stringify(title)} --body-file "${bodyFile}" ${labelFlags}${milestoneFlag}`);
|
|
336
|
+
if (result.exitCode !== 0) {
|
|
337
|
+
log.warn(`Failed to create issue: ${result.stderr}`);
|
|
338
|
+
return 0;
|
|
339
|
+
}
|
|
340
|
+
// gh issue create returns the URL, e.g. https://github.com/owner/repo/issues/42
|
|
341
|
+
const match = result.stdout.trim().match(/(\d+)\s*$/);
|
|
342
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
343
|
+
}
|
|
344
|
+
finally {
|
|
345
|
+
try {
|
|
346
|
+
unlinkSync(bodyFile);
|
|
347
|
+
}
|
|
348
|
+
catch { /* cleanup best-effort */ }
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Update an existing issue's title and/or body.
|
|
353
|
+
*/
|
|
354
|
+
export function updateIssue(repo, issueNum, updates) {
|
|
355
|
+
if (!updates.title && updates.body === undefined)
|
|
356
|
+
return;
|
|
357
|
+
let bodyFile;
|
|
358
|
+
try {
|
|
359
|
+
let cmd = `gh issue edit ${issueNum} --repo "${repo}"`;
|
|
360
|
+
if (updates.title) {
|
|
361
|
+
cmd += ` --title ${JSON.stringify(updates.title)}`;
|
|
362
|
+
}
|
|
363
|
+
if (updates.body !== undefined) {
|
|
364
|
+
bodyFile = join(tmpdir(), `alpha-loop-issue-body-${Date.now()}`);
|
|
365
|
+
writeFileSync(bodyFile, updates.body, 'utf-8');
|
|
366
|
+
cmd += ` --body-file "${bodyFile}"`;
|
|
367
|
+
}
|
|
368
|
+
const result = exec(cmd);
|
|
369
|
+
if (result.exitCode !== 0) {
|
|
370
|
+
log.warn(`Failed to update issue #${issueNum}: ${result.stderr}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
finally {
|
|
374
|
+
if (bodyFile) {
|
|
375
|
+
try {
|
|
376
|
+
unlinkSync(bodyFile);
|
|
377
|
+
}
|
|
378
|
+
catch { /* cleanup best-effort */ }
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Close an issue with an optional reason.
|
|
384
|
+
*/
|
|
385
|
+
export function closeIssue(repo, issueNum, reason) {
|
|
386
|
+
const reasonFlag = reason ? ` --reason "${reason}"` : '';
|
|
387
|
+
const result = exec(`gh issue close ${issueNum} --repo "${repo}"${reasonFlag}`);
|
|
388
|
+
if (result.exitCode !== 0) {
|
|
389
|
+
log.warn(`Failed to close issue #${issueNum}: ${result.stderr}`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Create a milestone. Returns the milestone number.
|
|
394
|
+
*/
|
|
395
|
+
export function createMilestone(repo, title, description, dueOn) {
|
|
396
|
+
const dueOnFlag = dueOn ? ` -f due_on=${JSON.stringify(dueOn)}` : '';
|
|
397
|
+
const result = exec(`gh api "repos/${repo}/milestones" -X POST -f title=${JSON.stringify(title)} -f description=${JSON.stringify(description)}${dueOnFlag}`);
|
|
398
|
+
if (result.exitCode !== 0) {
|
|
399
|
+
log.warn(`Failed to create milestone: ${result.stderr}`);
|
|
400
|
+
return 0;
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
const data = JSON.parse(result.stdout);
|
|
404
|
+
return data.number;
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
log.warn('Failed to parse milestone response');
|
|
408
|
+
return 0;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Assign an issue to a milestone by milestone number.
|
|
413
|
+
*/
|
|
414
|
+
export function setIssueMilestone(repo, issueNum, milestoneNum) {
|
|
415
|
+
const result = exec(`gh api "repos/${repo}/issues/${issueNum}" -X PATCH -F milestone=${milestoneNum}`);
|
|
416
|
+
if (result.exitCode !== 0) {
|
|
417
|
+
log.warn(`Failed to set milestone on issue #${issueNum}: ${result.stderr}`);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* List all open issues (no label filter). Default limit 100.
|
|
422
|
+
*/
|
|
423
|
+
export function listOpenIssues(repo, limit = 100) {
|
|
424
|
+
const safeLimit = Math.max(1, Math.min(1000, Math.floor(limit)));
|
|
425
|
+
const result = exec(`gh issue list --repo "${repo}" --state open --json number,title,body,labels --limit ${safeLimit}`);
|
|
426
|
+
if (result.exitCode !== 0) {
|
|
427
|
+
log.warn(`Failed to list open issues: ${result.stderr}`);
|
|
428
|
+
return [];
|
|
429
|
+
}
|
|
430
|
+
try {
|
|
431
|
+
const raw = JSON.parse(result.stdout);
|
|
432
|
+
return raw.map((issue) => ({
|
|
433
|
+
number: issue.number,
|
|
434
|
+
title: issue.title,
|
|
435
|
+
body: issue.body ?? '',
|
|
436
|
+
labels: (issue.labels ?? []).map((l) => l.name),
|
|
437
|
+
}));
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
log.warn('Failed to parse open issues JSON');
|
|
441
|
+
return [];
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Fetch comments for a specific issue.
|
|
446
|
+
*/
|
|
447
|
+
export function getIssueComments(repo, issueNum) {
|
|
448
|
+
const result = exec(`gh issue view ${issueNum} --repo "${repo}" --json comments`);
|
|
449
|
+
if (result.exitCode !== 0) {
|
|
450
|
+
log.warn(`Failed to fetch comments for issue #${issueNum}: ${result.stderr}`);
|
|
451
|
+
return [];
|
|
452
|
+
}
|
|
453
|
+
try {
|
|
454
|
+
const data = JSON.parse(result.stdout);
|
|
455
|
+
return (data.comments ?? []).map((c) => ({
|
|
456
|
+
author: c.author?.login ?? 'unknown',
|
|
457
|
+
body: c.body ?? '',
|
|
458
|
+
createdAt: c.createdAt ?? '',
|
|
459
|
+
}));
|
|
460
|
+
}
|
|
461
|
+
catch {
|
|
462
|
+
log.warn(`Failed to parse comments for issue #${issueNum}`);
|
|
463
|
+
return [];
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Fetch a single issue with its full body and comments.
|
|
468
|
+
*/
|
|
469
|
+
export function getIssueWithComments(repo, issueNum) {
|
|
470
|
+
const result = exec(`gh issue view ${issueNum} --repo "${repo}" --json number,title,body,labels,comments`);
|
|
471
|
+
if (result.exitCode !== 0) {
|
|
472
|
+
log.warn(`Failed to fetch issue #${issueNum}: ${result.stderr}`);
|
|
473
|
+
return null;
|
|
474
|
+
}
|
|
475
|
+
try {
|
|
476
|
+
const data = JSON.parse(result.stdout);
|
|
477
|
+
return {
|
|
478
|
+
number: data.number,
|
|
479
|
+
title: data.title,
|
|
480
|
+
body: data.body ?? '',
|
|
481
|
+
labels: (data.labels ?? []).map((l) => l.name),
|
|
482
|
+
comments: (data.comments ?? []).map((c) => ({
|
|
483
|
+
author: c.author?.login ?? 'unknown',
|
|
484
|
+
body: c.body ?? '',
|
|
485
|
+
createdAt: c.createdAt ?? '',
|
|
486
|
+
})),
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
log.warn(`Failed to parse issue #${issueNum}`);
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Add an issue to a GitHub Project v2.
|
|
496
|
+
*/
|
|
497
|
+
export function addIssueToProject(owner, projectNum, repo, issueNum) {
|
|
498
|
+
const issueUrl = `https://github.com/${repo}/issues/${issueNum}`;
|
|
499
|
+
const result = exec(`gh project item-add ${projectNum} --owner "${owner}" --url "${issueUrl}"`);
|
|
500
|
+
if (result.exitCode !== 0) {
|
|
501
|
+
log.warn(`Failed to add issue #${issueNum} to project: ${result.stderr}`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
325
504
|
/**
|
|
326
505
|
* Truncate PR body at 30k chars to stay within GitHub limits.
|
|
327
506
|
*/
|