gameforge-cli 0.1.0 → 0.2.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 (75) hide show
  1. package/README.md +81 -41
  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 +17 -5
  7. package/dist/agents/core/Architect.d.ts.map +1 -1
  8. package/dist/agents/core/Architect.js +263 -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/Modifier.d.ts +13 -0
  19. package/dist/agents/core/Modifier.d.ts.map +1 -0
  20. package/dist/agents/core/Modifier.js +141 -0
  21. package/dist/agents/core/Modifier.js.map +1 -0
  22. package/dist/agents/core/Remediation.d.ts +3 -1
  23. package/dist/agents/core/Remediation.d.ts.map +1 -1
  24. package/dist/agents/core/Remediation.js +63 -3
  25. package/dist/agents/core/Remediation.js.map +1 -1
  26. package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -1
  27. package/dist/agents/specialists/CreativeSpecialist.js +94 -25
  28. package/dist/agents/specialists/CreativeSpecialist.js.map +1 -1
  29. package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -1
  30. package/dist/agents/specialists/EntitySpecialist.js +63 -25
  31. package/dist/agents/specialists/EntitySpecialist.js.map +1 -1
  32. package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -1
  33. package/dist/agents/specialists/FeatureSpecialist.js +53 -39
  34. package/dist/agents/specialists/FeatureSpecialist.js.map +1 -1
  35. package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -1
  36. package/dist/agents/specialists/TechSpecialist.js +69 -32
  37. package/dist/agents/specialists/TechSpecialist.js.map +1 -1
  38. package/dist/config/schema.d.ts +1319 -709
  39. package/dist/config/schema.d.ts.map +1 -1
  40. package/dist/config/schema.js +142 -52
  41. package/dist/config/schema.js.map +1 -1
  42. package/dist/config/templates.d.ts.map +1 -1
  43. package/dist/config/templates.js +6 -66
  44. package/dist/config/templates.js.map +1 -1
  45. package/dist/core/Orchestrator.d.ts +17 -3
  46. package/dist/core/Orchestrator.d.ts.map +1 -1
  47. package/dist/core/Orchestrator.js +46 -16
  48. package/dist/core/Orchestrator.js.map +1 -1
  49. package/dist/index.js +335 -195
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/issueReview.d.ts +19 -0
  52. package/dist/types/issueReview.d.ts.map +1 -0
  53. package/dist/types/issueReview.js +3 -0
  54. package/dist/types/issueReview.js.map +1 -0
  55. package/dist/utils/costTracker.d.ts +28 -0
  56. package/dist/utils/costTracker.d.ts.map +1 -1
  57. package/dist/utils/costTracker.js +71 -1
  58. package/dist/utils/costTracker.js.map +1 -1
  59. package/dist/utils/disambiguationHelper.d.ts +54 -0
  60. package/dist/utils/disambiguationHelper.d.ts.map +1 -0
  61. package/dist/utils/disambiguationHelper.js +252 -0
  62. package/dist/utils/disambiguationHelper.js.map +1 -0
  63. package/dist/utils/issueReviewer.d.ts +6 -0
  64. package/dist/utils/issueReviewer.d.ts.map +1 -0
  65. package/dist/utils/issueReviewer.js +159 -0
  66. package/dist/utils/issueReviewer.js.map +1 -0
  67. package/dist/utils/issueSelector.d.ts +26 -0
  68. package/dist/utils/issueSelector.d.ts.map +1 -0
  69. package/dist/utils/issueSelector.js +132 -0
  70. package/dist/utils/issueSelector.js.map +1 -0
  71. package/package.json +1 -1
  72. package/dist/core/CheckpointManager.d.ts +0 -16
  73. package/dist/core/CheckpointManager.d.ts.map +0 -1
  74. package/dist/core/CheckpointManager.js +0 -52
  75. package/dist/core/CheckpointManager.js.map +0 -1
@@ -0,0 +1,252 @@
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 child_process_1 = require("child_process");
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const os_1 = __importDefault(require("os"));
13
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
14
+ /**
15
+ * DisambiguationHelper provides a reusable mechanism for agents to ask
16
+ * clarifying questions when they encounter ambiguity.
17
+ *
18
+ * Features:
19
+ * - Generates 2 AI-powered suggestions based on context
20
+ * - Offers "AI Decide" option with reasoning
21
+ * - Offers "Custom Answer" via text editor
22
+ * - Returns standardized result
23
+ */
24
+ class DisambiguationHelper {
25
+ client;
26
+ constructor(apiKey) {
27
+ this.client = new sdk_1.default({ apiKey });
28
+ }
29
+ /**
30
+ * Ask the user a clarifying question with AI-generated options
31
+ * @param question The disambiguation question configuration
32
+ * @returns The user's answer and whether it was AI-generated
33
+ */
34
+ async ask(question) {
35
+ console.log(picocolors_1.default.cyan(`\n❓ ${question.question}\n`));
36
+ // Generate AI suggestions
37
+ const suggestions = await this.generateSuggestions(question);
38
+ // Present choices to user
39
+ const choices = [
40
+ ...suggestions,
41
+ '✨ AI Decide (Smart Default)',
42
+ '✏️ Custom Answer'
43
+ ];
44
+ const response = await enquirer_1.default.prompt({
45
+ type: 'select',
46
+ name: 'choice',
47
+ message: 'Select an option:',
48
+ choices
49
+ });
50
+ // Handle "AI Decide"
51
+ if (response.choice === '✨ AI Decide (Smart Default)') {
52
+ const aiDecision = await this.generateAIDecision(question);
53
+ console.log(picocolors_1.default.yellow(`\n🤖 AI Suggests: ${aiDecision.answer}`));
54
+ console.log(picocolors_1.default.dim(` Reasoning: ${aiDecision.reasoning}\n`));
55
+ const confirm = await enquirer_1.default.prompt({
56
+ type: 'confirm',
57
+ name: 'accept',
58
+ message: 'Accept this suggestion?',
59
+ initial: true
60
+ });
61
+ if (confirm.accept) {
62
+ return { answer: aiDecision.answer, wasAIGenerated: true };
63
+ }
64
+ else {
65
+ // Re-ask the question
66
+ return this.ask(question);
67
+ }
68
+ }
69
+ // Handle "Custom Answer"
70
+ if (response.choice === '✏️ Custom Answer') {
71
+ const answer = await this.openEditor(question.question);
72
+ return { answer, wasAIGenerated: false };
73
+ }
74
+ // Regular choice from suggestions
75
+ return { answer: response.choice, wasAIGenerated: false };
76
+ }
77
+ /**
78
+ * Generate 2 AI-powered suggestions based on the question and context
79
+ */
80
+ async generateSuggestions(question) {
81
+ const prompt = `Given this game design context:
82
+ ${question.context}
83
+
84
+ Question: ${question.question}
85
+
86
+ Provide 2 concrete, specific suggestions that would work well for this game.
87
+ Each suggestion should be:
88
+ 1. Brief (1-2 sentences or a short phrase)
89
+ 2. Practical and implementable
90
+ 3. Consistent with the established design
91
+ 4. Different from each other (provide variety)
92
+
93
+ Respond in JSON format:
94
+ {
95
+ "suggestions": ["suggestion 1", "suggestion 2"]
96
+ }`;
97
+ try {
98
+ const response = await this.client.messages.create({
99
+ model: 'claude-haiku-4-5-20251001', // Use cheaper model for quick suggestions
100
+ max_tokens: 1024,
101
+ temperature: 0.8,
102
+ messages: [{ role: 'user', content: prompt }]
103
+ });
104
+ const content = response.content[0].type === 'text' ? response.content[0].text : '';
105
+ // Extract JSON from markdown code blocks if present
106
+ const jsonMatch = content.match(/```(?:json)?\s*([\s\S]*?)```/);
107
+ const jsonStr = jsonMatch ? jsonMatch[1].trim() : content;
108
+ const parsed = JSON.parse(jsonStr);
109
+ return parsed.suggestions || ['Option 1', 'Option 2'];
110
+ }
111
+ catch (error) {
112
+ console.warn(picocolors_1.default.yellow('Could not generate AI suggestions, using defaults'));
113
+ if (error instanceof Error) {
114
+ console.warn(picocolors_1.default.yellow(`AI suggestion error: ${error.message}`));
115
+ }
116
+ return ['Standard approach', 'Alternative approach'];
117
+ }
118
+ }
119
+ /**
120
+ * Generate a smart default decision with reasoning
121
+ */
122
+ async generateAIDecision(question) {
123
+ const prompt = `Given this game design context:
124
+ ${question.context}
125
+
126
+ Question: ${question.question}
127
+
128
+ Provide a smart default answer that:
129
+ 1. Fits the established design and genre
130
+ 2. Is technically feasible
131
+ 3. Maintains reasonable scope
132
+ 4. Is internally consistent
133
+
134
+ Respond in JSON format:
135
+ {
136
+ "answer": "your suggested answer (be specific and concrete)",
137
+ "reasoning": "brief explanation (1-2 sentences)"
138
+ }`;
139
+ try {
140
+ const response = await this.client.messages.create({
141
+ model: 'claude-sonnet-4-5-20250929', // Use smarter model for decisions
142
+ max_tokens: 1024,
143
+ temperature: 0.7,
144
+ messages: [{ role: 'user', content: prompt }]
145
+ });
146
+ const content = response.content[0].type === 'text' ? response.content[0].text : '';
147
+ // Extract JSON from markdown code blocks if present
148
+ const jsonMatch = content.match(/```(?:json)?\s*([\s\S]*?)```/);
149
+ const jsonStr = jsonMatch ? jsonMatch[1].trim() : content;
150
+ const parsed = JSON.parse(jsonStr);
151
+ return {
152
+ answer: parsed.answer || 'Standard approach',
153
+ reasoning: parsed.reasoning || 'Based on genre conventions'
154
+ };
155
+ }
156
+ catch (error) {
157
+ console.warn(picocolors_1.default.yellow('Could not generate AI decision, using default'));
158
+ if (error instanceof Error) {
159
+ console.warn(picocolors_1.default.yellow(`AI decision error: ${error.message}`));
160
+ }
161
+ return {
162
+ answer: 'Standard approach',
163
+ reasoning: 'Default fallback due to error'
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Open a text editor for the user to write a custom answer
169
+ */
170
+ async openEditor(question) {
171
+ const tmpDir = os_1.default.tmpdir();
172
+ const tmpFile = path_1.default.join(tmpDir, `gameforge-disambiguation-${Date.now()}.txt`);
173
+ const initialContent = `# ${question}\n# Write your answer below, then save and close the editor\n\n`;
174
+ await fs_extra_1.default.writeFile(tmpFile, initialContent, 'utf-8');
175
+ const editor = process.env.VISUAL || process.env.EDITOR || 'vim';
176
+ // Validate editor path to prevent command injection
177
+ const editorPath = editor.split(' ')[0]; // Get just the command, not arguments
178
+ if (/[;&|`$(){}[\]<>]/.test(editorPath)) {
179
+ console.error(picocolors_1.default.red('Error: Invalid editor path detected'));
180
+ await fs_extra_1.default.remove(tmpFile);
181
+ throw new Error('Invalid editor path - potential security risk');
182
+ }
183
+ console.log(picocolors_1.default.dim(`\nOpening ${editor}... (save and close when done)`));
184
+ try {
185
+ (0, child_process_1.execSync)(`${editor} "${tmpFile}"`, { stdio: 'inherit' });
186
+ let content = await fs_extra_1.default.readFile(tmpFile, 'utf-8');
187
+ // Remove comment lines (lines starting with #)
188
+ content = content
189
+ .split('\n')
190
+ .filter(line => !line.trim().startsWith('#'))
191
+ .join('\n')
192
+ .trim();
193
+ await fs_extra_1.default.remove(tmpFile);
194
+ if (!content) {
195
+ console.log(picocolors_1.default.yellow('No content entered. Please try again.'));
196
+ // Recursive call will create its own temp file
197
+ return this.openEditor(question);
198
+ }
199
+ return content;
200
+ }
201
+ catch (error) {
202
+ console.error(picocolors_1.default.red('Error opening editor:'), error);
203
+ // Ensure cleanup even on error
204
+ try {
205
+ await fs_extra_1.default.remove(tmpFile);
206
+ }
207
+ catch (cleanupError) {
208
+ // Ignore cleanup errors
209
+ }
210
+ throw error;
211
+ }
212
+ }
213
+ /**
214
+ * Helper to format game context from a GameBible for disambiguation
215
+ */
216
+ static formatGameContext(bible) {
217
+ const parts = [];
218
+ if (bible.meta) {
219
+ parts.push(`Title: ${bible.meta.title}`);
220
+ parts.push(`Genre: ${bible.meta.genre?.join(', ') || 'N/A'}`);
221
+ parts.push(`Concept: ${bible.meta.conceptStatement || 'N/A'}`);
222
+ parts.push(`Platform: ${bible.meta.targetPlatform?.join(', ') || 'N/A'}`);
223
+ parts.push(`Scope: ${bible.meta.estimatedScope || 'N/A'}`);
224
+ }
225
+ if (Array.isArray(bible.features) && bible.features.length > 0) {
226
+ parts.push(`\nCore Features (${bible.features.length}):`);
227
+ bible.features.slice(0, 5).forEach((f) => {
228
+ parts.push(` - ${f.name}: ${f.intent || 'N/A'}`);
229
+ });
230
+ if (bible.features.length > 5) {
231
+ parts.push(` ... and ${bible.features.length - 5} more`);
232
+ }
233
+ }
234
+ if (Array.isArray(bible.gameObjects) && bible.gameObjects.length > 0) {
235
+ parts.push(`\nKey Entities: ${bible.gameObjects.slice(0, 5).map((e) => e.name).join(', ')}`);
236
+ if (bible.gameObjects.length > 5) {
237
+ parts.push(`... and ${bible.gameObjects.length - 5} more`);
238
+ }
239
+ }
240
+ return parts.join('\n');
241
+ }
242
+ /**
243
+ * Helper to format transcript context for disambiguation
244
+ */
245
+ static formatTranscriptContext(transcript) {
246
+ return transcript
247
+ .map(t => `Q: ${t.question}\nA: ${t.answer}`)
248
+ .join('\n\n');
249
+ }
250
+ }
251
+ exports.DisambiguationHelper = DisambiguationHelper;
252
+ //# 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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"}
@@ -0,0 +1,6 @@
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
+ //# 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"}
@@ -0,0 +1,159 @@
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
+ const picocolors_1 = __importDefault(require("picocolors"));
9
+ const enquirer_1 = __importDefault(require("enquirer"));
10
+ // Type guard for ConsistencyIssue
11
+ function isConsistencyIssue(issue) {
12
+ return 'message' in issue && 'suggestion' in issue;
13
+ }
14
+ // Get color based on severity
15
+ function getSeverityColor(severity) {
16
+ const upperSeverity = severity.toUpperCase();
17
+ if (upperSeverity === 'ERROR' || upperSeverity === 'CRITICAL') {
18
+ return picocolors_1.default.red;
19
+ }
20
+ else if (upperSeverity === 'WARNING' || upperSeverity === 'MAJOR') {
21
+ return picocolors_1.default.yellow;
22
+ }
23
+ return picocolors_1.default.dim;
24
+ }
25
+ // Display full details for a single issue
26
+ function displayIssueDetails(issue, issueType, currentIndex, totalCount) {
27
+ const separator = '═'.repeat(65);
28
+ console.log(picocolors_1.default.cyan(`\n${separator}`));
29
+ console.log(picocolors_1.default.cyan(`Issue ${currentIndex + 1} of ${totalCount}`));
30
+ console.log(picocolors_1.default.cyan(separator));
31
+ if (isConsistencyIssue(issue)) {
32
+ const colorFn = getSeverityColor(issue.severity);
33
+ console.log(`\n${picocolors_1.default.bold('Severity:')} ${colorFn(issue.severity)}`);
34
+ console.log(`${picocolors_1.default.bold('Type:')} Consistency Issue`);
35
+ console.log(`${picocolors_1.default.bold('Message:')} ${issue.message}`);
36
+ console.log(`${picocolors_1.default.bold('Location:')} ${picocolors_1.default.dim(issue.location)}`);
37
+ if (issue.suggestion) {
38
+ console.log(`${picocolors_1.default.bold('Suggestion:')} ${picocolors_1.default.green(issue.suggestion)}`);
39
+ }
40
+ }
41
+ else {
42
+ const colorFn = getSeverityColor(issue.severity);
43
+ console.log(`\n${picocolors_1.default.bold('Severity:')} ${colorFn(issue.severity)}`);
44
+ console.log(`${picocolors_1.default.bold('Type:')} ${issue.category} Issue`);
45
+ console.log(`${picocolors_1.default.bold('Description:')} ${issue.description}`);
46
+ console.log(`${picocolors_1.default.bold('Location:')} ${picocolors_1.default.dim(issue.location)}`);
47
+ console.log(`${picocolors_1.default.bold('Recommendation:')} ${picocolors_1.default.green(issue.recommendation)}`);
48
+ }
49
+ console.log('');
50
+ }
51
+ // Prompt user for their decision on an issue
52
+ async function promptIssueDecision() {
53
+ const response = await enquirer_1.default.prompt({
54
+ type: 'select',
55
+ name: 'action',
56
+ message: 'What would you like to do?',
57
+ choices: [
58
+ { name: 'fix', message: 'A) Have AI fix it' },
59
+ { name: 'ignore', message: 'B) Ignore this issue' },
60
+ { name: 'custom', message: 'C) Other (provide custom instructions)' }
61
+ ]
62
+ });
63
+ if (response.action === 'custom') {
64
+ const customResponse = await enquirer_1.default.prompt({
65
+ type: 'input',
66
+ name: 'notes',
67
+ message: 'Enter custom instructions for the AI:'
68
+ });
69
+ return {
70
+ decision: 'custom',
71
+ customNotes: customResponse.notes.trim() || undefined
72
+ };
73
+ }
74
+ return { decision: response.action };
75
+ }
76
+ // Sort issues by severity (critical/error first)
77
+ function sortIssuesBySeverity(consistencyIssues, chaosIssues) {
78
+ const allIssues = [];
79
+ // Add consistency issues
80
+ consistencyIssues.forEach((issue) => {
81
+ allIssues.push({ issue, type: 'consistency' });
82
+ });
83
+ // Add chaos issues
84
+ chaosIssues.forEach((issue) => {
85
+ allIssues.push({ issue, type: 'chaos' });
86
+ });
87
+ // Sort by severity priority
88
+ const severityOrder = {
89
+ Critical: 1,
90
+ Error: 1,
91
+ Major: 2,
92
+ Warning: 2,
93
+ Minor: 3,
94
+ Info: 3
95
+ };
96
+ allIssues.sort((a, b) => {
97
+ const aSeverity = isConsistencyIssue(a.issue) ? a.issue.severity : a.issue.severity;
98
+ const bSeverity = isConsistencyIssue(b.issue) ? b.issue.severity : b.issue.severity;
99
+ return (severityOrder[aSeverity] || 4) - (severityOrder[bSeverity] || 4);
100
+ });
101
+ return allIssues;
102
+ }
103
+ // Main function: review all issues one by one
104
+ async function reviewIssuesOneByOne(consistencyIssues, chaosIssues) {
105
+ const result = {
106
+ toFix: [],
107
+ ignored: []
108
+ };
109
+ const totalIssues = consistencyIssues.length + chaosIssues.length;
110
+ if (totalIssues === 0) {
111
+ return result;
112
+ }
113
+ // Sort issues by severity (critical first)
114
+ const sortedIssues = sortIssuesBySeverity(consistencyIssues, chaosIssues);
115
+ console.log(picocolors_1.default.yellow(`\nReviewing ${totalIssues} issue${totalIssues > 1 ? 's' : ''}...\n`));
116
+ for (let i = 0; i < sortedIssues.length; i++) {
117
+ const { issue, type } = sortedIssues[i];
118
+ // Display issue details
119
+ displayIssueDetails(issue, type, i, sortedIssues.length);
120
+ // Get user decision
121
+ const { decision, customNotes } = await promptIssueDecision();
122
+ const reviewResult = {
123
+ issue,
124
+ issueType: type,
125
+ decision,
126
+ customNotes
127
+ };
128
+ if (decision === 'fix' || decision === 'custom') {
129
+ result.toFix.push(reviewResult);
130
+ }
131
+ else {
132
+ result.ignored.push(reviewResult);
133
+ }
134
+ }
135
+ // Summary
136
+ console.log(picocolors_1.default.cyan('\n' + '═'.repeat(65)));
137
+ console.log(picocolors_1.default.cyan('Review Summary'));
138
+ console.log(picocolors_1.default.cyan('═'.repeat(65)));
139
+ console.log(`${picocolors_1.default.green('To fix:')} ${result.toFix.length} issue${result.toFix.length !== 1 ? 's' : ''}`);
140
+ console.log(`${picocolors_1.default.dim('Ignored:')} ${result.ignored.length} issue${result.ignored.length !== 1 ? 's' : ''}`);
141
+ console.log('');
142
+ return result;
143
+ }
144
+ // Convert reviewed issues to the format Remediation expects
145
+ function convertToIssuesWithNotes(reviewed) {
146
+ return reviewed.toFix.map((result) => {
147
+ const issueWithNotes = {
148
+ customNotes: result.customNotes
149
+ };
150
+ if (result.issueType === 'consistency') {
151
+ issueWithNotes.consistencyIssue = result.issue;
152
+ }
153
+ else {
154
+ issueWithNotes.chaosIssue = result.issue;
155
+ }
156
+ return issueWithNotes;
157
+ });
158
+ }
159
+ //# 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueSelector.d.ts","sourceRoot":"","sources":["../../src/utils/issueSelector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAGD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,GAAG,OAAO,GAC5B,UAAU,GAAG,OAAO,GAAG,OAAO,CAwBhC;AAGD,wBAAgB,qBAAqB,CACnC,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,WAAW,EAAE,UAAU,EAAE,GACxB,aAAa,EAAE,CAuCjB;AAyBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,CAUlE;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAEhE;AAGD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAAE,EAClB,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,WAAW,EAAE,UAAU,EAAE,GACxB;IAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IAAC,aAAa,EAAE,UAAU,EAAE,CAAA;CAAE,CAmB1E"}
@@ -0,0 +1,132 @@
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.mapSeverityToPriority = mapSeverityToPriority;
7
+ exports.groupIssuesBySeverity = groupIssuesBySeverity;
8
+ exports.buildGroupedChoices = buildGroupedChoices;
9
+ exports.getAllIssueIds = getAllIssueIds;
10
+ exports.parseSelections = parseSelections;
11
+ const picocolors_1 = __importDefault(require("picocolors"));
12
+ // Map severity strings to unified priority levels
13
+ function mapSeverityToPriority(severity, type) {
14
+ if (type === 'consistency') {
15
+ switch (severity) {
16
+ case 'Error':
17
+ return 'critical';
18
+ case 'Warning':
19
+ return 'major';
20
+ case 'Info':
21
+ return 'minor';
22
+ default:
23
+ return 'minor';
24
+ }
25
+ }
26
+ else {
27
+ switch (severity) {
28
+ case 'Critical':
29
+ return 'critical';
30
+ case 'Major':
31
+ return 'major';
32
+ case 'Minor':
33
+ return 'minor';
34
+ default:
35
+ return 'minor';
36
+ }
37
+ }
38
+ }
39
+ // Group issues by severity for display
40
+ function groupIssuesBySeverity(consistencyIssues, chaosIssues) {
41
+ const groups = new Map([
42
+ ['critical', { name: 'critical', label: 'Critical/Error', priority: 1, issues: [] }],
43
+ ['major', { name: 'major', label: 'Major/Warning', priority: 2, issues: [] }],
44
+ ['minor', { name: 'minor', label: 'Minor/Info', priority: 3, issues: [] }]
45
+ ]);
46
+ // Add consistency issues
47
+ consistencyIssues.forEach((issue, index) => {
48
+ const priority = mapSeverityToPriority(issue.severity, 'consistency');
49
+ groups.get(priority).issues.push({
50
+ id: `consistency-${index}`,
51
+ type: 'consistency',
52
+ index,
53
+ severity: issue.severity,
54
+ priority,
55
+ message: issue.message,
56
+ location: issue.location
57
+ });
58
+ });
59
+ // Add chaos issues
60
+ chaosIssues.forEach((issue, index) => {
61
+ const priority = mapSeverityToPriority(issue.severity, 'chaos');
62
+ groups.get(priority).issues.push({
63
+ id: `chaos-${index}`,
64
+ type: 'chaos',
65
+ index,
66
+ severity: issue.severity,
67
+ priority,
68
+ message: issue.description,
69
+ location: issue.location
70
+ });
71
+ });
72
+ // Return sorted groups (critical first), filter empty
73
+ return Array.from(groups.values())
74
+ .filter((g) => g.issues.length > 0)
75
+ .sort((a, b) => a.priority - b.priority);
76
+ }
77
+ // Get color function based on priority
78
+ function getSeverityColor(priority) {
79
+ switch (priority) {
80
+ case 'critical':
81
+ return picocolors_1.default.red;
82
+ case 'major':
83
+ return picocolors_1.default.yellow;
84
+ case 'minor':
85
+ return picocolors_1.default.dim;
86
+ default:
87
+ return (s) => s;
88
+ }
89
+ }
90
+ // Format a single issue for display
91
+ function formatIssueMessage(issue) {
92
+ const colorFn = getSeverityColor(issue.priority);
93
+ const truncatedMessage = issue.message.length > 70 ? issue.message.substring(0, 67) + '...' : issue.message;
94
+ return `${colorFn(`[${issue.severity}]`)} ${truncatedMessage}`;
95
+ }
96
+ // Build enquirer choice structure with groups
97
+ function buildGroupedChoices(groups) {
98
+ return groups.map((group) => ({
99
+ name: group.name,
100
+ message: picocolors_1.default.bold(`${group.label} (${group.issues.length})`),
101
+ choices: group.issues.map((issue) => ({
102
+ name: issue.id,
103
+ message: formatIssueMessage(issue),
104
+ hint: picocolors_1.default.dim(issue.location)
105
+ }))
106
+ }));
107
+ }
108
+ // Get all issue IDs for initial selection
109
+ function getAllIssueIds(groups) {
110
+ return groups.flatMap((g) => g.issues.map((i) => i.id));
111
+ }
112
+ // Parse selected IDs back to original issue arrays
113
+ function parseSelections(selected, consistencyIssues, chaosIssues) {
114
+ const selectedConsistency = [];
115
+ const selectedChaos = [];
116
+ for (const id of selected) {
117
+ if (id.startsWith('consistency-')) {
118
+ const index = parseInt(id.replace('consistency-', ''), 10);
119
+ if (index >= 0 && index < consistencyIssues.length) {
120
+ selectedConsistency.push(consistencyIssues[index]);
121
+ }
122
+ }
123
+ else if (id.startsWith('chaos-')) {
124
+ const index = parseInt(id.replace('chaos-', ''), 10);
125
+ if (index >= 0 && index < chaosIssues.length) {
126
+ selectedChaos.push(chaosIssues[index]);
127
+ }
128
+ }
129
+ }
130
+ return { selectedConsistency, selectedChaos };
131
+ }
132
+ //# sourceMappingURL=issueSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueSelector.js","sourceRoot":"","sources":["../../src/utils/issueSelector.ts"],"names":[],"mappings":";;;;;AAuBA,sDA2BC;AAGD,sDA0CC;AAyBD,kDAUC;AAGD,wCAEC;AAGD,0CAuBC;AAjKD,4DAA4B;AAsB5B,kDAAkD;AAClD,SAAgB,qBAAqB,CACnC,QAAgB,EAChB,IAA6B;IAE7B,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,UAAU,CAAC;YACpB,KAAK,SAAS;gBACZ,OAAO,OAAO,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU;gBACb,OAAO,UAAU,CAAC;YACpB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,SAAgB,qBAAqB,CACnC,iBAAqC,EACrC,WAAyB;IAEzB,MAAM,MAAM,GAA+B,IAAI,GAAG,CAAC;QACjD,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpF,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC7E,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;KAC3E,CAAC,CAAC;IAEH,yBAAyB;IACzB,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,EAAE,EAAE,eAAe,KAAK,EAAE;YAC1B,IAAI,EAAE,aAAa;YACnB,KAAK;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ;YACR,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,EAAE,EAAE,SAAS,KAAK,EAAE;YACpB,IAAI,EAAE,OAAO;YACb,KAAK;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ;YACR,OAAO,EAAE,KAAK,CAAC,WAAW;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,sDAAsD;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,uCAAuC;AACvC,SAAS,gBAAgB,CAAC,QAAgB;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,oBAAE,CAAC,GAAG,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,oBAAE,CAAC,MAAM,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,oBAAE,CAAC,GAAG,CAAC;QAChB;YACE,OAAO,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,gBAAgB,GACpB,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,gBAAgB,EAAE,CAAC;AACjE,CAAC;AAED,8CAA8C;AAC9C,SAAgB,mBAAmB,CAAC,MAAuB;IACzD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,oBAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAC3D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,KAAK,CAAC,EAAE;YACd,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC;YAClC,IAAI,EAAE,oBAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,0CAA0C;AAC1C,SAAgB,cAAc,CAAC,MAAuB;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,mDAAmD;AACnD,SAAgB,eAAe,CAC7B,QAAkB,EAClB,iBAAqC,EACrC,WAAyB;IAEzB,MAAM,mBAAmB,GAAuB,EAAE,CAAC;IACnD,MAAM,aAAa,GAAiB,EAAE,CAAC;IAEvC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACnD,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC7C,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gameforge-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "AI-powered Game Design Document generator",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,16 +0,0 @@
1
- import { GameForgeState } from './StateMachine';
2
- export declare class CheckpointManager {
3
- private checkpointDir;
4
- private projectId;
5
- constructor(projectId: string, checkpointDir?: string);
6
- saveCheckpoint(state: GameForgeState, label: string): Promise<string>;
7
- loadCheckpoint(checkpointId: string): Promise<GameForgeState>;
8
- listCheckpoints(): Promise<Array<{
9
- id: string;
10
- label: string;
11
- timestamp: string;
12
- }>>;
13
- rollback(checkpointId: string): Promise<GameForgeState>;
14
- deleteCheckpoint(checkpointId: string): Promise<void>;
15
- }
16
- //# sourceMappingURL=CheckpointManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CheckpointManager.d.ts","sourceRoot":"","sources":["../../src/core/CheckpointManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM,EAAE,aAAa,GAAE,MAAiC;IAMzE,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcrE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAM7D,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAanF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAIvD,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI5D"}