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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +366 -0
  3. package/dist/agents/base/BaseAgent.d.ts +45 -0
  4. package/dist/agents/base/BaseAgent.d.ts.map +1 -0
  5. package/dist/agents/base/BaseAgent.js +179 -0
  6. package/dist/agents/base/BaseAgent.js.map +1 -0
  7. package/dist/agents/core/Architect.d.ts +16 -0
  8. package/dist/agents/core/Architect.d.ts.map +1 -0
  9. package/dist/agents/core/Architect.js +487 -0
  10. package/dist/agents/core/Architect.js.map +1 -0
  11. package/dist/agents/core/Chaos.d.ts +14 -0
  12. package/dist/agents/core/Chaos.d.ts.map +1 -0
  13. package/dist/agents/core/Chaos.js +67 -0
  14. package/dist/agents/core/Chaos.js.map +1 -0
  15. package/dist/agents/core/Consistency.d.ts +16 -0
  16. package/dist/agents/core/Consistency.d.ts.map +1 -0
  17. package/dist/agents/core/Consistency.js +132 -0
  18. package/dist/agents/core/Consistency.js.map +1 -0
  19. package/dist/agents/core/Inquisitor.d.ts +20 -0
  20. package/dist/agents/core/Inquisitor.d.ts.map +1 -0
  21. package/dist/agents/core/Inquisitor.js +159 -0
  22. package/dist/agents/core/Inquisitor.js.map +1 -0
  23. package/dist/agents/core/Remediation.d.ts +16 -0
  24. package/dist/agents/core/Remediation.d.ts.map +1 -0
  25. package/dist/agents/core/Remediation.js +151 -0
  26. package/dist/agents/core/Remediation.js.map +1 -0
  27. package/dist/agents/specialists/CreativeSpecialist.d.ts +7 -0
  28. package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -0
  29. package/dist/agents/specialists/CreativeSpecialist.js +70 -0
  30. package/dist/agents/specialists/CreativeSpecialist.js.map +1 -0
  31. package/dist/agents/specialists/EntitySpecialist.d.ts +8 -0
  32. package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -0
  33. package/dist/agents/specialists/EntitySpecialist.js +74 -0
  34. package/dist/agents/specialists/EntitySpecialist.js.map +1 -0
  35. package/dist/agents/specialists/FeatureSpecialist.d.ts +8 -0
  36. package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -0
  37. package/dist/agents/specialists/FeatureSpecialist.js +83 -0
  38. package/dist/agents/specialists/FeatureSpecialist.js.map +1 -0
  39. package/dist/agents/specialists/TechSpecialist.d.ts +7 -0
  40. package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -0
  41. package/dist/agents/specialists/TechSpecialist.js +62 -0
  42. package/dist/agents/specialists/TechSpecialist.js.map +1 -0
  43. package/dist/config/budget.d.ts +36 -0
  44. package/dist/config/budget.d.ts.map +1 -0
  45. package/dist/config/budget.js +37 -0
  46. package/dist/config/budget.js.map +1 -0
  47. package/dist/config/schema.d.ts +1336 -0
  48. package/dist/config/schema.d.ts.map +1 -0
  49. package/dist/config/schema.js +134 -0
  50. package/dist/config/schema.js.map +1 -0
  51. package/dist/config/templates.d.ts +10 -0
  52. package/dist/config/templates.d.ts.map +1 -0
  53. package/dist/config/templates.js +202 -0
  54. package/dist/config/templates.js.map +1 -0
  55. package/dist/core/CheckpointManager.d.ts +16 -0
  56. package/dist/core/CheckpointManager.d.ts.map +1 -0
  57. package/dist/core/CheckpointManager.js +52 -0
  58. package/dist/core/CheckpointManager.js.map +1 -0
  59. package/dist/core/Orchestrator.d.ts +11 -0
  60. package/dist/core/Orchestrator.d.ts.map +1 -0
  61. package/dist/core/Orchestrator.js +46 -0
  62. package/dist/core/Orchestrator.js.map +1 -0
  63. package/dist/core/SessionManager.d.ts +68 -0
  64. package/dist/core/SessionManager.d.ts.map +1 -0
  65. package/dist/core/SessionManager.js +162 -0
  66. package/dist/core/SessionManager.js.map +1 -0
  67. package/dist/core/StateMachine.d.ts +46 -0
  68. package/dist/core/StateMachine.d.ts.map +1 -0
  69. package/dist/core/StateMachine.js +82 -0
  70. package/dist/core/StateMachine.js.map +1 -0
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +830 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/utils/costTracker.d.ts +30 -0
  76. package/dist/utils/costTracker.d.ts.map +1 -0
  77. package/dist/utils/costTracker.js +64 -0
  78. package/dist/utils/costTracker.js.map +1 -0
  79. package/dist/utils/debugLogger.d.ts +48 -0
  80. package/dist/utils/debugLogger.d.ts.map +1 -0
  81. package/dist/utils/debugLogger.js +179 -0
  82. package/dist/utils/debugLogger.js.map +1 -0
  83. package/dist/utils/fileManager.d.ts +14 -0
  84. package/dist/utils/fileManager.d.ts.map +1 -0
  85. package/dist/utils/fileManager.js +135 -0
  86. package/dist/utils/fileManager.js.map +1 -0
  87. package/dist/utils/modelSelector.d.ts +11 -0
  88. package/dist/utils/modelSelector.d.ts.map +1 -0
  89. package/dist/utils/modelSelector.js +38 -0
  90. package/dist/utils/modelSelector.js.map +1 -0
  91. 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":";;;AASA,MAAa,gBAAgB;IAC3B,QAAQ,CAAC,KAAgB;QACvB,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;QAElD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,wBAAwB,CAAC,KAAgB;QAC/C,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1D,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC/B,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,sCAAsC,KAAK,GAAG;wBAC/E,QAAQ,EAAE,YAAY,OAAO,CAAC,EAAE,gBAAgB;wBAChD,UAAU,EAAE,kBAAkB,KAAK,4BAA4B;qBAChE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,wBAAwB,CAAC,KAAgB;QAC/C,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,MAA6B,EAAW,EAAE;YAC7E,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;wBAAE,OAAO,IAAI,CAAC;gBACzC,CAAC;qBAAM,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,iCAAiC,SAAS,MAAM,GAAG,EAAE;wBAC9D,QAAQ,EAAE,YAAY,SAAS,gBAAgB;qBAChD,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,yBAAyB,CAAC,KAAgB;QAChD,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,kDAAkD,OAAO,CAAC,EAAE,GAAG;oBACxE,QAAQ,EAAE,YAAY,GAAG,MAAM;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,iDAAiD,MAAM,CAAC,EAAE,GAAG;oBACtE,QAAQ,EAAE,eAAe,GAAG,MAAM;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,KAAgB;QACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAErE,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,KAAK,yCAAyC;gBAC1D,QAAQ,EAAE,4BAA4B;gBACtC,UAAU,EAAE,mEAAmE;aAChF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,iCAAiC;gBAC1C,QAAQ,EAAE,4BAA4B;gBACtC,UAAU,EAAE,sCAAsC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAAC,KAAgB;QAC5C,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAEnE,mBAAmB;QACnB,MAAM,MAAM,GAAG;YACb,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,yDAAyD,EAAE;YAC3G,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,2DAA2D,EAAE;YAC5G,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,qDAAqD,EAAE;YACrG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,wDAAwD,EAAE;SACtG,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtG,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,sBAAsB,KAAK,CAAC,KAAK,WAAW;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAnJD,4CAmJC"}
@@ -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"}