nexusforge-cli 1.1.1 → 1.2.1

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/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +183 -17
  3. package/dist/components/App.js.map +1 -1
  4. package/dist/index.js +462 -10
  5. package/dist/index.js.map +1 -1
  6. package/dist/modules/commandEngine.d.ts +70 -0
  7. package/dist/modules/commandEngine.d.ts.map +1 -0
  8. package/dist/modules/commandEngine.js +672 -0
  9. package/dist/modules/commandEngine.js.map +1 -0
  10. package/dist/modules/contextBuilder.d.ts +51 -0
  11. package/dist/modules/contextBuilder.d.ts.map +1 -0
  12. package/dist/modules/contextBuilder.js +725 -0
  13. package/dist/modules/contextBuilder.js.map +1 -0
  14. package/dist/modules/domainDetector.d.ts +64 -0
  15. package/dist/modules/domainDetector.d.ts.map +1 -0
  16. package/dist/modules/domainDetector.js +722 -0
  17. package/dist/modules/domainDetector.js.map +1 -0
  18. package/dist/modules/fileOperations.d.ts +99 -0
  19. package/dist/modules/fileOperations.d.ts.map +1 -0
  20. package/dist/modules/fileOperations.js +543 -0
  21. package/dist/modules/fileOperations.js.map +1 -0
  22. package/dist/modules/forgeEngine.d.ts +153 -0
  23. package/dist/modules/forgeEngine.d.ts.map +1 -0
  24. package/dist/modules/forgeEngine.js +652 -0
  25. package/dist/modules/forgeEngine.js.map +1 -0
  26. package/dist/modules/gitManager.d.ts +151 -0
  27. package/dist/modules/gitManager.d.ts.map +1 -0
  28. package/dist/modules/gitManager.js +539 -0
  29. package/dist/modules/gitManager.js.map +1 -0
  30. package/dist/modules/index.d.ts +25 -0
  31. package/dist/modules/index.d.ts.map +1 -0
  32. package/dist/modules/index.js +25 -0
  33. package/dist/modules/index.js.map +1 -0
  34. package/dist/modules/prdProcessor.d.ts +125 -0
  35. package/dist/modules/prdProcessor.d.ts.map +1 -0
  36. package/dist/modules/prdProcessor.js +466 -0
  37. package/dist/modules/prdProcessor.js.map +1 -0
  38. package/dist/modules/projectScanner.d.ts +105 -0
  39. package/dist/modules/projectScanner.d.ts.map +1 -0
  40. package/dist/modules/projectScanner.js +859 -0
  41. package/dist/modules/projectScanner.js.map +1 -0
  42. package/dist/modules/safetyGuard.d.ts +83 -0
  43. package/dist/modules/safetyGuard.d.ts.map +1 -0
  44. package/dist/modules/safetyGuard.js +492 -0
  45. package/dist/modules/safetyGuard.js.map +1 -0
  46. package/dist/modules/templateManager.d.ts +78 -0
  47. package/dist/modules/templateManager.d.ts.map +1 -0
  48. package/dist/modules/templateManager.js +556 -0
  49. package/dist/modules/templateManager.js.map +1 -0
  50. package/dist/native/index.d.ts +125 -0
  51. package/dist/native/index.d.ts.map +1 -0
  52. package/dist/native/index.js +164 -0
  53. package/dist/native/index.js.map +1 -0
  54. package/dist/services/executor.d.ts +24 -0
  55. package/dist/services/executor.d.ts.map +1 -1
  56. package/dist/services/executor.js +149 -6
  57. package/dist/services/executor.js.map +1 -1
  58. package/dist/services/fileManager.d.ts +134 -0
  59. package/dist/services/fileManager.d.ts.map +1 -0
  60. package/dist/services/fileManager.js +489 -0
  61. package/dist/services/fileManager.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,125 @@
1
+ /**
2
+ * PRD Processor for NexusForge CLI
3
+ * Parses and analyzes Product Requirements Documents
4
+ * Ported from Python nexusforge/modules/project/prd_processor.py
5
+ */
6
+ export declare enum RequirementPriority {
7
+ CRITICAL = "critical",
8
+ HIGH = "high",
9
+ MEDIUM = "medium",
10
+ LOW = "low",
11
+ NICE_TO_HAVE = "nice-to-have"
12
+ }
13
+ export declare enum RequirementCategory {
14
+ FUNCTIONAL = "functional",
15
+ API = "api",
16
+ UI_UX = "ui_ux",
17
+ DATA = "data",
18
+ SECURITY = "security",
19
+ PERFORMANCE = "performance",
20
+ INTEGRATION = "integration",
21
+ DEPLOYMENT = "deployment",
22
+ TESTING = "testing",
23
+ DOCUMENTATION = "documentation"
24
+ }
25
+ export declare enum RequirementStatus {
26
+ PENDING = "pending",
27
+ IN_PROGRESS = "in_progress",
28
+ COMPLETED = "completed",
29
+ BLOCKED = "blocked",
30
+ DEFERRED = "deferred"
31
+ }
32
+ export interface Requirement {
33
+ id: string;
34
+ title: string;
35
+ description: string;
36
+ priority: RequirementPriority;
37
+ category: string;
38
+ acceptanceCriteria: string[];
39
+ dependencies: string[];
40
+ technicalNotes?: string;
41
+ status: RequirementStatus;
42
+ estimatedEffort?: string;
43
+ tags: string[];
44
+ }
45
+ export interface TechStackItem {
46
+ name: string;
47
+ version?: string;
48
+ purpose: string;
49
+ required: boolean;
50
+ alternatives: string[];
51
+ documentationUrl?: string;
52
+ }
53
+ export interface ProjectMetadata {
54
+ title: string;
55
+ description?: string;
56
+ executiveSummary?: string;
57
+ goals: string[];
58
+ targetAudience?: string;
59
+ successMetrics: string[];
60
+ constraints: string[];
61
+ assumptions: string[];
62
+ }
63
+ export interface ImplementationPhase {
64
+ name: string;
65
+ description: string;
66
+ requirements: Requirement[];
67
+ duration: string;
68
+ order: number;
69
+ dependencies: string[];
70
+ }
71
+ export interface PRDStats {
72
+ requirementsExtracted: number;
73
+ techItemsExtracted: number;
74
+ filesIdentified: number;
75
+ processingTime: number;
76
+ }
77
+ export interface ImplementationPlan {
78
+ phases: ImplementationPhase[];
79
+ totalRequirements: number;
80
+ techStack: TechStackItem[];
81
+ estimatedEffort: string;
82
+ projectStructure: string[];
83
+ metadata: ProjectMetadata;
84
+ }
85
+ export interface StructuredPRD {
86
+ project: ProjectMetadata;
87
+ requirements: Requirement[];
88
+ techStack: TechStackItem[];
89
+ projectStructure: string[];
90
+ categories: string[];
91
+ priorities: Record<string, number>;
92
+ statistics: PRDStats;
93
+ }
94
+ export declare class PRDProcessor {
95
+ private requirements;
96
+ private techStack;
97
+ private projectInfo;
98
+ private projectStructure;
99
+ private stats;
100
+ private static readonly PRIORITY_PATTERNS;
101
+ private static readonly CATEGORY_PATTERNS;
102
+ constructor();
103
+ loadPRD(filePath: string): Promise<ProjectMetadata>;
104
+ private parseJsonPRD;
105
+ private parseMarkdownPRD;
106
+ private looksLikeRequirement;
107
+ private detectPriority;
108
+ private detectCategory;
109
+ createImplementationPlan(requirements?: Requirement[]): ImplementationPlan;
110
+ private createPhases;
111
+ private estimateEffort;
112
+ generateStructuredPRD(): StructuredPRD;
113
+ exportToJson(outputPath: string): void;
114
+ getStatistics(): PRDStats & {
115
+ requirementsByPriority: Record<string, number>;
116
+ requirementsByCategory: Record<string, number>;
117
+ };
118
+ getRequirements(): Requirement[];
119
+ getTechStack(): TechStackItem[];
120
+ getProjectInfo(): ProjectMetadata;
121
+ getProjectStructure(): string[];
122
+ }
123
+ export declare function getPRDProcessor(): PRDProcessor;
124
+ export declare function resetPRDProcessor(): void;
125
+ //# sourceMappingURL=prdProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prdProcessor.d.ts","sourceRoot":"","sources":["../../src/modules/prdProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,466 @@
1
+ /**
2
+ * PRD Processor for NexusForge CLI
3
+ * Parses and analyzes Product Requirements Documents
4
+ * Ported from Python nexusforge/modules/project/prd_processor.py
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ // ============================================================================
9
+ // ENUMERATIONS
10
+ // ============================================================================
11
+ export var RequirementPriority;
12
+ (function (RequirementPriority) {
13
+ RequirementPriority["CRITICAL"] = "critical";
14
+ RequirementPriority["HIGH"] = "high";
15
+ RequirementPriority["MEDIUM"] = "medium";
16
+ RequirementPriority["LOW"] = "low";
17
+ RequirementPriority["NICE_TO_HAVE"] = "nice-to-have";
18
+ })(RequirementPriority || (RequirementPriority = {}));
19
+ export var RequirementCategory;
20
+ (function (RequirementCategory) {
21
+ RequirementCategory["FUNCTIONAL"] = "functional";
22
+ RequirementCategory["API"] = "api";
23
+ RequirementCategory["UI_UX"] = "ui_ux";
24
+ RequirementCategory["DATA"] = "data";
25
+ RequirementCategory["SECURITY"] = "security";
26
+ RequirementCategory["PERFORMANCE"] = "performance";
27
+ RequirementCategory["INTEGRATION"] = "integration";
28
+ RequirementCategory["DEPLOYMENT"] = "deployment";
29
+ RequirementCategory["TESTING"] = "testing";
30
+ RequirementCategory["DOCUMENTATION"] = "documentation";
31
+ })(RequirementCategory || (RequirementCategory = {}));
32
+ export var RequirementStatus;
33
+ (function (RequirementStatus) {
34
+ RequirementStatus["PENDING"] = "pending";
35
+ RequirementStatus["IN_PROGRESS"] = "in_progress";
36
+ RequirementStatus["COMPLETED"] = "completed";
37
+ RequirementStatus["BLOCKED"] = "blocked";
38
+ RequirementStatus["DEFERRED"] = "deferred";
39
+ })(RequirementStatus || (RequirementStatus = {}));
40
+ // ============================================================================
41
+ // PRD PROCESSOR CLASS
42
+ // ============================================================================
43
+ export class PRDProcessor {
44
+ requirements = [];
45
+ techStack = [];
46
+ projectInfo;
47
+ projectStructure = [];
48
+ stats;
49
+ // Priority detection patterns
50
+ static PRIORITY_PATTERNS = {
51
+ [RequirementPriority.CRITICAL]: [
52
+ /\bmust\b/i, /\bcritical\b/i, /\bessential\b/i, /\brequired\b/i,
53
+ /\bmandatory\b/i, /\bblocking\b/i,
54
+ ],
55
+ [RequirementPriority.HIGH]: [
56
+ /\bshould\b/i, /\bimportant\b/i, /\bhigh priority\b/i,
57
+ /\bkey feature\b/i,
58
+ ],
59
+ [RequirementPriority.MEDIUM]: [
60
+ /\bmedium\b/i, /\bstandard\b/i, /\btypical\b/i,
61
+ ],
62
+ [RequirementPriority.LOW]: [
63
+ /\bcould\b/i, /\blow priority\b/i, /\bminor\b/i,
64
+ ],
65
+ [RequirementPriority.NICE_TO_HAVE]: [
66
+ /\bnice.?to.?have\b/i, /\boptional\b/i, /\bif time permits\b/i,
67
+ /\bbonus\b/i, /\bextra\b/i,
68
+ ],
69
+ };
70
+ // Category detection patterns
71
+ static CATEGORY_PATTERNS = {
72
+ [RequirementCategory.API]: [
73
+ /\bapi\b/i, /\bendpoint\b/i, /\brest\b/i, /\bgraphql\b/i,
74
+ /\bhttp\b/i, /\brequest\b/i, /\bresponse\b/i,
75
+ ],
76
+ [RequirementCategory.UI_UX]: [
77
+ /\bui\b/i, /\bux\b/i, /\binterface\b/i, /\bbutton\b/i,
78
+ /\bscreen\b/i, /\bpage\b/i, /\bdesign\b/i, /\blayout\b/i,
79
+ ],
80
+ [RequirementCategory.DATA]: [
81
+ /\bdatabase\b/i, /\bstorage\b/i, /\bcache\b/i, /\bdata model\b/i,
82
+ /\bschema\b/i, /\btable\b/i, /\bcollection\b/i,
83
+ ],
84
+ [RequirementCategory.SECURITY]: [
85
+ /\bsecurity\b/i, /\bauth\b/i, /\bencrypt\b/i, /\bpermission\b/i,
86
+ /\baccess control\b/i, /\bsanitiz/i, /\bvalidat/i,
87
+ ],
88
+ [RequirementCategory.PERFORMANCE]: [
89
+ /\bperformance\b/i, /\bspeed\b/i, /\bfast\b/i, /\boptimiz/i,
90
+ /\blatency\b/i, /\bthroughput\b/i, /\bscale\b/i,
91
+ ],
92
+ [RequirementCategory.INTEGRATION]: [
93
+ /\bintegration\b/i, /\bthird.?party\b/i, /\bexternal\b/i,
94
+ /\bwebhook\b/i, /\bsdk\b/i,
95
+ ],
96
+ [RequirementCategory.DEPLOYMENT]: [
97
+ /\bdeployment\b/i, /\bhosting\b/i, /\bserver\b/i, /\bcloud\b/i,
98
+ /\bdocker\b/i, /\bkubernetes\b/i,
99
+ ],
100
+ [RequirementCategory.TESTING]: [
101
+ /\btest\b/i, /\bqa\b/i, /\bvalidation\b/i, /\bverification\b/i,
102
+ ],
103
+ [RequirementCategory.FUNCTIONAL]: [],
104
+ [RequirementCategory.DOCUMENTATION]: [],
105
+ };
106
+ constructor() {
107
+ this.projectInfo = {
108
+ title: 'Untitled Project',
109
+ goals: [],
110
+ successMetrics: [],
111
+ constraints: [],
112
+ assumptions: [],
113
+ };
114
+ this.stats = {
115
+ requirementsExtracted: 0,
116
+ techItemsExtracted: 0,
117
+ filesIdentified: 0,
118
+ processingTime: 0,
119
+ };
120
+ }
121
+ // ========================================================================
122
+ // LOADING AND PARSING
123
+ // ========================================================================
124
+ async loadPRD(filePath) {
125
+ const startTime = Date.now();
126
+ try {
127
+ const content = fs.readFileSync(filePath, 'utf-8');
128
+ const ext = path.extname(filePath).toLowerCase();
129
+ let result;
130
+ if (ext === '.json') {
131
+ result = this.parseJsonPRD(content);
132
+ }
133
+ else if (ext === '.md') {
134
+ result = this.parseMarkdownPRD(content);
135
+ }
136
+ else {
137
+ // Auto-detect format
138
+ if (content.trim().startsWith('{')) {
139
+ result = this.parseJsonPRD(content);
140
+ }
141
+ else {
142
+ result = this.parseMarkdownPRD(content);
143
+ }
144
+ }
145
+ this.stats.processingTime = (Date.now() - startTime) / 1000;
146
+ return result;
147
+ }
148
+ catch (error) {
149
+ throw new Error(`Failed to load PRD: ${error}`);
150
+ }
151
+ }
152
+ parseJsonPRD(content) {
153
+ const data = JSON.parse(content);
154
+ // Extract project info
155
+ if (data.project) {
156
+ this.projectInfo = {
157
+ title: data.project.title || 'Untitled',
158
+ description: data.project.description,
159
+ executiveSummary: data.project.executive_summary,
160
+ goals: data.project.goals || [],
161
+ targetAudience: data.project.target_audience,
162
+ successMetrics: data.project.success_metrics || [],
163
+ constraints: data.project.constraints || [],
164
+ assumptions: data.project.assumptions || [],
165
+ };
166
+ }
167
+ // Extract requirements
168
+ if (data.requirements) {
169
+ for (const reqData of data.requirements) {
170
+ const req = {
171
+ id: reqData.id || `REQ-${String(this.requirements.length + 1).padStart(3, '0')}`,
172
+ title: reqData.title || '',
173
+ description: reqData.description || '',
174
+ priority: reqData.priority || RequirementPriority.MEDIUM,
175
+ category: reqData.category || 'functional',
176
+ acceptanceCriteria: reqData.acceptance_criteria || [],
177
+ dependencies: reqData.dependencies || [],
178
+ technicalNotes: reqData.technical_notes,
179
+ status: RequirementStatus.PENDING,
180
+ estimatedEffort: reqData.estimated_effort,
181
+ tags: reqData.tags || [],
182
+ };
183
+ this.requirements.push(req);
184
+ }
185
+ }
186
+ // Extract tech stack
187
+ if (data.tech_stack) {
188
+ for (const techData of data.tech_stack) {
189
+ const tech = {
190
+ name: techData.name || '',
191
+ version: techData.version,
192
+ purpose: techData.purpose || '',
193
+ required: techData.required ?? true,
194
+ alternatives: techData.alternatives || [],
195
+ documentationUrl: techData.documentation_url,
196
+ };
197
+ this.techStack.push(tech);
198
+ }
199
+ }
200
+ // Extract project structure
201
+ if (data.project_structure) {
202
+ this.projectStructure = data.project_structure;
203
+ }
204
+ this.stats.requirementsExtracted = this.requirements.length;
205
+ this.stats.techItemsExtracted = this.techStack.length;
206
+ this.stats.filesIdentified = this.projectStructure.length;
207
+ return this.projectInfo;
208
+ }
209
+ parseMarkdownPRD(content) {
210
+ const lines = content.split('\n');
211
+ let currentSection = '';
212
+ let reqId = 1;
213
+ for (const line of lines) {
214
+ const trimmed = line.trim();
215
+ if (!trimmed)
216
+ continue;
217
+ // Detect section headers
218
+ if (trimmed.startsWith('#')) {
219
+ currentSection = trimmed.replace(/^#+\s*/, '').toLowerCase();
220
+ // Extract title from first heading
221
+ if (!this.projectInfo.title || this.projectInfo.title === 'Untitled Project') {
222
+ this.projectInfo.title = trimmed.replace(/^#+\s*/, '');
223
+ }
224
+ continue;
225
+ }
226
+ // Extract requirements from bullet points
227
+ if (trimmed.startsWith('-') || trimmed.startsWith('*') || /^\d+\./.test(trimmed)) {
228
+ const reqText = trimmed.replace(/^[-*]\s*|\d+\.\s*/, '');
229
+ // Check if it looks like a requirement
230
+ if (this.looksLikeRequirement(reqText)) {
231
+ const req = {
232
+ id: `REQ-${String(reqId++).padStart(3, '0')}`,
233
+ title: reqText.length > 50 ? reqText.substring(0, 50) + '...' : reqText,
234
+ description: reqText,
235
+ priority: this.detectPriority(reqText),
236
+ category: this.detectCategory(reqText),
237
+ acceptanceCriteria: [],
238
+ dependencies: [],
239
+ status: RequirementStatus.PENDING,
240
+ tags: [],
241
+ };
242
+ this.requirements.push(req);
243
+ }
244
+ // Extract tech stack items
245
+ if (currentSection.includes('tech') || currentSection.includes('stack')) {
246
+ const techMatch = reqText.match(/^([^:]+)(?::(.*))?$/);
247
+ if (techMatch) {
248
+ const name = techMatch[1].trim();
249
+ const purpose = techMatch[2]?.trim() || '';
250
+ // Extract version
251
+ const versionMatch = name.match(/(\d+\.[\d.]+)/);
252
+ const version = versionMatch ? versionMatch[1] : undefined;
253
+ const cleanName = name.replace(/\s*\d+\.[\d.]+\s*/, '').trim();
254
+ this.techStack.push({
255
+ name: cleanName,
256
+ version,
257
+ purpose,
258
+ required: true,
259
+ alternatives: [],
260
+ });
261
+ }
262
+ }
263
+ }
264
+ // Extract goals
265
+ if (currentSection.includes('goal') || currentSection.includes('objective')) {
266
+ if (trimmed.startsWith('-') || trimmed.startsWith('*')) {
267
+ this.projectInfo.goals.push(trimmed.replace(/^[-*]\s*/, ''));
268
+ }
269
+ }
270
+ // Extract project structure (code blocks)
271
+ if (currentSection.includes('structure') || currentSection.includes('directory')) {
272
+ const filePattern = /([a-zA-Z0-9_\-/]+\.[a-zA-Z0-9]+)/g;
273
+ const matches = trimmed.match(filePattern);
274
+ if (matches) {
275
+ this.projectStructure.push(...matches);
276
+ }
277
+ }
278
+ }
279
+ // Add essential files if missing
280
+ const essentialFiles = ['README.md', 'package.json', '.gitignore'];
281
+ for (const essential of essentialFiles) {
282
+ if (!this.projectStructure.includes(essential)) {
283
+ this.projectStructure.push(essential);
284
+ }
285
+ }
286
+ // Deduplicate project structure
287
+ this.projectStructure = [...new Set(this.projectStructure)];
288
+ this.stats.requirementsExtracted = this.requirements.length;
289
+ this.stats.techItemsExtracted = this.techStack.length;
290
+ this.stats.filesIdentified = this.projectStructure.length;
291
+ return this.projectInfo;
292
+ }
293
+ looksLikeRequirement(text) {
294
+ const keywords = ['must', 'should', 'will', 'need', 'shall', 'require'];
295
+ const lowerText = text.toLowerCase();
296
+ return keywords.some(kw => lowerText.includes(kw)) && text.length > 20;
297
+ }
298
+ // ========================================================================
299
+ // DETECTION HELPERS
300
+ // ========================================================================
301
+ detectPriority(text) {
302
+ for (const [priority, patterns] of Object.entries(PRDProcessor.PRIORITY_PATTERNS)) {
303
+ for (const pattern of patterns) {
304
+ if (pattern.test(text)) {
305
+ return priority;
306
+ }
307
+ }
308
+ }
309
+ return RequirementPriority.MEDIUM;
310
+ }
311
+ detectCategory(text) {
312
+ for (const [category, patterns] of Object.entries(PRDProcessor.CATEGORY_PATTERNS)) {
313
+ for (const pattern of patterns) {
314
+ if (pattern.test(text)) {
315
+ return category;
316
+ }
317
+ }
318
+ }
319
+ return RequirementCategory.FUNCTIONAL;
320
+ }
321
+ // ========================================================================
322
+ // IMPLEMENTATION PLANNING
323
+ // ========================================================================
324
+ createImplementationPlan(requirements) {
325
+ const reqs = requirements || this.requirements;
326
+ const plan = {
327
+ phases: [],
328
+ totalRequirements: reqs.length,
329
+ techStack: this.techStack,
330
+ estimatedEffort: this.estimateEffort(reqs),
331
+ projectStructure: this.projectStructure,
332
+ metadata: this.projectInfo,
333
+ };
334
+ plan.phases = this.createPhases(reqs);
335
+ return plan;
336
+ }
337
+ createPhases(requirements) {
338
+ const phases = [];
339
+ // Phase 1: Critical infrastructure
340
+ const critical = requirements.filter(r => r.priority === RequirementPriority.CRITICAL);
341
+ if (critical.length > 0) {
342
+ phases.push({
343
+ name: 'Phase 1: Critical Infrastructure',
344
+ description: 'Core functionality and critical path features',
345
+ requirements: critical,
346
+ duration: `${critical.length * 3} minutes`,
347
+ order: 1,
348
+ dependencies: [],
349
+ });
350
+ }
351
+ // Phase 2: High priority features
352
+ const high = requirements.filter(r => r.priority === RequirementPriority.HIGH);
353
+ if (high.length > 0) {
354
+ phases.push({
355
+ name: 'Phase 2: Core Features',
356
+ description: 'Essential features for MVP',
357
+ requirements: high,
358
+ duration: `${high.length * 2} minutes`,
359
+ order: 2,
360
+ dependencies: [],
361
+ });
362
+ }
363
+ // Phase 3: Medium priority
364
+ const medium = requirements.filter(r => r.priority === RequirementPriority.MEDIUM);
365
+ if (medium.length > 0) {
366
+ phases.push({
367
+ name: 'Phase 3: Enhanced Features',
368
+ description: 'Important features for complete experience',
369
+ requirements: medium,
370
+ duration: `${medium.length * 2} minutes`,
371
+ order: 3,
372
+ dependencies: [],
373
+ });
374
+ }
375
+ // Phase 4: Nice to have
376
+ const low = requirements.filter(r => r.priority === RequirementPriority.LOW ||
377
+ r.priority === RequirementPriority.NICE_TO_HAVE);
378
+ if (low.length > 0) {
379
+ phases.push({
380
+ name: 'Phase 4: Polish & Extras',
381
+ description: 'Nice-to-have features and polish',
382
+ requirements: low,
383
+ duration: `${low.length} minutes`,
384
+ order: 4,
385
+ dependencies: [],
386
+ });
387
+ }
388
+ return phases;
389
+ }
390
+ estimateEffort(requirements) {
391
+ const total = requirements.length;
392
+ if (total <= 10)
393
+ return '15-30 minutes';
394
+ if (total <= 20)
395
+ return '30-45 minutes';
396
+ if (total <= 50)
397
+ return '45-60 minutes';
398
+ return `${total * 2} minutes`;
399
+ }
400
+ // ========================================================================
401
+ // OUTPUT GENERATION
402
+ // ========================================================================
403
+ generateStructuredPRD() {
404
+ const priorities = {};
405
+ for (const priority of Object.values(RequirementPriority)) {
406
+ priorities[priority] = this.requirements.filter(r => r.priority === priority).length;
407
+ }
408
+ return {
409
+ project: this.projectInfo,
410
+ requirements: this.requirements,
411
+ techStack: this.techStack,
412
+ projectStructure: this.projectStructure,
413
+ categories: [...new Set(this.requirements.map(r => r.category))],
414
+ priorities,
415
+ statistics: this.stats,
416
+ };
417
+ }
418
+ exportToJson(outputPath) {
419
+ const structured = this.generateStructuredPRD();
420
+ fs.writeFileSync(outputPath, JSON.stringify(structured, null, 2));
421
+ }
422
+ getStatistics() {
423
+ const requirementsByPriority = {};
424
+ const requirementsByCategory = {};
425
+ for (const priority of Object.values(RequirementPriority)) {
426
+ requirementsByPriority[priority] = this.requirements.filter(r => r.priority === priority).length;
427
+ }
428
+ for (const req of this.requirements) {
429
+ requirementsByCategory[req.category] = (requirementsByCategory[req.category] || 0) + 1;
430
+ }
431
+ return {
432
+ ...this.stats,
433
+ requirementsByPriority,
434
+ requirementsByCategory,
435
+ };
436
+ }
437
+ // ========================================================================
438
+ // GETTERS
439
+ // ========================================================================
440
+ getRequirements() {
441
+ return this.requirements;
442
+ }
443
+ getTechStack() {
444
+ return this.techStack;
445
+ }
446
+ getProjectInfo() {
447
+ return this.projectInfo;
448
+ }
449
+ getProjectStructure() {
450
+ return this.projectStructure;
451
+ }
452
+ }
453
+ // ============================================================================
454
+ // SINGLETON INSTANCE
455
+ // ============================================================================
456
+ let processorInstance = null;
457
+ export function getPRDProcessor() {
458
+ if (!processorInstance) {
459
+ processorInstance = new PRDProcessor();
460
+ }
461
+ return processorInstance;
462
+ }
463
+ export function resetPRDProcessor() {
464
+ processorInstance = null;
465
+ }
466
+ //# sourceMappingURL=prdProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prdProcessor.js","sourceRoot":"","sources":["../../src/modules/prdProcessor.ts"],"names":[],"mappings":"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"}