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,65 @@
1
+ export interface PhaseTask {
2
+ id: string;
3
+ description: string;
4
+ status: 'pending' | 'in_progress' | 'completed' | 'failed';
5
+ notes?: string;
6
+ }
7
+ export interface PhaseState {
8
+ phase_number: number;
9
+ name: string;
10
+ description: string;
11
+ model: 'planning' | 'execution';
12
+ status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'blocked';
13
+ current_attempt: number;
14
+ max_attempts: number;
15
+ tasks: PhaseTask[];
16
+ validation_criteria: string[];
17
+ started_at?: string;
18
+ completed_at?: string;
19
+ context7_queries?: string[];
20
+ }
21
+ export interface AttemptState {
22
+ attempt_number: number;
23
+ started_at: string;
24
+ completed_at?: string;
25
+ status: 'in_progress' | 'completed' | 'failed';
26
+ error_summary?: string;
27
+ suggested_fix?: string;
28
+ files_modified: string[];
29
+ tokens_used?: {
30
+ input: number;
31
+ output: number;
32
+ };
33
+ }
34
+ export interface ProjectState {
35
+ project_name: string;
36
+ created_at: string;
37
+ updated_at: string;
38
+ original_idea: string;
39
+ enhanced_idea?: string;
40
+ total_phases: number;
41
+ current_phase: number;
42
+ status: 'planning' | 'refining' | 'in_progress' | 'completed' | 'blocked';
43
+ phases: PhaseState[];
44
+ research_findings?: string;
45
+ design_tokens?: Record<string, string>;
46
+ git_base_commit?: string;
47
+ }
48
+ export declare function loadProjectState(): Promise<ProjectState | null>;
49
+ export declare function saveProjectState(state: ProjectState): Promise<void>;
50
+ export declare function createInitialState(projectName: string, idea: string): Promise<ProjectState>;
51
+ export declare function loadPhaseState(phaseNumber: number): Promise<PhaseState | null>;
52
+ export declare function updatePhaseState(phaseNumber: number, updates: Partial<PhaseState>): Promise<void>;
53
+ export declare function loadAttemptState(phaseNumber: number, attemptNumber: number): Promise<AttemptState | null>;
54
+ export declare function saveAttemptState(phaseNumber: number, attemptNumber: number, attemptState: AttemptState): Promise<void>;
55
+ export declare function createNewAttempt(phaseNumber: number): Promise<AttemptState>;
56
+ export declare function markAttemptFailed(phaseNumber: number, attemptNumber: number, errorSummary: string, suggestedFix: string): Promise<void>;
57
+ export declare function markAttemptCompleted(phaseNumber: number, attemptNumber: number, filesModified: string[]): Promise<void>;
58
+ export declare function getPhaseDirectory(phaseNumber: number): Promise<string>;
59
+ export declare function getCurrentPhaseInfo(): Promise<{
60
+ phase: PhaseState;
61
+ attempt: AttemptState | null;
62
+ canRetry: boolean;
63
+ } | null>;
64
+ export declare function createPhaseState(phaseNumber: number, name: string, description: string, tasks: PhaseTask[], validationCriteria: string[], context7Queries: string[], maxAttempts?: number): PhaseState;
65
+ //# sourceMappingURL=state-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/core/state-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { getProjectPhasesDir } from './config-manager.js';
4
+ export async function loadProjectState() {
5
+ try {
6
+ const statePath = path.join(getProjectPhasesDir(), 'state.json');
7
+ if (await fs.pathExists(statePath)) {
8
+ return await fs.readJson(statePath);
9
+ }
10
+ }
11
+ catch {
12
+ // State doesn't exist or is invalid
13
+ }
14
+ return null;
15
+ }
16
+ export async function saveProjectState(state) {
17
+ const statePath = path.join(getProjectPhasesDir(), 'state.json');
18
+ state.updated_at = new Date().toISOString();
19
+ await fs.ensureDir(path.dirname(statePath));
20
+ await fs.writeJson(statePath, state, { spaces: 2 });
21
+ }
22
+ export async function createInitialState(projectName, idea) {
23
+ const state = {
24
+ project_name: projectName,
25
+ created_at: new Date().toISOString(),
26
+ updated_at: new Date().toISOString(),
27
+ original_idea: idea,
28
+ total_phases: 0,
29
+ current_phase: 0,
30
+ status: 'planning',
31
+ phases: [],
32
+ };
33
+ await saveProjectState(state);
34
+ return state;
35
+ }
36
+ export async function loadPhaseState(phaseNumber) {
37
+ const state = await loadProjectState();
38
+ if (!state)
39
+ return null;
40
+ return state.phases.find(p => p.phase_number === phaseNumber) || null;
41
+ }
42
+ export async function updatePhaseState(phaseNumber, updates) {
43
+ const state = await loadProjectState();
44
+ if (!state)
45
+ throw new Error('No project state found');
46
+ const phaseIndex = state.phases.findIndex(p => p.phase_number === phaseNumber);
47
+ if (phaseIndex === -1)
48
+ throw new Error(`Phase ${phaseNumber} not found`);
49
+ state.phases[phaseIndex] = { ...state.phases[phaseIndex], ...updates };
50
+ await saveProjectState(state);
51
+ }
52
+ export async function loadAttemptState(phaseNumber, attemptNumber) {
53
+ try {
54
+ const attemptPath = path.join(getProjectPhasesDir(), 'phases', `phase-${phaseNumber}`, `attempt-${attemptNumber}`, 'state.json');
55
+ if (await fs.pathExists(attemptPath)) {
56
+ return await fs.readJson(attemptPath);
57
+ }
58
+ }
59
+ catch {
60
+ // Attempt state doesn't exist
61
+ }
62
+ return null;
63
+ }
64
+ export async function saveAttemptState(phaseNumber, attemptNumber, attemptState) {
65
+ const attemptPath = path.join(getProjectPhasesDir(), 'phases', `phase-${phaseNumber}`, `attempt-${attemptNumber}`, 'state.json');
66
+ await fs.ensureDir(path.dirname(attemptPath));
67
+ await fs.writeJson(attemptPath, attemptState, { spaces: 2 });
68
+ }
69
+ export async function createNewAttempt(phaseNumber) {
70
+ const phase = await loadPhaseState(phaseNumber);
71
+ if (!phase)
72
+ throw new Error(`Phase ${phaseNumber} not found`);
73
+ const attemptNumber = phase.current_attempt + 1;
74
+ if (attemptNumber > phase.max_attempts) {
75
+ throw new Error(`Maximum attempts (${phase.max_attempts}) exceeded for phase ${phaseNumber}`);
76
+ }
77
+ const attemptState = {
78
+ attempt_number: attemptNumber,
79
+ started_at: new Date().toISOString(),
80
+ status: 'in_progress',
81
+ files_modified: [],
82
+ };
83
+ await saveAttemptState(phaseNumber, attemptNumber, attemptState);
84
+ await updatePhaseState(phaseNumber, { current_attempt: attemptNumber, status: 'in_progress' });
85
+ return attemptState;
86
+ }
87
+ export async function markAttemptFailed(phaseNumber, attemptNumber, errorSummary, suggestedFix) {
88
+ const attemptState = await loadAttemptState(phaseNumber, attemptNumber);
89
+ if (!attemptState)
90
+ throw new Error(`Attempt ${attemptNumber} not found for phase ${phaseNumber}`);
91
+ attemptState.status = 'failed';
92
+ attemptState.completed_at = new Date().toISOString();
93
+ attemptState.error_summary = errorSummary;
94
+ attemptState.suggested_fix = suggestedFix;
95
+ await saveAttemptState(phaseNumber, attemptNumber, attemptState);
96
+ // Save failure report
97
+ const failureReportPath = path.join(getProjectPhasesDir(), 'phases', `phase-${phaseNumber}`, `attempt-${attemptNumber}`, 'failure-report.md');
98
+ const failureReport = `# Failure Report - Phase ${phaseNumber}, Attempt ${attemptNumber}
99
+
100
+ ## Date
101
+ ${new Date().toISOString()}
102
+
103
+ ## What Was Attempted
104
+ [Details from the attempt]
105
+
106
+ ## Why It Failed
107
+ ${errorSummary}
108
+
109
+ ## Suggested Fix for Next Attempt
110
+ ${suggestedFix}
111
+
112
+ ## Files Modified During This Attempt
113
+ ${attemptState.files_modified.map(f => `- ${f}`).join('\n') || 'None recorded'}
114
+ `;
115
+ await fs.writeFile(failureReportPath, failureReport);
116
+ // Check if max attempts reached
117
+ const phase = await loadPhaseState(phaseNumber);
118
+ if (phase && phase.current_attempt >= phase.max_attempts) {
119
+ await updatePhaseState(phaseNumber, { status: 'blocked' });
120
+ // Create BLOCKED.md
121
+ const blockedPath = path.join(getProjectPhasesDir(), 'phases', `phase-${phaseNumber}`, 'BLOCKED.md');
122
+ const blockedContent = `# ⛔ Phase ${phaseNumber} BLOCKED
123
+
124
+ This phase has failed after ${phase.max_attempts} attempts.
125
+
126
+ ## Summary of All Attempts
127
+
128
+ ${Array.from({ length: phase.max_attempts }, (_, i) => i + 1)
129
+ .map(n => `### Attempt ${n}\nSee: attempt-${n}/failure-report.md`)
130
+ .join('\n\n')}
131
+
132
+ ## Recommendation
133
+ Manual intervention required. Consider:
134
+ 1. Reviewing the architecture decisions
135
+ 2. Breaking this phase into smaller phases
136
+ 3. Adjusting the requirements
137
+
138
+ ## To Unblock
139
+ Run: \`ai-phases config --unblock ${phaseNumber}\`
140
+ `;
141
+ await fs.writeFile(blockedPath, blockedContent);
142
+ // Update project status
143
+ const state = await loadProjectState();
144
+ if (state) {
145
+ state.status = 'blocked';
146
+ await saveProjectState(state);
147
+ }
148
+ }
149
+ else {
150
+ await updatePhaseState(phaseNumber, { status: 'failed' });
151
+ }
152
+ }
153
+ export async function markAttemptCompleted(phaseNumber, attemptNumber, filesModified) {
154
+ const attemptState = await loadAttemptState(phaseNumber, attemptNumber);
155
+ if (!attemptState)
156
+ throw new Error(`Attempt ${attemptNumber} not found for phase ${phaseNumber}`);
157
+ attemptState.status = 'completed';
158
+ attemptState.completed_at = new Date().toISOString();
159
+ attemptState.files_modified = filesModified;
160
+ await saveAttemptState(phaseNumber, attemptNumber, attemptState);
161
+ await updatePhaseState(phaseNumber, {
162
+ status: 'completed',
163
+ completed_at: new Date().toISOString()
164
+ });
165
+ }
166
+ export async function getPhaseDirectory(phaseNumber) {
167
+ return path.join(getProjectPhasesDir(), 'phases', `phase-${phaseNumber}`);
168
+ }
169
+ export async function getCurrentPhaseInfo() {
170
+ const state = await loadProjectState();
171
+ if (!state || state.phases.length === 0)
172
+ return null;
173
+ const currentPhase = state.phases.find(p => p.phase_number === state.current_phase);
174
+ if (!currentPhase)
175
+ return null;
176
+ const currentAttempt = currentPhase.current_attempt > 0
177
+ ? await loadAttemptState(currentPhase.phase_number, currentPhase.current_attempt)
178
+ : null;
179
+ const canRetry = currentPhase.current_attempt < currentPhase.max_attempts;
180
+ return {
181
+ phase: currentPhase,
182
+ attempt: currentAttempt,
183
+ canRetry,
184
+ };
185
+ }
186
+ export function createPhaseState(phaseNumber, name, description, tasks, validationCriteria, context7Queries, maxAttempts = 3) {
187
+ return {
188
+ phase_number: phaseNumber,
189
+ name,
190
+ description,
191
+ model: phaseNumber === 0 ? 'planning' : 'execution',
192
+ status: 'pending',
193
+ current_attempt: 0,
194
+ max_attempts: maxAttempts,
195
+ tasks,
196
+ validation_criteria: validationCriteria,
197
+ context7_queries: context7Queries,
198
+ };
199
+ }
200
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/core/state-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './core/config-manager.js';
2
+ export * from './core/state-manager.js';
3
+ export * from './core/prompt-builder.js';
4
+ export * from './core/git-integration.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // AI Phase Builder - Core exports
2
+ export * from './core/config-manager.js';
3
+ export * from './core/state-manager.js';
4
+ export * from './core/prompt-builder.js';
5
+ export * from './core/git-integration.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "ai-phase-builder",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered project phase orchestration for Cursor IDE. Transform ideas into structured development phases with intelligent handovers, rollback support, and Context7 integration.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "ai-phases": "dist/cli/index.js"
8
+ },
9
+ "type": "module",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc -w",
13
+ "start": "node dist/cli/index.js",
14
+ "lint": "eslint src --ext .ts",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "ai",
19
+ "cursor",
20
+ "cursor-ide",
21
+ "coding",
22
+ "phases",
23
+ "orchestration",
24
+ "cli",
25
+ "claude",
26
+ "gemini",
27
+ "context7",
28
+ "developer-tools",
29
+ "automation",
30
+ "project-management"
31
+ ],
32
+ "author": "nemtudom001",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/nemtudom001/AutoAIBuilder.git"
37
+ },
38
+ "bugs": {
39
+ "url": "https://github.com/nemtudom001/AutoAIBuilder/issues"
40
+ },
41
+ "homepage": "https://github.com/nemtudom001/AutoAIBuilder#readme",
42
+ "dependencies": {
43
+ "chalk": "^5.3.0",
44
+ "commander": "^12.1.0",
45
+ "fs-extra": "^11.2.0",
46
+ "inquirer": "^9.2.23",
47
+ "ora": "^8.0.1",
48
+ "boxen": "^7.1.1",
49
+ "cli-table3": "^0.6.5"
50
+ },
51
+ "devDependencies": {
52
+ "@types/fs-extra": "^11.0.4",
53
+ "@types/inquirer": "^9.0.7",
54
+ "@types/node": "^20.11.0",
55
+ "typescript": "^5.3.3"
56
+ },
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ },
60
+ "files": [
61
+ "dist",
62
+ "templates"
63
+ ]
64
+ }