@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.
Files changed (58) hide show
  1. package/README.md +136 -3
  2. package/dist/cli.js +73 -6
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/eval.d.ts +59 -4
  5. package/dist/commands/eval.js +370 -55
  6. package/dist/commands/eval.js.map +1 -1
  7. package/dist/commands/evolve.d.ts +43 -4
  8. package/dist/commands/evolve.js +444 -66
  9. package/dist/commands/evolve.js.map +1 -1
  10. package/dist/commands/init.js +3 -7
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/plan.d.ts +11 -0
  13. package/dist/commands/plan.js +298 -0
  14. package/dist/commands/plan.js.map +1 -0
  15. package/dist/commands/roadmap.d.ts +9 -0
  16. package/dist/commands/roadmap.js +202 -0
  17. package/dist/commands/roadmap.js.map +1 -0
  18. package/dist/commands/triage.d.ts +9 -0
  19. package/dist/commands/triage.js +226 -0
  20. package/dist/commands/triage.js.map +1 -0
  21. package/dist/commands/vision.js +1 -0
  22. package/dist/commands/vision.js.map +1 -1
  23. package/dist/lib/config.d.ts +20 -0
  24. package/dist/lib/config.js +55 -0
  25. package/dist/lib/config.js.map +1 -1
  26. package/dist/lib/eval-checks.d.ts +11 -1
  27. package/dist/lib/eval-checks.js +39 -0
  28. package/dist/lib/eval-checks.js.map +1 -1
  29. package/dist/lib/eval-fixtures.d.ts +55 -0
  30. package/dist/lib/eval-fixtures.js +172 -0
  31. package/dist/lib/eval-fixtures.js.map +1 -0
  32. package/dist/lib/eval-runner.d.ts +26 -2
  33. package/dist/lib/eval-runner.js +202 -17
  34. package/dist/lib/eval-runner.js.map +1 -1
  35. package/dist/lib/eval-skill-bridge.d.ts +53 -0
  36. package/dist/lib/eval-skill-bridge.js +121 -0
  37. package/dist/lib/eval-skill-bridge.js.map +1 -0
  38. package/dist/lib/eval-swebench.d.ts +68 -0
  39. package/dist/lib/eval-swebench.js +274 -0
  40. package/dist/lib/eval-swebench.js.map +1 -0
  41. package/dist/lib/eval.d.ts +9 -1
  42. package/dist/lib/eval.js +27 -7
  43. package/dist/lib/eval.js.map +1 -1
  44. package/dist/lib/github.d.ts +46 -0
  45. package/dist/lib/github.js +179 -0
  46. package/dist/lib/github.js.map +1 -1
  47. package/dist/lib/pipeline.js +44 -2
  48. package/dist/lib/pipeline.js.map +1 -1
  49. package/dist/lib/planning.d.ts +91 -0
  50. package/dist/lib/planning.js +315 -0
  51. package/dist/lib/planning.js.map +1 -0
  52. package/dist/lib/prompts.d.ts +79 -0
  53. package/dist/lib/prompts.js +151 -2
  54. package/dist/lib/prompts.js.map +1 -1
  55. package/dist/lib/score.d.ts +24 -2
  56. package/dist/lib/score.js +162 -3
  57. package/dist/lib/score.js.map +1 -1
  58. package/package.json +2 -1
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Shared planning library — types, JSON extraction, and formatting utilities
3
+ * used by plan, triage, and roadmap commands.
4
+ */
5
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'node:fs';
6
+ import { join, relative } from 'node:path';
7
+ import { getVisionContext } from './vision.js';
8
+ import { getProjectContext } from './context.js';
9
+ import { pollIssues } from './github.js';
10
+ // ── ANSI Colors ──────────────────────────────────────────────────────────────
11
+ const RED = '\x1b[0;31m';
12
+ const YELLOW = '\x1b[1;33m';
13
+ const BLUE = '\x1b[0;34m';
14
+ const CYAN = '\x1b[0;36m';
15
+ const GRAY = '\x1b[0;90m';
16
+ const BOLD = '\x1b[1m';
17
+ const NC = '\x1b[0m';
18
+ const PRIORITY_COLORS = {
19
+ p0: RED,
20
+ p1: YELLOW,
21
+ p2: BLUE,
22
+ p3: GRAY,
23
+ };
24
+ const COMPLEXITY_COLORS = {
25
+ trivial: GRAY,
26
+ small: BLUE,
27
+ medium: YELLOW,
28
+ large: RED,
29
+ };
30
+ // ── Functions ────────────────────────────────────────────────────────────────
31
+ /**
32
+ * Extract JSON from an AI agent response that may include markdown fences,
33
+ * explanatory text, or other noise around the JSON payload.
34
+ */
35
+ export function extractJsonFromResponse(response) {
36
+ if (!response || !response.trim()) {
37
+ throw new Error('Empty response — no JSON to extract');
38
+ }
39
+ // Try fenced JSON block first: ```json ... ```
40
+ const fenceMatch = response.match(/```json\s*\n?([\s\S]*?)\n?\s*```/);
41
+ if (fenceMatch) {
42
+ try {
43
+ return JSON.parse(fenceMatch[1].trim());
44
+ }
45
+ catch {
46
+ // Fall through to other strategies
47
+ }
48
+ }
49
+ // Try plain fenced block: ``` ... ```
50
+ const plainFenceMatch = response.match(/```\s*\n?([\s\S]*?)\n?\s*```/);
51
+ if (plainFenceMatch) {
52
+ const content = plainFenceMatch[1].trim();
53
+ if (content.startsWith('{') || content.startsWith('[')) {
54
+ try {
55
+ return JSON.parse(content);
56
+ }
57
+ catch {
58
+ // Fall through
59
+ }
60
+ }
61
+ }
62
+ // Fallback: find first { and last } (or [ and ])
63
+ const firstBrace = response.indexOf('{');
64
+ const lastBrace = response.lastIndexOf('}');
65
+ const firstBracket = response.indexOf('[');
66
+ const lastBracket = response.lastIndexOf(']');
67
+ // Try object
68
+ if (firstBrace !== -1 && lastBrace > firstBrace) {
69
+ try {
70
+ return JSON.parse(response.slice(firstBrace, lastBrace + 1));
71
+ }
72
+ catch {
73
+ // Fall through
74
+ }
75
+ }
76
+ // Try array
77
+ if (firstBracket !== -1 && lastBracket > firstBracket) {
78
+ try {
79
+ return JSON.parse(response.slice(firstBracket, lastBracket + 1));
80
+ }
81
+ catch {
82
+ // Fall through
83
+ }
84
+ }
85
+ throw new Error('Could not extract valid JSON from response. Expected a JSON object or array, ' +
86
+ 'optionally wrapped in ```json ... ``` fences.');
87
+ }
88
+ /**
89
+ * Format a table of planned issues grouped by milestone, with colored
90
+ * priority and complexity columns.
91
+ */
92
+ export function formatIssueTable(issues, milestones) {
93
+ if (issues.length === 0) {
94
+ return `${GRAY}No issues to display.${NC}`;
95
+ }
96
+ const sorted = [...milestones].sort((a, b) => a.order - b.order);
97
+ const milestoneOrder = sorted.map((m) => m.title);
98
+ // Group issues by milestone
99
+ const grouped = new Map();
100
+ for (const issue of issues) {
101
+ const key = issue.milestone || '(no milestone)';
102
+ if (!grouped.has(key))
103
+ grouped.set(key, []);
104
+ grouped.get(key).push(issue);
105
+ }
106
+ const lines = [];
107
+ for (const msTitle of milestoneOrder) {
108
+ const group = grouped.get(msTitle);
109
+ if (!group || group.length === 0)
110
+ continue;
111
+ grouped.delete(msTitle);
112
+ const ms = sorted.find((m) => m.title === msTitle);
113
+ const due = ms?.dueOn ? ` (due ${ms.dueOn})` : '';
114
+ lines.push(`\n${BOLD}${CYAN}── ${msTitle}${due} ──${NC}`);
115
+ lines.push(formatIssueRows(group));
116
+ }
117
+ // Any remaining issues not in a known milestone
118
+ for (const [msTitle, group] of grouped) {
119
+ if (group.length === 0)
120
+ continue;
121
+ lines.push(`\n${BOLD}${CYAN}── ${msTitle} ──${NC}`);
122
+ lines.push(formatIssueRows(group));
123
+ }
124
+ return lines.join('\n');
125
+ }
126
+ function formatIssueRows(issues) {
127
+ const rows = issues.map((issue) => {
128
+ const pColor = PRIORITY_COLORS[issue.priority];
129
+ const cColor = COMPLEXITY_COLORS[issue.complexity];
130
+ const deps = issue.dependsOn.length > 0 ? ` → [${issue.dependsOn.join(', ')}]` : '';
131
+ const sel = issue.selected ? '✓' : ' ';
132
+ return (` [${sel}] #${issue.id} ${issue.title}` +
133
+ ` ${pColor}${issue.priority}${NC}` +
134
+ ` ${cColor}${issue.complexity}${NC}` +
135
+ `${deps}`);
136
+ });
137
+ return rows.join('\n');
138
+ }
139
+ /**
140
+ * Format triage findings grouped by category.
141
+ */
142
+ export function formatTriageFindings(findings) {
143
+ if (findings.length === 0) {
144
+ return `${GRAY}No triage findings.${NC}`;
145
+ }
146
+ const categories = ['stale', 'unclear', 'too_large', 'duplicate', 'enrich'];
147
+ const categoryLabels = {
148
+ stale: 'Stale Issues',
149
+ unclear: 'Unclear Issues',
150
+ too_large: 'Too Large',
151
+ duplicate: 'Duplicates',
152
+ enrich: 'Needs Enrichment',
153
+ };
154
+ const grouped = new Map();
155
+ for (const f of findings) {
156
+ if (!grouped.has(f.category))
157
+ grouped.set(f.category, []);
158
+ grouped.get(f.category).push(f);
159
+ }
160
+ const lines = [];
161
+ for (const cat of categories) {
162
+ const group = grouped.get(cat);
163
+ if (!group || group.length === 0)
164
+ continue;
165
+ lines.push(`\n${BOLD}${YELLOW}── ${categoryLabels[cat]} (${group.length}) ──${NC}`);
166
+ for (const f of group) {
167
+ const sel = f.selected ? '✓' : ' ';
168
+ lines.push(` [${sel}] #${f.issueNum} ${f.title}`);
169
+ lines.push(` ${GRAY}Reason: ${f.reason}${NC}`);
170
+ lines.push(` Action: ${f.action}`);
171
+ if (f.duplicateOf != null) {
172
+ lines.push(` ${GRAY}Duplicate of #${f.duplicateOf}${NC}`);
173
+ }
174
+ if (f.splitInto && f.splitInto.length > 0) {
175
+ lines.push(` ${GRAY}Split into: ${f.splitInto.join(', ')}${NC}`);
176
+ }
177
+ }
178
+ }
179
+ return lines.join('\n');
180
+ }
181
+ /**
182
+ * Format a roadmap table grouped by milestone, showing [NEW]/[EXISTS] tags
183
+ * per milestone and [currently: <milestone>]/[currently: unassigned] per issue.
184
+ */
185
+ export function formatRoadmapTable(milestones, assignments, existingMilestones) {
186
+ if (assignments.length === 0) {
187
+ return `${GRAY}No assignments to display.${NC}`;
188
+ }
189
+ const sorted = [...milestones].sort((a, b) => a.order - b.order);
190
+ const existingSet = new Set(existingMilestones);
191
+ // Group assignments by milestone
192
+ const grouped = new Map();
193
+ for (const a of assignments) {
194
+ const key = a.milestone || '(no milestone)';
195
+ if (!grouped.has(key))
196
+ grouped.set(key, []);
197
+ grouped.get(key).push(a);
198
+ }
199
+ const lines = [];
200
+ for (const ms of sorted) {
201
+ const group = grouped.get(ms.title);
202
+ if (!group || group.length === 0)
203
+ continue;
204
+ grouped.delete(ms.title);
205
+ const tag = existingSet.has(ms.title) ? `${BLUE}[EXISTS]${NC}` : `${CYAN}[NEW]${NC}`;
206
+ const due = ms.dueOn ? ` (due: ${ms.dueOn})` : '';
207
+ lines.push(`\n${BOLD}${CYAN}── ${ms.title}${due} ${tag}${NC}`);
208
+ for (const a of group) {
209
+ const current = a.currentMilestone
210
+ ? `${GRAY}[currently: ${a.currentMilestone}]${NC}`
211
+ : `${GRAY}[currently: unassigned]${NC}`;
212
+ lines.push(` #${a.issueNum} ${a.title} ${current}`);
213
+ }
214
+ }
215
+ // Any remaining assignments not in a known milestone
216
+ for (const [msTitle, group] of grouped) {
217
+ if (group.length === 0)
218
+ continue;
219
+ lines.push(`\n${BOLD}${CYAN}── ${msTitle} ──${NC}`);
220
+ for (const a of group) {
221
+ const current = a.currentMilestone
222
+ ? `${GRAY}[currently: ${a.currentMilestone}]${NC}`
223
+ : `${GRAY}[currently: unassigned]${NC}`;
224
+ lines.push(` #${a.issueNum} ${a.title} ${current}`);
225
+ }
226
+ }
227
+ return lines.join('\n');
228
+ }
229
+ /**
230
+ * Read files matching glob patterns for seeding the plan.
231
+ * Uses simple recursive directory walking with minimatch-style matching.
232
+ */
233
+ export function readSeedFiles(patterns, cwd) {
234
+ const results = [];
235
+ const seen = new Set();
236
+ for (const pattern of patterns) {
237
+ const matched = matchFiles(pattern, cwd);
238
+ for (const filePath of matched) {
239
+ if (seen.has(filePath))
240
+ continue;
241
+ seen.add(filePath);
242
+ try {
243
+ const content = readFileSync(filePath, 'utf-8');
244
+ results.push({ path: relative(cwd, filePath), content });
245
+ }
246
+ catch {
247
+ // Skip unreadable files
248
+ }
249
+ }
250
+ }
251
+ return results;
252
+ }
253
+ /**
254
+ * Simple glob matching: supports * and ** patterns.
255
+ */
256
+ function matchFiles(pattern, cwd) {
257
+ // Convert glob pattern to regex
258
+ const regexStr = pattern
259
+ .replace(/\./g, '\\.')
260
+ .replace(/\*\*/g, '{{GLOBSTAR}}')
261
+ .replace(/\*/g, '[^/]*')
262
+ .replace(/\{\{GLOBSTAR\}\}/g, '.*');
263
+ const regex = new RegExp(`^${regexStr}$`);
264
+ const results = [];
265
+ walkDir(cwd, cwd, regex, results);
266
+ return results;
267
+ }
268
+ function walkDir(base, dir, regex, results) {
269
+ let entries;
270
+ try {
271
+ entries = readdirSync(dir);
272
+ }
273
+ catch {
274
+ return;
275
+ }
276
+ for (const entry of entries) {
277
+ if (entry.startsWith('.'))
278
+ continue; // skip dotfiles
279
+ const fullPath = join(dir, entry);
280
+ const relPath = relative(base, fullPath);
281
+ try {
282
+ const stat = statSync(fullPath);
283
+ if (stat.isDirectory()) {
284
+ walkDir(base, fullPath, regex, results);
285
+ }
286
+ else if (regex.test(relPath)) {
287
+ results.push(fullPath);
288
+ }
289
+ }
290
+ catch {
291
+ // Skip inaccessible entries
292
+ }
293
+ }
294
+ }
295
+ /**
296
+ * Load common planning context: vision, project context, and existing issues.
297
+ */
298
+ export function buildPlanningContext(config) {
299
+ const visionContext = getVisionContext();
300
+ const projectContext = getProjectContext();
301
+ const existingIssues = pollIssues(config.repo, config.labelReady, 100, {
302
+ repoOwner: config.repoOwner,
303
+ milestone: config.milestone,
304
+ });
305
+ return { visionContext, projectContext, existingIssues };
306
+ }
307
+ /**
308
+ * Save a plan draft to .alpha-loop/plan.json for recovery.
309
+ */
310
+ export function savePlanDraft(draft, projectDir) {
311
+ const dir = join(projectDir, '.alpha-loop');
312
+ mkdirSync(dir, { recursive: true });
313
+ writeFileSync(join(dir, 'plan.json'), JSON.stringify(draft, null, 2), 'utf-8');
314
+ }
315
+ //# sourceMappingURL=planning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning.js","sourceRoot":"","sources":["../../src/lib/planning.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,11 @@ export type ImplementPromptOptions = {
6
6
  issueNum: number;
7
7
  title: string;
8
8
  body: string;
9
+ comments?: Array<{
10
+ author: string;
11
+ body: string;
12
+ createdAt: string;
13
+ }>;
9
14
  planContent?: string;
10
15
  visionContext?: string;
11
16
  projectContext?: string;
@@ -16,6 +21,11 @@ export type ReviewPromptOptions = {
16
21
  issueNum: number;
17
22
  title: string;
18
23
  body: string;
24
+ comments?: Array<{
25
+ author: string;
26
+ body: string;
27
+ createdAt: string;
28
+ }>;
19
29
  baseBranch: string;
20
30
  visionContext?: string;
21
31
  };
@@ -61,3 +71,72 @@ export declare function buildSessionReviewPrompt(options: SessionReviewPromptOpt
61
71
  * Build the learning extraction prompt.
62
72
  */
63
73
  export declare function buildLearnPrompt(options: LearnPromptOptions): string;
74
+ export type AssumptionsPromptOptions = {
75
+ issueNum: number;
76
+ title: string;
77
+ body: string;
78
+ diff: string;
79
+ reviewSummary: string;
80
+ };
81
+ /**
82
+ * Build a prompt that asks the agent to summarize assumptions and decisions
83
+ * made during implementation. Posted as a comment for user validation.
84
+ */
85
+ export declare function buildAssumptionsPrompt(options: AssumptionsPromptOptions): string;
86
+ export type TriagePromptOptions = {
87
+ issues: Array<{
88
+ number: number;
89
+ title: string;
90
+ body: string;
91
+ comments?: Array<{
92
+ author: string;
93
+ body: string;
94
+ createdAt: string;
95
+ }>;
96
+ }>;
97
+ projectContext?: string | null;
98
+ visionContext?: string | null;
99
+ };
100
+ /**
101
+ * Build the triage analysis prompt for an AI agent.
102
+ * Instructs the agent to categorize open issues and output TriageFinding[] JSON.
103
+ */
104
+ export declare function buildTriagePrompt(options: TriagePromptOptions): string;
105
+ export type RoadmapPromptOptions = {
106
+ issues: Array<{
107
+ number: number;
108
+ title: string;
109
+ body: string;
110
+ milestone: string | null;
111
+ }>;
112
+ milestones: Array<{
113
+ title: string;
114
+ description: string;
115
+ dueOn: string | null;
116
+ }>;
117
+ projectContext?: string | null;
118
+ visionContext?: string | null;
119
+ };
120
+ /**
121
+ * Build the roadmap prompt for an AI agent.
122
+ * Instructs the agent to suggest milestone groupings for open issues.
123
+ */
124
+ export declare function buildRoadmapPrompt(options: RoadmapPromptOptions): string;
125
+ export type PlanPromptOptions = {
126
+ seedDescription: string;
127
+ seedFiles?: Array<{
128
+ path: string;
129
+ content: string;
130
+ }>;
131
+ visionContext?: string | null;
132
+ projectContext?: string | null;
133
+ existingIssues?: Array<{
134
+ number: number;
135
+ title: string;
136
+ }>;
137
+ };
138
+ /**
139
+ * Build the prompt for AI-driven project plan generation.
140
+ * Instructs the agent to output a PlanDraft JSON with milestones and issues.
141
+ */
142
+ export declare function buildPlanPrompt(options: PlanPromptOptions): string;
@@ -6,12 +6,18 @@
6
6
  * Build the implementation prompt for an AI agent.
7
7
  */
8
8
  export function buildImplementPrompt(options) {
9
- const { issueNum, title, body, planContent, visionContext, projectContext, previousResult, learningContext } = options;
9
+ const { issueNum, title, body, comments, planContent, visionContext, projectContext, previousResult, learningContext } = options;
10
10
  const sections = [
11
11
  `Implement GitHub issue #${issueNum}: ${title}`,
12
12
  '',
13
13
  body,
14
14
  ];
15
+ if (comments && comments.length > 0) {
16
+ sections.push('', '', '## Discussion (issue comments)');
17
+ for (const c of comments) {
18
+ sections.push(`- **@${c.author}** (${c.createdAt}): ${c.body}`);
19
+ }
20
+ }
15
21
  if (planContent) {
16
22
  sections.push('', '', `## Implementation Plan`, planContent);
17
23
  }
@@ -34,7 +40,7 @@ export function buildImplementPrompt(options) {
34
40
  * Build the code review prompt for an AI agent.
35
41
  */
36
42
  export function buildReviewPrompt(options) {
37
- const { issueNum, title, body, baseBranch, visionContext } = options;
43
+ const { issueNum, title, body, comments, baseBranch, visionContext } = options;
38
44
  const sections = [
39
45
  `Review the code changes for issue #${issueNum}: ${title}`,
40
46
  '',
@@ -43,6 +49,12 @@ export function buildReviewPrompt(options) {
43
49
  'Original requirements:',
44
50
  body,
45
51
  ];
52
+ if (comments && comments.length > 0) {
53
+ sections.push('', 'Discussion (issue comments):');
54
+ for (const c of comments) {
55
+ sections.push(`- **@${c.author}** (${c.createdAt}): ${c.body}`);
56
+ }
57
+ }
46
58
  if (visionContext) {
47
59
  sections.push('', '', '## Product Vision (guide your review decisions)', visionContext);
48
60
  }
@@ -150,4 +162,141 @@ date: ${today}
150
162
  ## Suggested Skill Updates
151
163
  - (specific skill file changes, or "None")`;
152
164
  }
165
+ /**
166
+ * Build a prompt that asks the agent to summarize assumptions and decisions
167
+ * made during implementation. Posted as a comment for user validation.
168
+ */
169
+ export function buildAssumptionsPrompt(options) {
170
+ const { issueNum, title, body, diff, reviewSummary } = options;
171
+ return `You just implemented GitHub issue #${issueNum}: ${title}
172
+
173
+ ## Original Requirements
174
+ ${body}
175
+
176
+ ## Code Changes (first 5000 chars)
177
+ ${diff.slice(0, 5000)}
178
+
179
+ ## Review Summary
180
+ ${reviewSummary}
181
+
182
+ Analyze the implementation and list any assumptions or decisions you had to make where the requirements were ambiguous or incomplete. Output ONLY a markdown document with this structure:
183
+
184
+ ## Assumptions
185
+ - (list each assumption made, e.g. "Assumed the date format should be ISO 8601 since it wasn't specified")
186
+ - If no assumptions were needed, write "None — requirements were fully specified"
187
+
188
+ ## Decisions
189
+ - (list each design/implementation decision where multiple valid approaches existed, e.g. "Chose to validate on the server side rather than client side for security")
190
+ - If no notable decisions, write "None — implementation was straightforward"
191
+
192
+ ## Items to Validate
193
+ - (list specific things the user should check, e.g. "Verify the error message wording matches your team's style guide")
194
+ - If nothing needs validation, write "None"
195
+
196
+ Keep it concise. Only include genuinely ambiguous items, not obvious implementation choices.`;
197
+ }
198
+ /**
199
+ * Build the triage analysis prompt for an AI agent.
200
+ * Instructs the agent to categorize open issues and output TriageFinding[] JSON.
201
+ */
202
+ export function buildTriagePrompt(options) {
203
+ const { issues, projectContext, visionContext } = options;
204
+ const capped = issues.slice(0, 100);
205
+ const cappedWarning = issues.length > 100
206
+ ? `\n\nWARNING: Only the first 100 of ${issues.length} issues are included. There may be more issues not shown here.`
207
+ : '';
208
+ const issueList = capped.map((i) => {
209
+ let entry = `### Issue #${i.number}: ${i.title}\n${i.body || '(no description)'}`;
210
+ if (i.comments && i.comments.length > 0) {
211
+ const commentLines = i.comments.map((c) => `- **@${c.author}** (${c.createdAt}): ${c.body.length > 200 ? c.body.slice(0, 200) + '...' : c.body}`).join('\n');
212
+ entry += `\n\n**Comments:**\n${commentLines}`;
213
+ }
214
+ return entry;
215
+ }).join('\n\n');
216
+ const sections = [
217
+ 'You are a project triage assistant. Analyze the following open GitHub issues and categorize any that need attention.',
218
+ '',
219
+ '## Open Issues',
220
+ issueList,
221
+ cappedWarning,
222
+ ];
223
+ if (visionContext) {
224
+ sections.push('', '## Product Vision', visionContext);
225
+ }
226
+ if (projectContext) {
227
+ sections.push('', '## Technical Context', projectContext);
228
+ }
229
+ sections.push('', '## Instructions', '', 'For each issue, determine if it falls into one of these categories:', '- **stale**: No longer relevant given the current codebase state (e.g., referenced files deleted, feature already implemented)', '- **unclear**: Missing acceptance criteria, vague scope, no clear "done" definition', '- **too_large**: Should be split into 2-4 smaller, focused issues', '- **duplicate**: Substantially overlaps with another open issue', '- **enrich**: Raw support ticket, sparse form submission, or bug report that needs investigation and enrichment — has some useful info but lacks technical detail, affected areas, acceptance criteria, or reproduction steps', '- **ok**: Issue is fine as-is — do NOT include "ok" issues in output', '', 'For each finding, provide:', '- `reason`: Brief explanation of why this issue was flagged', '- For `unclear` issues: include `rewrittenBody` with proper acceptance criteria in checkbox format (`- [ ] Criterion`)', '- For `enrich` issues: include `enrichedBody` — a thorough rewrite that preserves the original description in a collapsed `<details>` block, then adds: summary, affected files/areas (inferred from codebase context), acceptance criteria, and reproduction steps if applicable. Use the issue comments for additional context.', '- For `too_large` issues: include `splitInto` array of title strings for the sub-issues', '- For `duplicate` issues: include `duplicateOf` with the canonical issue number', '', 'Check the codebase context for staleness signals (referenced files deleted, features already implemented).', 'When rewriting unclear issues, use markdown with acceptance criteria in checkbox format.', 'When enriching issues, analyze the codebase context to identify affected files and areas, and validate that the reported issue is plausible.', '', '## Output Requirements', '', 'Output ONLY valid JSON matching this schema (no explanation, no surrounding text).', 'The example below uses fences for illustration only — your output must be raw JSON with no fences:', '', '```json', '[', ' {', ' "issueNum": 42,', ' "title": "Issue title",', ' "category": "stale",', ' "reason": "This feature was already implemented in PR #30",', ' "action": "close",', ' "selected": true', ' },', ' {', ' "issueNum": 43,', ' "title": "Vague issue title",', ' "category": "unclear",', ' "reason": "No acceptance criteria, scope is ambiguous",', ' "action": "rewrite",', ' "rewrittenBody": "## Summary\\n...\\n\\n## Acceptance Criteria\\n- [ ] Criterion 1\\n- [ ] Criterion 2",', ' "selected": true', ' },', ' {', ' "issueNum": 44,', ' "title": "Large issue title",', ' "category": "too_large",', ' "reason": "Covers 3 independent features",', ' "action": "split",', ' "splitInto": ["Sub-issue A", "Sub-issue B", "Sub-issue C"],', ' "selected": true', ' },', ' {', ' "issueNum": 45,', ' "title": "Duplicate issue",', ' "category": "duplicate",', ' "reason": "Same scope as #42",', ' "action": "merge",', ' "duplicateOf": 42,', ' "selected": true', ' },', ' {', ' "issueNum": 46,', ' "title": "Button broken on settings page",', ' "category": "enrich",', ' "reason": "Raw support ticket with minimal detail — needs affected areas, reproduction steps, and acceptance criteria",', ' "action": "enrich",', ' "enrichedBody": "<details><summary>Original description</summary>\\n\\nButton broken on settings page\\n\\n</details>\\n\\n## Summary\\nThe save button on the settings page is non-functional...\\n\\n## Affected Areas\\n- `src/components/Settings.tsx`\\n\\n## Acceptance Criteria\\n- [ ] Save button triggers form submission\\n- [ ] Success feedback shown to user\\n\\n## Reproduction Steps\\n1. Navigate to Settings\\n2. Click Save\\n3. Observe no response",', ' "selected": true', ' }', ']', '```', '', '## Rules', '- Only include issues that need action (skip "ok" issues)', '- If ALL issues are fine, output an empty array: `[]`', '- Set `selected: true` for all findings (user will deselect if needed)', '- action mapping: stale→close, unclear→rewrite, too_large→split, duplicate→merge, enrich→enrich', '- Be conservative — only flag issues when you are confident about the categorization', '- Prefer `enrich` over `unclear` for issues that have some useful info (e.g., support tickets, bug reports) but need technical detail added');
230
+ return sections.join('\n');
231
+ }
232
+ /**
233
+ * Build the roadmap prompt for an AI agent.
234
+ * Instructs the agent to suggest milestone groupings for open issues.
235
+ */
236
+ export function buildRoadmapPrompt(options) {
237
+ const { issues, milestones, projectContext, visionContext } = options;
238
+ const capped = issues.slice(0, 100);
239
+ const cappedWarning = issues.length > 100
240
+ ? `\n\nWARNING: Only the first 100 of ${issues.length} issues are included.`
241
+ : '';
242
+ const issueList = capped.map((i) => {
243
+ const ms = i.milestone ? ` [milestone: ${i.milestone}]` : ' [unassigned]';
244
+ const body = i.body.length > 300 ? i.body.slice(0, 300) + '...' : i.body;
245
+ return `### Issue #${i.number}: ${i.title}${ms}\n${body || '(no description)'}`;
246
+ }).join('\n\n');
247
+ const milestoneList = milestones.length > 0
248
+ ? milestones.map((m) => {
249
+ const due = m.dueOn ? ` (due: ${m.dueOn})` : '';
250
+ return `- **${m.title}**${due}: ${m.description || '(no description)'}`;
251
+ }).join('\n')
252
+ : '(none)';
253
+ const sections = [
254
+ 'You are a project roadmap assistant. Analyze the following open issues and existing milestones, then suggest how to organize issues into milestones.',
255
+ '',
256
+ '## Open Issues',
257
+ issueList,
258
+ cappedWarning,
259
+ '',
260
+ '## Existing Milestones',
261
+ milestoneList,
262
+ ];
263
+ if (visionContext) {
264
+ sections.push('', '## Product Vision', visionContext);
265
+ }
266
+ if (projectContext) {
267
+ sections.push('', '## Technical Context', projectContext);
268
+ }
269
+ sections.push('', '## Output Requirements', '', 'Output ONLY valid JSON matching this schema (no explanation, no surrounding text).', 'The example below uses fences for illustration only — your output must be raw JSON with no fences:', '', '```json', '{', ' "milestones": [', ' {', ' "title": "Milestone Name",', ' "description": "What this milestone delivers",', ' "dueOn": "2026-05-01",', ' "order": 1', ' }', ' ],', ' "assignments": [', ' {', ' "issueNum": 3,', ' "title": "Issue title",', ' "milestone": "Milestone Name",', ' "currentMilestone": "",', ' "selected": true', ' }', ' ]', '}', '```', '', '## Instructions', '- Respect existing milestone structure — reuse existing milestones where appropriate', '- Only create new milestones when issues clearly don\'t fit existing ones', '- Consider dependency order: foundational work (database, API, infra) in earlier milestones', '- Suggest realistic due dates based on issue complexity and number of issues per milestone', '- Set `currentMilestone` to the issue\'s current milestone title, or empty string if unassigned', '- Include ALL open issues in assignments (even ones already assigned to milestones)', '- Set `selected: true` for all assignments (user will deselect if needed)', '- Order milestones by suggested execution order (order field)', '- Group related issues together (same feature area, same dependency chain)');
270
+ return sections.join('\n');
271
+ }
272
+ /**
273
+ * Build the prompt for AI-driven project plan generation.
274
+ * Instructs the agent to output a PlanDraft JSON with milestones and issues.
275
+ */
276
+ export function buildPlanPrompt(options) {
277
+ const { seedDescription, seedFiles, visionContext, projectContext, existingIssues } = options;
278
+ const sections = [
279
+ 'You are a project planning assistant. Analyze the following inputs and generate a complete project plan as JSON.',
280
+ '',
281
+ '## Seed Description',
282
+ seedDescription,
283
+ ];
284
+ if (seedFiles && seedFiles.length > 0) {
285
+ sections.push('', '## Seed Files');
286
+ for (const file of seedFiles) {
287
+ sections.push(`### ${file.path}`, '```', file.content, '```');
288
+ }
289
+ }
290
+ if (visionContext) {
291
+ sections.push('', '## Product Vision', visionContext);
292
+ }
293
+ if (projectContext) {
294
+ sections.push('', '## Technical Context', projectContext);
295
+ }
296
+ if (existingIssues && existingIssues.length > 0) {
297
+ sections.push('', '## Existing Issues (avoid duplicates)', ...existingIssues.map((i) => `- #${i.number}: ${i.title}`));
298
+ }
299
+ sections.push('', '## Output Requirements', '', 'Output ONLY valid JSON matching this schema (no explanation, no surrounding text).', 'The example below uses fences for illustration only — your output must be raw JSON with no fences:', '', '```json', '{', ' "vision": null,', ' "milestones": [', ' {', ' "title": "Milestone Name",', ' "description": "What this milestone delivers",', ' "dueOn": "2026-05-01",', ' "order": 1', ' }', ' ],', ' "issues": [', ' {', ' "id": 1,', ' "title": "Issue title",', ' "body": "## Summary\\n...\\n\\n## Acceptance Criteria\\n- [ ] Criterion 1\\n- [ ] Criterion 2",', ' "labels": ["enhancement"],', ' "milestone": "Milestone Name",', ' "priority": "p1",', ' "complexity": "medium",', ' "dependsOn": [],', ' "selected": true', ' }', ' ],', ' "projectBoard": null', '}', '```', '', '## Instructions', '- Group issues into logical milestones with suggested due dates', '- Each issue body MUST use markdown with acceptance criteria in checkbox format: `- [ ] Criterion`', '- Priority: p0 (critical), p1 (high), p2 (medium), p3 (low)', '- Complexity: trivial, small, medium, large', '- Use `dependsOn` to reference other issue `id` values within the plan', '- Set all issues to `"selected": true`', '- Do NOT duplicate any existing issues listed above', '- Consider the codebase structure for realistic issue scoping', '- Issue `id` values are temporary local IDs (1, 2, 3...) used only for dependency references');
300
+ return sections.join('\n');
301
+ }
153
302
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"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"}