gameforge-cli 0.1.0 → 0.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 (88) hide show
  1. package/README.md +117 -44
  2. package/dist/agents/base/BaseAgent.d.ts +31 -0
  3. package/dist/agents/base/BaseAgent.d.ts.map +1 -1
  4. package/dist/agents/base/BaseAgent.js +57 -0
  5. package/dist/agents/base/BaseAgent.js.map +1 -1
  6. package/dist/agents/core/Architect.d.ts +21 -5
  7. package/dist/agents/core/Architect.d.ts.map +1 -1
  8. package/dist/agents/core/Architect.js +413 -150
  9. package/dist/agents/core/Architect.js.map +1 -1
  10. package/dist/agents/core/Chaos.d.ts +4 -0
  11. package/dist/agents/core/Chaos.d.ts.map +1 -1
  12. package/dist/agents/core/Chaos.js +46 -11
  13. package/dist/agents/core/Chaos.js.map +1 -1
  14. package/dist/agents/core/Consistency.d.ts +1 -0
  15. package/dist/agents/core/Consistency.d.ts.map +1 -1
  16. package/dist/agents/core/Consistency.js +86 -11
  17. package/dist/agents/core/Consistency.js.map +1 -1
  18. package/dist/agents/core/DocumentUpdater.d.ts +13 -0
  19. package/dist/agents/core/DocumentUpdater.d.ts.map +1 -0
  20. package/dist/agents/core/DocumentUpdater.js +165 -0
  21. package/dist/agents/core/DocumentUpdater.js.map +1 -0
  22. package/dist/agents/core/Modifier.d.ts +13 -0
  23. package/dist/agents/core/Modifier.d.ts.map +1 -0
  24. package/dist/agents/core/Modifier.js +141 -0
  25. package/dist/agents/core/Modifier.js.map +1 -0
  26. package/dist/agents/core/Remediation.d.ts +3 -1
  27. package/dist/agents/core/Remediation.d.ts.map +1 -1
  28. package/dist/agents/core/Remediation.js +63 -3
  29. package/dist/agents/core/Remediation.js.map +1 -1
  30. package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -1
  31. package/dist/agents/specialists/CreativeSpecialist.js +162 -25
  32. package/dist/agents/specialists/CreativeSpecialist.js.map +1 -1
  33. package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -1
  34. package/dist/agents/specialists/EntitySpecialist.js +79 -25
  35. package/dist/agents/specialists/EntitySpecialist.js.map +1 -1
  36. package/dist/agents/specialists/FeatureSpecialist.d.ts +4 -0
  37. package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -1
  38. package/dist/agents/specialists/FeatureSpecialist.js +114 -39
  39. package/dist/agents/specialists/FeatureSpecialist.js.map +1 -1
  40. package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -1
  41. package/dist/agents/specialists/TechSpecialist.js +169 -32
  42. package/dist/agents/specialists/TechSpecialist.js.map +1 -1
  43. package/dist/config/schema.d.ts +1319 -709
  44. package/dist/config/schema.d.ts.map +1 -1
  45. package/dist/config/schema.js +142 -52
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/config/templates.d.ts.map +1 -1
  48. package/dist/config/templates.js +6 -66
  49. package/dist/config/templates.js.map +1 -1
  50. package/dist/core/Orchestrator.d.ts +17 -3
  51. package/dist/core/Orchestrator.d.ts.map +1 -1
  52. package/dist/core/Orchestrator.js +46 -16
  53. package/dist/core/Orchestrator.js.map +1 -1
  54. package/dist/index.js +544 -226
  55. package/dist/index.js.map +1 -1
  56. package/dist/types/issueReview.d.ts +19 -0
  57. package/dist/types/issueReview.d.ts.map +1 -0
  58. package/dist/types/issueReview.js +3 -0
  59. package/dist/types/issueReview.js.map +1 -0
  60. package/dist/utils/costTracker.d.ts +28 -0
  61. package/dist/utils/costTracker.d.ts.map +1 -1
  62. package/dist/utils/costTracker.js +71 -1
  63. package/dist/utils/costTracker.js.map +1 -1
  64. package/dist/utils/disambiguationHelper.d.ts +54 -0
  65. package/dist/utils/disambiguationHelper.d.ts.map +1 -0
  66. package/dist/utils/disambiguationHelper.js +262 -0
  67. package/dist/utils/disambiguationHelper.js.map +1 -0
  68. package/dist/utils/fileManager.d.ts +7 -0
  69. package/dist/utils/fileManager.d.ts.map +1 -1
  70. package/dist/utils/fileManager.js +47 -0
  71. package/dist/utils/fileManager.js.map +1 -1
  72. package/dist/utils/issueReviewer.d.ts +10 -0
  73. package/dist/utils/issueReviewer.d.ts.map +1 -0
  74. package/dist/utils/issueReviewer.js +206 -0
  75. package/dist/utils/issueReviewer.js.map +1 -0
  76. package/dist/utils/issueSelector.d.ts +26 -0
  77. package/dist/utils/issueSelector.d.ts.map +1 -0
  78. package/dist/utils/issueSelector.js +132 -0
  79. package/dist/utils/issueSelector.js.map +1 -0
  80. package/dist/utils/pdfGenerator.d.ts +12 -0
  81. package/dist/utils/pdfGenerator.d.ts.map +1 -0
  82. package/dist/utils/pdfGenerator.js +341 -0
  83. package/dist/utils/pdfGenerator.js.map +1 -0
  84. package/package.json +20 -15
  85. package/dist/core/CheckpointManager.d.ts +0 -16
  86. package/dist/core/CheckpointManager.d.ts.map +0 -1
  87. package/dist/core/CheckpointManager.js +0 -52
  88. package/dist/core/CheckpointManager.js.map +0 -1
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DisambiguationHelper = void 0;
7
+ const enquirer_1 = __importDefault(require("enquirer"));
8
+ const picocolors_1 = __importDefault(require("picocolors"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const child_process_1 = require("child_process");
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const os_1 = __importDefault(require("os"));
14
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
15
+ /**
16
+ * DisambiguationHelper provides a reusable mechanism for agents to ask
17
+ * clarifying questions when they encounter ambiguity.
18
+ *
19
+ * Features:
20
+ * - Generates 2 AI-powered suggestions based on context
21
+ * - Offers "AI Decide" option with reasoning
22
+ * - Offers "Custom Answer" via text editor
23
+ * - Returns standardized result
24
+ */
25
+ class DisambiguationHelper {
26
+ client;
27
+ constructor(apiKey) {
28
+ this.client = new sdk_1.default({ apiKey });
29
+ }
30
+ /**
31
+ * Ask the user a clarifying question with AI-generated options
32
+ * @param question The disambiguation question configuration
33
+ * @returns The user's answer and whether it was AI-generated
34
+ */
35
+ async ask(question) {
36
+ console.log(picocolors_1.default.cyan(`\n❓ ${question.question}\n`));
37
+ // Generate AI suggestions with a spinner
38
+ const spinner = (0, ora_1.default)('Generating suggestions...').start();
39
+ const suggestions = await this.generateSuggestions(question);
40
+ spinner.stop();
41
+ // Present choices to user
42
+ const choices = [
43
+ ...suggestions,
44
+ '✨ AI Decide (Smart Default)',
45
+ '✏️ Custom Answer'
46
+ ];
47
+ const response = await enquirer_1.default.prompt({
48
+ type: 'select',
49
+ name: 'choice',
50
+ message: 'Select an option:',
51
+ choices
52
+ });
53
+ // Handle "AI Decide"
54
+ if (response.choice === '✨ AI Decide (Smart Default)') {
55
+ const decisionSpinner = (0, ora_1.default)('AI is deciding...').start();
56
+ const aiDecision = await this.generateAIDecision(question);
57
+ decisionSpinner.stop();
58
+ console.log(picocolors_1.default.yellow(`\n🤖 AI Suggests: ${aiDecision.answer}`));
59
+ console.log(picocolors_1.default.dim(` Reasoning: ${aiDecision.reasoning}\n`));
60
+ const confirm = await enquirer_1.default.prompt({
61
+ type: 'confirm',
62
+ name: 'accept',
63
+ message: 'Accept this suggestion?',
64
+ initial: true
65
+ });
66
+ if (confirm.accept) {
67
+ return { answer: aiDecision.answer, wasAIGenerated: true };
68
+ }
69
+ else {
70
+ // Re-ask the question
71
+ return this.ask(question);
72
+ }
73
+ }
74
+ // Handle "Custom Answer"
75
+ if (response.choice === '✏️ Custom Answer') {
76
+ const answer = await this.openEditor(question.question);
77
+ return { answer, wasAIGenerated: false };
78
+ }
79
+ // Regular choice from suggestions
80
+ return { answer: response.choice, wasAIGenerated: false };
81
+ }
82
+ /**
83
+ * Generate 2 AI-powered suggestions based on the question and context
84
+ */
85
+ async generateSuggestions(question) {
86
+ const prompt = `Given this game design context:
87
+ ${question.context}
88
+
89
+ Question being asked to the user: ${question.question}
90
+
91
+ Your task: Provide 2 possible ANSWERS to the question above.
92
+ Each answer should be:
93
+ 1. A direct response to the specific question being asked
94
+ 2. Brief (1-2 sentences or a short phrase)
95
+ 3. Practical and consistent with the game context
96
+ 4. Different from each other (provide variety)
97
+
98
+ IMPORTANT: Your suggestions must directly answer the question. For example:
99
+ - If the question asks "Who is the target audience?", provide audience descriptions like "Casual mobile gamers aged 25-40" or "Hardcore strategy fans"
100
+ - If the question asks "What is the art style?", provide art style descriptions like "Stylized low-poly 3D" or "Hand-drawn 2D animation"
101
+ - Do NOT provide game feature suggestions unless the question specifically asks about features
102
+
103
+ Respond in JSON format:
104
+ {
105
+ "suggestions": ["answer 1", "answer 2"]
106
+ }`;
107
+ try {
108
+ const response = await this.client.messages.create({
109
+ model: 'claude-haiku-4-5-20251001', // Use cheaper model for quick suggestions
110
+ max_tokens: 1024,
111
+ temperature: 0.8,
112
+ messages: [{ role: 'user', content: prompt }]
113
+ });
114
+ const content = response.content[0].type === 'text' ? response.content[0].text : '';
115
+ // Extract JSON from markdown code blocks if present
116
+ const jsonMatch = content.match(/```(?:json)?\s*([\s\S]*?)```/);
117
+ const jsonStr = jsonMatch ? jsonMatch[1].trim() : content;
118
+ const parsed = JSON.parse(jsonStr);
119
+ return parsed.suggestions || ['Option 1', 'Option 2'];
120
+ }
121
+ catch (error) {
122
+ console.warn(picocolors_1.default.yellow('Could not generate AI suggestions, using defaults'));
123
+ if (error instanceof Error) {
124
+ console.warn(picocolors_1.default.yellow(`AI suggestion error: ${error.message}`));
125
+ }
126
+ return ['Standard approach', 'Alternative approach'];
127
+ }
128
+ }
129
+ /**
130
+ * Generate a smart default decision with reasoning
131
+ */
132
+ async generateAIDecision(question) {
133
+ const prompt = `Given this game design context:
134
+ ${question.context}
135
+
136
+ Question: ${question.question}
137
+
138
+ Provide a smart default answer that:
139
+ 1. Fits the established design and genre
140
+ 2. Is technically feasible
141
+ 3. Maintains reasonable scope
142
+ 4. Is internally consistent
143
+
144
+ Respond in JSON format:
145
+ {
146
+ "answer": "your suggested answer (be specific and concrete)",
147
+ "reasoning": "brief explanation (1-2 sentences)"
148
+ }`;
149
+ try {
150
+ const response = await this.client.messages.create({
151
+ model: 'claude-sonnet-4-5-20250929', // Use smarter model for decisions
152
+ max_tokens: 1024,
153
+ temperature: 0.7,
154
+ messages: [{ role: 'user', content: prompt }]
155
+ });
156
+ const content = response.content[0].type === 'text' ? response.content[0].text : '';
157
+ // Extract JSON from markdown code blocks if present
158
+ const jsonMatch = content.match(/```(?:json)?\s*([\s\S]*?)```/);
159
+ const jsonStr = jsonMatch ? jsonMatch[1].trim() : content;
160
+ const parsed = JSON.parse(jsonStr);
161
+ return {
162
+ answer: parsed.answer || 'Standard approach',
163
+ reasoning: parsed.reasoning || 'Based on genre conventions'
164
+ };
165
+ }
166
+ catch (error) {
167
+ console.warn(picocolors_1.default.yellow('Could not generate AI decision, using default'));
168
+ if (error instanceof Error) {
169
+ console.warn(picocolors_1.default.yellow(`AI decision error: ${error.message}`));
170
+ }
171
+ return {
172
+ answer: 'Standard approach',
173
+ reasoning: 'Default fallback due to error'
174
+ };
175
+ }
176
+ }
177
+ /**
178
+ * Open a text editor for the user to write a custom answer
179
+ */
180
+ async openEditor(question) {
181
+ const tmpDir = os_1.default.tmpdir();
182
+ const tmpFile = path_1.default.join(tmpDir, `gameforge-disambiguation-${Date.now()}.txt`);
183
+ const initialContent = `# ${question}\n# Write your answer below, then save and close the editor\n\n`;
184
+ await fs_extra_1.default.writeFile(tmpFile, initialContent, 'utf-8');
185
+ const editor = process.env.VISUAL || process.env.EDITOR || 'vim';
186
+ // Validate editor path to prevent command injection
187
+ const editorPath = editor.split(' ')[0]; // Get just the command, not arguments
188
+ if (/[;&|`$(){}[\]<>]/.test(editorPath)) {
189
+ console.error(picocolors_1.default.red('Error: Invalid editor path detected'));
190
+ await fs_extra_1.default.remove(tmpFile);
191
+ throw new Error('Invalid editor path - potential security risk');
192
+ }
193
+ console.log(picocolors_1.default.dim(`\nOpening ${editor}... (save and close when done)`));
194
+ try {
195
+ (0, child_process_1.execSync)(`${editor} "${tmpFile}"`, { stdio: 'inherit' });
196
+ let content = await fs_extra_1.default.readFile(tmpFile, 'utf-8');
197
+ // Remove comment lines (lines starting with #)
198
+ content = content
199
+ .split('\n')
200
+ .filter(line => !line.trim().startsWith('#'))
201
+ .join('\n')
202
+ .trim();
203
+ await fs_extra_1.default.remove(tmpFile);
204
+ if (!content) {
205
+ console.log(picocolors_1.default.yellow('No content entered. Please try again.'));
206
+ // Recursive call will create its own temp file
207
+ return this.openEditor(question);
208
+ }
209
+ return content;
210
+ }
211
+ catch (error) {
212
+ console.error(picocolors_1.default.red('Error opening editor:'), error);
213
+ // Ensure cleanup even on error
214
+ try {
215
+ await fs_extra_1.default.remove(tmpFile);
216
+ }
217
+ catch (cleanupError) {
218
+ // Ignore cleanup errors
219
+ }
220
+ throw error;
221
+ }
222
+ }
223
+ /**
224
+ * Helper to format game context from a GameBible for disambiguation
225
+ */
226
+ static formatGameContext(bible) {
227
+ const parts = [];
228
+ if (bible.meta) {
229
+ parts.push(`Title: ${bible.meta.title}`);
230
+ parts.push(`Genre: ${bible.meta.genre?.join(', ') || 'N/A'}`);
231
+ parts.push(`Concept: ${bible.meta.conceptStatement || 'N/A'}`);
232
+ parts.push(`Platform: ${bible.meta.targetPlatform?.join(', ') || 'N/A'}`);
233
+ parts.push(`Scope: ${bible.meta.estimatedScope || 'N/A'}`);
234
+ }
235
+ if (Array.isArray(bible.features) && bible.features.length > 0) {
236
+ parts.push(`\nCore Features (${bible.features.length}):`);
237
+ bible.features.slice(0, 5).forEach((f) => {
238
+ parts.push(` - ${f.name}: ${f.intent || 'N/A'}`);
239
+ });
240
+ if (bible.features.length > 5) {
241
+ parts.push(` ... and ${bible.features.length - 5} more`);
242
+ }
243
+ }
244
+ if (Array.isArray(bible.gameObjects) && bible.gameObjects.length > 0) {
245
+ parts.push(`\nKey Entities: ${bible.gameObjects.slice(0, 5).map((e) => e.name).join(', ')}`);
246
+ if (bible.gameObjects.length > 5) {
247
+ parts.push(`... and ${bible.gameObjects.length - 5} more`);
248
+ }
249
+ }
250
+ return parts.join('\n');
251
+ }
252
+ /**
253
+ * Helper to format transcript context for disambiguation
254
+ */
255
+ static formatTranscriptContext(transcript) {
256
+ return transcript
257
+ .map(t => `Q: ${t.question}\nA: ${t.answer}`)
258
+ .join('\n\n');
259
+ }
260
+ }
261
+ exports.DisambiguationHelper = DisambiguationHelper;
262
+ //# sourceMappingURL=disambiguationHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disambiguationHelper.js","sourceRoot":"","sources":["../../src/utils/disambiguationHelper.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,13 @@ export declare class FileManager {
8
8
  saveGameBible(projectDir: string, bible: GameBible): Promise<void>;
9
9
  saveMarkdown(projectDir: string, filename: string, content: string): Promise<void>;
10
10
  saveGapAnalysis(projectDir: string, chaosIssues: ChaosIssue[], consistencyIssues: ConsistencyIssue[]): Promise<void>;
11
+ readGDD(projectDir: string): Promise<string | null>;
12
+ saveUpdatedGDD(projectDir: string, content: string): Promise<void>;
13
+ /**
14
+ * Update the gap analysis section in an existing GDD document
15
+ * Replaces the existing gap analysis or appends if not found
16
+ */
17
+ updateGapAnalysisInDocument(document: string, chaosIssues: ChaosIssue[], consistencyIssues: ConsistencyIssue[], sessionId: string): string;
11
18
  saveCoverPage(projectDir: string, bible: GameBible): Promise<void>;
12
19
  saveCombinedGDD(projectDir: string, bible: GameBible, markdownSections: Map<string, string>, chaosIssues: ChaosIssue[], consistencyIssues: ConsistencyIssue[]): Promise<void>;
13
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fileManager.d.ts","sourceRoot":"","sources":["../../src/utils/fileManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAA4B;IAI7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlF,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,EACzB,iBAAiB,EAAE,gBAAgB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC;IAkBV,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlE,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAW,EAAE,UAAU,EAAE,EACzB,iBAAiB,EAAE,gBAAgB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC;CAwFjB"}
1
+ {"version":3,"file":"fileManager.d.ts","sourceRoot":"","sources":["../../src/utils/fileManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAA4B;IAI7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlF,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,UAAU,EAAE,EACzB,iBAAiB,EAAE,gBAAgB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC;IAkBV,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQnD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE;;;OAGG;IACH,2BAA2B,CACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,UAAU,EAAE,EACzB,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,SAAS,EAAE,MAAM,GAChB,MAAM;IA2CH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlE,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAW,EAAE,UAAU,EAAE,EACzB,iBAAiB,EAAE,gBAAgB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC;CAyFjB"}
@@ -32,6 +32,53 @@ class FileManager {
32
32
  : 'No critical issues found.'}`;
33
33
  await this.saveMarkdown(projectDir, '99_Gap_Analysis.md', content);
34
34
  }
35
+ async readGDD(projectDir) {
36
+ const filePath = path_1.default.join(projectDir, 'Game_Design_Document.md');
37
+ if (await fs_extra_1.default.pathExists(filePath)) {
38
+ return fs_extra_1.default.readFile(filePath, 'utf-8');
39
+ }
40
+ return null;
41
+ }
42
+ async saveUpdatedGDD(projectDir, content) {
43
+ await this.saveMarkdown(projectDir, 'Game_Design_Document.md', content);
44
+ }
45
+ /**
46
+ * Update the gap analysis section in an existing GDD document
47
+ * Replaces the existing gap analysis or appends if not found
48
+ */
49
+ updateGapAnalysisInDocument(document, chaosIssues, consistencyIssues, sessionId) {
50
+ // Build the new gap analysis section
51
+ const gapContent = `# Gap Analysis & Validation
52
+
53
+ ## Consistency Issues
54
+
55
+ ${consistencyIssues.length === 0
56
+ ? '*No consistency issues found.*'
57
+ : consistencyIssues.map((issue, idx) => `### ${idx + 1}. ${issue.severity}: ${issue.message}\n\n**Location**: ${issue.location}\n\n${issue.suggestion ? `**Suggestion**: ${issue.suggestion}` : ''}`).join('\n\n')}
58
+
59
+ ## Critical Design Issues
60
+
61
+ ${chaosIssues.length === 0
62
+ ? '*No critical design issues found.*'
63
+ : chaosIssues.map((issue, idx) => `### ${idx + 1}. [${issue.severity}] ${issue.category}\n\n**Issue**: ${issue.description}\n\n**Location**: ${issue.location}\n\n**Recommendation**: ${issue.recommendation}`).join('\n\n')}
64
+
65
+ ---
66
+
67
+ *Game Design Document Generated with GameForge CLI*
68
+ *Session ID: ${sessionId}*
69
+ `;
70
+ // Try to find and replace existing gap analysis section
71
+ // Match patterns like "# N. Gap Analysis" or "# Gap Analysis"
72
+ const gapAnalysisPattern = /^#\s*(\d+\.\s*)?Gap Analysis.*$/m;
73
+ const match = document.match(gapAnalysisPattern);
74
+ if (match && match.index !== undefined) {
75
+ // Found existing gap analysis - replace everything from there to end
76
+ const beforeGap = document.substring(0, match.index).trimEnd();
77
+ return `${beforeGap}\n\n${gapContent}`;
78
+ }
79
+ // No existing gap analysis found - append to end
80
+ return `${document.trimEnd()}\n\n---\n\n${gapContent}`;
81
+ }
35
82
  async saveCoverPage(projectDir, bible) {
36
83
  const content = `# ${bible.meta.title}
37
84
 
@@ -1 +1 @@
1
- {"version":3,"file":"fileManager.js","sourceRoot":"","sources":["../../src/utils/fileManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileManager.js","sourceRoot":"","sources":["../../src/utils/fileManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ConsistencyIssue } from '../agents/core/Consistency';
2
+ import { ChaosIssue } from '../agents/core/Chaos';
3
+ import { ReviewedIssuesCollection, IssueWithNotes } from '../types/issueReview';
4
+ export declare function reviewIssuesOneByOne(consistencyIssues: ConsistencyIssue[], chaosIssues: ChaosIssue[]): Promise<ReviewedIssuesCollection>;
5
+ export declare function convertToIssuesWithNotes(reviewed: ReviewedIssuesCollection): IssueWithNotes[];
6
+ export declare function filterIssuesForGapAnalysis(originalConsistencyIssues: ConsistencyIssue[], originalChaosIssues: ChaosIssue[], reviewed: ReviewedIssuesCollection, unfixableIssueDescriptions: string[]): {
7
+ consistencyIssues: ConsistencyIssue[];
8
+ chaosIssues: ChaosIssue[];
9
+ };
10
+ //# sourceMappingURL=issueReviewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueReviewer.d.ts","sourceRoot":"","sources":["../../src/utils/issueReviewer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAGL,wBAAwB,EACxB,cAAc,EACf,MAAM,sBAAsB,CAAC;AA0H9B,wBAAsB,oBAAoB,CACxC,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,WAAW,EAAE,UAAU,EAAE,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAiDnC;AAGD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,cAAc,EAAE,CAc7F;AAGD,wBAAgB,0BAA0B,CACxC,yBAAyB,EAAE,gBAAgB,EAAE,EAC7C,mBAAmB,EAAE,UAAU,EAAE,EACjC,QAAQ,EAAE,wBAAwB,EAClC,0BAA0B,EAAE,MAAM,EAAE,GACnC;IAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CA2DtE"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.reviewIssuesOneByOne = reviewIssuesOneByOne;
7
+ exports.convertToIssuesWithNotes = convertToIssuesWithNotes;
8
+ exports.filterIssuesForGapAnalysis = filterIssuesForGapAnalysis;
9
+ const picocolors_1 = __importDefault(require("picocolors"));
10
+ const enquirer_1 = __importDefault(require("enquirer"));
11
+ // Type guard for ConsistencyIssue
12
+ function isConsistencyIssue(issue) {
13
+ return 'message' in issue && 'suggestion' in issue;
14
+ }
15
+ // Get color based on severity
16
+ function getSeverityColor(severity) {
17
+ const upperSeverity = severity.toUpperCase();
18
+ if (upperSeverity === 'ERROR' || upperSeverity === 'CRITICAL') {
19
+ return picocolors_1.default.red;
20
+ }
21
+ else if (upperSeverity === 'WARNING' || upperSeverity === 'MAJOR') {
22
+ return picocolors_1.default.yellow;
23
+ }
24
+ return picocolors_1.default.dim;
25
+ }
26
+ // Display full details for a single issue
27
+ function displayIssueDetails(issue, issueType, currentIndex, totalCount) {
28
+ const separator = '═'.repeat(65);
29
+ console.log(picocolors_1.default.cyan(`\n${separator}`));
30
+ console.log(picocolors_1.default.cyan(`Issue ${currentIndex + 1} of ${totalCount}`));
31
+ console.log(picocolors_1.default.cyan(separator));
32
+ if (isConsistencyIssue(issue)) {
33
+ const colorFn = getSeverityColor(issue.severity);
34
+ console.log(`\n${picocolors_1.default.bold('Severity:')} ${colorFn(issue.severity)}`);
35
+ console.log(`${picocolors_1.default.bold('Type:')} Consistency Issue`);
36
+ console.log(`${picocolors_1.default.bold('Message:')} ${issue.message}`);
37
+ console.log(`${picocolors_1.default.bold('Location:')} ${picocolors_1.default.dim(issue.location)}`);
38
+ if (issue.suggestion) {
39
+ console.log(`${picocolors_1.default.bold('Suggestion:')} ${picocolors_1.default.green(issue.suggestion)}`);
40
+ }
41
+ }
42
+ else {
43
+ const colorFn = getSeverityColor(issue.severity);
44
+ console.log(`\n${picocolors_1.default.bold('Severity:')} ${colorFn(issue.severity)}`);
45
+ console.log(`${picocolors_1.default.bold('Type:')} ${issue.category} Issue`);
46
+ console.log(`${picocolors_1.default.bold('Description:')} ${issue.description}`);
47
+ console.log(`${picocolors_1.default.bold('Location:')} ${picocolors_1.default.dim(issue.location)}`);
48
+ console.log(`${picocolors_1.default.bold('Recommendation:')} ${picocolors_1.default.green(issue.recommendation)}`);
49
+ }
50
+ console.log('');
51
+ }
52
+ // Prompt user for their decision on an issue
53
+ async function promptIssueDecision() {
54
+ const response = await enquirer_1.default.prompt({
55
+ type: 'select',
56
+ name: 'action',
57
+ message: 'What would you like to do?',
58
+ choices: [
59
+ { name: 'fix', message: 'A) Have AI fix it' },
60
+ { name: 'ignore', message: 'B) Ignore this issue' },
61
+ { name: 'custom', message: 'C) Other (provide custom instructions)' }
62
+ ]
63
+ });
64
+ if (response.action === 'custom') {
65
+ const customResponse = await enquirer_1.default.prompt({
66
+ type: 'input',
67
+ name: 'notes',
68
+ message: 'Enter custom instructions for the AI:'
69
+ });
70
+ return {
71
+ decision: 'custom',
72
+ customNotes: customResponse.notes.trim() || undefined
73
+ };
74
+ }
75
+ return { decision: response.action };
76
+ }
77
+ // Sort issues by severity (critical/error first)
78
+ function sortIssuesBySeverity(consistencyIssues, chaosIssues) {
79
+ const allIssues = [];
80
+ // Add consistency issues
81
+ consistencyIssues.forEach((issue) => {
82
+ allIssues.push({ issue, type: 'consistency' });
83
+ });
84
+ // Add chaos issues
85
+ chaosIssues.forEach((issue) => {
86
+ allIssues.push({ issue, type: 'chaos' });
87
+ });
88
+ // Sort by severity priority
89
+ const severityOrder = {
90
+ Critical: 1,
91
+ Error: 1,
92
+ Major: 2,
93
+ Warning: 2,
94
+ Minor: 3,
95
+ Info: 3
96
+ };
97
+ allIssues.sort((a, b) => {
98
+ const aSeverity = isConsistencyIssue(a.issue) ? a.issue.severity : a.issue.severity;
99
+ const bSeverity = isConsistencyIssue(b.issue) ? b.issue.severity : b.issue.severity;
100
+ return (severityOrder[aSeverity] || 4) - (severityOrder[bSeverity] || 4);
101
+ });
102
+ return allIssues;
103
+ }
104
+ // Main function: review all issues one by one
105
+ async function reviewIssuesOneByOne(consistencyIssues, chaosIssues) {
106
+ const result = {
107
+ toFix: [],
108
+ ignored: []
109
+ };
110
+ const totalIssues = consistencyIssues.length + chaosIssues.length;
111
+ if (totalIssues === 0) {
112
+ return result;
113
+ }
114
+ // Sort issues by severity (critical first)
115
+ const sortedIssues = sortIssuesBySeverity(consistencyIssues, chaosIssues);
116
+ console.log(picocolors_1.default.yellow(`\nReviewing ${totalIssues} issue${totalIssues > 1 ? 's' : ''}...\n`));
117
+ for (let i = 0; i < sortedIssues.length; i++) {
118
+ const { issue, type } = sortedIssues[i];
119
+ // Display issue details
120
+ displayIssueDetails(issue, type, i, sortedIssues.length);
121
+ // Get user decision
122
+ const { decision, customNotes } = await promptIssueDecision();
123
+ const reviewResult = {
124
+ issue,
125
+ issueType: type,
126
+ decision,
127
+ customNotes
128
+ };
129
+ if (decision === 'fix' || decision === 'custom') {
130
+ result.toFix.push(reviewResult);
131
+ }
132
+ else {
133
+ result.ignored.push(reviewResult);
134
+ }
135
+ }
136
+ // Summary
137
+ console.log(picocolors_1.default.cyan('\n' + '═'.repeat(65)));
138
+ console.log(picocolors_1.default.cyan('Review Summary'));
139
+ console.log(picocolors_1.default.cyan('═'.repeat(65)));
140
+ console.log(`${picocolors_1.default.green('To fix:')} ${result.toFix.length} issue${result.toFix.length !== 1 ? 's' : ''}`);
141
+ console.log(`${picocolors_1.default.dim('Ignored:')} ${result.ignored.length} issue${result.ignored.length !== 1 ? 's' : ''}`);
142
+ console.log('');
143
+ return result;
144
+ }
145
+ // Convert reviewed issues to the format Remediation expects
146
+ function convertToIssuesWithNotes(reviewed) {
147
+ return reviewed.toFix.map((result) => {
148
+ const issueWithNotes = {
149
+ customNotes: result.customNotes
150
+ };
151
+ if (result.issueType === 'consistency') {
152
+ issueWithNotes.consistencyIssue = result.issue;
153
+ }
154
+ else {
155
+ issueWithNotes.chaosIssue = result.issue;
156
+ }
157
+ return issueWithNotes;
158
+ });
159
+ }
160
+ // Filter issues for gap analysis: only show issues that were marked to fix but couldn't be fixed
161
+ function filterIssuesForGapAnalysis(originalConsistencyIssues, originalChaosIssues, reviewed, unfixableIssueDescriptions) {
162
+ // Create sets for quick lookup
163
+ const ignoredIssues = new Set(reviewed.ignored.map(r => isConsistencyIssue(r.issue)
164
+ ? `${r.issue.severity}: ${r.issue.message}`
165
+ : `[${r.issue.severity}] ${r.issue.description}`));
166
+ // Helper to normalize strings for comparison
167
+ const normalize = (str) => {
168
+ return str.toLowerCase().trim().replace(/\s+/g, ' ');
169
+ };
170
+ // Helper to check if an issue description is in unfixable list
171
+ const isUnfixable = (issue) => {
172
+ const issueDescription = isConsistencyIssue(issue)
173
+ ? issue.message
174
+ : issue.description;
175
+ const normalizedDescription = normalize(issueDescription);
176
+ const normalizedLocation = normalize(issue.location);
177
+ // Check if any unfixable description matches this issue
178
+ return unfixableIssueDescriptions.some(unfixable => {
179
+ const normalizedUnfixable = normalize(unfixable);
180
+ // Match if unfixable string contains significant part of the issue description
181
+ // or vice versa (bidirectional check with minimum 20 char threshold)
182
+ const descriptionMatch = (normalizedUnfixable.length > 20 && normalizedDescription.includes(normalizedUnfixable)) ||
183
+ (normalizedDescription.length > 20 && normalizedUnfixable.includes(normalizedDescription));
184
+ // Also match if unfixable mentions the location (for better precision)
185
+ const locationMatch = normalizedLocation.length > 10 && normalizedUnfixable.includes(normalizedLocation);
186
+ return descriptionMatch || locationMatch;
187
+ });
188
+ };
189
+ // Filter consistency issues
190
+ const filteredConsistency = originalConsistencyIssues.filter(issue => {
191
+ const issueKey = `${issue.severity}: ${issue.message}`;
192
+ // Only include if NOT ignored AND is unfixable
193
+ return !ignoredIssues.has(issueKey) && isUnfixable(issue);
194
+ });
195
+ // Filter chaos issues
196
+ const filteredChaos = originalChaosIssues.filter(issue => {
197
+ const issueKey = `[${issue.severity}] ${issue.description}`;
198
+ // Only include if NOT ignored AND is unfixable
199
+ return !ignoredIssues.has(issueKey) && isUnfixable(issue);
200
+ });
201
+ return {
202
+ consistencyIssues: filteredConsistency,
203
+ chaosIssues: filteredChaos
204
+ };
205
+ }
206
+ //# sourceMappingURL=issueReviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueReviewer.js","sourceRoot":"","sources":["../../src/utils/issueReviewer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ConsistencyIssue } from '../agents/core/Consistency';
2
+ import { ChaosIssue } from '../agents/core/Chaos';
3
+ export interface UnifiedIssue {
4
+ id: string;
5
+ type: 'consistency' | 'chaos';
6
+ index: number;
7
+ severity: string;
8
+ priority: 'critical' | 'major' | 'minor';
9
+ message: string;
10
+ location: string;
11
+ }
12
+ export interface SeverityGroup {
13
+ name: string;
14
+ label: string;
15
+ priority: number;
16
+ issues: UnifiedIssue[];
17
+ }
18
+ export declare function mapSeverityToPriority(severity: string, type: 'consistency' | 'chaos'): 'critical' | 'major' | 'minor';
19
+ export declare function groupIssuesBySeverity(consistencyIssues: ConsistencyIssue[], chaosIssues: ChaosIssue[]): SeverityGroup[];
20
+ export declare function buildGroupedChoices(groups: SeverityGroup[]): any[];
21
+ export declare function getAllIssueIds(groups: SeverityGroup[]): string[];
22
+ export declare function parseSelections(selected: string[], consistencyIssues: ConsistencyIssue[], chaosIssues: ChaosIssue[]): {
23
+ selectedConsistency: ConsistencyIssue[];
24
+ selectedChaos: ChaosIssue[];
25
+ };
26
+ //# sourceMappingURL=issueSelector.d.ts.map