gameforge-cli 0.1.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/LICENSE +21 -0
- package/README.md +366 -0
- package/dist/agents/base/BaseAgent.d.ts +45 -0
- package/dist/agents/base/BaseAgent.d.ts.map +1 -0
- package/dist/agents/base/BaseAgent.js +179 -0
- package/dist/agents/base/BaseAgent.js.map +1 -0
- package/dist/agents/core/Architect.d.ts +16 -0
- package/dist/agents/core/Architect.d.ts.map +1 -0
- package/dist/agents/core/Architect.js +487 -0
- package/dist/agents/core/Architect.js.map +1 -0
- package/dist/agents/core/Chaos.d.ts +14 -0
- package/dist/agents/core/Chaos.d.ts.map +1 -0
- package/dist/agents/core/Chaos.js +67 -0
- package/dist/agents/core/Chaos.js.map +1 -0
- package/dist/agents/core/Consistency.d.ts +16 -0
- package/dist/agents/core/Consistency.d.ts.map +1 -0
- package/dist/agents/core/Consistency.js +132 -0
- package/dist/agents/core/Consistency.js.map +1 -0
- package/dist/agents/core/Inquisitor.d.ts +20 -0
- package/dist/agents/core/Inquisitor.d.ts.map +1 -0
- package/dist/agents/core/Inquisitor.js +159 -0
- package/dist/agents/core/Inquisitor.js.map +1 -0
- package/dist/agents/core/Remediation.d.ts +16 -0
- package/dist/agents/core/Remediation.d.ts.map +1 -0
- package/dist/agents/core/Remediation.js +151 -0
- package/dist/agents/core/Remediation.js.map +1 -0
- package/dist/agents/specialists/CreativeSpecialist.d.ts +7 -0
- package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -0
- package/dist/agents/specialists/CreativeSpecialist.js +70 -0
- package/dist/agents/specialists/CreativeSpecialist.js.map +1 -0
- package/dist/agents/specialists/EntitySpecialist.d.ts +8 -0
- package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -0
- package/dist/agents/specialists/EntitySpecialist.js +74 -0
- package/dist/agents/specialists/EntitySpecialist.js.map +1 -0
- package/dist/agents/specialists/FeatureSpecialist.d.ts +8 -0
- package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -0
- package/dist/agents/specialists/FeatureSpecialist.js +83 -0
- package/dist/agents/specialists/FeatureSpecialist.js.map +1 -0
- package/dist/agents/specialists/TechSpecialist.d.ts +7 -0
- package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -0
- package/dist/agents/specialists/TechSpecialist.js +62 -0
- package/dist/agents/specialists/TechSpecialist.js.map +1 -0
- package/dist/config/budget.d.ts +36 -0
- package/dist/config/budget.d.ts.map +1 -0
- package/dist/config/budget.js +37 -0
- package/dist/config/budget.js.map +1 -0
- package/dist/config/schema.d.ts +1336 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +134 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/templates.d.ts +10 -0
- package/dist/config/templates.d.ts.map +1 -0
- package/dist/config/templates.js +202 -0
- package/dist/config/templates.js.map +1 -0
- package/dist/core/CheckpointManager.d.ts +16 -0
- package/dist/core/CheckpointManager.d.ts.map +1 -0
- package/dist/core/CheckpointManager.js +52 -0
- package/dist/core/CheckpointManager.js.map +1 -0
- package/dist/core/Orchestrator.d.ts +11 -0
- package/dist/core/Orchestrator.d.ts.map +1 -0
- package/dist/core/Orchestrator.js +46 -0
- package/dist/core/Orchestrator.js.map +1 -0
- package/dist/core/SessionManager.d.ts +68 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js +162 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/StateMachine.d.ts +46 -0
- package/dist/core/StateMachine.d.ts.map +1 -0
- package/dist/core/StateMachine.js +82 -0
- package/dist/core/StateMachine.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +830 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/costTracker.d.ts +30 -0
- package/dist/utils/costTracker.d.ts.map +1 -0
- package/dist/utils/costTracker.js +64 -0
- package/dist/utils/costTracker.js.map +1 -0
- package/dist/utils/debugLogger.d.ts +48 -0
- package/dist/utils/debugLogger.d.ts.map +1 -0
- package/dist/utils/debugLogger.js +179 -0
- package/dist/utils/debugLogger.js.map +1 -0
- package/dist/utils/fileManager.d.ts +14 -0
- package/dist/utils/fileManager.d.ts.map +1 -0
- package/dist/utils/fileManager.js +135 -0
- package/dist/utils/fileManager.js.map +1 -0
- package/dist/utils/modelSelector.d.ts +11 -0
- package/dist/utils/modelSelector.d.ts.map +1 -0
- package/dist/utils/modelSelector.js +38 -0
- package/dist/utils/modelSelector.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConsistencyAgent = void 0;
|
|
4
|
+
class ConsistencyAgent {
|
|
5
|
+
validate(bible) {
|
|
6
|
+
const issues = [];
|
|
7
|
+
issues.push(...this.checkFeatureDependencies(bible));
|
|
8
|
+
issues.push(...this.detectCircularReferences(bible));
|
|
9
|
+
issues.push(...this.validateNamingConventions(bible));
|
|
10
|
+
issues.push(...this.checkAssetBalance(bible));
|
|
11
|
+
issues.push(...this.detectMissingFeatures(bible));
|
|
12
|
+
return issues;
|
|
13
|
+
}
|
|
14
|
+
checkFeatureDependencies(bible) {
|
|
15
|
+
const issues = [];
|
|
16
|
+
const featureIds = new Set(bible.features.map(f => f.id));
|
|
17
|
+
bible.features.forEach(feature => {
|
|
18
|
+
feature.dependencies.forEach(depId => {
|
|
19
|
+
if (!featureIds.has(depId)) {
|
|
20
|
+
issues.push({
|
|
21
|
+
severity: 'Error',
|
|
22
|
+
message: `Feature "${feature.name}" depends on non-existent feature "${depId}"`,
|
|
23
|
+
location: `features[${feature.id}].dependencies`,
|
|
24
|
+
suggestion: `Create feature ${depId} or remove this dependency`
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
return issues;
|
|
30
|
+
}
|
|
31
|
+
detectCircularReferences(bible) {
|
|
32
|
+
const issues = [];
|
|
33
|
+
const visited = new Set();
|
|
34
|
+
const recursionStack = new Set();
|
|
35
|
+
const hasCycle = (featureId, depMap) => {
|
|
36
|
+
visited.add(featureId);
|
|
37
|
+
recursionStack.add(featureId);
|
|
38
|
+
const deps = depMap.get(featureId) || [];
|
|
39
|
+
for (const dep of deps) {
|
|
40
|
+
if (!visited.has(dep)) {
|
|
41
|
+
if (hasCycle(dep, depMap))
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
else if (recursionStack.has(dep)) {
|
|
45
|
+
issues.push({
|
|
46
|
+
severity: 'Error',
|
|
47
|
+
message: `Circular dependency detected: ${featureId} → ${dep}`,
|
|
48
|
+
location: `features[${featureId}].dependencies`
|
|
49
|
+
});
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
recursionStack.delete(featureId);
|
|
54
|
+
return false;
|
|
55
|
+
};
|
|
56
|
+
const depMap = new Map(bible.features.map(f => [f.id, f.dependencies]));
|
|
57
|
+
bible.features.forEach(f => {
|
|
58
|
+
if (!visited.has(f.id)) {
|
|
59
|
+
hasCycle(f.id, depMap);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return issues;
|
|
63
|
+
}
|
|
64
|
+
validateNamingConventions(bible) {
|
|
65
|
+
const issues = [];
|
|
66
|
+
bible.features.forEach((feature, idx) => {
|
|
67
|
+
if (!feature.id.match(/^FEAT-\d{3}$/)) {
|
|
68
|
+
issues.push({
|
|
69
|
+
severity: 'Warning',
|
|
70
|
+
message: `Feature ID should follow format FEAT-XXX, got "${feature.id}"`,
|
|
71
|
+
location: `features[${idx}].id`
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
bible.gameObjects.forEach((entity, idx) => {
|
|
76
|
+
if (!entity.id.match(/^(NPC|ITEM|MON|INT)-\d{3}$/)) {
|
|
77
|
+
issues.push({
|
|
78
|
+
severity: 'Warning',
|
|
79
|
+
message: `Entity ID should follow format TYPE-XXX, got "${entity.id}"`,
|
|
80
|
+
location: `gameObjects[${idx}].id`
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return issues;
|
|
85
|
+
}
|
|
86
|
+
checkAssetBalance(bible) {
|
|
87
|
+
const issues = [];
|
|
88
|
+
const reqs = bible.creative.assetRequirements;
|
|
89
|
+
const total = Object.values(reqs).reduce((sum, val) => sum + val, 0);
|
|
90
|
+
if (total > 500 && bible.meta.estimatedScope === 'Prototype') {
|
|
91
|
+
issues.push({
|
|
92
|
+
severity: 'Warning',
|
|
93
|
+
message: `${total} assets for a Prototype seems excessive`,
|
|
94
|
+
location: 'creative.assetRequirements',
|
|
95
|
+
suggestion: 'Consider reducing scope or changing estimatedScope to "Full Game"'
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (total === 0) {
|
|
99
|
+
issues.push({
|
|
100
|
+
severity: 'Warning',
|
|
101
|
+
message: 'No asset requirements specified',
|
|
102
|
+
location: 'creative.assetRequirements',
|
|
103
|
+
suggestion: 'Estimate the number of assets needed'
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return issues;
|
|
107
|
+
}
|
|
108
|
+
detectMissingFeatures(bible) {
|
|
109
|
+
const issues = [];
|
|
110
|
+
const featureNames = bible.features.map(f => f.name.toLowerCase());
|
|
111
|
+
// Heuristic checks
|
|
112
|
+
const checks = [
|
|
113
|
+
{ has: 'crafting', needs: 'inventory', message: 'Crafting system typically requires Inventory management' },
|
|
114
|
+
{ has: 'multiplayer', needs: 'lobby', message: 'Multiplayer games usually need a Lobby/Matchmaking system' },
|
|
115
|
+
{ has: 'progression', needs: 'save', message: 'Progression systems require Save/Load functionality' },
|
|
116
|
+
{ has: 'combat', needs: 'health', message: 'Combat systems typically need Health/Damage management' }
|
|
117
|
+
];
|
|
118
|
+
checks.forEach(check => {
|
|
119
|
+
if (featureNames.some(n => n.includes(check.has)) && !featureNames.some(n => n.includes(check.needs))) {
|
|
120
|
+
issues.push({
|
|
121
|
+
severity: 'Info',
|
|
122
|
+
message: check.message,
|
|
123
|
+
location: 'features',
|
|
124
|
+
suggestion: `Consider adding a "${check.needs}" feature`
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return issues;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.ConsistencyAgent = ConsistencyAgent;
|
|
132
|
+
//# sourceMappingURL=Consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Consistency.js","sourceRoot":"","sources":["../../../src/agents/core/Consistency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseAgent } from '../base/BaseAgent';
|
|
2
|
+
export interface InquisitorQuestion {
|
|
3
|
+
question: string;
|
|
4
|
+
category: 'meta' | 'gameplay' | 'technical' | 'creative';
|
|
5
|
+
suggestedAnswers?: string[];
|
|
6
|
+
allowCustom: boolean;
|
|
7
|
+
allowAIDecide: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class Inquisitor extends BaseAgent {
|
|
10
|
+
constructor(apiKey: string, costTracker: any, modelSelector: any);
|
|
11
|
+
execute(questions: InquisitorQuestion[]): Promise<Array<{
|
|
12
|
+
question: string;
|
|
13
|
+
answer: string;
|
|
14
|
+
autoGenerated: boolean;
|
|
15
|
+
}>>;
|
|
16
|
+
private askQuestion;
|
|
17
|
+
private generateSmartDefault;
|
|
18
|
+
private openEditor;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Inquisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inquisitor.d.ts","sourceRoot":"","sources":["../../../src/agents/core/Inquisitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAS3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IACzD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IAe1D,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;YAc9G,WAAW;YA0DX,oBAAoB;YA2CpB,UAAU;CA2CzB"}
|
|
@@ -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.Inquisitor = void 0;
|
|
7
|
+
const BaseAgent_1 = require("../base/BaseAgent");
|
|
8
|
+
const modelSelector_1 = require("../../utils/modelSelector");
|
|
9
|
+
const enquirer_1 = __importDefault(require("enquirer"));
|
|
10
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
12
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const os_1 = __importDefault(require("os"));
|
|
15
|
+
class Inquisitor extends BaseAgent_1.BaseAgent {
|
|
16
|
+
constructor(apiKey, costTracker, modelSelector) {
|
|
17
|
+
const config = {
|
|
18
|
+
systemPrompt: `You are the Inquisitor, an expert game designer conducting an interview.
|
|
19
|
+
Your role is to extract comprehensive game design information through targeted questions.
|
|
20
|
+
When generating smart defaults (AI Decide), consider:
|
|
21
|
+
1. Genre conventions and player expectations
|
|
22
|
+
2. Technical feasibility
|
|
23
|
+
3. Scope management (avoid over-scoping)
|
|
24
|
+
4. Internal consistency
|
|
25
|
+
|
|
26
|
+
Always provide reasoning for auto-generated choices and mark them clearly.`
|
|
27
|
+
};
|
|
28
|
+
super(apiKey, config, costTracker, modelSelector);
|
|
29
|
+
}
|
|
30
|
+
async execute(questions) {
|
|
31
|
+
const transcript = [];
|
|
32
|
+
console.log(picocolors_1.default.cyan('\n🎮 GameForge Discovery Phase\n'));
|
|
33
|
+
console.log(picocolors_1.default.dim('Answer questions to define your game. Use "AI Decide" for smart defaults.\n'));
|
|
34
|
+
for (const q of questions) {
|
|
35
|
+
const result = await this.askQuestion(q, transcript);
|
|
36
|
+
transcript.push(result);
|
|
37
|
+
}
|
|
38
|
+
return transcript;
|
|
39
|
+
}
|
|
40
|
+
async askQuestion(q, context) {
|
|
41
|
+
const choices = [];
|
|
42
|
+
if (q.suggestedAnswers) {
|
|
43
|
+
choices.push(...q.suggestedAnswers);
|
|
44
|
+
}
|
|
45
|
+
if (q.allowAIDecide) {
|
|
46
|
+
choices.push('✨ AI Decide (Smart Default)');
|
|
47
|
+
}
|
|
48
|
+
if (q.allowCustom) {
|
|
49
|
+
choices.push('✏️ Custom Answer');
|
|
50
|
+
}
|
|
51
|
+
const response = await enquirer_1.default.prompt({
|
|
52
|
+
type: 'select',
|
|
53
|
+
name: 'choice',
|
|
54
|
+
message: q.question,
|
|
55
|
+
choices
|
|
56
|
+
});
|
|
57
|
+
// Handle AI Decide
|
|
58
|
+
if (response.choice === '✨ AI Decide (Smart Default)') {
|
|
59
|
+
const aiAnswer = await this.generateSmartDefault(q, context);
|
|
60
|
+
// Show AI choice and ask for confirmation
|
|
61
|
+
console.log(picocolors_1.default.yellow(`\n🤖 AI Suggests: ${aiAnswer.answer}`));
|
|
62
|
+
console.log(picocolors_1.default.dim(` Reasoning: ${aiAnswer.reasoning}\n`));
|
|
63
|
+
const confirm = await enquirer_1.default.prompt({
|
|
64
|
+
type: 'confirm',
|
|
65
|
+
name: 'accept',
|
|
66
|
+
message: 'Accept this suggestion?',
|
|
67
|
+
initial: true
|
|
68
|
+
});
|
|
69
|
+
if (confirm.accept) {
|
|
70
|
+
return { question: q.question, answer: aiAnswer.answer, autoGenerated: true };
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Re-ask the question
|
|
74
|
+
return this.askQuestion(q, context);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Handle Custom Answer
|
|
78
|
+
if (response.choice === '✏️ Custom Answer') {
|
|
79
|
+
const answer = await this.openEditor(q.question);
|
|
80
|
+
return { question: q.question, answer, autoGenerated: false };
|
|
81
|
+
}
|
|
82
|
+
// Regular choice
|
|
83
|
+
return { question: q.question, answer: response.choice, autoGenerated: false };
|
|
84
|
+
}
|
|
85
|
+
async generateSmartDefault(q, context) {
|
|
86
|
+
const contextStr = context
|
|
87
|
+
.map(c => `Q: ${c.question}\nA: ${c.answer}`)
|
|
88
|
+
.join('\n\n');
|
|
89
|
+
const prompt = `Based on this game design context:
|
|
90
|
+
${contextStr}
|
|
91
|
+
|
|
92
|
+
Question: ${q.question}
|
|
93
|
+
${q.suggestedAnswers ? `Suggested options: ${q.suggestedAnswers.join(', ')}` : ''}
|
|
94
|
+
|
|
95
|
+
Provide a smart default answer that:
|
|
96
|
+
1. Fits the established genre and style
|
|
97
|
+
2. Is technically feasible
|
|
98
|
+
3. Maintains reasonable scope
|
|
99
|
+
4. Is internally consistent with previous answers
|
|
100
|
+
|
|
101
|
+
Respond in JSON format:
|
|
102
|
+
{
|
|
103
|
+
"answer": "your suggested answer",
|
|
104
|
+
"reasoning": "brief explanation (1-2 sentences)"
|
|
105
|
+
}`;
|
|
106
|
+
const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.MODERATE, {
|
|
107
|
+
initialMaxTokens: 8000,
|
|
108
|
+
maxRetries: 2,
|
|
109
|
+
temperature: 0.7
|
|
110
|
+
});
|
|
111
|
+
try {
|
|
112
|
+
const parsed = JSON.parse(result.content);
|
|
113
|
+
return parsed;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return {
|
|
117
|
+
answer: q.suggestedAnswers?.[0] || 'Standard approach',
|
|
118
|
+
reasoning: 'Default fallback'
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async openEditor(question) {
|
|
123
|
+
// Create a temporary file
|
|
124
|
+
const tmpDir = os_1.default.tmpdir();
|
|
125
|
+
const tmpFile = path_1.default.join(tmpDir, `gameforge-${Date.now()}.txt`);
|
|
126
|
+
// Write the question as a comment at the top
|
|
127
|
+
const initialContent = `# ${question}\n# Write your answer below, then save and close the editor\n\n`;
|
|
128
|
+
await fs_extra_1.default.writeFile(tmpFile, initialContent, 'utf-8');
|
|
129
|
+
// Determine which editor to use
|
|
130
|
+
const editor = process.env.VISUAL || process.env.EDITOR || 'vim';
|
|
131
|
+
console.log(picocolors_1.default.dim(`\nOpening ${editor}... (save and close when done)`));
|
|
132
|
+
try {
|
|
133
|
+
// Open the editor synchronously (blocks until user closes it)
|
|
134
|
+
(0, child_process_1.execSync)(`${editor} "${tmpFile}"`, { stdio: 'inherit' });
|
|
135
|
+
// Read the file content
|
|
136
|
+
let content = await fs_extra_1.default.readFile(tmpFile, 'utf-8');
|
|
137
|
+
// Remove comment lines (lines starting with #)
|
|
138
|
+
content = content
|
|
139
|
+
.split('\n')
|
|
140
|
+
.filter(line => !line.trim().startsWith('#'))
|
|
141
|
+
.join('\n')
|
|
142
|
+
.trim();
|
|
143
|
+
// Clean up temp file
|
|
144
|
+
await fs_extra_1.default.remove(tmpFile);
|
|
145
|
+
if (!content) {
|
|
146
|
+
console.log(picocolors_1.default.yellow('No content entered. Please try again.'));
|
|
147
|
+
return this.openEditor(question);
|
|
148
|
+
}
|
|
149
|
+
return content;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error(picocolors_1.default.red('Error opening editor:'), error);
|
|
153
|
+
await fs_extra_1.default.remove(tmpFile);
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.Inquisitor = Inquisitor;
|
|
159
|
+
//# sourceMappingURL=Inquisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inquisitor.js","sourceRoot":"","sources":["../../../src/agents/core/Inquisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseAgent } from '../base/BaseAgent';
|
|
2
|
+
import { GameBible } from '../../config/schema';
|
|
3
|
+
import { ChaosIssue } from './Chaos';
|
|
4
|
+
import { ConsistencyIssue } from './Consistency';
|
|
5
|
+
export interface RemediationResult {
|
|
6
|
+
updatedBible: GameBible;
|
|
7
|
+
fixedIssues: string[];
|
|
8
|
+
unfixableIssues: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare class Remediation extends BaseAgent {
|
|
11
|
+
constructor(apiKey: string, costTracker: any, modelSelector: any);
|
|
12
|
+
execute(bible: GameBible, consistencyIssues: ConsistencyIssue[], chaosIssues: ChaosIssue[], onProgress?: (message: string) => void): Promise<RemediationResult>;
|
|
13
|
+
private formatIssues;
|
|
14
|
+
private parseResult;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Remediation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Remediation.d.ts","sourceRoot":"","sources":["../../../src/agents/core/Remediation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IA0B1D,OAAO,CACX,KAAK,EAAE,SAAS,EAChB,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,iBAAiB,CAAC;IAsC7B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,WAAW;CA6DpB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Remediation = void 0;
|
|
4
|
+
const BaseAgent_1 = require("../base/BaseAgent");
|
|
5
|
+
const modelSelector_1 = require("../../utils/modelSelector");
|
|
6
|
+
const schema_1 = require("../../config/schema");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
class Remediation extends BaseAgent_1.BaseAgent {
|
|
9
|
+
constructor(apiKey, costTracker, modelSelector) {
|
|
10
|
+
const config = {
|
|
11
|
+
systemPrompt: `You are the Remediation Agent, responsible for fixing issues in Game Design Documents.
|
|
12
|
+
|
|
13
|
+
Your role is to:
|
|
14
|
+
1. Analyze reported issues (consistency and design problems)
|
|
15
|
+
2. Apply targeted fixes to the GameBible JSON
|
|
16
|
+
3. Preserve the original design intent while resolving conflicts
|
|
17
|
+
4. Prioritize critical issues over minor ones
|
|
18
|
+
|
|
19
|
+
Rules:
|
|
20
|
+
1. NEVER remove features entirely - only modify them to fix issues
|
|
21
|
+
2. When fixing missing dependencies, CREATE a stub feature with the missing ID
|
|
22
|
+
3. When fixing circular dependencies, remove the dependency that makes least logical sense
|
|
23
|
+
4. Maintain ID naming conventions: FEAT-XXX, NPC-XXX, ITEM-XXX, MON-XXX, INT-XXX
|
|
24
|
+
5. Keep all existing data unless it directly causes the reported issue
|
|
25
|
+
6. For scope issues, adjust asset counts or estimatedScope field appropriately
|
|
26
|
+
7. For gameplay issues, add missing mechanics or clarify existing ones
|
|
27
|
+
|
|
28
|
+
Output ONLY raw JSON, no markdown code blocks, no commentary.
|
|
29
|
+
Do NOT wrap the JSON in \`\`\`json or \`\`\` tags.`,
|
|
30
|
+
temperature: 0.3
|
|
31
|
+
};
|
|
32
|
+
super(apiKey, config, costTracker, modelSelector);
|
|
33
|
+
}
|
|
34
|
+
async execute(bible, consistencyIssues, chaosIssues, onProgress) {
|
|
35
|
+
const issuesDescription = this.formatIssues(consistencyIssues, chaosIssues);
|
|
36
|
+
const prompt = `Fix the following issues in this Game Design Document.
|
|
37
|
+
|
|
38
|
+
## Issues to Fix:
|
|
39
|
+
${issuesDescription}
|
|
40
|
+
|
|
41
|
+
## Current GameBible:
|
|
42
|
+
${JSON.stringify(bible, null, 2)}
|
|
43
|
+
|
|
44
|
+
## Instructions:
|
|
45
|
+
1. For each issue, apply the minimum necessary fix
|
|
46
|
+
2. For missing dependencies: Create a stub feature with that ID (minimal fields)
|
|
47
|
+
3. For circular dependencies: Remove the dependency that makes least logical sense
|
|
48
|
+
4. For naming convention issues: Rename to follow FEAT-XXX, NPC-XXX, ITEM-XXX, MON-XXX, INT-XXX patterns
|
|
49
|
+
5. For scope issues: Adjust asset counts or estimatedScope field
|
|
50
|
+
6. For gameplay issues: Add missing mechanics or clarify existing ones
|
|
51
|
+
7. For technical issues: Adjust complexity ratings or add implementation notes
|
|
52
|
+
|
|
53
|
+
## Response Format:
|
|
54
|
+
{
|
|
55
|
+
"updatedBible": { /* Complete GameBible with ALL fixes applied */ },
|
|
56
|
+
"fixedIssues": ["Brief description of fix 1", "Brief description of fix 2"],
|
|
57
|
+
"unfixableIssues": ["Issue that cannot be automatically fixed"]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Output only valid JSON. Apply ALL fixes you can to the bible.`;
|
|
61
|
+
const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.COMPLEX, {
|
|
62
|
+
initialMaxTokens: 32000,
|
|
63
|
+
maxRetries: 2,
|
|
64
|
+
onProgress
|
|
65
|
+
});
|
|
66
|
+
return this.parseResult(result.content, bible);
|
|
67
|
+
}
|
|
68
|
+
formatIssues(consistencyIssues, chaosIssues) {
|
|
69
|
+
const lines = [];
|
|
70
|
+
if (consistencyIssues.length > 0) {
|
|
71
|
+
lines.push('### Consistency Issues (Rule-based):');
|
|
72
|
+
consistencyIssues.forEach((issue, idx) => {
|
|
73
|
+
lines.push(`${idx + 1}. [${issue.severity}] ${issue.message}`);
|
|
74
|
+
lines.push(` Location: ${issue.location}`);
|
|
75
|
+
if (issue.suggestion) {
|
|
76
|
+
lines.push(` Suggestion: ${issue.suggestion}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (chaosIssues.length > 0) {
|
|
81
|
+
lines.push('');
|
|
82
|
+
lines.push('### Design Issues (LLM-detected):');
|
|
83
|
+
chaosIssues.forEach((issue, idx) => {
|
|
84
|
+
lines.push(`${idx + 1}. [${issue.severity}] ${issue.category}: ${issue.description}`);
|
|
85
|
+
lines.push(` Location: ${issue.location}`);
|
|
86
|
+
lines.push(` Recommendation: ${issue.recommendation}`);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return lines.join('\n');
|
|
90
|
+
}
|
|
91
|
+
parseResult(content, originalBible) {
|
|
92
|
+
let jsonStr = content.trim();
|
|
93
|
+
// Handle markdown code blocks
|
|
94
|
+
const codeBlockMatch = content.match(/```(?:json)?\n?([\s\S]*?)\n?```/);
|
|
95
|
+
if (codeBlockMatch) {
|
|
96
|
+
jsonStr = codeBlockMatch[1].trim();
|
|
97
|
+
}
|
|
98
|
+
// Find JSON object boundaries
|
|
99
|
+
if (!jsonStr.startsWith('{')) {
|
|
100
|
+
const firstBrace = jsonStr.indexOf('{');
|
|
101
|
+
const lastBrace = jsonStr.lastIndexOf('}');
|
|
102
|
+
if (firstBrace !== -1 && lastBrace > firstBrace) {
|
|
103
|
+
jsonStr = jsonStr.substring(firstBrace, lastBrace + 1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const parsed = JSON.parse(jsonStr);
|
|
108
|
+
// Validate the updated bible against schema
|
|
109
|
+
if (parsed.updatedBible) {
|
|
110
|
+
try {
|
|
111
|
+
const validated = schema_1.GameBibleSchema.parse(parsed.updatedBible);
|
|
112
|
+
return {
|
|
113
|
+
updatedBible: validated,
|
|
114
|
+
fixedIssues: parsed.fixedIssues || [],
|
|
115
|
+
unfixableIssues: parsed.unfixableIssues || []
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (zodError) {
|
|
119
|
+
if (zodError instanceof zod_1.ZodError) {
|
|
120
|
+
// Schema validation failed - return original bible
|
|
121
|
+
return {
|
|
122
|
+
updatedBible: originalBible,
|
|
123
|
+
fixedIssues: [],
|
|
124
|
+
unfixableIssues: [
|
|
125
|
+
'Remediation output failed schema validation',
|
|
126
|
+
...zodError.errors.slice(0, 3).map(e => `${e.path.join('.')}: ${e.message}`)
|
|
127
|
+
]
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
throw zodError;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// No updatedBible in response
|
|
134
|
+
return {
|
|
135
|
+
updatedBible: originalBible,
|
|
136
|
+
fixedIssues: [],
|
|
137
|
+
unfixableIssues: ['Remediation response did not contain updatedBible']
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// JSON parsing failed - return original bible unchanged
|
|
142
|
+
return {
|
|
143
|
+
updatedBible: originalBible,
|
|
144
|
+
fixedIssues: [],
|
|
145
|
+
unfixableIssues: ['Failed to parse remediation response']
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.Remediation = Remediation;
|
|
151
|
+
//# sourceMappingURL=Remediation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Remediation.js","sourceRoot":"","sources":["../../../src/agents/core/Remediation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseAgent } from '../base/BaseAgent';
|
|
2
|
+
import { GameBible } from '../../config/schema';
|
|
3
|
+
export declare class CreativeSpecialist extends BaseAgent {
|
|
4
|
+
constructor(apiKey: string, costTracker: any, modelSelector: any);
|
|
5
|
+
execute(bible: GameBible, onProgress?: (message: string) => void): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=CreativeSpecialist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreativeSpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/CreativeSpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IAc1D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAiDzF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreativeSpecialist = void 0;
|
|
4
|
+
const BaseAgent_1 = require("../base/BaseAgent");
|
|
5
|
+
const modelSelector_1 = require("../../utils/modelSelector");
|
|
6
|
+
class CreativeSpecialist extends BaseAgent_1.BaseAgent {
|
|
7
|
+
constructor(apiKey, costTracker, modelSelector) {
|
|
8
|
+
const config = {
|
|
9
|
+
systemPrompt: `You are a Creative Direction Specialist.
|
|
10
|
+
Generate detailed creative documentation including:
|
|
11
|
+
- Art style guides
|
|
12
|
+
- Audio mood boards
|
|
13
|
+
- Asset requirements breakdown
|
|
14
|
+
- Pipeline and workflow
|
|
15
|
+
|
|
16
|
+
Be descriptive and provide actionable direction for artists.`
|
|
17
|
+
};
|
|
18
|
+
super(apiKey, config, costTracker, modelSelector);
|
|
19
|
+
}
|
|
20
|
+
async execute(bible, onProgress) {
|
|
21
|
+
const prompt = `Generate comprehensive creative direction documentation:
|
|
22
|
+
|
|
23
|
+
Creative Spec: ${JSON.stringify(bible.creative, null, 2)}
|
|
24
|
+
Game: ${bible.meta.title} (${bible.meta.genre.join(', ')})
|
|
25
|
+
|
|
26
|
+
Create markdown with these sections:
|
|
27
|
+
|
|
28
|
+
# 01. Creative Direction
|
|
29
|
+
|
|
30
|
+
## Art Style
|
|
31
|
+
${bible.creative.artStyle}
|
|
32
|
+
|
|
33
|
+
## Audio Mood
|
|
34
|
+
${bible.creative.audioMood}
|
|
35
|
+
|
|
36
|
+
${bible.creative.referenceLinks && bible.creative.referenceLinks.length > 0 ? `
|
|
37
|
+
## References
|
|
38
|
+
${bible.creative.referenceLinks.map(link => `- ${link}`).join('\n')}
|
|
39
|
+
` : ''}
|
|
40
|
+
|
|
41
|
+
## Asset Requirements
|
|
42
|
+
|
|
43
|
+
| Category | Quantity |
|
|
44
|
+
|----------|----------|
|
|
45
|
+
| Characters | ${bible.creative.assetRequirements.characters} |
|
|
46
|
+
| Environments | ${bible.creative.assetRequirements.environments} |
|
|
47
|
+
| Props | ${bible.creative.assetRequirements.props} |
|
|
48
|
+
| UI Elements | ${bible.creative.assetRequirements.ui} |
|
|
49
|
+
| Sound Effects | ${bible.creative.assetRequirements.sfx} |
|
|
50
|
+
| Music Tracks | ${bible.creative.assetRequirements.music} |
|
|
51
|
+
|
|
52
|
+
**Total Assets**: ${Object.values(bible.creative.assetRequirements).reduce((a, b) => a + b, 0)}
|
|
53
|
+
|
|
54
|
+
## Production Pipeline
|
|
55
|
+
|
|
56
|
+
**Tools Required**: ${bible.creative.pipeline.toolsRequired.join(', ')}
|
|
57
|
+
|
|
58
|
+
${bible.creative.pipeline.workflowNotes ? `**Workflow Notes**: ${bible.creative.pipeline.workflowNotes}` : ''}
|
|
59
|
+
|
|
60
|
+
Expand each section with practical guidance for the art team.`;
|
|
61
|
+
const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.MODERATE, {
|
|
62
|
+
initialMaxTokens: 16000,
|
|
63
|
+
maxRetries: 2,
|
|
64
|
+
onProgress: onProgress
|
|
65
|
+
});
|
|
66
|
+
return result.content;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.CreativeSpecialist = CreativeSpecialist;
|
|
70
|
+
//# sourceMappingURL=CreativeSpecialist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreativeSpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/CreativeSpecialist.ts"],"names":[],"mappings":";;;AAAA,iDAA2D;AAC3D,6DAA2D;AAG3D,MAAa,kBAAmB,SAAQ,qBAAS;IAC/C,YAAY,MAAc,EAAE,WAAgB,EAAE,aAAkB;QAC9D,MAAM,MAAM,GAAgB;YAC1B,YAAY,EAAE;;;;;;;6DAOyC;SACxD,CAAC;QACF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,UAAsC;QACpE,MAAM,MAAM,GAAG;;iBAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;EAOtD,KAAK,CAAC,QAAQ,CAAC,QAAQ;;;EAGvB,KAAK,CAAC,QAAQ,CAAC,SAAS;;EAExB,KAAK,CAAC,QAAQ,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;EAE5E,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAClE,CAAC,CAAC,CAAC,EAAE;;;;;;iBAMW,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU;mBACzC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY;YACpD,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK;kBAChC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBACjC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG;mBACrC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK;;oBAErC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;;;sBAIxE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;EAEpE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;;8DAE/C,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,8BAAc,CAAC,QAAQ,EAAE;YAC9E,gBAAgB,EAAE,KAAK;YACvB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AAhED,gDAgEC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseAgent } from '../base/BaseAgent';
|
|
2
|
+
import { GameBible } from '../../config/schema';
|
|
3
|
+
export declare class EntitySpecialist extends BaseAgent {
|
|
4
|
+
constructor(apiKey: string, costTracker: any, modelSelector: any);
|
|
5
|
+
execute(bible: GameBible, onProgress?: (message: string) => void): Promise<string>;
|
|
6
|
+
private generateEntityDoc;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=EntitySpecialist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitySpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/EntitySpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAU,MAAM,qBAAqB,CAAC;AAExD,qBAAa,gBAAiB,SAAQ,SAAS;gBACjC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IAc1D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAqB1E,iBAAiB;CAoChC"}
|