ai-phase-builder 1.0.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 (62) hide show
  1. package/README.md +190 -0
  2. package/dist/cli/commands/config.d.ts +8 -0
  3. package/dist/cli/commands/config.d.ts.map +1 -0
  4. package/dist/cli/commands/config.js +29 -0
  5. package/dist/cli/commands/config.js.map +1 -0
  6. package/dist/cli/commands/handover.d.ts +7 -0
  7. package/dist/cli/commands/handover.d.ts.map +1 -0
  8. package/dist/cli/commands/handover.js +188 -0
  9. package/dist/cli/commands/handover.js.map +1 -0
  10. package/dist/cli/commands/init.d.ts +8 -0
  11. package/dist/cli/commands/init.d.ts.map +1 -0
  12. package/dist/cli/commands/init.js +249 -0
  13. package/dist/cli/commands/init.js.map +1 -0
  14. package/dist/cli/commands/plan.d.ts +7 -0
  15. package/dist/cli/commands/plan.d.ts.map +1 -0
  16. package/dist/cli/commands/plan.js +193 -0
  17. package/dist/cli/commands/plan.js.map +1 -0
  18. package/dist/cli/commands/refine.d.ts +6 -0
  19. package/dist/cli/commands/refine.d.ts.map +1 -0
  20. package/dist/cli/commands/refine.js +272 -0
  21. package/dist/cli/commands/refine.js.map +1 -0
  22. package/dist/cli/commands/rollback.d.ts +6 -0
  23. package/dist/cli/commands/rollback.d.ts.map +1 -0
  24. package/dist/cli/commands/rollback.js +182 -0
  25. package/dist/cli/commands/rollback.js.map +1 -0
  26. package/dist/cli/commands/run.d.ts +8 -0
  27. package/dist/cli/commands/run.d.ts.map +1 -0
  28. package/dist/cli/commands/run.js +277 -0
  29. package/dist/cli/commands/run.js.map +1 -0
  30. package/dist/cli/commands/status.d.ts +6 -0
  31. package/dist/cli/commands/status.d.ts.map +1 -0
  32. package/dist/cli/commands/status.js +168 -0
  33. package/dist/cli/commands/status.js.map +1 -0
  34. package/dist/cli/commands/sync.d.ts +6 -0
  35. package/dist/cli/commands/sync.d.ts.map +1 -0
  36. package/dist/cli/commands/sync.js +194 -0
  37. package/dist/cli/commands/sync.js.map +1 -0
  38. package/dist/cli/index.d.ts +3 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +88 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/core/config-manager.d.ts +39 -0
  43. package/dist/core/config-manager.d.ts.map +1 -0
  44. package/dist/core/config-manager.js +213 -0
  45. package/dist/core/config-manager.js.map +1 -0
  46. package/dist/core/git-integration.d.ts +49 -0
  47. package/dist/core/git-integration.d.ts.map +1 -0
  48. package/dist/core/git-integration.js +223 -0
  49. package/dist/core/git-integration.js.map +1 -0
  50. package/dist/core/prompt-builder.d.ts +45 -0
  51. package/dist/core/prompt-builder.d.ts.map +1 -0
  52. package/dist/core/prompt-builder.js +342 -0
  53. package/dist/core/prompt-builder.js.map +1 -0
  54. package/dist/core/state-manager.d.ts +65 -0
  55. package/dist/core/state-manager.d.ts.map +1 -0
  56. package/dist/core/state-manager.js +200 -0
  57. package/dist/core/state-manager.js.map +1 -0
  58. package/dist/index.d.ts +5 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +6 -0
  61. package/dist/index.js.map +1 -0
  62. package/package.json +64 -0
@@ -0,0 +1,249 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import ora from 'ora';
6
+ import boxen from 'boxen';
7
+ import { loadGlobalConfig, loadProjectConfig, saveProjectConfig, getProjectPhasesDir, runSetupWizard, } from '../../core/config-manager.js';
8
+ import { createInitialState, saveProjectState } from '../../core/state-manager.js';
9
+ import { initGitRepo, getBaseCommit } from '../../core/git-integration.js';
10
+ import { refineCommand } from './refine.js';
11
+ export async function initCommand(options) {
12
+ // Check for global config first
13
+ let globalConfig = await loadGlobalConfig();
14
+ if (!globalConfig || !globalConfig.setup_complete) {
15
+ globalConfig = await runSetupWizard();
16
+ }
17
+ // Check if already initialized
18
+ const existingConfig = await loadProjectConfig();
19
+ if (existingConfig) {
20
+ const { overwrite } = await inquirer.prompt([
21
+ {
22
+ type: 'confirm',
23
+ name: 'overwrite',
24
+ message: 'This project is already initialized. Reinitialize?',
25
+ default: false,
26
+ },
27
+ ]);
28
+ if (!overwrite) {
29
+ console.log(chalk.dim('Initialization cancelled.'));
30
+ return;
31
+ }
32
+ }
33
+ console.log(boxen(chalk.bold.cyan('šŸš€ Initialize AI Phase Builder'), {
34
+ padding: 1,
35
+ margin: { top: 1, bottom: 1, left: 0, right: 0 },
36
+ borderStyle: 'round',
37
+ borderColor: 'cyan',
38
+ }));
39
+ // Gather project info
40
+ const projectName = path.basename(process.cwd());
41
+ const answers = await inquirer.prompt([
42
+ {
43
+ type: 'input',
44
+ name: 'name',
45
+ message: 'Project name:',
46
+ default: projectName,
47
+ },
48
+ {
49
+ type: 'list',
50
+ name: 'ui_library',
51
+ message: 'UI library:',
52
+ choices: ['shadcn', 'radix', 'chakra', 'none'],
53
+ default: options.ui || globalConfig.defaults.ui_library,
54
+ },
55
+ {
56
+ type: 'list',
57
+ name: 'design_system',
58
+ message: 'Design principles:',
59
+ choices: ['vercel', 'apple', 'material', 'custom'],
60
+ default: options.design || globalConfig.defaults.design_system,
61
+ },
62
+ ]);
63
+ const spinner = ora('Setting up project structure...').start();
64
+ try {
65
+ // Create directory structure
66
+ const phasesDir = getProjectPhasesDir();
67
+ await fs.ensureDir(phasesDir);
68
+ await fs.ensureDir(path.join(phasesDir, 'phases'));
69
+ await fs.ensureDir(path.join(phasesDir, 'logs'));
70
+ await fs.ensureDir(path.join(phasesDir, 'templates'));
71
+ // Create project config
72
+ const projectConfig = {
73
+ project_name: answers.name,
74
+ created_at: new Date().toISOString(),
75
+ ui_library: answers.ui_library,
76
+ design_system: answers.design_system,
77
+ total_phases: 0,
78
+ current_phase: 0,
79
+ current_attempt: 0,
80
+ status: 'planning',
81
+ };
82
+ await saveProjectConfig(projectConfig);
83
+ // Create initial templates
84
+ await createTemplates(phasesDir, answers.ui_library, answers.design_system);
85
+ // Initialize git if needed
86
+ await initGitRepo();
87
+ // Create initial state
88
+ const baseCommit = await getBaseCommit();
89
+ const state = await createInitialState(answers.name, options.fromIdea || '');
90
+ state.git_base_commit = baseCommit;
91
+ await saveProjectState(state);
92
+ // Create context.md
93
+ await createContextFile(phasesDir, answers);
94
+ spinner.succeed('Project structure created!');
95
+ // Show summary
96
+ console.log(chalk.green('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
97
+ console.log(chalk.green.bold(' āœ… Project Initialized!'));
98
+ console.log(chalk.green('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
99
+ console.log(chalk.dim('Created structure:'));
100
+ console.log(chalk.white(' .ai-phases/'));
101
+ console.log(chalk.dim(' ā”œā”€ā”€ config.json ') + chalk.cyan('# Project settings'));
102
+ console.log(chalk.dim(' ā”œā”€ā”€ state.json ') + chalk.cyan('# Phase tracking'));
103
+ console.log(chalk.dim(' ā”œā”€ā”€ context.md ') + chalk.cyan('# Persistent context'));
104
+ console.log(chalk.dim(' ā”œā”€ā”€ phases/ ') + chalk.cyan('# Phase directories'));
105
+ console.log(chalk.dim(' ā”œā”€ā”€ logs/ ') + chalk.cyan('# Decision logs'));
106
+ console.log(chalk.dim(' └── templates/ ') + chalk.cyan('# Prompt templates'));
107
+ console.log();
108
+ // If --from-idea was provided, run refine
109
+ if (options.fromIdea) {
110
+ console.log(chalk.cyan('\nStarting idea refinement...\n'));
111
+ await refineCommand(options.fromIdea, {});
112
+ }
113
+ else {
114
+ console.log(chalk.white('Next steps:\n'));
115
+ console.log(chalk.cyan(' ai-phases refine "your project idea"'));
116
+ console.log(chalk.dim(' or'));
117
+ console.log(chalk.cyan(' ai-phases plan --interactive\n'));
118
+ }
119
+ }
120
+ catch (error) {
121
+ spinner.fail('Failed to initialize project');
122
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
123
+ process.exit(1);
124
+ }
125
+ }
126
+ async function createTemplates(phasesDir, uiLibrary, designSystem) {
127
+ // Handover template
128
+ const handoverTemplate = `# Handover - Phase [N]: [Name]
129
+
130
+ ## Completed Work
131
+ - [What was implemented]
132
+
133
+ ## Files Modified
134
+ | File | Description |
135
+ |------|-------------|
136
+ | \`path/to/file\` | What this file does |
137
+
138
+ ## Key Decisions
139
+ - **Decision**: [What was decided]
140
+ - **Rationale**: [Why]
141
+ - **Trade-offs**: [What we gave up]
142
+
143
+ ## Known Issues
144
+ - [ ] [Issue description]
145
+
146
+ ## Context for Next Phase
147
+ - [Important information for the next developer]
148
+
149
+ ## Warnings / Gotchas
150
+ - āš ļø [Something to watch out for]
151
+
152
+ ## Validation Status
153
+ - [ ] [Criterion 1]
154
+ - [ ] [Criterion 2]
155
+ `;
156
+ const failureTemplate = `# Failure Report - Phase [N], Attempt [M]
157
+
158
+ ## Date
159
+ [ISO timestamp]
160
+
161
+ ## What Was Attempted
162
+ [Describe what the phase tried to accomplish]
163
+
164
+ ## What Went Wrong
165
+ [Describe the error or failure]
166
+
167
+ ## Error Details
168
+ \`\`\`
169
+ [Error messages, stack traces, etc.]
170
+ \`\`\`
171
+
172
+ ## Root Cause Analysis
173
+ [Why did this happen?]
174
+
175
+ ## Suggested Fix for Next Attempt
176
+ [What should be done differently]
177
+
178
+ ## Files That May Need Attention
179
+ - \`path/to/file\` - [Why]
180
+ `;
181
+ const phasePromptTemplate = `# Phase [N]: [Name]
182
+
183
+ ## Model
184
+ [Model to use: Claude Opus / Gemini Flash]
185
+
186
+ ## Context
187
+ [Phase description and goals]
188
+
189
+ ## Previous Phase Handover
190
+ [If applicable, summary from previous phase]
191
+
192
+ ## Documentation Lookup (Context7)
193
+ Before coding, use @context7 to look up:
194
+ - [Library/framework topic]
195
+
196
+ ## Tasks
197
+ 1. [Task 1]
198
+ 2. [Task 2]
199
+
200
+ ## Validation Criteria
201
+ - [ ] [How to verify completion]
202
+
203
+ ## Design Constraints
204
+ - UI Library: ${uiLibrary}
205
+ - Design System: ${designSystem}
206
+
207
+ ## Rules
208
+ - Only modify files relevant to this phase
209
+ - Don't refactor unrelated code
210
+ - Test each change before moving on
211
+ `;
212
+ await fs.writeFile(path.join(phasesDir, 'templates', 'handover.md'), handoverTemplate);
213
+ await fs.writeFile(path.join(phasesDir, 'templates', 'failure-report.md'), failureTemplate);
214
+ await fs.writeFile(path.join(phasesDir, 'templates', 'phase-prompt.md'), phasePromptTemplate);
215
+ }
216
+ async function createContextFile(phasesDir, config) {
217
+ const contextContent = `# Project Context - ${config.name}
218
+
219
+ This file contains persistent context that carries across all phases.
220
+ It's automatically included in prompts and handovers.
221
+
222
+ ## Project Overview
223
+ [To be filled after refinement]
224
+
225
+ ## Technical Stack
226
+ - **UI Library**: ${config.ui_library}
227
+ - **Design System**: ${config.design_system}
228
+
229
+ ## Design Tokens
230
+ [To be extracted from design system]
231
+
232
+ ## Architecture Decisions
233
+ [Record important decisions here]
234
+
235
+ ## Component Library
236
+ [Available components will be listed here]
237
+
238
+ ## API Contracts
239
+ [External APIs and their schemas]
240
+
241
+ ## Known Constraints
242
+ [Technical or business constraints]
243
+
244
+ ---
245
+ *This file is managed by AI Phase Builder*
246
+ `;
247
+ await fs.writeFile(path.join(phasesDir, 'context.md'), contextContent);
248
+ }
249
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface PlanOptions {
2
+ interactive?: boolean;
3
+ fromReadme?: boolean;
4
+ }
5
+ export declare function planCommand(options: PlanOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDrE"}
@@ -0,0 +1,193 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import { getProjectPhasesDir, loadProjectConfig } from '../../core/config-manager.js';
6
+ import { loadProjectState, saveProjectState, createPhaseState, } from '../../core/state-manager.js';
7
+ export async function planCommand(options) {
8
+ const projectConfig = await loadProjectConfig();
9
+ if (!projectConfig) {
10
+ console.log(chalk.yellow('Project not initialized. Run: ai-phases init'));
11
+ process.exit(1);
12
+ }
13
+ const state = await loadProjectState();
14
+ if (!state) {
15
+ console.log(chalk.yellow('Project state not found. Run: ai-phases init'));
16
+ process.exit(1);
17
+ }
18
+ if (options.interactive) {
19
+ await interactivePlanning(state);
20
+ }
21
+ else if (options.fromReadme) {
22
+ await planFromReadme(state);
23
+ }
24
+ else {
25
+ // Open plan.md for editing
26
+ const planPath = path.join(getProjectPhasesDir(), 'plan.md');
27
+ if (await fs.pathExists(planPath)) {
28
+ console.log(chalk.white('\nExisting plan found at:'));
29
+ console.log(chalk.cyan(` ${planPath}\n`));
30
+ const { action } = await inquirer.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'action',
34
+ message: 'What would you like to do?',
35
+ choices: [
36
+ { name: 'Edit existing plan', value: 'edit' },
37
+ { name: 'Create new plan (interactive)', value: 'interactive' },
38
+ { name: 'View current plan', value: 'view' },
39
+ ],
40
+ },
41
+ ]);
42
+ if (action === 'interactive') {
43
+ await interactivePlanning(state);
44
+ }
45
+ else if (action === 'view') {
46
+ const content = await fs.readFile(planPath, 'utf-8');
47
+ console.log(chalk.dim('\n' + '─'.repeat(60) + '\n'));
48
+ console.log(content);
49
+ console.log(chalk.dim('\n' + '─'.repeat(60) + '\n'));
50
+ }
51
+ else {
52
+ console.log(chalk.cyan('\nEdit the plan file and then run:'));
53
+ console.log(chalk.white(' ai-phases plan --from-file\n'));
54
+ }
55
+ }
56
+ else {
57
+ console.log(chalk.white('\nNo plan exists yet. Starting interactive planning...\n'));
58
+ await interactivePlanning(state);
59
+ }
60
+ }
61
+ }
62
+ async function interactivePlanning(state) {
63
+ console.log(chalk.cyan('\nšŸ“‹ Interactive Phase Planning\n'));
64
+ const phases = [];
65
+ let addMore = true;
66
+ let phaseNumber = 1;
67
+ while (addMore) {
68
+ console.log(chalk.yellow(`\n─── Phase ${phaseNumber} ───\n`));
69
+ const phaseAnswers = await inquirer.prompt([
70
+ {
71
+ type: 'input',
72
+ name: 'name',
73
+ message: 'Phase name:',
74
+ default: phaseNumber === 1 ? 'Project Setup' : `Phase ${phaseNumber}`,
75
+ },
76
+ {
77
+ type: 'input',
78
+ name: 'description',
79
+ message: 'Description:',
80
+ },
81
+ {
82
+ type: 'editor',
83
+ name: 'tasks',
84
+ message: 'Tasks (one per line):',
85
+ default: '- Task 1\n- Task 2\n- Task 3',
86
+ },
87
+ {
88
+ type: 'editor',
89
+ name: 'validation',
90
+ message: 'Validation criteria (one per line):',
91
+ default: '- App compiles without errors\n- Basic functionality works',
92
+ },
93
+ {
94
+ type: 'input',
95
+ name: 'context7',
96
+ message: 'Context7 docs to look up (comma-separated):',
97
+ default: '',
98
+ },
99
+ ]);
100
+ // Parse tasks
101
+ const tasks = phaseAnswers.tasks
102
+ .split('\n')
103
+ .filter((line) => line.trim())
104
+ .map((line, index) => ({
105
+ id: `task-${phaseNumber}-${index + 1}`,
106
+ description: line.replace(/^-\s*/, '').trim(),
107
+ status: 'pending',
108
+ }));
109
+ // Parse validation criteria
110
+ const validation = phaseAnswers.validation
111
+ .split('\n')
112
+ .filter((line) => line.trim())
113
+ .map((line) => line.replace(/^-\s*/, '').trim());
114
+ // Parse Context7 queries
115
+ const context7 = phaseAnswers.context7
116
+ .split(',')
117
+ .map((q) => q.trim())
118
+ .filter(Boolean);
119
+ phases.push(createPhaseState(phaseNumber, phaseAnswers.name, phaseAnswers.description, tasks, validation, context7, 3));
120
+ const { continueAdding } = await inquirer.prompt([
121
+ {
122
+ type: 'confirm',
123
+ name: 'continueAdding',
124
+ message: 'Add another phase?',
125
+ default: phaseNumber < 5,
126
+ },
127
+ ]);
128
+ addMore = continueAdding;
129
+ phaseNumber++;
130
+ }
131
+ // Save phases
132
+ state.phases = phases;
133
+ state.total_phases = phases.length;
134
+ state.current_phase = 1;
135
+ state.status = 'in_progress';
136
+ await saveProjectState(state);
137
+ // Generate plan.md
138
+ const planContent = generatePlanMarkdown(phases);
139
+ const planPath = path.join(getProjectPhasesDir(), 'plan.md');
140
+ await fs.writeFile(planPath, planContent);
141
+ // Create phase directories
142
+ for (const phase of phases) {
143
+ const phaseDir = path.join(getProjectPhasesDir(), 'phases', `phase-${phase.phase_number}`);
144
+ await fs.ensureDir(phaseDir);
145
+ await fs.writeJson(path.join(phaseDir, 'state.json'), phase, { spaces: 2 });
146
+ }
147
+ console.log(chalk.green('\nāœ“ Plan created with ' + phases.length + ' phases'));
148
+ console.log(chalk.dim('Saved to: ') + chalk.white(planPath));
149
+ console.log(chalk.cyan('\nRun: ai-phases run --phase 1\n'));
150
+ }
151
+ async function planFromReadme(state) {
152
+ const readmePath = path.join(process.cwd(), 'README.md');
153
+ if (!(await fs.pathExists(readmePath))) {
154
+ console.log(chalk.yellow('No README.md found in project root.'));
155
+ return;
156
+ }
157
+ const readmeContent = await fs.readFile(readmePath, 'utf-8');
158
+ console.log(chalk.cyan('\nšŸ“– Inferring phases from README...\n'));
159
+ console.log(chalk.dim('README content will be used as context for phase generation.'));
160
+ console.log(chalk.yellow('\nUse the refine command for AI-powered phase generation:'));
161
+ console.log(chalk.cyan(' ai-phases refine "' + readmeContent.substring(0, 100).replace(/\n/g, ' ') + '..."\n'));
162
+ }
163
+ function generatePlanMarkdown(phases) {
164
+ let content = '# Phase Plan\n\n';
165
+ content += `Generated: ${new Date().toISOString()}\n\n`;
166
+ content += `Total Phases: ${phases.length}\n\n`;
167
+ content += '---\n\n';
168
+ for (const phase of phases) {
169
+ content += `## Phase ${phase.phase_number}: ${phase.name}\n\n`;
170
+ content += `**Description**: ${phase.description}\n\n`;
171
+ content += `**Model**: ${phase.model === 'planning' ? 'Claude Opus' : 'Gemini Flash'}\n\n`;
172
+ content += '### Tasks\n';
173
+ phase.tasks.forEach((task, i) => {
174
+ content += `${i + 1}. ${task.description}\n`;
175
+ });
176
+ content += '\n';
177
+ content += '### Validation Criteria\n';
178
+ phase.validation_criteria.forEach(criterion => {
179
+ content += `- [ ] ${criterion}\n`;
180
+ });
181
+ content += '\n';
182
+ if (phase.context7_queries && phase.context7_queries.length > 0) {
183
+ content += '### Context7 Queries\n';
184
+ phase.context7_queries.forEach(query => {
185
+ content += `- ${query}\n`;
186
+ });
187
+ content += '\n';
188
+ }
189
+ content += '---\n\n';
190
+ }
191
+ return content;
192
+ }
193
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface RefineOptions {
2
+ skipResearch?: boolean;
3
+ }
4
+ export declare function refineCommand(idea: string, options: RefineOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=refine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/refine.ts"],"names":[],"mappings":"AAyBA,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+MvF"}