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.
- package/README.md +81 -41
- package/dist/agents/base/BaseAgent.d.ts +31 -0
- package/dist/agents/base/BaseAgent.d.ts.map +1 -1
- package/dist/agents/base/BaseAgent.js +57 -0
- package/dist/agents/base/BaseAgent.js.map +1 -1
- package/dist/agents/core/Architect.d.ts +17 -5
- package/dist/agents/core/Architect.d.ts.map +1 -1
- package/dist/agents/core/Architect.js +263 -150
- package/dist/agents/core/Architect.js.map +1 -1
- package/dist/agents/core/Chaos.d.ts +4 -0
- package/dist/agents/core/Chaos.d.ts.map +1 -1
- package/dist/agents/core/Chaos.js +46 -11
- package/dist/agents/core/Chaos.js.map +1 -1
- package/dist/agents/core/Consistency.d.ts +1 -0
- package/dist/agents/core/Consistency.d.ts.map +1 -1
- package/dist/agents/core/Consistency.js +86 -11
- package/dist/agents/core/Consistency.js.map +1 -1
- package/dist/agents/core/Modifier.d.ts +13 -0
- package/dist/agents/core/Modifier.d.ts.map +1 -0
- package/dist/agents/core/Modifier.js +141 -0
- package/dist/agents/core/Modifier.js.map +1 -0
- package/dist/agents/core/Remediation.d.ts +3 -1
- package/dist/agents/core/Remediation.d.ts.map +1 -1
- package/dist/agents/core/Remediation.js +63 -3
- package/dist/agents/core/Remediation.js.map +1 -1
- package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -1
- package/dist/agents/specialists/CreativeSpecialist.js +94 -25
- package/dist/agents/specialists/CreativeSpecialist.js.map +1 -1
- package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -1
- package/dist/agents/specialists/EntitySpecialist.js +63 -25
- package/dist/agents/specialists/EntitySpecialist.js.map +1 -1
- package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -1
- package/dist/agents/specialists/FeatureSpecialist.js +53 -39
- package/dist/agents/specialists/FeatureSpecialist.js.map +1 -1
- package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -1
- package/dist/agents/specialists/TechSpecialist.js +69 -32
- package/dist/agents/specialists/TechSpecialist.js.map +1 -1
- package/dist/config/schema.d.ts +1319 -709
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +142 -52
- package/dist/config/schema.js.map +1 -1
- package/dist/config/templates.d.ts.map +1 -1
- package/dist/config/templates.js +6 -66
- package/dist/config/templates.js.map +1 -1
- package/dist/core/Orchestrator.d.ts +17 -3
- package/dist/core/Orchestrator.d.ts.map +1 -1
- package/dist/core/Orchestrator.js +46 -16
- package/dist/core/Orchestrator.js.map +1 -1
- package/dist/index.js +335 -195
- package/dist/index.js.map +1 -1
- package/dist/types/issueReview.d.ts +19 -0
- package/dist/types/issueReview.d.ts.map +1 -0
- package/dist/types/issueReview.js +3 -0
- package/dist/types/issueReview.js.map +1 -0
- package/dist/utils/costTracker.d.ts +28 -0
- package/dist/utils/costTracker.d.ts.map +1 -1
- package/dist/utils/costTracker.js +71 -1
- package/dist/utils/costTracker.js.map +1 -1
- package/dist/utils/disambiguationHelper.d.ts +54 -0
- package/dist/utils/disambiguationHelper.d.ts.map +1 -0
- package/dist/utils/disambiguationHelper.js +252 -0
- package/dist/utils/disambiguationHelper.js.map +1 -0
- package/dist/utils/issueReviewer.d.ts +6 -0
- package/dist/utils/issueReviewer.d.ts.map +1 -0
- package/dist/utils/issueReviewer.js +159 -0
- package/dist/utils/issueReviewer.js.map +1 -0
- package/dist/utils/issueSelector.d.ts +26 -0
- package/dist/utils/issueSelector.d.ts.map +1 -0
- package/dist/utils/issueSelector.js +132 -0
- package/dist/utils/issueSelector.js.map +1 -0
- package/package.json +1 -1
- package/dist/core/CheckpointManager.d.ts +0 -16
- package/dist/core/CheckpointManager.d.ts.map +0 -1
- package/dist/core/CheckpointManager.js +0 -52
- 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":"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"}
|
package/package.json
CHANGED
|
@@ -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"}
|