gameforge-cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +81 -41
  2. package/dist/agents/base/BaseAgent.d.ts +31 -0
  3. package/dist/agents/base/BaseAgent.d.ts.map +1 -1
  4. package/dist/agents/base/BaseAgent.js +57 -0
  5. package/dist/agents/base/BaseAgent.js.map +1 -1
  6. package/dist/agents/core/Architect.d.ts +17 -5
  7. package/dist/agents/core/Architect.d.ts.map +1 -1
  8. package/dist/agents/core/Architect.js +263 -150
  9. package/dist/agents/core/Architect.js.map +1 -1
  10. package/dist/agents/core/Chaos.d.ts +4 -0
  11. package/dist/agents/core/Chaos.d.ts.map +1 -1
  12. package/dist/agents/core/Chaos.js +46 -11
  13. package/dist/agents/core/Chaos.js.map +1 -1
  14. package/dist/agents/core/Consistency.d.ts +1 -0
  15. package/dist/agents/core/Consistency.d.ts.map +1 -1
  16. package/dist/agents/core/Consistency.js +86 -11
  17. package/dist/agents/core/Consistency.js.map +1 -1
  18. package/dist/agents/core/Modifier.d.ts +13 -0
  19. package/dist/agents/core/Modifier.d.ts.map +1 -0
  20. package/dist/agents/core/Modifier.js +141 -0
  21. package/dist/agents/core/Modifier.js.map +1 -0
  22. package/dist/agents/core/Remediation.d.ts +3 -1
  23. package/dist/agents/core/Remediation.d.ts.map +1 -1
  24. package/dist/agents/core/Remediation.js +63 -3
  25. package/dist/agents/core/Remediation.js.map +1 -1
  26. package/dist/agents/specialists/CreativeSpecialist.d.ts.map +1 -1
  27. package/dist/agents/specialists/CreativeSpecialist.js +94 -25
  28. package/dist/agents/specialists/CreativeSpecialist.js.map +1 -1
  29. package/dist/agents/specialists/EntitySpecialist.d.ts.map +1 -1
  30. package/dist/agents/specialists/EntitySpecialist.js +63 -25
  31. package/dist/agents/specialists/EntitySpecialist.js.map +1 -1
  32. package/dist/agents/specialists/FeatureSpecialist.d.ts.map +1 -1
  33. package/dist/agents/specialists/FeatureSpecialist.js +53 -39
  34. package/dist/agents/specialists/FeatureSpecialist.js.map +1 -1
  35. package/dist/agents/specialists/TechSpecialist.d.ts.map +1 -1
  36. package/dist/agents/specialists/TechSpecialist.js +69 -32
  37. package/dist/agents/specialists/TechSpecialist.js.map +1 -1
  38. package/dist/config/schema.d.ts +1319 -709
  39. package/dist/config/schema.d.ts.map +1 -1
  40. package/dist/config/schema.js +142 -52
  41. package/dist/config/schema.js.map +1 -1
  42. package/dist/config/templates.d.ts.map +1 -1
  43. package/dist/config/templates.js +6 -66
  44. package/dist/config/templates.js.map +1 -1
  45. package/dist/core/Orchestrator.d.ts +17 -3
  46. package/dist/core/Orchestrator.d.ts.map +1 -1
  47. package/dist/core/Orchestrator.js +46 -16
  48. package/dist/core/Orchestrator.js.map +1 -1
  49. package/dist/index.js +335 -195
  50. package/dist/index.js.map +1 -1
  51. package/dist/types/issueReview.d.ts +19 -0
  52. package/dist/types/issueReview.d.ts.map +1 -0
  53. package/dist/types/issueReview.js +3 -0
  54. package/dist/types/issueReview.js.map +1 -0
  55. package/dist/utils/costTracker.d.ts +28 -0
  56. package/dist/utils/costTracker.d.ts.map +1 -1
  57. package/dist/utils/costTracker.js +71 -1
  58. package/dist/utils/costTracker.js.map +1 -1
  59. package/dist/utils/disambiguationHelper.d.ts +54 -0
  60. package/dist/utils/disambiguationHelper.d.ts.map +1 -0
  61. package/dist/utils/disambiguationHelper.js +252 -0
  62. package/dist/utils/disambiguationHelper.js.map +1 -0
  63. package/dist/utils/issueReviewer.d.ts +6 -0
  64. package/dist/utils/issueReviewer.d.ts.map +1 -0
  65. package/dist/utils/issueReviewer.js +159 -0
  66. package/dist/utils/issueReviewer.js.map +1 -0
  67. package/dist/utils/issueSelector.d.ts +26 -0
  68. package/dist/utils/issueSelector.d.ts.map +1 -0
  69. package/dist/utils/issueSelector.js +132 -0
  70. package/dist/utils/issueSelector.js.map +1 -0
  71. package/package.json +1 -1
  72. package/dist/core/CheckpointManager.d.ts +0 -16
  73. package/dist/core/CheckpointManager.d.ts.map +0 -1
  74. package/dist/core/CheckpointManager.js +0 -52
  75. package/dist/core/CheckpointManager.js.map +0 -1
@@ -7,38 +7,95 @@ class CreativeSpecialist extends BaseAgent_1.BaseAgent {
7
7
  constructor(apiKey, costTracker, modelSelector) {
8
8
  const config = {
9
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
10
+ Generate creative vision documentation including:
11
+ - Art style description and mood
12
+ - Audio direction and tone
13
+ - Asset quantity estimates
15
14
 
16
- Be descriptive and provide actionable direction for artists.`
15
+ Focus on the creative vision, not production pipeline details.`
17
16
  };
18
17
  super(apiKey, config, costTracker, modelSelector);
19
18
  }
20
19
  async execute(bible, onProgress) {
21
- const prompt = `Generate comprehensive creative direction documentation:
20
+ if (!bible.creative) {
21
+ return '# Creative Direction\n\n*No creative specifications provided for this design document.*';
22
+ }
23
+ // Per-category MAXIMUM thresholds - only flag if exceeded (not minimums)
24
+ const scope = bible.meta.estimatedScope;
25
+ const assetMaxThresholds = {
26
+ 'Prototype': {
27
+ characters: 4, environments: 2, props: 15, ui: 15,
28
+ sfx: 20, music: 5, animations: 20, cards: 30, vehicles: 3
29
+ },
30
+ 'Vertical Slice': {
31
+ characters: 6, environments: 3, props: 30, ui: 20,
32
+ sfx: 40, music: 8, animations: 40, cards: 60, vehicles: 5
33
+ },
34
+ 'MVP': {
35
+ characters: 10, environments: 5, props: 60, ui: 35,
36
+ sfx: 60, music: 12, animations: 60, cards: 80, vehicles: 10
37
+ },
38
+ 'Full Game': {
39
+ characters: 25, environments: 15, props: 200, ui: 75,
40
+ sfx: 150, music: 30, animations: 200, cards: 200, vehicles: 25
41
+ }
42
+ };
43
+ const thresholds = assetMaxThresholds[scope] || assetMaxThresholds['MVP'];
44
+ const reqs = bible.creative.assetRequirements;
45
+ const overages = [];
46
+ // Check each category against its max threshold
47
+ if (reqs.characters > thresholds.characters) {
48
+ overages.push(`characters (${reqs.characters} > ${thresholds.characters} max)`);
49
+ }
50
+ if (reqs.environments > thresholds.environments) {
51
+ overages.push(`environments (${reqs.environments} > ${thresholds.environments} max)`);
52
+ }
53
+ if (reqs.props > thresholds.props) {
54
+ overages.push(`props (${reqs.props} > ${thresholds.props} max)`);
55
+ }
56
+ if (reqs.ui > thresholds.ui) {
57
+ overages.push(`UI elements (${reqs.ui} > ${thresholds.ui} max)`);
58
+ }
59
+ if (reqs.sfx > thresholds.sfx) {
60
+ overages.push(`SFX (${reqs.sfx} > ${thresholds.sfx} max)`);
61
+ }
62
+ if (reqs.music > thresholds.music) {
63
+ overages.push(`music tracks (${reqs.music} > ${thresholds.music} max)`);
64
+ }
65
+ if (reqs.animations && reqs.animations > thresholds.animations) {
66
+ overages.push(`animations (${reqs.animations} > ${thresholds.animations} max)`);
67
+ }
68
+ if (reqs.cards && reqs.cards > thresholds.cards) {
69
+ overages.push(`cards (${reqs.cards} > ${thresholds.cards} max)`);
70
+ }
71
+ if (reqs.vehicles && reqs.vehicles > thresholds.vehicles) {
72
+ overages.push(`vehicles (${reqs.vehicles} > ${thresholds.vehicles} max)`);
73
+ }
74
+ if (overages.length > 0) {
75
+ await this.askClarification(`The following asset categories exceed typical limits for a "${scope}" scope:\n\n${overages.map(o => `- ${o}`).join('\n')}`, bible, 'Asset Scope');
76
+ }
77
+ const prompt = `Generate creative direction documentation focused on vision and mood:
22
78
 
23
- Creative Spec: ${JSON.stringify(bible.creative, null, 2)}
24
79
  Game: ${bible.meta.title} (${bible.meta.genre.join(', ')})
80
+ Creative Spec: ${JSON.stringify(bible.creative, null, 2)}
25
81
 
26
- Create markdown with these sections:
82
+ Create a markdown document with these sections:
27
83
 
28
- # 01. Creative Direction
84
+ # Creative Direction
29
85
 
30
- ## Art Style
31
- ${bible.creative.artStyle}
86
+ ## Art Style & Visual Identity
87
+ Expand on: "${bible.creative.artStyle}"
88
+ Describe the visual mood, color palette suggestions, and aesthetic influences in 2-3 paragraphs. Focus on the feeling and tone, not technical specifications like texture resolutions or polygon counts.
32
89
 
33
- ## Audio Mood
34
- ${bible.creative.audioMood}
90
+ ## Audio Direction
91
+ Expand on: "${bible.creative.audioMood}"
92
+ Describe the music style, sound design approach, and audio atmosphere in 2-3 paragraphs. Focus on the emotional impact and player experience.
35
93
 
36
- ${bible.creative.referenceLinks && bible.creative.referenceLinks.length > 0 ? `
37
- ## References
94
+ ${bible.creative.referenceLinks && bible.creative.referenceLinks.length > 0 ? `## Visual & Audio References
38
95
  ${bible.creative.referenceLinks.map(link => `- ${link}`).join('\n')}
39
96
  ` : ''}
40
97
 
41
- ## Asset Requirements
98
+ ## Estimated Asset Counts
42
99
 
43
100
  | Category | Quantity |
44
101
  |----------|----------|
@@ -48,18 +105,30 @@ ${bible.creative.referenceLinks.map(link => `- ${link}`).join('\n')}
48
105
  | UI Elements | ${bible.creative.assetRequirements.ui} |
49
106
  | Sound Effects | ${bible.creative.assetRequirements.sfx} |
50
107
  | Music Tracks | ${bible.creative.assetRequirements.music} |
108
+ ${bible.creative.assetRequirements.vehicles !== undefined ? `| Vehicles | ${bible.creative.assetRequirements.vehicles} |` : ''}
109
+ ${bible.creative.assetRequirements.cards !== undefined ? `| Cards | ${bible.creative.assetRequirements.cards} |` : ''}
110
+ ${bible.creative.assetRequirements.animations !== undefined ? `| Animations | ${bible.creative.assetRequirements.animations} |` : ''}
51
111
 
52
- **Total Assets**: ${Object.values(bible.creative.assetRequirements).reduce((a, b) => a + b, 0)}
53
-
54
- ## Production Pipeline
112
+ ${bible.creative.visualNovel ? `## Visual Novel Style
113
+ ${bible.creative.visualNovel.artStyle2D ? `Art approach: ${bible.creative.visualNovel.artStyle2D}` : ''}
114
+ Describe the visual novel aesthetic and character presentation style.
115
+ ` : ''}
55
116
 
56
- **Tools Required**: ${bible.creative.pipeline.toolsRequired.join(', ')}
117
+ ${bible.creative.horror ? `## Horror Atmosphere
118
+ ${bible.creative.horror.atmosphere ? `Mood: ${bible.creative.horror.atmosphere}` : ''}
119
+ ${bible.creative.horror.lighting ? `Lighting approach: ${bible.creative.horror.lighting}` : ''}
120
+ Describe how the visual and audio design creates tension and fear.
121
+ ` : ''}
57
122
 
58
- ${bible.creative.pipeline.workflowNotes ? `**Workflow Notes**: ${bible.creative.pipeline.workflowNotes}` : ''}
123
+ IMPORTANT: Focus on the creative VISION and MOOD. Do NOT include:
124
+ - Production pipeline or workflow details
125
+ - Tool lists or software requirements
126
+ - Technical specifications (texture sizes, poly counts, etc.)
127
+ - File naming conventions or directory structures
59
128
 
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,
129
+ Keep the document concise (2-3 pages max) and focused on inspiring the creative team.`;
130
+ const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.SIMPLE, {
131
+ initialMaxTokens: 6000,
63
132
  maxRetries: 2,
64
133
  onProgress: onProgress
65
134
  });
@@ -1 +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"}
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;;;;;;+DAM2C;SAC1D,CAAC;QACF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAgB,EAAE,UAAsC;QACpE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,yFAAyF,CAAC;QACnG,CAAC;QAED,yEAAyE;QACzE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC,MAAM,kBAAkB,GAA2C;YACjE,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACjD,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC1D;YACD,gBAAgB,EAAE;gBAChB,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACjD,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC1D;YACD,KAAK,EAAE;gBACL,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBAClD,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;aAC5D;YACD,WAAW,EAAE;gBACX,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;gBACpD,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;aAC/D;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,gDAAgD;QAChD,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,MAAM,UAAU,CAAC,UAAU,OAAO,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,YAAY,MAAM,UAAU,CAAC,YAAY,OAAO,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,MAAM,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,MAAM,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,MAAM,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;YAC/D,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,MAAM,UAAU,CAAC,UAAU,OAAO,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,MAAM,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,MAAM,UAAU,CAAC,QAAQ,OAAO,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CACzB,+DAA+D,KAAK,eAAe,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3H,KAAK,EACL,aAAa,CACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG;;QAEX,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;iBACvC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;cAO1C,KAAK,CAAC,QAAQ,CAAC,QAAQ;;;;cAIvB,KAAK,CAAC,QAAQ,CAAC,SAAS;;;EAGpC,KAAK,CAAC,QAAQ,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5E,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;EACvD,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE;EAC5H,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;EACnH,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE;;EAElI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;EAC7B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;;CAEtG,CAAC,CAAC,CAAC,EAAE;;EAEJ,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;EACxB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;EACnF,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;CAE7F,CAAC,CAAC,CAAC,EAAE;;;;;;;;sFAQgF,CAAC;QAEnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,8BAAc,CAAC,MAAM,EAAE;YAC5E,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AA9ID,gDA8IC"}
@@ -1 +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"}
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;IAa1D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YA8D1E,iBAAiB;CA4ChC"}
@@ -7,20 +7,51 @@ class EntitySpecialist extends BaseAgent_1.BaseAgent {
7
7
  constructor(apiKey, costTracker, modelSelector) {
8
8
  const config = {
9
9
  systemPrompt: `You are an Entity Design Specialist.
10
- Generate detailed specifications for game entities (NPCs, Items, Monsters) including:
11
- - Stat tables and attribute breakdowns
12
- - Behavior descriptions
13
- - Narrative context
14
- - Balance formulas
10
+ Generate concise game entity descriptions including:
11
+ - What the entity is and its role in the game
12
+ - Key characteristics and behaviors
13
+ - Brief narrative context if relevant
15
14
 
16
- Be specific and create production-ready documentation.`
15
+ Keep descriptions brief and design-focused. Avoid technical implementation details.`
17
16
  };
18
17
  super(apiKey, config, costTracker, modelSelector);
19
18
  }
20
19
  async execute(bible, onProgress) {
21
- const sections = ['# 03. Game Objects & Entities\n'];
22
- // Group by category
23
- const categories = ['NPC', 'Monster', 'Item', 'Interactable'];
20
+ const sections = ['# Game Objects & Entities\n'];
21
+ // Per-category MAXIMUM thresholds - only flag if exceeded (not minimums)
22
+ const scope = bible.meta.estimatedScope;
23
+ const entityMaxThresholds = {
24
+ 'Prototype': {
25
+ NPC: 5, Monster: 5, Item: 8, Ability: 8, Interactable: 5, Card: 20, Vehicle: 3, Building: 5
26
+ },
27
+ 'Vertical Slice': {
28
+ NPC: 8, Monster: 8, Item: 15, Ability: 12, Interactable: 8, Card: 40, Vehicle: 5, Building: 8
29
+ },
30
+ 'MVP': {
31
+ NPC: 15, Monster: 15, Item: 30, Ability: 20, Interactable: 15, Card: 60, Vehicle: 10, Building: 15
32
+ },
33
+ 'Full Game': {
34
+ NPC: 40, Monster: 40, Item: 80, Ability: 50, Interactable: 40, Card: 150, Vehicle: 25, Building: 40
35
+ }
36
+ };
37
+ const thresholds = entityMaxThresholds[scope] || entityMaxThresholds['MVP'];
38
+ // Count entities by category
39
+ const categoryCounts = {};
40
+ bible.gameObjects.forEach(entity => {
41
+ categoryCounts[entity.category] = (categoryCounts[entity.category] || 0) + 1;
42
+ });
43
+ // Check each category against its max threshold
44
+ const overages = [];
45
+ for (const [category, count] of Object.entries(categoryCounts)) {
46
+ const maxAllowed = thresholds[category];
47
+ if (maxAllowed && count > maxAllowed) {
48
+ overages.push(`${category}s (${count} > ${maxAllowed} max)`);
49
+ }
50
+ }
51
+ if (overages.length > 0) {
52
+ await this.askClarification(`The following entity categories exceed typical limits for a "${scope}" scope:\n\n${overages.map(o => `- ${o}`).join('\n')}`, bible, 'Entity Count');
53
+ }
54
+ const categories = ['NPC', 'Monster', 'Item', 'Interactable', 'Vehicle', 'Card', 'Building', 'Ability'];
24
55
  for (const category of categories) {
25
56
  const entities = bible.gameObjects.filter(e => e.category === category);
26
57
  if (entities.length > 0) {
@@ -35,35 +66,42 @@ Be specific and create production-ready documentation.`
35
66
  return sections.join('\n\n');
36
67
  }
37
68
  async generateEntityDoc(entity, bible, onProgress) {
38
- const prompt = `Generate detailed documentation for this game entity:
69
+ const genre = bible.meta.genre.join(', ');
70
+ const prompt = `Generate a brief, design-focused description for this game entity:
39
71
 
40
72
  Entity: ${JSON.stringify(entity, null, 2)}
41
- Game Context: ${bible.meta.title}
73
+ Game: ${bible.meta.title}
74
+ Genre: ${genre}
42
75
 
43
- Create markdown documentation with:
76
+ Create a concise markdown entry:
44
77
 
45
78
  ### ${entity.name}
46
- **ID**: ${entity.id}
47
- **Category**: ${entity.category}
48
79
 
49
- ${entity.narrative ? `**Backstory**: ${entity.narrative.backstory}\n` : ''}
80
+ Write 2-3 sentences describing what this entity is and its role in the game.
81
+
82
+ ${entity.narrative?.backstory ? `**Background**: Brief narrative context based on: "${entity.narrative.backstory}"` : ''}
50
83
 
51
- **Attributes**:
84
+ ${entity.stats ? `**Key Characteristics**:
52
85
  ${Object.entries(entity.stats.attributes).map(([key, val]) => `- ${key}: ${val}`).join('\n')}
86
+ ` : ''}
53
87
 
54
- **Behaviors**:
55
- ${entity.stats.behaviors.map(b => `- ${b}`).join('\n')}
88
+ ${entity.stats?.behaviors && entity.stats.behaviors.length > 0 ? `**Behaviors**: ${entity.stats.behaviors.join(', ')}` : ''}
56
89
 
57
- ${entity.stats.balanceFormulas && entity.stats.balanceFormulas.length > 0 ? `
58
- **Balance Formulas**:
59
- ${entity.stats.balanceFormulas.map(f => `- ${f.expression}`).join('\n')}
60
- ` : ''}
90
+ ${entity.cardGame ? `**Card Info**: ${entity.cardGame.cardType || 'Card'}${entity.cardGame.effects && entity.cardGame.effects.length > 0 ? ` - ${entity.cardGame.effects.join(', ')}` : ''}` : ''}
91
+
92
+ ${entity.combat ? `**Combat Role**: Describe briefly how this entity participates in combat.` : ''}
61
93
 
62
- ${entity.references.features.length > 0 ? `**Used In Features**: ${entity.references.features.join(', ')}` : ''}
94
+ ${entity.social?.questGiver ? `**Quest Giver**: This character offers quests to the player.` : ''}
63
95
 
64
- Generate this in clean markdown format.`;
96
+ IMPORTANT - Keep it SHORT and DESIGN-FOCUSED:
97
+ - 1 short paragraph describing the entity
98
+ - Simple list of key characteristics (no RPG stat blocks unless this IS an RPG)
99
+ - NO balance formulas or math
100
+ - NO AI implementation details (behavior trees, detection radius, etc.)
101
+ - NO code references or feature IDs
102
+ - Focus on what this entity MEANS to the player experience`;
65
103
  const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.SIMPLE, {
66
- initialMaxTokens: 8000,
104
+ initialMaxTokens: 2000,
67
105
  maxRetries: 2,
68
106
  onProgress: (msg) => onProgress?.(`${entity.name}: ${msg}`)
69
107
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/EntitySpecialist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntitySpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/EntitySpecialist.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/FeatureSpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAW,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,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;YAY1E,kBAAkB;CAqDjC"}
1
+ {"version":3,"file":"FeatureSpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/FeatureSpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAW,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IAa1D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YA0B1E,kBAAkB;CA8DjC"}
@@ -7,18 +7,23 @@ class FeatureSpecialist extends BaseAgent_1.BaseAgent {
7
7
  constructor(apiKey, costTracker, modelSelector) {
8
8
  const config = {
9
9
  systemPrompt: `You are a Feature Design Specialist.
10
- Generate comprehensive technical specifications for game features including:
11
- - Mermaid sequence diagrams for gameplay loops
12
- - Math formulas with variable definitions
13
- - Agile user stories with acceptance criteria
14
- - Data structure pseudo-code
10
+ Generate clear feature descriptions including:
11
+ - What the feature does and why it exists
12
+ - How players interact with it (gameplay loop)
13
+ - UI/UX considerations
15
14
 
16
- Be specific and technical. Use industry-standard notation.`
15
+ Focus on player experience, not technical implementation.`
17
16
  };
18
17
  super(apiKey, config, costTracker, modelSelector);
19
18
  }
20
19
  async execute(bible, onProgress) {
21
- const sections = ['# 02. Systems & Features\n'];
20
+ const sections = ['# Systems & Features\n'];
21
+ // Check for very high complexity features that need clarification
22
+ const veryHighComplexityFeatures = bible.features.filter(f => f.technical.estimatedComplexity === 'Very High');
23
+ if (veryHighComplexityFeatures.length > 0) {
24
+ const feature = veryHighComplexityFeatures[0];
25
+ await this.askClarification(`The feature "${feature.name}" is marked as "Very High" complexity.`, bible, 'Feature Complexity');
26
+ }
22
27
  for (const feature of bible.features) {
23
28
  onProgress?.(`Processing feature ${feature.name}...`);
24
29
  const markdown = await this.generateFeatureDoc(feature, bible, onProgress);
@@ -27,52 +32,61 @@ Be specific and technical. Use industry-standard notation.`
27
32
  return sections.join('\n\n---\n\n');
28
33
  }
29
34
  async generateFeatureDoc(feature, bible, onProgress) {
30
- const prompt = `Generate detailed technical documentation for this game feature:
35
+ const prompt = `Generate a clear, player-focused description for this game feature:
31
36
 
32
37
  Feature: ${JSON.stringify(feature, null, 2)}
33
- Game Context: ${bible.meta.title} (${bible.meta.genre.join(', ')})
38
+ Game: ${bible.meta.title} (${bible.meta.genre.join(', ')})
34
39
 
35
- Create markdown documentation with:
40
+ Create markdown documentation:
36
41
 
37
42
  ## ${feature.name}
38
- **Epic**: ${feature.agile.epic}
39
-
40
- ### Intent
41
- ${feature.intent}
42
43
 
43
- ### Gameplay Loop
44
- \`\`\`mermaid
45
- sequenceDiagram
46
- ${feature.gameplayLoop.map((step, i) => ` participant Step${i} as ${step}`).join('\n')}
47
- \`\`\`
44
+ ### Purpose
45
+ Explain in 2-3 sentences why this feature exists and what it adds to the player experience.
46
+ Base this on: "${feature.intent}"
48
47
 
49
- ### User Stories
50
- ${feature.agile.userStories.map(s => `- ${s}`).join('\n')}
48
+ ${feature.gameplayLoop && feature.gameplayLoop.length > 0 ? `### How It Works
49
+ Describe the gameplay loop in plain language as a numbered list:
50
+ ${feature.gameplayLoop.map((step, i) => `${i + 1}. ${step}`).join('\n')}
51
51
 
52
- ### Technical Specification
53
- **Data Structure**:
54
- \`\`\`cpp
55
- ${feature.technical.dataStructure}
56
- \`\`\`
52
+ Expand each step with 1-2 sentences explaining the player's actions and the game's response.
53
+ ` : ''}
57
54
 
58
- **Math Formulas**:
59
- ${feature.technical.mathFormulas?.map(f => `
60
- - Formula: \\\`${f.expression}\\\`
61
- - Variables: ${Object.entries(f.variables).map(([k, v]) => `${k} (${v.type})`).join(', ')}
62
- `).join('\n') || 'None'}
55
+ ${feature.uiRequirements && feature.uiRequirements.length > 0 ? `### User Interface
56
+ What UI elements does this feature need?
57
+ ${feature.uiRequirements.map(ui => `- ${ui}`).join('\n')}
58
+ ` : ''}
63
59
 
64
- **File Location**: \`${feature.technical.fileLocation}\`
60
+ ${feature.multiplayer ? `### Multiplayer
61
+ - Supports ${feature.multiplayer.playerCount} players
62
+ ${feature.multiplayer.networkModel ? `- Uses ${feature.multiplayer.networkModel} architecture` : ''}
63
+ Briefly describe how multiple players interact with this feature.
64
+ ` : ''}
65
65
 
66
- **Complexity**: ${feature.technical.estimatedComplexity}
66
+ ${feature.economy ? `### Economy Impact
67
+ ${feature.economy.currencies ? `Currencies involved: ${feature.economy.currencies.join(', ')}` : ''}
68
+ Describe how this feature affects the game's economy.
69
+ ` : ''}
67
70
 
68
- ### UI Requirements
69
- ${feature.uiRequirements.map(ui => `- ${ui}`).join('\n')}
71
+ ${feature.progression ? `### Progression
72
+ Describe how players unlock or advance through this feature.
73
+ ${feature.progression.unlockConditions ? `Unlock requirements: ${feature.progression.unlockConditions.join(', ')}` : ''}
74
+ ` : ''}
70
75
 
71
- ${feature.monetization ? `### Monetization\n- Strategy: ${feature.monetization.strategy}\n- ${feature.monetization.implementation}` : ''}
76
+ ${feature.narrative ? `### Story Integration
77
+ How does this feature connect to the game's narrative?
78
+ ${feature.narrative.storyBeats && feature.narrative.storyBeats.length > 0 ? `Key story moments: ${feature.narrative.storyBeats.join(', ')}` : ''}
79
+ ` : ''}
72
80
 
73
- Ensure Mermaid syntax is valid and formulas are properly escaped.`;
74
- const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.MODERATE, {
75
- initialMaxTokens: 16000,
81
+ IMPORTANT - This is a DESIGN document, not an engineering spec:
82
+ - NO code or pseudo-code
83
+ - NO data structures
84
+ - NO math formulas with variable types
85
+ - NO file paths or complexity ratings
86
+ - Focus on WHAT the player experiences, not HOW it's implemented
87
+ - Keep it concise (half a page per feature max)`;
88
+ const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.SIMPLE, {
89
+ initialMaxTokens: 4000,
76
90
  maxRetries: 2,
77
91
  onProgress: (msg) => onProgress?.(`${feature.name}: ${msg}`)
78
92
  });
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/FeatureSpecialist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FeatureSpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/FeatureSpecialist.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechSpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/TechSpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG;IAe1D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAwCzF"}
1
+ {"version":3,"file":"TechSpecialist.d.ts","sourceRoot":"","sources":["../../../src/agents/specialists/TechSpecialist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,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;CAqFzF"}
@@ -6,52 +6,89 @@ const modelSelector_1 = require("../../utils/modelSelector");
6
6
  class TechSpecialist extends BaseAgent_1.BaseAgent {
7
7
  constructor(apiKey, costTracker, modelSelector) {
8
8
  const config = {
9
- systemPrompt: `You are a Technical Specification Specialist.
10
- Generate detailed technical documentation including:
11
- - Engine configuration and setup
12
- - Required tools and their purposes
13
- - Directory structure
14
- - Build targets and deployment
15
- - Localization strategy
16
-
17
- Be precise and actionable.`
9
+ systemPrompt: `You are a Technical Overview Specialist.
10
+ Generate a high-level technical summary for stakeholders including:
11
+ - Recommended game engine and why
12
+ - Target platforms
13
+ - Multiplayer approach (if applicable)
14
+ - Accessibility features
15
+
16
+ Keep it brief and non-technical. This is a design document, not an engineering spec.`
18
17
  };
19
18
  super(apiKey, config, costTracker, modelSelector);
20
19
  }
21
20
  async execute(bible, onProgress) {
22
- const prompt = `Generate comprehensive technical documentation:
21
+ if (!bible.technical) {
22
+ return '# Technical Overview\n\n*No technical specifications provided for this design document.*';
23
+ }
24
+ // Check if targeting too many platforms for the scope
25
+ const platformCount = bible.technical.buildTargets.length;
26
+ const scope = bible.meta.estimatedScope;
27
+ if (platformCount > 2 && (scope === 'Prototype' || scope === 'Vertical Slice')) {
28
+ const result = await this.askClarification(`You're targeting ${platformCount} platforms (${bible.technical.buildTargets.join(', ')}) for a "${scope}" scope.`, bible, 'Platform Scope');
29
+ const decision = (result.answer || '').toLowerCase();
30
+ const currentTargets = bible.technical.buildTargets;
31
+ if (decision.includes('focus on primary') || decision.includes('primary platform')) {
32
+ if (currentTargets.length > 0) {
33
+ bible.technical.buildTargets = [currentTargets[0]];
34
+ onProgress?.(`Technical scope updated: focusing on primary platform "${currentTargets[0]}".`);
35
+ }
36
+ }
37
+ else if (decision.includes('start with fewer') || decision.includes('fewer platform')) {
38
+ if (currentTargets.length > 1) {
39
+ const reducedTargets = currentTargets.slice(0, 2);
40
+ bible.technical.buildTargets = reducedTargets;
41
+ onProgress?.(`Technical scope updated: starting with fewer platforms (${reducedTargets.join(', ')}).`);
42
+ }
43
+ }
44
+ else {
45
+ onProgress?.('Technical scope: keeping all configured platforms.');
46
+ }
47
+ }
48
+ const prompt = `Generate a brief technical overview for stakeholders (not developers):
23
49
 
24
- Technical Spec: ${JSON.stringify(bible.technical, null, 2)}
25
50
  Game: ${bible.meta.title}
51
+ Technical Info: ${JSON.stringify(bible.technical, null, 2)}
26
52
 
27
- Create markdown with these sections:
53
+ Create a concise markdown document with these sections:
28
54
 
29
- # 04. Technical Specification
55
+ # Technical Overview
30
56
 
31
- ## Engine Configuration
32
- **Engine**: ${bible.technical.engine.primary} ${bible.technical.engine.version}
33
- ${bible.technical.engine.plugins && bible.technical.engine.plugins.length > 0 ? `**Plugins**: ${bible.technical.engine.plugins.join(', ')}` : ''}
34
- ${bible.technical.engine.reasoning ? `**Reasoning**: ${bible.technical.engine.reasoning}` : ''}
57
+ ## Game Engine
58
+ Describe the chosen engine (${bible.technical.engine.primary}${bible.technical.engine.version ? ` ${bible.technical.engine.version}` : ''}) and briefly explain why it's a good fit for this project.
59
+ ${bible.technical.engine.reasoning ? `Use this reasoning: ${bible.technical.engine.reasoning}` : ''}
35
60
 
36
- ## Required Tools
37
- ${bible.technical.toolsRequired.map(t => `- **${t.name}**: ${t.purpose} ${t.required ? '(Required)' : '(Optional)'}`).join('\n')}
61
+ ## Target Platforms
62
+ List the platforms: ${bible.technical.buildTargets.join(', ')}
63
+ Briefly mention any platform-specific considerations.
38
64
 
39
- ## Localization
40
- **Strategy**: ${bible.technical.localization.strategy}
41
- ${bible.technical.localization.languages ? `**Languages**: ${bible.technical.localization.languages.join(', ')}` : ''}
42
- ${bible.technical.localization.stringCount ? `**Estimated Strings**: ${bible.technical.localization.stringCount}` : ''}
65
+ ${bible.technical.networking ? `## Multiplayer
66
+ ${bible.technical.networking.architecture ? `Architecture: ${bible.technical.networking.architecture}` : ''}
67
+ ${bible.technical.networking.maxPlayers ? `Supports up to ${bible.technical.networking.maxPlayers} players.` : ''}
68
+ Describe the multiplayer approach in 2-3 sentences.
69
+ ` : ''}
43
70
 
44
- ## Directory Structure
45
- \`\`\`
46
- ${bible.technical.directoryStructure}
47
- \`\`\`
71
+ ${bible.technical.localization ? `## Localization
72
+ Strategy: ${bible.technical.localization.strategy}
73
+ ${bible.technical.localization.languages ? `Languages: ${bible.technical.localization.languages.join(', ')}` : ''}
74
+ ` : ''}
48
75
 
49
- ## Build Targets
50
- ${bible.technical.buildTargets.map(t => `- ${t}`).join('\n')}
76
+ ${bible.technical.accessibility ? `## Accessibility Features
77
+ List the planned accessibility features:
78
+ ${bible.technical.accessibility.colorblindMode ? '- Colorblind mode support' : ''}
79
+ ${bible.technical.accessibility.subtitles ? '- Subtitles for audio' : ''}
80
+ ${bible.technical.accessibility.remappableControls ? '- Remappable controls' : ''}
81
+ ${bible.technical.accessibility.difficultyOptions ? '- Adjustable difficulty options' : ''}
82
+ ` : ''}
51
83
 
52
- Expand on each section with practical implementation notes.`;
53
- const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.MODERATE, {
54
- initialMaxTokens: 16000,
84
+ IMPORTANT: Keep this document SHORT (1-2 pages max). This is for stakeholders to understand the technical direction, not a developer specification. Do NOT include:
85
+ - Code or pseudo-code
86
+ - Directory structures
87
+ - Tool lists
88
+ - Performance metrics
89
+ - Implementation details`;
90
+ const result = await this.callLLMWithAutoRetry(prompt, modelSelector_1.TaskComplexity.SIMPLE, {
91
+ initialMaxTokens: 4000,
55
92
  maxRetries: 2,
56
93
  onProgress: onProgress
57
94
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TechSpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/TechSpecialist.ts"],"names":[],"mappings":";;;AAAA,iDAA2D;AAC3D,6DAA2D;AAG3D,MAAa,cAAe,SAAQ,qBAAS;IAC3C,YAAY,MAAc,EAAE,WAAgB,EAAE,aAAkB;QAC9D,MAAM,MAAM,GAAgB;YAC1B,YAAY,EAAE;;;;;;;;2BAQO;SACtB,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;;kBAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,KAAK;;;;;;;cAOV,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;EAC5E,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;EAC9I,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAG5F,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;gBAGhH,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ;EACnD,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;EACnH,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;;;;EAIpH,KAAK,CAAC,SAAS,CAAC,kBAAkB;;;;EAIlC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;4DAEA,CAAC;QAEzD,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;AAxDD,wCAwDC"}
1
+ {"version":3,"file":"TechSpecialist.js","sourceRoot":"","sources":["../../../src/agents/specialists/TechSpecialist.ts"],"names":[],"mappings":"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"}