@houtini/lm 1.0.13 → 2.0.1

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 (264) hide show
  1. package/README.md +67 -237
  2. package/dist/index.d.ts +5 -3
  3. package/dist/index.js +149 -213
  4. package/dist/index.js.map +1 -1
  5. package/package.json +23 -32
  6. package/server.json +44 -0
  7. package/CHANGELOG.md +0 -282
  8. package/dist/cache/analysis-cache.d.ts +0 -33
  9. package/dist/cache/analysis-cache.d.ts.map +0 -1
  10. package/dist/cache/analysis-cache.js +0 -56
  11. package/dist/cache/analysis-cache.js.map +0 -1
  12. package/dist/cache/cache-manager.d.ts +0 -29
  13. package/dist/cache/cache-manager.d.ts.map +0 -1
  14. package/dist/cache/cache-manager.js +0 -85
  15. package/dist/cache/cache-manager.js.map +0 -1
  16. package/dist/cache/index.d.ts +0 -16
  17. package/dist/cache/index.d.ts.map +0 -1
  18. package/dist/cache/index.js +0 -17
  19. package/dist/cache/index.js.map +0 -1
  20. package/dist/cache/prompt-cache.d.ts +0 -33
  21. package/dist/cache/prompt-cache.d.ts.map +0 -1
  22. package/dist/cache/prompt-cache.js +0 -61
  23. package/dist/cache/prompt-cache.js.map +0 -1
  24. package/dist/config.d.ts +0 -41
  25. package/dist/config.d.ts.map +0 -1
  26. package/dist/config.js +0 -71
  27. package/dist/config.js.map +0 -1
  28. package/dist/core/ThreeStagePromptManager.d.ts +0 -23
  29. package/dist/core/ThreeStagePromptManager.d.ts.map +0 -1
  30. package/dist/core/ThreeStagePromptManager.js +0 -118
  31. package/dist/core/ThreeStagePromptManager.js.map +0 -1
  32. package/dist/index.d.ts.map +0 -1
  33. package/dist/plugins/base-plugin.d.ts +0 -55
  34. package/dist/plugins/base-plugin.d.ts.map +0 -1
  35. package/dist/plugins/base-plugin.js +0 -120
  36. package/dist/plugins/base-plugin.js.map +0 -1
  37. package/dist/plugins/index.d.ts +0 -58
  38. package/dist/plugins/index.d.ts.map +0 -1
  39. package/dist/plugins/index.js +0 -162
  40. package/dist/plugins/index.js.map +0 -1
  41. package/dist/plugins/types.d.ts +0 -5
  42. package/dist/plugins/types.d.ts.map +0 -1
  43. package/dist/plugins/types.js +0 -5
  44. package/dist/plugins/types.js.map +0 -1
  45. package/dist/prompts/analyze/code-quality.d.ts +0 -116
  46. package/dist/prompts/analyze/code-quality.d.ts.map +0 -1
  47. package/dist/prompts/analyze/code-quality.js +0 -437
  48. package/dist/prompts/analyze/code-quality.js.map +0 -1
  49. package/dist/prompts/analyze/compare-integration.d.ts +0 -130
  50. package/dist/prompts/analyze/compare-integration.d.ts.map +0 -1
  51. package/dist/prompts/analyze/compare-integration.js +0 -547
  52. package/dist/prompts/analyze/compare-integration.js.map +0 -1
  53. package/dist/prompts/analyze/count-files.d.ts +0 -109
  54. package/dist/prompts/analyze/count-files.d.ts.map +0 -1
  55. package/dist/prompts/analyze/count-files.js +0 -403
  56. package/dist/prompts/analyze/count-files.js.map +0 -1
  57. package/dist/prompts/analyze/database-queries.d.ts +0 -156
  58. package/dist/prompts/analyze/database-queries.d.ts.map +0 -1
  59. package/dist/prompts/analyze/database-queries.js +0 -763
  60. package/dist/prompts/analyze/database-queries.js.map +0 -1
  61. package/dist/prompts/analyze/dependencies.d.ts +0 -97
  62. package/dist/prompts/analyze/dependencies.d.ts.map +0 -1
  63. package/dist/prompts/analyze/dependencies.js +0 -337
  64. package/dist/prompts/analyze/dependencies.js.map +0 -1
  65. package/dist/prompts/analyze/diff-signatures.d.ts +0 -139
  66. package/dist/prompts/analyze/diff-signatures.d.ts.map +0 -1
  67. package/dist/prompts/analyze/diff-signatures.js +0 -708
  68. package/dist/prompts/analyze/diff-signatures.js.map +0 -1
  69. package/dist/prompts/analyze/find-patterns.d.ts +0 -128
  70. package/dist/prompts/analyze/find-patterns.d.ts.map +0 -1
  71. package/dist/prompts/analyze/find-patterns.js +0 -524
  72. package/dist/prompts/analyze/find-patterns.js.map +0 -1
  73. package/dist/prompts/analyze/find-unused-css.d.ts +0 -151
  74. package/dist/prompts/analyze/find-unused-css.d.ts.map +0 -1
  75. package/dist/prompts/analyze/find-unused-css.js +0 -760
  76. package/dist/prompts/analyze/find-unused-css.js.map +0 -1
  77. package/dist/prompts/analyze/n8n-workflow.d.ts +0 -137
  78. package/dist/prompts/analyze/n8n-workflow.d.ts.map +0 -1
  79. package/dist/prompts/analyze/n8n-workflow.js +0 -533
  80. package/dist/prompts/analyze/n8n-workflow.js.map +0 -1
  81. package/dist/prompts/analyze/project-structure.d.ts +0 -126
  82. package/dist/prompts/analyze/project-structure.d.ts.map +0 -1
  83. package/dist/prompts/analyze/project-structure.js +0 -573
  84. package/dist/prompts/analyze/project-structure.js.map +0 -1
  85. package/dist/prompts/analyze/security-audit.d.ts +0 -142
  86. package/dist/prompts/analyze/security-audit.d.ts.map +0 -1
  87. package/dist/prompts/analyze/security-audit.js +0 -641
  88. package/dist/prompts/analyze/security-audit.js.map +0 -1
  89. package/dist/prompts/analyze/single-file.d.ts +0 -162
  90. package/dist/prompts/analyze/single-file.d.ts.map +0 -1
  91. package/dist/prompts/analyze/single-file.js +0 -669
  92. package/dist/prompts/analyze/single-file.js.map +0 -1
  93. package/dist/prompts/analyze/trace-execution.d.ts +0 -126
  94. package/dist/prompts/analyze/trace-execution.d.ts.map +0 -1
  95. package/dist/prompts/analyze/trace-execution.js +0 -613
  96. package/dist/prompts/analyze/trace-execution.js.map +0 -1
  97. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts +0 -116
  98. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts.map +0 -1
  99. package/dist/prompts/analyze/wordpress-plugin-audit.js +0 -456
  100. package/dist/prompts/analyze/wordpress-plugin-audit.js.map +0 -1
  101. package/dist/prompts/analyze/wordpress-plugin-readiness.d.ts +0 -103
  102. package/dist/prompts/analyze/wordpress-plugin-readiness.d.ts.map +0 -1
  103. package/dist/prompts/analyze/wordpress-plugin-readiness.js +0 -506
  104. package/dist/prompts/analyze/wordpress-plugin-readiness.js.map +0 -1
  105. package/dist/prompts/analyze/wordpress-security.d.ts +0 -146
  106. package/dist/prompts/analyze/wordpress-security.d.ts.map +0 -1
  107. package/dist/prompts/analyze/wordpress-security.js +0 -702
  108. package/dist/prompts/analyze/wordpress-security.js.map +0 -1
  109. package/dist/prompts/analyze/wordpress-theme-audit.d.ts +0 -114
  110. package/dist/prompts/analyze/wordpress-theme-audit.d.ts.map +0 -1
  111. package/dist/prompts/analyze/wordpress-theme-audit.js +0 -540
  112. package/dist/prompts/analyze/wordpress-theme-audit.js.map +0 -1
  113. package/dist/prompts/custom/custom-prompt.d.ts +0 -135
  114. package/dist/prompts/custom/custom-prompt.d.ts.map +0 -1
  115. package/dist/prompts/custom/custom-prompt.js +0 -421
  116. package/dist/prompts/custom/custom-prompt.js.map +0 -1
  117. package/dist/prompts/fun/arcade-game.d.ts +0 -152
  118. package/dist/prompts/fun/arcade-game.d.ts.map +0 -1
  119. package/dist/prompts/fun/arcade-game.js +0 -657
  120. package/dist/prompts/fun/arcade-game.js.map +0 -1
  121. package/dist/prompts/fun/create_text_adventure.d.ts +0 -100
  122. package/dist/prompts/fun/create_text_adventure.d.ts.map +0 -1
  123. package/dist/prompts/fun/create_text_adventure.js +0 -401
  124. package/dist/prompts/fun/create_text_adventure.js.map +0 -1
  125. package/dist/prompts/fun/css-art-generator.d.ts +0 -168
  126. package/dist/prompts/fun/css-art-generator.d.ts.map +0 -1
  127. package/dist/prompts/fun/css-art-generator.js +0 -831
  128. package/dist/prompts/fun/css-art-generator.js.map +0 -1
  129. package/dist/prompts/generate/project-documentation.d.ts +0 -137
  130. package/dist/prompts/generate/project-documentation.d.ts.map +0 -1
  131. package/dist/prompts/generate/project-documentation.js +0 -670
  132. package/dist/prompts/generate/project-documentation.js.map +0 -1
  133. package/dist/prompts/generate/refactoring.d.ts +0 -164
  134. package/dist/prompts/generate/refactoring.d.ts.map +0 -1
  135. package/dist/prompts/generate/refactoring.js +0 -625
  136. package/dist/prompts/generate/refactoring.js.map +0 -1
  137. package/dist/prompts/generate/responsive-component.d.ts +0 -147
  138. package/dist/prompts/generate/responsive-component.d.ts.map +0 -1
  139. package/dist/prompts/generate/responsive-component.js +0 -957
  140. package/dist/prompts/generate/responsive-component.js.map +0 -1
  141. package/dist/prompts/generate/typescript-conversion.d.ts +0 -144
  142. package/dist/prompts/generate/typescript-conversion.d.ts.map +0 -1
  143. package/dist/prompts/generate/typescript-conversion.js +0 -531
  144. package/dist/prompts/generate/typescript-conversion.js.map +0 -1
  145. package/dist/prompts/generate/unit-tests.d.ts +0 -139
  146. package/dist/prompts/generate/unit-tests.d.ts.map +0 -1
  147. package/dist/prompts/generate/unit-tests.js +0 -582
  148. package/dist/prompts/generate/unit-tests.js.map +0 -1
  149. package/dist/prompts/generate/wordpress-plugin.d.ts +0 -179
  150. package/dist/prompts/generate/wordpress-plugin.d.ts.map +0 -1
  151. package/dist/prompts/generate/wordpress-plugin.js +0 -767
  152. package/dist/prompts/generate/wordpress-plugin.js.map +0 -1
  153. package/dist/prompts/generate/wordpress-theme-from-static.d.ts +0 -177
  154. package/dist/prompts/generate/wordpress-theme-from-static.d.ts.map +0 -1
  155. package/dist/prompts/generate/wordpress-theme-from-static.js +0 -699
  156. package/dist/prompts/generate/wordpress-theme-from-static.js.map +0 -1
  157. package/dist/prompts/shared/cache-manager.d.ts +0 -45
  158. package/dist/prompts/shared/cache-manager.d.ts.map +0 -1
  159. package/dist/prompts/shared/cache-manager.js +0 -129
  160. package/dist/prompts/shared/cache-manager.js.map +0 -1
  161. package/dist/prompts/shared/helpers.d.ts +0 -39
  162. package/dist/prompts/shared/helpers.d.ts.map +0 -1
  163. package/dist/prompts/shared/helpers.js +0 -151
  164. package/dist/prompts/shared/helpers.js.map +0 -1
  165. package/dist/prompts/shared/templates.d.ts +0 -35
  166. package/dist/prompts/shared/templates.d.ts.map +0 -1
  167. package/dist/prompts/shared/templates.js +0 -77
  168. package/dist/prompts/shared/templates.js.map +0 -1
  169. package/dist/prompts/shared/types.d.ts +0 -112
  170. package/dist/prompts/shared/types.d.ts.map +0 -1
  171. package/dist/prompts/shared/types.js +0 -5
  172. package/dist/prompts/shared/types.js.map +0 -1
  173. package/dist/prompts/system/find-unused-files.d.ts +0 -106
  174. package/dist/prompts/system/find-unused-files.d.ts.map +0 -1
  175. package/dist/prompts/system/find-unused-files.js +0 -357
  176. package/dist/prompts/system/find-unused-files.js.map +0 -1
  177. package/dist/security/index.d.ts +0 -39
  178. package/dist/security/index.d.ts.map +0 -1
  179. package/dist/security/index.js +0 -46
  180. package/dist/security/index.js.map +0 -1
  181. package/dist/security/integration-helpers.d.ts +0 -121
  182. package/dist/security/integration-helpers.d.ts.map +0 -1
  183. package/dist/security/integration-helpers.js +0 -190
  184. package/dist/security/integration-helpers.js.map +0 -1
  185. package/dist/security/output-encoder.d.ts +0 -94
  186. package/dist/security/output-encoder.d.ts.map +0 -1
  187. package/dist/security/output-encoder.js +0 -295
  188. package/dist/security/output-encoder.js.map +0 -1
  189. package/dist/security/prompt-injection-guard.d.ts +0 -59
  190. package/dist/security/prompt-injection-guard.d.ts.map +0 -1
  191. package/dist/security/prompt-injection-guard.js +0 -249
  192. package/dist/security/prompt-injection-guard.js.map +0 -1
  193. package/dist/security/sanitisation.d.ts +0 -67
  194. package/dist/security/sanitisation.d.ts.map +0 -1
  195. package/dist/security/sanitisation.js +0 -398
  196. package/dist/security/sanitisation.js.map +0 -1
  197. package/dist/security/security-service.d.ts +0 -103
  198. package/dist/security/security-service.d.ts.map +0 -1
  199. package/dist/security/security-service.js +0 -303
  200. package/dist/security/security-service.js.map +0 -1
  201. package/dist/security-config.d.ts +0 -45
  202. package/dist/security-config.d.ts.map +0 -1
  203. package/dist/security-config.js +0 -63
  204. package/dist/security-config.js.map +0 -1
  205. package/dist/system/function-list.d.ts +0 -61
  206. package/dist/system/function-list.d.ts.map +0 -1
  207. package/dist/system/function-list.js +0 -111
  208. package/dist/system/function-list.js.map +0 -1
  209. package/dist/system/function-registry.d.ts +0 -23
  210. package/dist/system/function-registry.d.ts.map +0 -1
  211. package/dist/system/function-registry.js +0 -136
  212. package/dist/system/function-registry.js.map +0 -1
  213. package/dist/system/health-check.d.ts +0 -33
  214. package/dist/system/health-check.d.ts.map +0 -1
  215. package/dist/system/health-check.js +0 -98
  216. package/dist/system/health-check.js.map +0 -1
  217. package/dist/system/path-resolver.d.ts +0 -55
  218. package/dist/system/path-resolver.d.ts.map +0 -1
  219. package/dist/system/path-resolver.js +0 -90
  220. package/dist/system/path-resolver.js.map +0 -1
  221. package/dist/templates/plugin-template.d.ts +0 -121
  222. package/dist/templates/plugin-template.d.ts.map +0 -1
  223. package/dist/templates/plugin-template.js +0 -454
  224. package/dist/templates/plugin-template.js.map +0 -1
  225. package/dist/types/chunking-types.d.ts +0 -88
  226. package/dist/types/chunking-types.d.ts.map +0 -1
  227. package/dist/types/chunking-types.js +0 -18
  228. package/dist/types/chunking-types.js.map +0 -1
  229. package/dist/types/prompt-stages.d.ts +0 -30
  230. package/dist/types/prompt-stages.d.ts.map +0 -1
  231. package/dist/types/prompt-stages.js +0 -6
  232. package/dist/types/prompt-stages.js.map +0 -1
  233. package/dist/types.d.ts +0 -45
  234. package/dist/types.d.ts.map +0 -1
  235. package/dist/types.js +0 -6
  236. package/dist/types.js.map +0 -1
  237. package/dist/utils/css-parser.d.ts +0 -26
  238. package/dist/utils/css-parser.d.ts.map +0 -1
  239. package/dist/utils/css-parser.js +0 -117
  240. package/dist/utils/css-parser.js.map +0 -1
  241. package/dist/utils/path-resolver.d.ts +0 -13
  242. package/dist/utils/path-resolver.d.ts.map +0 -1
  243. package/dist/utils/path-resolver.js +0 -78
  244. package/dist/utils/path-resolver.js.map +0 -1
  245. package/dist/utils/plugin-utilities.d.ts +0 -176
  246. package/dist/utils/plugin-utilities.d.ts.map +0 -1
  247. package/dist/utils/plugin-utilities.js +0 -269
  248. package/dist/utils/plugin-utilities.js.map +0 -1
  249. package/dist/utils/streamHandler.d.ts +0 -3
  250. package/dist/utils/streamHandler.d.ts.map +0 -1
  251. package/dist/utils/streamHandler.js +0 -137
  252. package/dist/utils/streamHandler.js.map +0 -1
  253. package/dist/validation/output-validator.d.ts +0 -136
  254. package/dist/validation/output-validator.d.ts.map +0 -1
  255. package/dist/validation/output-validator.js +0 -262
  256. package/dist/validation/output-validator.js.map +0 -1
  257. package/dist/validation/response-factory.d.ts +0 -44
  258. package/dist/validation/response-factory.d.ts.map +0 -1
  259. package/dist/validation/response-factory.js +0 -202
  260. package/dist/validation/response-factory.js.map +0 -1
  261. package/dist/validation/schemas.d.ts +0 -519
  262. package/dist/validation/schemas.d.ts.map +0 -1
  263. package/dist/validation/schemas.js +0 -6
  264. package/dist/validation/schemas.js.map +0 -1
@@ -1,657 +0,0 @@
1
- /**
2
- * Arcade Game Generator Plugin - Modern v4.3
3
- *
4
- * Generates complete playable 2D arcade games using HTML5 Canvas
5
- * Automatically detects single-game or multi-game generation mode
6
- *
7
- * Built with the universal template for consistency and performance
8
- */
9
- import { BasePlugin } from '../../plugins/base-plugin.js';
10
- import { ThreeStagePromptManager } from '../../core/ThreeStagePromptManager.js';
11
- import { withSecurity } from '../../security/integration-helpers.js';
12
- import { readFileContent } from '../shared/helpers.js';
13
- import { ModelSetup, ResponseProcessor, ParameterValidator, ErrorHandler, MultiFileAnalysis, TokenCalculator } from '../../utils/plugin-utilities.js';
14
- import { getAnalysisCache } from '../../cache/index.js';
15
- // Common Node.js modules - Use these instead of require()
16
- import { basename, extname, relative } from 'path';
17
- import { readFile, stat } from 'fs/promises';
18
- export class ArcadeGameGenerator extends BasePlugin {
19
- constructor() {
20
- super();
21
- this.name = 'arcade_game';
22
- this.category = 'generate';
23
- this.description = 'Generate complete playable 2D arcade games using HTML5 Canvas with player controls, enemies, and game mechanics';
24
- // Universal parameter set - supports both single and multi-game scenarios
25
- this.parameters = {
26
- // Single-game parameters
27
- code: {
28
- type: 'string',
29
- description: 'Existing game code to enhance (for single-game analysis)',
30
- required: false
31
- },
32
- filePath: {
33
- type: 'string',
34
- description: 'Path to existing game file to enhance',
35
- required: false
36
- },
37
- // Multi-game parameters
38
- projectPath: {
39
- type: 'string',
40
- description: 'Path to project root (for multi-game generation)',
41
- required: false
42
- },
43
- files: {
44
- type: 'array',
45
- description: 'Array of specific game files (for multi-game analysis)',
46
- required: false,
47
- items: { type: 'string' }
48
- },
49
- maxDepth: {
50
- type: 'number',
51
- description: 'Maximum directory depth for game file discovery (1-3)',
52
- required: false,
53
- default: 2
54
- },
55
- // Arcade game specific parameters
56
- gameType: {
57
- type: 'string',
58
- description: 'Type of arcade game to generate',
59
- enum: ['shooter', 'platformer', 'puzzle', 'snake', 'breakout', 'asteroids', 'custom'],
60
- default: 'shooter',
61
- required: false
62
- },
63
- difficulty: {
64
- type: 'string',
65
- description: 'Game difficulty level',
66
- enum: ['easy', 'medium', 'hard', 'adaptive'],
67
- default: 'medium',
68
- required: false
69
- },
70
- features: {
71
- type: 'array',
72
- description: 'Game features to include',
73
- items: { type: 'string' },
74
- default: ['score', 'lives', 'powerups', 'sound'],
75
- required: false
76
- },
77
- theme: {
78
- type: 'string',
79
- description: 'Visual theme for the game',
80
- enum: ['retro', 'neon', 'pixel', 'minimal', 'space', 'nature', 'custom'],
81
- default: 'retro',
82
- required: false
83
- },
84
- controls: {
85
- type: 'string',
86
- description: 'Control scheme',
87
- enum: ['wasd', 'arrows', 'mouse', 'touch', 'hybrid'],
88
- default: 'hybrid',
89
- required: false
90
- },
91
- // Universal parameters
92
- language: {
93
- type: 'string',
94
- description: 'Programming language',
95
- required: false,
96
- default: 'javascript'
97
- },
98
- analysisDepth: {
99
- type: 'string',
100
- description: 'Level of game complexity',
101
- enum: ['basic', 'detailed', 'comprehensive'],
102
- default: 'detailed',
103
- required: false
104
- },
105
- analysisType: {
106
- type: 'string',
107
- description: 'Type of game generation to perform',
108
- enum: ['prototype', 'polished', 'comprehensive'],
109
- default: 'comprehensive',
110
- required: false
111
- }
112
- };
113
- this.analysisCache = getAnalysisCache();
114
- this.multiFileAnalysis = new MultiFileAnalysis();
115
- // Cache and analysis utilities are initialized above
116
- }
117
- async execute(params, llmClient) {
118
- return await withSecurity(this, params, llmClient, async (secureParams) => {
119
- try {
120
- // 1. Auto-detect analysis mode based on parameters
121
- const analysisMode = this.detectAnalysisMode(secureParams);
122
- // 2. Validate parameters based on detected mode
123
- this.validateParameters(secureParams, analysisMode);
124
- // 3. Setup model
125
- const { model, contextLength } = await ModelSetup.getReadyModel(llmClient);
126
- // 4. Route to appropriate generation method
127
- if (analysisMode === 'single-file') {
128
- return await this.executeSingleGameGeneration(secureParams, model, contextLength);
129
- }
130
- else {
131
- return await this.executeMultiGameGeneration(secureParams, model, contextLength);
132
- }
133
- }
134
- catch (error) {
135
- return ErrorHandler.createExecutionError('arcade_game', error);
136
- }
137
- });
138
- }
139
- /**
140
- * Auto-detect whether this is single-game or multi-game generation
141
- *
142
- * For arcade games, single-game is the primary use case
143
- * Multi-game mode used for generating game collections or enhancing existing projects
144
- */
145
- detectAnalysisMode(params) {
146
- // Single-file indicators take priority (avoids default parameter issues)
147
- if (params.code || params.filePath) {
148
- return 'single-file';
149
- }
150
- // Multi-file indicators (game collections, project enhancement)
151
- if (params.projectPath || params.files) {
152
- return 'multi-file';
153
- }
154
- // Default to single-file for arcade game generation (game-focused)
155
- return 'single-file';
156
- }
157
- /**
158
- * Validate parameters based on detected analysis mode
159
- */
160
- validateParameters(params, mode) {
161
- if (mode === 'single-file') {
162
- // Single-game generation doesn't require code/file - can generate from scratch
163
- }
164
- else {
165
- ParameterValidator.validateProjectPath(params);
166
- ParameterValidator.validateDepth(params);
167
- }
168
- // Universal validations
169
- ParameterValidator.validateEnum(params, 'analysisType', ['prototype', 'polished', 'comprehensive']);
170
- ParameterValidator.validateEnum(params, 'analysisDepth', ['basic', 'detailed', 'comprehensive']);
171
- ParameterValidator.validateEnum(params, 'gameType', ['shooter', 'platformer', 'puzzle', 'snake', 'breakout', 'asteroids', 'custom']);
172
- }
173
- /**
174
- * Execute single-game generation
175
- */
176
- async executeSingleGameGeneration(params, model, contextLength) {
177
- // Process existing game input (if any)
178
- let existingGameCode = params.code;
179
- if (params.filePath) {
180
- existingGameCode = await readFileContent(params.filePath);
181
- }
182
- // Generate prompt stages for single game
183
- const promptStages = this.getSingleGamePromptStages({
184
- ...params,
185
- code: existingGameCode
186
- });
187
- // Execute with appropriate method
188
- const promptManager = new ThreeStagePromptManager();
189
- const needsChunking = TokenCalculator.needsChunking(promptStages, contextLength);
190
- if (needsChunking) {
191
- const chunkSize = TokenCalculator.calculateOptimalChunkSize(promptStages, contextLength);
192
- const dataChunks = promptManager.chunkDataPayload(promptStages.dataPayload, chunkSize);
193
- const conversation = promptManager.createChunkedConversation(promptStages, dataChunks);
194
- const messages = [
195
- conversation.systemMessage,
196
- ...conversation.dataMessages,
197
- conversation.analysisMessage
198
- ];
199
- return await ResponseProcessor.executeChunked(messages, model, contextLength, 'arcade_game', 'single');
200
- }
201
- else {
202
- return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'arcade_game');
203
- }
204
- }
205
- /**
206
- * Execute multi-game generation
207
- */
208
- async executeMultiGameGeneration(params, model, contextLength) {
209
- // Discover existing game files
210
- let filesToAnalyze = params.files ||
211
- await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
212
- // Perform multi-game analysis with caching
213
- const analysisResult = await this.performMultiGameAnalysis(filesToAnalyze, params, model, contextLength);
214
- // Generate prompt stages for multi-game
215
- const promptStages = this.getMultiGamePromptStages({
216
- ...params,
217
- analysisResult,
218
- gameCount: filesToAnalyze.length
219
- });
220
- // Always use chunking for multi-game
221
- const promptManager = new ThreeStagePromptManager();
222
- const chunkSize = TokenCalculator.calculateOptimalChunkSize(promptStages, contextLength);
223
- const dataChunks = promptManager.chunkDataPayload(promptStages.dataPayload, chunkSize);
224
- const conversation = promptManager.createChunkedConversation(promptStages, dataChunks);
225
- const messages = [
226
- conversation.systemMessage,
227
- ...conversation.dataMessages,
228
- conversation.analysisMessage
229
- ];
230
- return await ResponseProcessor.executeChunked(messages, model, contextLength, 'arcade_game', 'multifile');
231
- }
232
- /**
233
- * Single-game prompt stages - Generate a complete playable arcade game
234
- */
235
- getSingleGamePromptStages(params) {
236
- const { gameType, difficulty, features, theme, controls, analysisDepth, analysisType, code } = params;
237
- const systemAndContext = `You are a legendary game developer and creative genius specializing in ${analysisDepth} ${analysisType} arcade game creation.
238
-
239
- **Your Mission**: Create a complete, playable, and FUN ${gameType} arcade game that will immediately delight and engage players.
240
-
241
- **Game Development Context:**
242
- - Game Type: ${gameType}
243
- - Difficulty: ${difficulty}
244
- - Theme: ${theme}
245
- - Controls: ${controls}
246
- - Features: ${JSON.stringify(features)}
247
- - Complexity: ${analysisDepth}
248
- - Polish Level: ${analysisType}
249
-
250
- **Your World-Class Expertise:**
251
- - 20+ years creating addictive arcade games that players can't put down
252
- - Master of HTML5 Canvas, game physics, and smooth 60fps gameplay
253
- - Expert in player psychology - you know what makes games instantly fun
254
- - Specialized in clean, readable code that's easy to understand and modify
255
- - Pioneer of elegant game architectures with proper separation of concerns
256
-
257
- **Game Development Philosophy:**
258
- 1. **Instant Fun** - Game should be enjoyable within 5 seconds of loading
259
- 2. **Progressive Challenge** - Start easy, gradually increase difficulty
260
- 3. **Juicy Feedback** - Visual and audio feedback for every player action
261
- 4. **Clean Architecture** - Organized code with clear game loop, entities, and systems
262
- 5. **Responsive Design** - Works perfectly on any screen size
263
- 6. **Educational Value** - Code should teach good game development practices
264
-
265
- **Technical Requirements:**
266
- - Pure HTML5 Canvas and JavaScript (no external dependencies)
267
- - Smooth 60fps gameplay with proper game loop timing
268
- - Responsive canvas that adapts to screen size
269
- - Clean object-oriented design with Player, Enemy, and Game classes
270
- - Collision detection system optimized for performance
271
- - Particle effects for visual polish (explosions, trails, etc.)
272
- - Score system with local storage persistence
273
- - Professional code comments explaining game development concepts
274
-
275
- **Creative Requirements:**
276
- - Engaging visual style that matches the ${theme} theme
277
- - Intuitive ${controls} controls that feel responsive
278
- - Satisfying game mechanics that create flow state
279
- - Progressive difficulty that keeps players engaged
280
- - Polish details that make the game feel professional
281
-
282
- Your task is to create a masterpiece arcade game that showcases both technical excellence and creative brilliance.`;
283
- const dataPayload = code ? `**Existing Game Code to Enhance:**
284
-
285
- \`\`\`javascript
286
- ${code}
287
- \`\`\`
288
-
289
- **Enhancement Request:**
290
- Please analyze the existing game and enhance it with the requested features while maintaining the core gameplay.` :
291
- `**New Game Generation Request:**
292
- Create a brand new ${gameType} game from scratch with the specified parameters.
293
-
294
- **Inspiration for ${gameType} games:**
295
- ${this.getGameTypeInspiration(gameType)}
296
-
297
- **Theme Guidelines for ${theme}:**
298
- ${this.getThemeGuidelines(theme)}`;
299
- const outputInstructions = `**Generate a complete, playable arcade game as a single HTML file:**
300
-
301
- \`\`\`html
302
- <!DOCTYPE html>
303
- <html lang="en">
304
- <head>
305
- <meta charset="UTF-8">
306
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
307
- <title>${gameType.charAt(0).toUpperCase() + gameType.slice(1)} Game</title>
308
- <style>
309
- /* Beautiful ${theme}-themed CSS styling */
310
- /* Responsive design that works on all screen sizes */
311
- /* Professional visual polish */
312
- </style>
313
- </head>
314
- <body>
315
- <canvas id="gameCanvas"></canvas>
316
- <script>
317
- // Complete, production-ready game code including:
318
-
319
- // 1. GAME CONFIGURATION
320
- const GAME_CONFIG = {
321
- // All game constants and settings
322
- };
323
-
324
- // 2. UTILITY FUNCTIONS
325
- class Vector2 {
326
- // 2D vector math for positions and movement
327
- }
328
-
329
- class Utils {
330
- // Collision detection, random generators, etc.
331
- }
332
-
333
- // 3. GAME ENTITIES
334
- class Player {
335
- // Player character with movement, animation, abilities
336
- }
337
-
338
- class Enemy {
339
- // Enemy AI, spawning, different types
340
- }
341
-
342
- class Projectile {
343
- // Bullets, missiles, etc. with physics
344
- }
345
-
346
- class Powerup {
347
- // Power-ups, collectibles, bonuses
348
- }
349
-
350
- class Particle {
351
- // Visual effects system for polish
352
- }
353
-
354
- // 4. GAME SYSTEMS
355
- class InputManager {
356
- // ${controls} input handling with smooth controls
357
- }
358
-
359
- class AudioManager {
360
- // Sound effects using Web Audio API (optional)
361
- }
362
-
363
- class ScoreManager {
364
- // Scoring, high scores, local storage
365
- }
366
-
367
- // 5. MAIN GAME CLASS
368
- class Game {
369
- constructor() {
370
- // Initialize game systems
371
- }
372
-
373
- init() {
374
- // Setup canvas, event listeners, initial state
375
- }
376
-
377
- gameLoop() {
378
- // Main 60fps game loop
379
- this.update();
380
- this.render();
381
- requestAnimationFrame(() => this.gameLoop());
382
- }
383
-
384
- update() {
385
- // Update all game entities and systems
386
- }
387
-
388
- render() {
389
- // Draw everything to canvas
390
- }
391
-
392
- // Additional game state methods (start, pause, gameOver, etc.)
393
- }
394
-
395
- // 6. GAME INITIALIZATION
396
- const game = new Game();
397
- game.init();
398
- game.gameLoop();
399
- </script>
400
- </body>
401
- </html>
402
- \`\`\`
403
-
404
- **Critical Requirements:**
405
- ✅ Complete, runnable HTML file - no external dependencies
406
- ✅ Smooth 60fps gameplay with proper timing
407
- ✅ Responsive design that works on any screen size
408
- ✅ Professional code organization with clear separation of concerns
409
- ✅ Engaging ${gameType} gameplay that's immediately fun
410
- ✅ Beautiful ${theme} visual style with polished UI
411
- ✅ Intuitive ${controls} controls that feel responsive
412
- ✅ All requested features: ${JSON.stringify(features)}
413
- ✅ Educational code comments explaining game development concepts
414
- ✅ Ready to copy-paste and play immediately
415
-
416
- **Visual Polish Standards:**
417
- - Smooth animations and transitions
418
- - Particle effects for explosions, collection, etc.
419
- - Screen shake for impact feedback
420
- - Color-coded UI elements for clarity
421
- - Professional typography and layout
422
- - Visual feedback for all player actions
423
-
424
- **Code Quality Standards:**
425
- - Clean, readable, well-documented code
426
- - Proper object-oriented design patterns
427
- - Performance optimizations for smooth gameplay
428
- - Error handling and edge case management
429
- - Easy to understand and modify for learning
430
-
431
- Create an arcade game that players will love and developers will learn from!`;
432
- return { systemAndContext, dataPayload, outputInstructions };
433
- }
434
- /**
435
- * Multi-game prompt stages - Generate game collections or enhance projects
436
- */
437
- getMultiGamePromptStages(params) {
438
- const { analysisResult, analysisType, analysisDepth, gameCount, gameType, theme } = params;
439
- const systemAndContext = `You are a master game designer and technical architect specializing in ${analysisDepth} ${analysisType} game collection development.
440
-
441
- **Your Mission**: Create a comprehensive game collection or enhance an existing game project with multiple interconnected games.
442
-
443
- **Collection Development Context:**
444
- - Collection Type: ${analysisType}
445
- - Collection Depth: ${analysisDepth}
446
- - Games in Collection: ${gameCount}
447
- - Primary Game Type: ${gameType}
448
- - Unifying Theme: ${theme}
449
- - Mode: Multi-Game Collection Development
450
-
451
- **Your Elite Expertise:**
452
- - 20+ years architecting game collections and interactive experiences
453
- - Expert in creating cohesive game ecosystems with shared systems
454
- - Master of scalable game architectures and reusable components
455
- - Specialized in player progression across multiple game experiences
456
- - Pioneer of elegant multi-game frameworks with shared resources
457
-
458
- **Collection Architecture Philosophy:**
459
- 1. **Shared Foundation** - Common systems across all games (input, audio, graphics)
460
- 2. **Progressive Complexity** - Games build on each other's mechanics
461
- 3. **Unified Experience** - Consistent visual style and interaction patterns
462
- 4. **Modular Design** - Easy to add new games to the collection
463
- 5. **Player Journey** - Meaningful progression and unlocks across games
464
- 6. **Technical Excellence** - Optimized performance and clean architecture
465
-
466
- Your task is to create a masterful game collection that showcases both individual game brilliance and cohesive ecosystem design.`;
467
- const dataPayload = `**Game Collection Analysis Results:**
468
-
469
- ${JSON.stringify(analysisResult, null, 2)}`;
470
- const outputInstructions = `**Generate a comprehensive multi-game collection as multiple coordinated files:**
471
-
472
- \`\`\`
473
- // File Structure:
474
- index.html // Main game collection launcher
475
- shared/
476
- game-engine.js // Shared game engine and utilities
477
- ui-framework.js // Common UI components
478
- asset-manager.js // Resource loading and management
479
- audio-system.js // Unified audio management
480
- games/
481
- ${gameType}-1.js // Individual game modules
482
- ${gameType}-2.js // Each game as a separate module
483
- ${gameType}-3.js // Following consistent architecture
484
- styles/
485
- collection.css // Unified ${theme} styling
486
- responsive.css // Mobile-friendly design
487
- \`\`\`
488
-
489
- **Collection Features:**
490
- - **Game Launcher**: Beautiful menu system for selecting games
491
- - **Shared Progress**: Unified scoring and achievement system
492
- - **Consistent UX**: Same controls and UI patterns across games
493
- - **Progressive Unlocks**: Games unlock as players progress
494
- - **Leaderboards**: Competition across the entire collection
495
- - **Modular Architecture**: Easy to add new games to the collection
496
- - **Professional Polish**: Cohesive ${theme} visual identity
497
-
498
- **Technical Architecture:**
499
- - Shared game engine with common systems (physics, rendering, input)
500
- - Plugin-style game modules that extend the base engine
501
- - Event-driven communication between games and shared systems
502
- - Optimized asset loading and caching across games
503
- - Responsive design that works on all devices
504
- - Clean separation between engine, games, and presentation
505
-
506
- **Individual Game Quality:**
507
- Each game in the collection must be:
508
- ✅ Complete and immediately playable
509
- ✅ Built on the shared architecture
510
- ✅ Following the unified ${theme} visual style
511
- ✅ Demonstrating unique gameplay mechanics
512
- ✅ Connected to the collection's progression system
513
-
514
- Create a game collection that demonstrates mastery of both individual game design and ecosystem architecture!`;
515
- return { systemAndContext, dataPayload, outputInstructions };
516
- }
517
- /**
518
- * Backwards compatibility method - routes to appropriate stages
519
- */
520
- getPromptStages(params) {
521
- const mode = this.detectAnalysisMode(params);
522
- if (mode === 'single-file') {
523
- return this.getSingleGamePromptStages(params);
524
- }
525
- else {
526
- return this.getMultiGamePromptStages(params);
527
- }
528
- }
529
- // Multi-game helper methods
530
- async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
531
- const extensions = this.getFileExtensions(analysisType);
532
- return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
533
- }
534
- async performMultiGameAnalysis(files, params, model, contextLength) {
535
- const cacheKey = this.analysisCache.generateKey('arcade_game', params, files);
536
- const cached = await this.analysisCache.get(cacheKey);
537
- if (cached)
538
- return cached;
539
- const gameAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeGameFile(file, params, model), contextLength);
540
- // Aggregate results into game collection analysis
541
- const aggregatedResult = {
542
- summary: `Game collection analysis of ${files.length} game files`,
543
- findings: gameAnalysisResults,
544
- data: {
545
- gameCount: files.length,
546
- totalGameSize: gameAnalysisResults.reduce((sum, result) => sum + (result.size || 0), 0),
547
- gameTypes: this.identifyGameTypes(gameAnalysisResults),
548
- sharedSystems: this.identifySharedSystems(gameAnalysisResults),
549
- collectionTheme: params.theme || 'retro',
550
- analysisTimestamp: new Date().toISOString()
551
- }
552
- };
553
- await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
554
- modelUsed: model.identifier || 'unknown',
555
- executionTime: Date.now() - Date.now(), // TODO: Track actual execution time
556
- timestamp: new Date().toISOString()
557
- });
558
- return aggregatedResult;
559
- }
560
- async analyzeGameFile(file, params, model) {
561
- const content = await readFile(file, 'utf-8');
562
- const stats = await stat(file);
563
- return {
564
- filePath: file,
565
- fileName: basename(file),
566
- size: content.length,
567
- lines: content.split('\n').length,
568
- extension: extname(file),
569
- relativePath: relative(params.projectPath || '', file),
570
- lastModified: stats.mtime.toISOString(),
571
- hasCanvas: /canvas|ctx|getContext/i.test(content),
572
- hasGameLoop: /requestAnimationFrame|setInterval|gameLoop/i.test(content),
573
- hasPlayer: /player|character|avatar/i.test(content),
574
- hasEnemies: /enemy|enemies|monster|opponent/i.test(content),
575
- gameType: this.detectGameType(content),
576
- isPlayable: this.isPlayableGame(content)
577
- };
578
- }
579
- identifyGameTypes(results) {
580
- const types = new Set();
581
- results.forEach(result => {
582
- if (result.gameType) {
583
- types.add(result.gameType);
584
- }
585
- });
586
- return Array.from(types);
587
- }
588
- identifySharedSystems(results) {
589
- const systems = [];
590
- const hasCanvas = results.some(r => r.hasCanvas);
591
- const hasGameLoop = results.some(r => r.hasGameLoop);
592
- if (hasCanvas)
593
- systems.push('Canvas Rendering System');
594
- if (hasGameLoop)
595
- systems.push('Game Loop Framework');
596
- return systems;
597
- }
598
- detectGameType(content) {
599
- if (/shoot|bullet|projectile/i.test(content))
600
- return 'shooter';
601
- if (/jump|platform|gravity/i.test(content))
602
- return 'platformer';
603
- if (/puzzle|match|tile/i.test(content))
604
- return 'puzzle';
605
- if (/snake|grow|segment/i.test(content))
606
- return 'snake';
607
- if (/brick|paddle|ball|breakout/i.test(content))
608
- return 'breakout';
609
- if (/asteroid|space|ship/i.test(content))
610
- return 'asteroids';
611
- return 'arcade';
612
- }
613
- isPlayableGame(content) {
614
- return content.includes('canvas') &&
615
- content.includes('gameLoop') &&
616
- (content.includes('player') || content.includes('character'));
617
- }
618
- getGameTypeInspiration(gameType) {
619
- const inspirations = {
620
- 'shooter': 'Classic space invaders, bullet hell mechanics, power-ups, wave-based enemies',
621
- 'platformer': 'Super Mario-style jumping, moving platforms, collectibles, level progression',
622
- 'puzzle': 'Tetris-like block manipulation, match-3 mechanics, spatial reasoning challenges',
623
- 'snake': 'Classic snake growth mechanics, food collection, increasingly difficult navigation',
624
- 'breakout': 'Paddle and ball physics, brick destruction, power-up variety, level design',
625
- 'asteroids': 'Space ship movement, rotating controls, asteroid destruction, wrap-around edges',
626
- 'custom': 'Unique game mechanics that combine elements from multiple genres'
627
- };
628
- return inspirations[gameType] || inspirations.custom;
629
- }
630
- getThemeGuidelines(theme) {
631
- const themes = {
632
- 'retro': '8-bit pixel art style, classic arcade colors (neon green, bright blue, orange), chunky fonts',
633
- 'neon': 'Glowing effects, dark backgrounds, electric blues and magentas, cyberpunk aesthetic',
634
- 'pixel': 'Crisp pixel art, limited color palettes, authentic retro game feel, blocky sprites',
635
- 'minimal': 'Clean lines, simple shapes, monochromatic or limited colors, elegant simplicity',
636
- 'space': 'Stars, galaxies, metallic surfaces, deep space blues and purples, sci-fi elements',
637
- 'nature': 'Earth tones, organic shapes, forest greens and sky blues, natural textures',
638
- 'custom': 'Unique visual style that fits the specific game concept and target audience'
639
- };
640
- return themes[theme] || themes.custom;
641
- }
642
- getFileExtensions(analysisType) {
643
- const extensionMap = {
644
- 'prototype': ['.html', '.js', '.css'],
645
- 'polished': ['.html', '.js', '.css', '.json', '.png', '.wav'],
646
- 'comprehensive': ['.html', '.js', '.css', '.json', '.png', '.jpg', '.svg', '.wav', '.mp3']
647
- };
648
- return extensionMap[analysisType] || extensionMap.comprehensive;
649
- }
650
- generateCacheKey(files, params) {
651
- const fileHash = files.join('|');
652
- const paramHash = JSON.stringify(params);
653
- return `${fileHash}_${paramHash}`.substring(0, 64);
654
- }
655
- }
656
- export default ArcadeGameGenerator;
657
- //# sourceMappingURL=arcade-game.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arcade-game.js","sourceRoot":"","sources":["../../../src/prompts/fun/arcade-game.ts"],"names":[],"mappings":"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"}