@playcraft/skills 0.0.2

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 (479) hide show
  1. package/README.md +333 -0
  2. package/dist/src/index.d.ts +3 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +2 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/skills.loader.d.ts +31 -0
  7. package/dist/src/skills.loader.d.ts.map +1 -0
  8. package/dist/src/skills.loader.js +200 -0
  9. package/dist/src/skills.loader.js.map +1 -0
  10. package/dist/src/skills.types.d.ts +44 -0
  11. package/dist/src/skills.types.d.ts.map +1 -0
  12. package/dist/src/skills.types.js +9 -0
  13. package/dist/src/skills.types.js.map +1 -0
  14. package/package.json +35 -0
  15. package/skills/2048_core.aigameplay/SKILL.md +123 -0
  16. package/skills/2048_core.aigameplay/manifest.json +159 -0
  17. package/skills/2048_core.aigameplay/ref/pgs-schema.json +194 -0
  18. package/skills/2048_core.aigameplay/ref/reducer.template.ts +189 -0
  19. package/skills/SKILL.md +46 -0
  20. package/skills/ad_compliance_rules.aiconfig/SKILL.md +85 -0
  21. package/skills/ad_compliance_rules.aiconfig/manifest.json +60 -0
  22. package/skills/agent_remix_orchestrator.aicomponent/SKILL.md +257 -0
  23. package/skills/agent_remix_orchestrator.aicomponent/manifest.json +12 -0
  24. package/skills/app_metadata.aiconfig/SKILL.md +53 -0
  25. package/skills/app_metadata.aiconfig/manifest.json +32 -0
  26. package/skills/appear_sfx.aiaudio/SKILL.md +59 -0
  27. package/skills/appear_sfx.aiaudio/manifest.json +45 -0
  28. package/skills/appear_sfx.aiaudio/ref/appear.mp3 +0 -0
  29. package/skills/arrow_move_error_sfx.aiaudio/SKILL.md +59 -0
  30. package/skills/arrow_move_error_sfx.aiaudio/manifest.json +45 -0
  31. package/skills/arrow_move_error_sfx.aiaudio/ref/arrow_move_error.mp3 +0 -0
  32. package/skills/arrow_path_data_format.aicomponent/SKILL.md +152 -0
  33. package/skills/arrow_path_data_format.aicomponent/manifest.json +57 -0
  34. package/skills/arrow_path_data_format.aicomponent/ref/LevelParser.ts +188 -0
  35. package/skills/arrow_path_data_format.aicomponent/ref/LevelTypes.ts +131 -0
  36. package/skills/arrow_pick_match_rules.aigameplay/SKILL.md +117 -0
  37. package/skills/arrow_pick_match_rules.aigameplay/manifest.json +105 -0
  38. package/skills/arrow_pick_match_rules.aigameplay/ref/pgs-schema.json +180 -0
  39. package/skills/asset_pipeline_scripts.aicomponent/SKILL.md +117 -0
  40. package/skills/asset_pipeline_scripts.aicomponent/manifest.json +17 -0
  41. package/skills/asset_pipeline_scripts.aicomponent/ref/gen-sprite.sh +105 -0
  42. package/skills/ball_sort.aigameplay/SKILL.md +109 -0
  43. package/skills/ball_sort.aigameplay/manifest.json +155 -0
  44. package/skills/ball_sort.aigameplay/ref/pgs-schema.json +192 -0
  45. package/skills/ball_sort.aigameplay/ref/reducer.template.ts +156 -0
  46. package/skills/basketball_shot.aigameplay/SKILL.md +94 -0
  47. package/skills/basketball_shot.aigameplay/manifest.json +150 -0
  48. package/skills/basketball_shot.aigameplay/ref/pgs-schema.json +229 -0
  49. package/skills/basketball_shot.aigameplay/ref/reducer.template.ts +189 -0
  50. package/skills/bg_music.aiaudio/SKILL.md +61 -0
  51. package/skills/bg_music.aiaudio/manifest.json +48 -0
  52. package/skills/bg_music.aiaudio/ref/bg.mp3 +0 -0
  53. package/skills/big_watermelon.aigameplay/SKILL.md +94 -0
  54. package/skills/big_watermelon.aigameplay/manifest.json +155 -0
  55. package/skills/big_watermelon.aigameplay/ref/pgs-schema.json +191 -0
  56. package/skills/big_watermelon.aigameplay/ref/reducer.template.ts +202 -0
  57. package/skills/block_puzzle.aigameplay/SKILL.md +121 -0
  58. package/skills/block_puzzle.aigameplay/manifest.json +154 -0
  59. package/skills/block_puzzle.aigameplay/ref/pgs-schema.json +170 -0
  60. package/skills/block_puzzle.aigameplay/ref/reducer.template.ts +182 -0
  61. package/skills/board_entity_sprite.aiimage/SKILL.md +255 -0
  62. package/skills/board_entity_sprite.aiimage/manifest.json +153 -0
  63. package/skills/board_entity_sprite.aiimage/ref/ProceduralCar.ts +357 -0
  64. package/skills/board_entity_sprite.aiimage/ref/car.png +0 -0
  65. package/skills/board_entity_sprite.aiimage/ref/car.webp +0 -0
  66. package/skills/bottom_ui_bar.aicomponent/SKILL.md +50 -0
  67. package/skills/bottom_ui_bar.aicomponent/manifest.json +31 -0
  68. package/skills/bottom_ui_bar.aicomponent/ref/GameBottomUI.ts +27 -0
  69. package/skills/bubble_shooter.aigameplay/SKILL.md +129 -0
  70. package/skills/bubble_shooter.aigameplay/manifest.json +181 -0
  71. package/skills/bubble_shooter.aigameplay/ref/pgs-schema.json +226 -0
  72. package/skills/bubble_shooter.aigameplay/ref/reducer.template.ts +228 -0
  73. package/skills/button_click_sfx.aiaudio/SKILL.md +59 -0
  74. package/skills/button_click_sfx.aiaudio/manifest.json +45 -0
  75. package/skills/button_click_sfx.aiaudio/ref/button_click.mp3 +0 -0
  76. package/skills/calm_piano.aiaudio/SKILL.md +68 -0
  77. package/skills/calm_piano.aiaudio/manifest.json +50 -0
  78. package/skills/camera_controller_3d.aicomponent/SKILL.md +100 -0
  79. package/skills/camera_controller_3d.aicomponent/manifest.json +52 -0
  80. package/skills/camera_controller_3d.aicomponent/ref/CameraController.ts +199 -0
  81. package/skills/camera_controller_3d.aicomponent/ref/OrbitControlsAdapter.ts +152 -0
  82. package/skills/candy_tile.aiimage/SKILL.md +62 -0
  83. package/skills/candy_tile.aiimage/manifest.json +49 -0
  84. package/skills/car_parking.aigameplay/SKILL.md +105 -0
  85. package/skills/car_parking.aigameplay/manifest.json +164 -0
  86. package/skills/car_parking.aigameplay/ref/pgs-schema.json +163 -0
  87. package/skills/car_parking.aigameplay/ref/reducer.template.ts +166 -0
  88. package/skills/castle.aiimage/SKILL.md +64 -0
  89. package/skills/castle.aiimage/manifest.json +48 -0
  90. package/skills/cheerful_ukulele.aiaudio/SKILL.md +72 -0
  91. package/skills/cheerful_ukulele.aiaudio/manifest.json +50 -0
  92. package/skills/click_sfx.aiaudio/SKILL.md +59 -0
  93. package/skills/click_sfx.aiaudio/manifest.json +45 -0
  94. package/skills/click_sfx.aiaudio/ref/click.mp3 +0 -0
  95. package/skills/combo_display.aicomponent/SKILL.md +45 -0
  96. package/skills/combo_display.aicomponent/manifest.json +31 -0
  97. package/skills/combo_display.aicomponent/ref/ComboManager.ts +362 -0
  98. package/skills/combo_display.aicomponent/ref/ComboSmallUI.ts +232 -0
  99. package/skills/combo_praise_text.aicomponent/SKILL.md +56 -0
  100. package/skills/combo_praise_text.aicomponent/manifest.json +34 -0
  101. package/skills/combo_praise_text.aicomponent/ref/ComboManager.ts +362 -0
  102. package/skills/countdown_timer.aicomponent/SKILL.md +44 -0
  103. package/skills/countdown_timer.aicomponent/manifest.json +35 -0
  104. package/skills/countdown_timer.aicomponent/ref/CountdownDisplay.ts +213 -0
  105. package/skills/cta_platform_config.aiconfig/SKILL.md +72 -0
  106. package/skills/cta_platform_config.aiconfig/manifest.json +56 -0
  107. package/skills/debug_overlay.aicomponent/SKILL.md +75 -0
  108. package/skills/debug_overlay.aicomponent/manifest.json +17 -0
  109. package/skills/debug_overlay.aicomponent/ref/DebugOverlay.ts +144 -0
  110. package/skills/desert.aiimage/SKILL.md +63 -0
  111. package/skills/desert.aiimage/manifest.json +49 -0
  112. package/skills/difficulty_curve_designer.aiconfig/SKILL.md +68 -0
  113. package/skills/difficulty_curve_designer.aiconfig/manifest.json +36 -0
  114. package/skills/digit_renderer.aicomponent/SKILL.md +43 -0
  115. package/skills/digit_renderer.aicomponent/manifest.json +25 -0
  116. package/skills/digit_renderer.aicomponent/ref/DigitRenderer.ts +237 -0
  117. package/skills/download_button.aicomponent/SKILL.md +44 -0
  118. package/skills/download_button.aicomponent/manifest.json +25 -0
  119. package/skills/download_button.aicomponent/ref/DownloadButton.ts +137 -0
  120. package/skills/draw_line_puzzle.aigameplay/SKILL.md +84 -0
  121. package/skills/draw_line_puzzle.aigameplay/manifest.json +152 -0
  122. package/skills/draw_line_puzzle.aigameplay/ref/pgs-schema.json +189 -0
  123. package/skills/draw_line_puzzle.aigameplay/ref/reducer.template.ts +194 -0
  124. package/skills/easy_to_hard.aiconfig/SKILL.md +52 -0
  125. package/skills/easy_to_hard.aiconfig/manifest.json +33 -0
  126. package/skills/eight_ball_pool.aigameplay/SKILL.md +104 -0
  127. package/skills/eight_ball_pool.aigameplay/manifest.json +152 -0
  128. package/skills/eight_ball_pool.aigameplay/ref/pgs-schema.json +205 -0
  129. package/skills/eight_ball_pool.aigameplay/ref/reducer.template.ts +198 -0
  130. package/skills/energetic_electronic.aiaudio/SKILL.md +69 -0
  131. package/skills/energetic_electronic.aiaudio/manifest.json +51 -0
  132. package/skills/fail_sfx.aiaudio/SKILL.md +59 -0
  133. package/skills/fail_sfx.aiaudio/manifest.json +44 -0
  134. package/skills/fail_sfx.aiaudio/ref/fail.mp3 +0 -0
  135. package/skills/figer_icon.aiimage/SKILL.md +58 -0
  136. package/skills/figer_icon.aiimage/manifest.json +48 -0
  137. package/skills/figer_icon.aiimage/ref/figer.png +0 -0
  138. package/skills/figer_icon.aiimage/ref/figer.webp +0 -0
  139. package/skills/forest.aiimage/SKILL.md +74 -0
  140. package/skills/forest.aiimage/manifest.json +48 -0
  141. package/skills/fruit_tile.aiimage/SKILL.md +68 -0
  142. package/skills/fruit_tile.aiimage/manifest.json +48 -0
  143. package/skills/game_over_panel.aicomponent/SKILL.md +47 -0
  144. package/skills/game_over_panel.aicomponent/manifest.json +61 -0
  145. package/skills/game_over_panel.aicomponent/ref/GameOverPanel.ts +74 -0
  146. package/skills/game_scene.aicomponent/SKILL.md +57 -0
  147. package/skills/game_scene.aicomponent/manifest.json +36 -0
  148. package/skills/game_scene.aicomponent/ref/Game.ts +748 -0
  149. package/skills/gameplay_balance_check.aivalidator/SKILL.md +69 -0
  150. package/skills/gameplay_balance_check.aivalidator/manifest.json +21 -0
  151. package/skills/gameplay_unit_test.aivalidator/SKILL.md +89 -0
  152. package/skills/gameplay_unit_test.aivalidator/manifest.json +17 -0
  153. package/skills/gameplay_unit_test.aivalidator/ref/gameplay.test.ts +202 -0
  154. package/skills/gameplay_unit_test.aivalidator/ref/vitest.config.ts +13 -0
  155. package/skills/grid_board_layout.aicomponent/SKILL.md +85 -0
  156. package/skills/grid_board_layout.aicomponent/manifest.json +69 -0
  157. package/skills/grid_board_layout.aicomponent/ref/BoardLayout.ts +416 -0
  158. package/skills/grid_board_layout.aicomponent/ref/BoardLayout3D.ts +125 -0
  159. package/skills/grid_board_layout.aicomponent/ref/BoardLayoutMath.ts +85 -0
  160. package/skills/grid_board_layout.aicomponent/ref/BoardRenderer3D.ts +298 -0
  161. package/skills/heart_lives.aicomponent/SKILL.md +42 -0
  162. package/skills/heart_lives.aicomponent/manifest.json +25 -0
  163. package/skills/heart_lives.aicomponent/ref/HeartDisplay.ts +96 -0
  164. package/skills/idle-breathe.aicomponent/SKILL.md +27 -0
  165. package/skills/idle-breathe.aicomponent/manifest.json +20 -0
  166. package/skills/idle-breathe.aicomponent/ref/phaser.js +25 -0
  167. package/skills/idle-breathe.aicomponent/ref/playcanvas.js +29 -0
  168. package/skills/jewel_tile.aiimage/SKILL.md +63 -0
  169. package/skills/jewel_tile.aiimage/manifest.json +49 -0
  170. package/skills/knife_hit.aigameplay/SKILL.md +103 -0
  171. package/skills/knife_hit.aigameplay/manifest.json +151 -0
  172. package/skills/knife_hit.aigameplay/ref/pgs-schema.json +202 -0
  173. package/skills/knife_hit.aigameplay/ref/reducer.template.ts +196 -0
  174. package/skills/left_right_parkour.aigameplay/SKILL.md +120 -0
  175. package/skills/left_right_parkour.aigameplay/manifest.json +165 -0
  176. package/skills/left_right_parkour.aigameplay/ref/pgs-schema.json +200 -0
  177. package/skills/left_right_parkour.aigameplay/ref/reducer.template.ts +194 -0
  178. package/skills/level_data_pack.aiconfig/SKILL.md +64 -0
  179. package/skills/level_data_pack.aiconfig/manifest.json +37 -0
  180. package/skills/level_data_validator.aivalidator/SKILL.md +85 -0
  181. package/skills/level_data_validator.aivalidator/manifest.json +17 -0
  182. package/skills/level_data_validator.aivalidator/ref/LevelValidator.ts +113 -0
  183. package/skills/level_lifecycle.aicomponent/SKILL.md +81 -0
  184. package/skills/level_lifecycle.aicomponent/manifest.json +87 -0
  185. package/skills/level_lifecycle.aicomponent/ref/LevelLifecycle.ts +235 -0
  186. package/skills/level_solvability_validator.aivalidator/SKILL.md +74 -0
  187. package/skills/level_solvability_validator.aivalidator/manifest.json +23 -0
  188. package/skills/level_solvability_validator.aivalidator/ref/LevelValidator.ts +186 -0
  189. package/skills/level_state.aicomponent/SKILL.md +55 -0
  190. package/skills/level_state.aicomponent/manifest.json +34 -0
  191. package/skills/level_state.aicomponent/ref/LevelDataManager.ts +26 -0
  192. package/skills/level_state.aicomponent/ref/LevelManager.ts +26 -0
  193. package/skills/loading_screen.aicomponent/SKILL.md +57 -0
  194. package/skills/loading_screen.aicomponent/manifest.json +43 -0
  195. package/skills/loading_screen.aicomponent/ref/LoadingUI.ts +339 -0
  196. package/skills/lose_result_panel.aiimage/SKILL.md +58 -0
  197. package/skills/lose_result_panel.aiimage/manifest.json +47 -0
  198. package/skills/lose_result_panel.aiimage/ref/lose.png +0 -0
  199. package/skills/lose_result_panel.aiimage/ref/lose.webp +0 -0
  200. package/skills/lose_sfx.aiaudio/SKILL.md +59 -0
  201. package/skills/lose_sfx.aiaudio/manifest.json +45 -0
  202. package/skills/lose_sfx.aiaudio/ref/lose.mp3 +0 -0
  203. package/skills/match-pop.aicomponent/SKILL.md +29 -0
  204. package/skills/match-pop.aicomponent/manifest.json +19 -0
  205. package/skills/match-pop.aicomponent/ref/phaser.js +30 -0
  206. package/skills/match-pop.aicomponent/ref/playcanvas.js +22 -0
  207. package/skills/match3_core.aigameplay/SKILL.md +125 -0
  208. package/skills/match3_core.aigameplay/manifest.json +107 -0
  209. package/skills/match3_core.aigameplay/ref/pgs-schema.json +154 -0
  210. package/skills/match3_core.aigameplay/ref/reducer.template.ts +191 -0
  211. package/skills/match_engine.aicomponent/SKILL.md +84 -0
  212. package/skills/match_engine.aicomponent/manifest.json +23 -0
  213. package/skills/match_engine.aicomponent/ref/MatchEngine.ts +75 -0
  214. package/skills/memory_match.aigameplay/SKILL.md +111 -0
  215. package/skills/memory_match.aigameplay/manifest.json +164 -0
  216. package/skills/memory_match.aigameplay/ref/pgs-schema.json +190 -0
  217. package/skills/memory_match.aigameplay/ref/reducer.template.ts +162 -0
  218. package/skills/merge_core.aigameplay/SKILL.md +112 -0
  219. package/skills/merge_core.aigameplay/manifest.json +154 -0
  220. package/skills/merge_core.aigameplay/ref/pgs-schema.json +202 -0
  221. package/skills/merge_core.aigameplay/ref/reducer.template.ts +179 -0
  222. package/skills/mistake_sfx.aiaudio/SKILL.md +59 -0
  223. package/skills/mistake_sfx.aiaudio/manifest.json +45 -0
  224. package/skills/mistake_sfx.aiaudio/ref/mistake.mp3 +0 -0
  225. package/skills/nomove_hint_overlay.aiimage/SKILL.md +58 -0
  226. package/skills/nomove_hint_overlay.aiimage/manifest.json +48 -0
  227. package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.png +0 -0
  228. package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.webp +0 -0
  229. package/skills/normal_dot.aiimage/SKILL.md +58 -0
  230. package/skills/normal_dot.aiimage/manifest.json +46 -0
  231. package/skills/normal_dot.aiimage/ref/normal_dot.png +0 -0
  232. package/skills/normal_dot.aiimage/ref/normal_dot.webp +0 -0
  233. package/skills/ocean.aiimage/SKILL.md +71 -0
  234. package/skills/ocean.aiimage/manifest.json +49 -0
  235. package/skills/particle-confetti.aicomponent/SKILL.md +32 -0
  236. package/skills/particle-confetti.aicomponent/manifest.json +21 -0
  237. package/skills/particle-confetti.aicomponent/ref/html5-spritesheet.js +17 -0
  238. package/skills/particle-confetti.aicomponent/ref/phaser.js +38 -0
  239. package/skills/particle-explosion.aicomponent/SKILL.md +37 -0
  240. package/skills/particle-explosion.aicomponent/manifest.json +24 -0
  241. package/skills/particle-explosion.aicomponent/ref/html5-spritesheet.js +40 -0
  242. package/skills/particle-explosion.aicomponent/ref/phaser.js +46 -0
  243. package/skills/particle-explosion.aicomponent/ref/playcanvas.js +33 -0
  244. package/skills/particle-trail.aicomponent/SKILL.md +25 -0
  245. package/skills/particle-trail.aicomponent/manifest.json +22 -0
  246. package/skills/particle-trail.aicomponent/ref/phaser.js +31 -0
  247. package/skills/path_animation.aicomponent/SKILL.md +82 -0
  248. package/skills/path_animation.aicomponent/manifest.json +77 -0
  249. package/skills/path_animation.aicomponent/ref/AnimationManager.ts +694 -0
  250. package/skills/path_animation.aicomponent/ref/AnimationManager3D.ts +317 -0
  251. package/skills/path_elimination_rules.aigameplay/SKILL.md +88 -0
  252. package/skills/path_elimination_rules.aigameplay/manifest.json +119 -0
  253. package/skills/path_elimination_rules.aigameplay/ref/pgs-schema.json +227 -0
  254. package/skills/path_input_handler.aicomponent/SKILL.md +87 -0
  255. package/skills/path_input_handler.aicomponent/manifest.json +97 -0
  256. package/skills/path_input_handler.aicomponent/ref/InputHandler.ts +714 -0
  257. package/skills/path_input_handler.aicomponent/ref/InputHandler3D.ts +204 -0
  258. package/skills/path_renderer.aicomponent/SKILL.md +101 -0
  259. package/skills/path_renderer.aicomponent/manifest.json +69 -0
  260. package/skills/path_renderer.aicomponent/ref/PathRenderer.ts +509 -0
  261. package/skills/path_renderer.aicomponent/ref/PathRenderer3D.ts +176 -0
  262. package/skills/path_renderer.aicomponent/ref/PathRenderers.ts +640 -0
  263. package/skills/phaser.aicomponent/SKILL.md +315 -0
  264. package/skills/phaser.aicomponent/manifest.json +156 -0
  265. package/skills/phaser.aicomponent/ref/BootScene.ts +29 -0
  266. package/skills/phaser.aicomponent/ref/GameConfig.ts +29 -0
  267. package/skills/phaser.aicomponent/ref/GameScene.ts +88 -0
  268. package/skills/phaser.aicomponent/ref/PreloaderScene.ts +78 -0
  269. package/skills/phaser.aicomponent/ref/SceneKeys.ts +7 -0
  270. package/skills/phaser.aicomponent/ref/SoundUtils.ts +21 -0
  271. package/skills/phaser.aicomponent/ref/UiLayout.ts +74 -0
  272. package/skills/phaser.aicomponent/ref/globals.d.ts +52 -0
  273. package/skills/phaser.aicomponent/ref/index.css +40 -0
  274. package/skills/phaser.aicomponent/ref/index.html +14 -0
  275. package/skills/phaser.aicomponent/ref/index.ts +48 -0
  276. package/skills/phaser.aicomponent/ref/main.ts +16 -0
  277. package/skills/phaser.aicomponent/ref/package.json +22 -0
  278. package/skills/phaser.aicomponent/ref/tsconfig.json +25 -0
  279. package/skills/phaser.aicomponent/ref/webpack.config.js +57 -0
  280. package/skills/phaser_scene_lifecycle.aicomponent/SKILL.md +63 -0
  281. package/skills/phaser_scene_lifecycle.aicomponent/manifest.json +33 -0
  282. package/skills/pick_and_match_rules.aigameplay/SKILL.md +113 -0
  283. package/skills/pick_and_match_rules.aigameplay/manifest.json +121 -0
  284. package/skills/pick_and_match_rules.aigameplay/ref/pgs-schema.json +354 -0
  285. package/skills/pin_pull.aigameplay/SKILL.md +110 -0
  286. package/skills/pin_pull.aigameplay/manifest.json +164 -0
  287. package/skills/pin_pull.aigameplay/ref/pgs-schema.json +201 -0
  288. package/skills/pin_pull.aigameplay/ref/reducer.template.ts +216 -0
  289. package/skills/playable_app_logo.aiimage/SKILL.md +58 -0
  290. package/skills/playable_app_logo.aiimage/manifest.json +47 -0
  291. package/skills/playable_app_logo.aiimage/ref/logo.png +0 -0
  292. package/skills/playable_app_logo.aiimage/ref/logo.webp +0 -0
  293. package/skills/playable_end_screen_layout.aicomponent/SKILL.md +75 -0
  294. package/skills/playable_end_screen_layout.aicomponent/manifest.json +24 -0
  295. package/skills/playable_guidance_layer.aicomponent/SKILL.md +89 -0
  296. package/skills/playable_guidance_layer.aicomponent/manifest.json +24 -0
  297. package/skills/playable_hud_layout.aicomponent/SKILL.md +96 -0
  298. package/skills/playable_hud_layout.aicomponent/manifest.json +24 -0
  299. package/skills/playable_scripts_build.aicomponent/SKILL.md +69 -0
  300. package/skills/playable_scripts_build.aicomponent/manifest.json +53 -0
  301. package/skills/playable_scripts_build.aicomponent/ref/builds.config.js +257 -0
  302. package/skills/playcraft-3d-flip-sprite/SKILL.md +336 -0
  303. package/skills/playcraft-3d-flip-sprite/renderer/flatten_glb.mjs +62 -0
  304. package/skills/playcraft-3d-flip-sprite/renderer/render.mjs +325 -0
  305. package/skills/playcraft-3d-flip-sprite/renderer/render_single.mjs +138 -0
  306. package/skills/playcraft-asset-management/SKILL.md +73 -0
  307. package/skills/playcraft-audio-generation/SKILL.md +126 -0
  308. package/skills/playcraft-build/SKILL.md +44 -0
  309. package/skills/playcraft-code-editor/SKILL.md +71 -0
  310. package/skills/playcraft-create-remix/SKILL.md +62 -0
  311. package/skills/playcraft-deploy/SKILL.md +59 -0
  312. package/skills/playcraft-image-generation/SKILL.md +148 -0
  313. package/skills/playcraft-image-processing/SKILL.md +216 -0
  314. package/skills/playcraft-platform-intro/SKILL.md +41 -0
  315. package/skills/playcraft-prefab/SKILL.md +98 -0
  316. package/skills/playcraft-project-management/SKILL.md +57 -0
  317. package/skills/playcraft-remix-workflow/SKILL.md +119 -0
  318. package/skills/playcraft-remix-workflow/references/xplatform.schema.json5 +31 -0
  319. package/skills/playcraft-save/SKILL.md +46 -0
  320. package/skills/playcraft-skill-recommender/SKILL.md +152 -0
  321. package/skills/playcraft-sprite-generation/SKILL.md +534 -0
  322. package/skills/playcraft-sprite-remix/SKILL.md +155 -0
  323. package/skills/playcraft-sprite-sheet/SKILL.md +97 -0
  324. package/skills/playtest_report.aivalidator/SKILL.md +103 -0
  325. package/skills/playtest_report.aivalidator/manifest.json +21 -0
  326. package/skills/preloader_scene.aicomponent/SKILL.md +58 -0
  327. package/skills/preloader_scene.aicomponent/manifest.json +43 -0
  328. package/skills/preloader_scene.aicomponent/ref/Preloader.ts +339 -0
  329. package/skills/progress_bar.aicomponent/SKILL.md +38 -0
  330. package/skills/progress_bar.aicomponent/manifest.json +25 -0
  331. package/skills/progress_bar.aicomponent/ref/ProgressDisplay.ts +140 -0
  332. package/skills/references/xplatform.schema.json5 +31 -0
  333. package/skills/responsive_2d_layout.aicomponent/SKILL.md +161 -0
  334. package/skills/responsive_2d_layout.aicomponent/manifest.json +43 -0
  335. package/skills/responsive_2d_layout.aicomponent/ref/UiLayout.ts +56 -0
  336. package/skills/run_context_state.aicomponent/SKILL.md +54 -0
  337. package/skills/run_context_state.aicomponent/manifest.json +40 -0
  338. package/skills/run_context_state.aicomponent/ref/RunContextRuntime.ts +30 -0
  339. package/skills/score-fly.aicomponent/SKILL.md +31 -0
  340. package/skills/score-fly.aicomponent/manifest.json +21 -0
  341. package/skills/score-fly.aicomponent/ref/phaser.js +26 -0
  342. package/skills/score-fly.aicomponent/ref/playcanvas.js +28 -0
  343. package/skills/score_goal.aiconfig/SKILL.md +46 -0
  344. package/skills/score_goal.aiconfig/manifest.json +33 -0
  345. package/skills/screen-flash.aicomponent/SKILL.md +30 -0
  346. package/skills/screen-flash.aicomponent/manifest.json +20 -0
  347. package/skills/screen-flash.aicomponent/ref/phaser.js +48 -0
  348. package/skills/screen-shake.aicomponent/SKILL.md +30 -0
  349. package/skills/screen-shake.aicomponent/manifest.json +19 -0
  350. package/skills/screen-shake.aicomponent/ref/phaser.js +23 -0
  351. package/skills/screen-shake.aicomponent/ref/playcanvas.js +44 -0
  352. package/skills/screw_puzzle.aigameplay/SKILL.md +116 -0
  353. package/skills/screw_puzzle.aigameplay/manifest.json +164 -0
  354. package/skills/screw_puzzle.aigameplay/ref/pgs-schema.json +235 -0
  355. package/skills/screw_puzzle.aigameplay/ref/reducer.template.ts +213 -0
  356. package/skills/settings_state.aicomponent/SKILL.md +61 -0
  357. package/skills/settings_state.aicomponent/manifest.json +33 -0
  358. package/skills/settings_state.aicomponent/ref/SettingsManager.ts +130 -0
  359. package/skills/slide_out_to_tray_animation.aicomponent/SKILL.md +64 -0
  360. package/skills/slide_out_to_tray_animation.aicomponent/manifest.json +58 -0
  361. package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager.ts +164 -0
  362. package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager3D.ts +198 -0
  363. package/skills/slide_out_to_tray_animation.aicomponent/ref/BezierUtils.ts +59 -0
  364. package/skills/slot_machine.aigameplay/SKILL.md +119 -0
  365. package/skills/slot_machine.aigameplay/manifest.json +166 -0
  366. package/skills/slot_machine.aigameplay/ref/pgs-schema.json +212 -0
  367. package/skills/slot_machine.aigameplay/ref/reducer.template.ts +212 -0
  368. package/skills/sniper_shot.aigameplay/SKILL.md +84 -0
  369. package/skills/sniper_shot.aigameplay/manifest.json +153 -0
  370. package/skills/sniper_shot.aigameplay/ref/pgs-schema.json +211 -0
  371. package/skills/sniper_shot.aigameplay/ref/reducer.template.ts +211 -0
  372. package/skills/solitaire.aigameplay/SKILL.md +101 -0
  373. package/skills/solitaire.aigameplay/manifest.json +151 -0
  374. package/skills/solitaire.aigameplay/ref/pgs-schema.json +200 -0
  375. package/skills/solitaire.aigameplay/ref/reducer.template.ts +176 -0
  376. package/skills/sound-effects/SKILL.md +46 -0
  377. package/skills/sound_utils.aicomponent/SKILL.md +52 -0
  378. package/skills/sound_utils.aicomponent/manifest.json +30 -0
  379. package/skills/sound_utils.aicomponent/ref/SoundUtils.ts +29 -0
  380. package/skills/sprite-animation-2d.aicomponent/SKILL.md +45 -0
  381. package/skills/sprite-animation-2d.aicomponent/manifest.json +28 -0
  382. package/skills/sprite-animation-2d.aicomponent/ref/html5.js +83 -0
  383. package/skills/sprite-animation-2d.aicomponent/ref/phaser.js +38 -0
  384. package/skills/sprite-animation-2d.aicomponent/ref/playcanvas.js +67 -0
  385. package/skills/sprite_entity_renderer.aicomponent/SKILL.md +148 -0
  386. package/skills/sprite_entity_renderer.aicomponent/manifest.json +17 -0
  387. package/skills/sprite_entity_renderer.aicomponent/ref/SpriteEntityRenderer.ts +126 -0
  388. package/skills/success_sfx.aiaudio/SKILL.md +59 -0
  389. package/skills/success_sfx.aiaudio/manifest.json +45 -0
  390. package/skills/success_sfx.aiaudio/ref/success.mp3 +0 -0
  391. package/skills/tap_blast.aigameplay/SKILL.md +116 -0
  392. package/skills/tap_blast.aigameplay/manifest.json +153 -0
  393. package/skills/tap_blast.aigameplay/ref/pgs-schema.json +208 -0
  394. package/skills/tap_blast.aigameplay/ref/reducer.template.ts +202 -0
  395. package/skills/theme_state.aicomponent/SKILL.md +53 -0
  396. package/skills/theme_state.aicomponent/manifest.json +33 -0
  397. package/skills/theme_state.aicomponent/ref/ThemeManager.ts +174 -0
  398. package/skills/theme_switcher_build.aicomponent/SKILL.md +62 -0
  399. package/skills/theme_switcher_build.aicomponent/manifest.json +38 -0
  400. package/skills/theme_switcher_build.aicomponent/ref/theme-index.ts +8 -0
  401. package/skills/theme_variant.aiconfig/SKILL.md +78 -0
  402. package/skills/theme_variant.aiconfig/manifest.json +39 -0
  403. package/skills/theme_variant.aiconfig/ref/ExampleTheme/index.ts +16 -0
  404. package/skills/theme_variant.aiconfig/ref/ExampleTheme/levelEasy.json +141 -0
  405. package/skills/threejs.aicomponent/SKILL.md +422 -0
  406. package/skills/threejs.aicomponent/manifest.json +166 -0
  407. package/skills/threejs.aicomponent/ref/AssetLoader.ts +158 -0
  408. package/skills/threejs.aicomponent/ref/BaseScene.ts +88 -0
  409. package/skills/threejs.aicomponent/ref/GameConfig.ts +47 -0
  410. package/skills/threejs.aicomponent/ref/MainScene.ts +170 -0
  411. package/skills/threejs.aicomponent/ref/PreloaderScene.ts +93 -0
  412. package/skills/threejs.aicomponent/ref/SceneKeys.ts +6 -0
  413. package/skills/threejs.aicomponent/ref/SceneManager.ts +69 -0
  414. package/skills/threejs.aicomponent/ref/ViewportManager.ts +62 -0
  415. package/skills/threejs.aicomponent/ref/globals.d.ts +74 -0
  416. package/skills/threejs.aicomponent/ref/index.css +80 -0
  417. package/skills/threejs.aicomponent/ref/index.html +20 -0
  418. package/skills/threejs.aicomponent/ref/index.ts +117 -0
  419. package/skills/threejs.aicomponent/ref/main.ts +10 -0
  420. package/skills/threejs.aicomponent/ref/package.json +23 -0
  421. package/skills/threejs.aicomponent/ref/tsconfig.json +24 -0
  422. package/skills/threejs.aicomponent/ref/webpack.config.js +61 -0
  423. package/skills/time_clear_goal.aiconfig/SKILL.md +46 -0
  424. package/skills/time_clear_goal.aiconfig/manifest.json +32 -0
  425. package/skills/time_icon.aiimage/SKILL.md +58 -0
  426. package/skills/time_icon.aiimage/manifest.json +47 -0
  427. package/skills/time_icon.aiimage/ref/time.png +0 -0
  428. package/skills/time_icon.aiimage/ref/time.webp +0 -0
  429. package/skills/top_ui_bar.aicomponent/SKILL.md +45 -0
  430. package/skills/top_ui_bar.aicomponent/manifest.json +27 -0
  431. package/skills/top_ui_bar.aicomponent/ref/GameTopUI.ts +229 -0
  432. package/skills/tower_defence.aigameplay/SKILL.md +117 -0
  433. package/skills/tower_defence.aigameplay/manifest.json +175 -0
  434. package/skills/tower_defence.aigameplay/ref/pgs-schema.json +247 -0
  435. package/skills/tower_defence.aigameplay/ref/reducer.template.ts +239 -0
  436. package/skills/tray_container.aicomponent/SKILL.md +143 -0
  437. package/skills/tray_container.aicomponent/manifest.json +58 -0
  438. package/skills/tray_container.aicomponent/ref/TrayRenderer.ts +155 -0
  439. package/skills/tray_container.aicomponent/ref/TrayRenderer3D.ts +281 -0
  440. package/skills/tray_container.aicomponent/ref/TrayRendererHtmlOverlay.ts +228 -0
  441. package/skills/tutorial_overlay.aicomponent/SKILL.md +46 -0
  442. package/skills/tutorial_overlay.aicomponent/manifest.json +34 -0
  443. package/skills/tutorial_overlay.aicomponent/ref/TutorialManager.ts +367 -0
  444. package/skills/tween-animation-2d.aicomponent/SKILL.md +35 -0
  445. package/skills/tween-animation-2d.aicomponent/manifest.json +28 -0
  446. package/skills/tween-animation-2d.aicomponent/ref/phaser.js +49 -0
  447. package/skills/tween-animation-2d.aicomponent/ref/playcanvas.js +36 -0
  448. package/skills/typescript_module_patterns.aicomponent/SKILL.md +209 -0
  449. package/skills/typescript_module_patterns.aicomponent/manifest.json +28 -0
  450. package/skills/typescript_module_patterns.aicomponent/ref/globals.d.ts +31 -0
  451. package/skills/ui-transition.aicomponent/SKILL.md +33 -0
  452. package/skills/ui-transition.aicomponent/manifest.json +19 -0
  453. package/skills/ui-transition.aicomponent/ref/phaser.js +45 -0
  454. package/skills/ux_flow_spec.aiconfig/SKILL.md +82 -0
  455. package/skills/ux_flow_spec.aiconfig/manifest.json +39 -0
  456. package/skills/wave_difficulty.aiconfig/SKILL.md +46 -0
  457. package/skills/wave_difficulty.aiconfig/manifest.json +33 -0
  458. package/skills/webpack_build.aicomponent/SKILL.md +204 -0
  459. package/skills/webpack_build.aicomponent/manifest.json +29 -0
  460. package/skills/webpack_build.aicomponent/ref/package.json +16 -0
  461. package/skills/webpack_build.aicomponent/ref/webpack.config.js +53 -0
  462. package/skills/win_anim_sfx.aiaudio/SKILL.md +59 -0
  463. package/skills/win_anim_sfx.aiaudio/manifest.json +46 -0
  464. package/skills/win_anim_sfx.aiaudio/ref/win_anim.mp3 +0 -0
  465. package/skills/win_dot.aiimage/SKILL.md +58 -0
  466. package/skills/win_dot.aiimage/manifest.json +47 -0
  467. package/skills/win_dot.aiimage/ref/win_dot.png +0 -0
  468. package/skills/win_dot.aiimage/ref/win_dot.webp +0 -0
  469. package/skills/win_result_panel.aiimage/SKILL.md +58 -0
  470. package/skills/win_result_panel.aiimage/manifest.json +47 -0
  471. package/skills/win_result_panel.aiimage/ref/win.png +0 -0
  472. package/skills/win_result_panel.aiimage/ref/win.webp +0 -0
  473. package/skills/word_connect.aigameplay/SKILL.md +86 -0
  474. package/skills/word_connect.aigameplay/manifest.json +154 -0
  475. package/skills/word_connect.aigameplay/ref/pgs-schema.json +212 -0
  476. package/skills/word_connect.aigameplay/ref/reducer.template.ts +186 -0
  477. package/src/index.ts +10 -0
  478. package/src/skills.loader.ts +225 -0
  479. package/src/skills.types.ts +42 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * 2048_core.aigameplay — reducer 接口模板
3
+ *
4
+ * Agent 生成实际 reducer 时,必须导出以下函数。
5
+ * 此文件是接口约束模板,不是可执行代码。
6
+ *
7
+ * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8
+ * ⚠️ 重要:渲染层(GameScene)不应直接调用 dispatch()
9
+ *
10
+ * dispatch() 是一体化接口,内部完成滑动 + 合并 + 生成后只返回最终状态,
11
+ * 中间过程(哪些方块移动了多远、哪些方块合并了、新方块在哪里生成)全部丢失。
12
+ *
13
+ * 渲染层需要分步动画(方块平移 → 合并弹跳 → 新方块弹出),
14
+ * 因此必须使用下方的「分步函数」逐步驱动,每步之间插入 Tween 动画。
15
+ *
16
+ * dispatch() 的用途:无头测试、AI 模拟、快速跳过动画等场景。
17
+ * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
+ */
19
+
20
+ // ─── 配置类型 ─────────────────────────────────────────────────────────────────
21
+
22
+ export type SlideDirection = 'up' | 'down' | 'left' | 'right';
23
+
24
+ export type Game2048Config = {
25
+ /** 棋盘尺寸,默认 4(4×4) */
26
+ gridSize: number;
27
+ /** 胜利目标值,默认 2048 */
28
+ winValue: number;
29
+ /** 生成方块的可选值,默认 [2, 4] */
30
+ spawnValues: number[];
31
+ /** 对应权重(0-1),默认 [0.9, 0.1] */
32
+ spawnWeights: number[];
33
+ /** 初始生成方块数量,默认 2 */
34
+ initialTileCount: number;
35
+ /** 胜利后是否继续,默认 false */
36
+ continueAfterWin: boolean;
37
+ };
38
+
39
+ // ─── 动作类型 ─────────────────────────────────────────────────────────────────
40
+
41
+ export type Game2048Action =
42
+ | { type: 'slide'; direction: SlideDirection }
43
+ | { type: 'reset' };
44
+
45
+ // ─── 状态类型 ─────────────────────────────────────────────────────────────────
46
+
47
+ /**
48
+ * 棋盘格子,null 表示空格
49
+ * board[row][col],row 0 为顶行,col 0 为左列
50
+ */
51
+ export type TileCell = {
52
+ value: number;
53
+ /** 本次滑动中是否已参与合并(防止二次合并) */
54
+ merged: boolean;
55
+ } | null;
56
+
57
+ export type Game2048State = {
58
+ /** 4×4 棋盘,board[row][col] */
59
+ board: TileCell[][];
60
+ /** 当前得分 */
61
+ score: number;
62
+ /** 历史最高分 */
63
+ bestScore: number;
64
+ /** 游戏是否结束 */
65
+ gameOver: boolean;
66
+ /** 是否达到胜利值 */
67
+ win: boolean;
68
+ /** 上次滑动是否有效(棋盘发生变化) */
69
+ lastSlideEffective: boolean;
70
+ };
71
+
72
+ // ─── 分步操作返回类型 ─────────────────────────────────────────────────────────
73
+
74
+ /** 方块移动信息(用于驱动平移动画) */
75
+ export type TileMove = {
76
+ /** 来源位置 */
77
+ from: { row: number; col: number };
78
+ /** 目标位置 */
79
+ to: { row: number; col: number };
80
+ /** 方块值 */
81
+ value: number;
82
+ };
83
+
84
+ /** 合并信息(用于驱动合并动画) */
85
+ export type MergeResult = {
86
+ /** 合并发生在目标位置 */
87
+ position: { row: number; col: number };
88
+ /** 合并前两个方块的值 */
89
+ fromValue: number;
90
+ /** 合并后的新值 */
91
+ toValue: number;
92
+ /** 本次合并的得分 */
93
+ scoreGained: number;
94
+ };
95
+
96
+ /** 新生成方块信息 */
97
+ export type SpawnedTile = {
98
+ row: number;
99
+ col: number;
100
+ value: number;
101
+ };
102
+
103
+ /** slideBoard 的完整返回 */
104
+ export type SlideResult = {
105
+ /** 更新后的棋盘(已完成移动和合并,但尚未重置 merged 标志) */
106
+ board: TileCell[][];
107
+ /** 所有方块的移动信息 */
108
+ moves: TileMove[];
109
+ /** 所有合并信息 */
110
+ merges: MergeResult[];
111
+ /** 本次滑动是否有效(棋盘发生变化) */
112
+ effective: boolean;
113
+ /** 本次滑动新增得分 */
114
+ scoreGained: number;
115
+ };
116
+
117
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
118
+ // 必须导出的函数
119
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
120
+
121
+ // ─── 初始化 ──────────────────────────────────────────────────────────────────
122
+
123
+ /**
124
+ * init:根据配置初始化游戏状态,随机放置 initialTileCount 个方块
125
+ */
126
+ export declare function init(config: Game2048Config): Game2048State;
127
+
128
+ // ─── 一体化接口(测试/AI 模拟用) ───────────────────────────────────────────
129
+
130
+ /**
131
+ * dispatch:接收动作,返回新状态(纯函数,不得修改原 state)
132
+ * - slide:滑动棋盘,合并方块,生成新方块,检测胜败(一步到位)
133
+ * - reset:重置到初始状态
134
+ *
135
+ * ⚠️ 仅用于无头测试和 AI 模拟。渲染层请使用下方分步函数。
136
+ */
137
+ export declare function dispatch(state: Game2048State, action: Game2048Action): Game2048State;
138
+
139
+ /**
140
+ * getState:返回当前状态快照
141
+ */
142
+ export declare function getState(state: Game2048State): Game2048State;
143
+
144
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
145
+ // 分步函数(渲染层/场景层必须使用这些函数驱动动画)
146
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
147
+
148
+ /**
149
+ * slideBoard:执行一次滑动操作(移动 + 合并)
150
+ * 返回包含移动信息、合并信息和更新后棋盘的完整结果
151
+ *
152
+ * 场景层调用顺序:
153
+ * 1. slideBoard → 获取 moves / merges / board
154
+ * 2. playTileMoveAnimation(moves) 并行平移动画
155
+ * 3. playTileMergeAnimation(merges) 合并弹跳动画
156
+ * 4. 若 effective,调用 spawnTile(board)
157
+ *
158
+ * 关键约束:合并后的方块其 merged = true,本次滑动不再参与二次合并
159
+ */
160
+ export declare function slideBoard(board: TileCell[][], direction: SlideDirection): SlideResult;
161
+
162
+ /**
163
+ * mergeTiles:仅执行合并逻辑(不含位移),用于需要独立控制合并步骤的场景
164
+ * 通常直接使用 slideBoard 即可,此函数供高级定制使用
165
+ */
166
+ export declare function mergeTiles(board: TileCell[][], direction: SlideDirection): MergeResult[];
167
+
168
+ /**
169
+ * spawnTile:在棋盘随机空格生成新方块
170
+ * 返回生成的方块信息(直接修改传入的 board 引用)
171
+ *
172
+ * 场景层根据 SpawnedTile 在对应位置创建精灵并播放 scale 0→1 弹出动画
173
+ * 若无空格则返回 null(理论上 slideBoard effective 后必有空格)
174
+ */
175
+ export declare function spawnTile(board: TileCell[][]): SpawnedTile | null;
176
+
177
+ /**
178
+ * hasValidMoves:检查棋盘是否还有可用的合法滑动
179
+ * - 有空格:true
180
+ * - 无空格但有相邻同值方块:true
181
+ * - 无空格且无相邻同值方块:false(游戏结束)
182
+ */
183
+ export declare function hasValidMoves(board: TileCell[][]): boolean;
184
+
185
+ /**
186
+ * calculateScore:计算一轮合并的总得分
187
+ * 每次合并得分 = 合并后新方块的值
188
+ */
189
+ export declare function calculateScore(merges: MergeResult[]): number;
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: sound-effects
3
+ description: 通过 playcraft CLI 生成音效(SFX);--prompt 仅支持英文。含时长、循环等 CLI 参数与英文提示词写法,与 playcraft-audio-generation 配合。
4
+ license: MIT
5
+ source: https://github.com/elevenlabs/skills/tree/main/sound-effects
6
+ compatibility: agent,opencode
7
+ ---
8
+
9
+ # 音效生成(SFX)— CLI 与提示词
10
+
11
+ 用**英文文字描述**生成短音效(平台后端走 ElevenLabs Sound Effects,**不是**语音 TTS)。你在沙箱里**只使用 `playcraft tools generate-sfx`**;云端认证与厂商侧配置由平台处理,**无需也不应**在技能文档或命令中涉及密钥、环境变量或自行调用厂商 HTTP/SDK。
12
+
13
+ ## 语言(必须遵守)
14
+
15
+ **`--prompt` 只支持英文。** 不要用中文或其他语言写 SFX 描述:模型对非英文支持差,易出现杂音、语义跑偏或听感像念白。若用户给中文需求,先在心里翻译成简洁英文短语再写入 `--prompt`。
16
+
17
+ ## CLI
18
+
19
+ ```bash
20
+ playcraft tools generate-sfx \
21
+ --prompt "<English only, see Prompt Tips below>" \
22
+ [--duration <秒>] \
23
+ [--loop] \
24
+ --output <路径>
25
+ ```
26
+
27
+ | CLI 选项 | 说明 |
28
+ |----------|------|
29
+ | `--prompt` | 必填,**仅英文**音效描述 |
30
+ | `--duration` | 可选,约 0.5–30 秒 |
31
+ | `--loop` | 可选,可循环音效 |
32
+ | `--output` | 必填,保存路径(如 `./assets/audio/click.mp3`) |
33
+
34
+ 生成 BGM 用 `playcraft tools generate-bgm`(见 `playcraft-audio-generation`)。
35
+
36
+ ## Prompt Tips(英文 `--prompt`,优先遵守)
37
+
38
+ - 具体化:"Heavy rain on a tin roof" 优于 "Rain"
39
+ - 组合层次:"Footsteps on gravel with distant traffic"
40
+ - 标明风格:"Cinematic braam, horror" 或 "8-bit retro jump sound"
41
+ - 情绪与场景:"Eerie wind howling through an abandoned building"
42
+ - 使用**非对白、偏拟声/材质/场景**的短语;长句口语容易听起来像念稿(虽非 TTS API)
43
+
44
+ ## 失败时
45
+
46
+ 根据 CLI 报错判断:参数问题则改 `--prompt` / `--duration`;若提示权限、额度或上游不可用,向用户说明需**在平台侧**检查配置或配额——**不要**尝试自行配置密钥或直连厂商 API。
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: ad_compliance_rules.aiconfig
3
+ description: 广告合规规则配置 - 定义 Facebook、Google、TikTok、Unity Ads 的试玩广告技术合规要求
4
+ triggers: 合规,compliance,审核,review,平台规则,platform rules,广告政策,ad policy,facebook规则,google规则
5
+ ---
6
+
7
+ # ad_compliance_rules.aiconfig
8
+
9
+ 广告合规规则配置。定义各广告平台(Facebook、Google、TikTok、Unity Ads)的试玩广告技术合规要求,作为构建和审核的检查清单。
10
+
11
+ ### 通用规则
12
+
13
+ | 规则 | 要求 | 说明 |
14
+ |------|------|------|
15
+ | 文件大小 | ≤ 5MB | 所有平台的硬性限制 |
16
+ | 外部请求 | 禁止 | 不允许 fetch/XHR/动态加载 |
17
+ | 自动播放音频 | 禁止 | 必须用户交互后才能播放 |
18
+ | CTA 按钮 | 必须有 | 必须包含明确的下载/安装按钮 |
19
+ | Viewport | 固定 | `width=device-width, initial-scale=1, user-scalable=no` |
20
+
21
+ ### 平台特定规则
22
+
23
+ | 平台 | 格式 | 特殊要求 |
24
+ |------|------|---------|
25
+ | Facebook | HTML 或 ZIP | 不使用 MRAID |
26
+ | Google | HTML 或 ZIP | 必须使用 `ExitApi` |
27
+ | TikTok | ZIP | 必须集成 TikTok SDK |
28
+ | Unity Ads | 单 HTML | 必须使用 MRAID |
29
+
30
+ ## Recipe
31
+
32
+ - **配置方式**:固定(fixed)
33
+ - **核心参数**:
34
+ - `rules.universal`: 所有平台共用的合规规则
35
+ - `rules.facebook`: Facebook Playable Ads 特定规则
36
+ - `rules.google`: Google Interactive Ads 特定规则
37
+ - `rules.tiktok`: TikTok Playable Ads 特定规则
38
+ - `rules.unity`: Unity Ads Playable 特定规则
39
+ - **使用场景**:
40
+ - 构建前:检查项目设置是否符合目标平台要求
41
+ - 构建后:验证产物是否满足合规清单
42
+ - 审核时:Reviewer Agent 按此清单逐项检查
43
+
44
+ **配置步骤:**
45
+ 1. 读取项目的 `game/config.json`
46
+ 2. 写入 `compliance` 配置块,包含通用规则和各平台特定规则
47
+ 3. 此配置为固定值,通常不需要用户修改
48
+
49
+ ## Result
50
+
51
+ - **产物**:修改 `game/config.json` 的合规规则配置块
52
+ - **格式**:JSON patch
53
+ - **目标键**:`compliance`
54
+ - **包含子键**:`rules.universal`, `rules.facebook`, `rules.google`, `rules.tiktok`, `rules.unity`
55
+
56
+ ## Binding
57
+
58
+ - **Binding Role**:`gameConfig`
59
+ - **挂载目标**:`game/config.json`
60
+ - **引用类型**:`config-key-value`
61
+ - **与其他 Skill 的关系**:
62
+ - 与 `cta_platform_config.aiconfig` 联动:CTA 实现必须符合对应平台的合规要求
63
+ - 与 `playtest_report.aivalidator` 联动:试玩报告中包含合规检查项
64
+
65
+ ## Skill Definition
66
+
67
+ tools:
68
+ - read
69
+ - write
70
+ prompt_extension: |
71
+ You are configuring ad compliance rules for a playable ad (试玩广告).
72
+ These rules define the technical requirements that each ad platform enforces.
73
+ CRITICAL rules that MUST be followed for ALL platforms:
74
+ - File size ≤ 5MB (compressed)
75
+ - No external HTTP requests (no fetch, XHR, dynamic script loading)
76
+ - No auto-play audio (audio only after user interaction)
77
+ - Must include a CTA (Call-to-Action) button
78
+ - Viewport meta tag must be set correctly
79
+ Platform-specific requirements:
80
+ - Facebook: No MRAID. Use FbPlayableAd SDK.
81
+ - Google: Must use ExitApi for CTA. No MRAID.
82
+ - TikTok: Must include TikTok Playable SDK. ZIP format required.
83
+ - Unity Ads: Must use MRAID. Single HTML file format.
84
+ Read game/config.json and write the compliance rules config block.
85
+ This config is used by the Reviewer agent to validate builds.
@@ -0,0 +1,60 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "ad_compliance_rules.aiconfig",
4
+ "bundleType": "aiconfig",
5
+ "category": "config",
6
+ "mode": "fixed",
7
+ "label": {
8
+ "zh": "广告合规规则配置",
9
+ "en": "Ad compliance rules config"
10
+ },
11
+ "tags": ["config", "compliance", "rules", "platform", "facebook", "google", "tiktok", "policy", "playable-ads"],
12
+ "bindingRoles": ["gameConfig"],
13
+ "generation": {
14
+ "kind": "config-patch",
15
+ "params": {
16
+ "rules": {
17
+ "universal": {
18
+ "maxFileSize": "5MB",
19
+ "noExternalRequests": true,
20
+ "noAutoPlayAudio": true,
21
+ "mustHaveCta": true,
22
+ "mustBeSingleFile": false,
23
+ "viewportMeta": "width=device-width, initial-scale=1, user-scalable=no"
24
+ },
25
+ "facebook": {
26
+ "maxFileSize": "5MB",
27
+ "format": "single-html-or-zip",
28
+ "mraid": false
29
+ },
30
+ "google": {
31
+ "maxFileSize": "5MB",
32
+ "format": "single-html-or-zip",
33
+ "exitApi": true
34
+ },
35
+ "tiktok": {
36
+ "maxFileSize": "5MB",
37
+ "format": "zip",
38
+ "sdkRequired": true
39
+ },
40
+ "unity": {
41
+ "maxFileSize": "5MB",
42
+ "format": "single-html",
43
+ "mraid": true
44
+ }
45
+ }
46
+ }
47
+ },
48
+ "result": {
49
+ "configKey": "compliance",
50
+ "format": "json-patch"
51
+ },
52
+ "binding": {
53
+ "role": "gameConfig",
54
+ "target": "game/config.json",
55
+ "type": "config-key-value"
56
+ },
57
+ "files": {
58
+ "skill": "SKILL.md"
59
+ }
60
+ }
@@ -0,0 +1,257 @@
1
+ # agent_remix_orchestrator — Remix 编排器指南
2
+
3
+ **定位**:L0 Manager 的操作手册。本 Skill 不生成任何文件,只提供从用户意图到完整 Remix 产出的完整 7 步工作流指南。
4
+
5
+ ## Recipe
6
+
7
+ | 决策 | 原因 |
8
+ |------|------|
9
+ | **7 步线性工作流** | 将 DAG 操作链路分解为可执行的离散步骤,Agent 可逐步确认状态,避免因顺序错误导致管线断裂 |
10
+ | **三信号融合权重** | 单信号(LLM 直觉 / 历史 CTR / 用户偏好)各有盲区;三信号加权合成在冷启动和成熟期均可用 |
11
+ | **分歧度驱动 HITL** | Agent 自主执行高一致决策,只在真正有分歧时才打扰用户,降低交互成本 |
12
+ | **非代码 Skill** | 编排逻辑是 Agent 的认知框架,不产出项目文件;作为 SKILL.md 存在使其能被 `search_skills` 发现并加载 |
13
+
14
+ ## Adapter
15
+
16
+ - **Role**: `remixOrchestrator` — L0 Manager 从意图到 Remix 的完整 7 步工作流 SOP
17
+ - **Provides**: 工作流步骤文档、API 调用示例、bindingRole 速查表、错误处理原则
18
+ - **Requires**: 所有 Atom Skill(在工作流 Step 6 中按 DAG 拓扑序逐一加载)
19
+ - **Consumed by**: Agent L0 Manager 在接收用户意图时首先加载本 Skill 作为决策手册
20
+ - **Integration point**: 无代码集成点;Agent 读取 SKILL.md 内容后按工作流步骤执行
21
+
22
+ **前置阅读**:
23
+ - `docs/recommend/design-framework.md` — 核心概念:Remix = DAG(Atom[])
24
+ - `docs/recommend/agent-decision-mechanism.md` — 三信号融合与权重计算
25
+ - `docs/recommend/atom-to-remix-design.md` — Binding 机制与 Recipe 封包格式
26
+
27
+ ---
28
+
29
+ ## 总体工作流
30
+
31
+ ```
32
+ 用户意图
33
+ ↓ Step 1: parse_intent
34
+ IntentTags(在乎维度 / 不在乎维度)
35
+ ↓ Step 2: search_skills
36
+ 候选 Atom 列表
37
+ ↓ Step 3: DAG 拓扑排序
38
+ 生成顺序
39
+ ↓ Step 4: 计算三信号权重
40
+ 每个 Atom 的 final_score 排序
41
+ ↓ Step 5: 分歧度判断
42
+ 自主执行 / 问人确认
43
+ ↓ Step 6: 按拓扑序执行各 Atom Skill
44
+ 封包写入沙箱分支
45
+ ↓ Step 7: 触发构建
46
+ 可交付 Playable
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Step 1:解析意图
52
+
53
+ **调用**:`POST /api/agent/tools/parse-intent`
54
+
55
+ ```json
56
+ // Request
57
+ { "prompt": "热带休闲 match-3,参考 R2 风格,保留我的难度曲线" }
58
+
59
+ // Response
60
+ {
61
+ "intentTags": {
62
+ "画风": ["热带", "自然"],
63
+ "节奏": ["休闲"],
64
+ "核心玩法": ["消除"],
65
+ "关卡难度": null,
66
+ "音乐风格": null
67
+ },
68
+ "caredDimensions": ["画风", "节奏", "核心玩法"],
69
+ "uncaredDimensions": ["关卡难度", "音乐风格"]
70
+ }
71
+ ```
72
+
73
+ **规则**:
74
+ - `caredDimensions`(non-null)= 用户在乎,后续 α=0.8
75
+ - `uncaredDimensions`(null)= 用户不在乎,后续 β=0.8
76
+ - 用户显式锁定的维度("保留我的难度曲线")单独记录为 `C_locked`,不参与策略搜索
77
+
78
+ **Phase 3 MVP 说明**:当前 `parse_intent` 为 mock 实现,所有维度返回 null,退化为双信号(历史权重 + LLM 判断)。`caredDimensions` 始终为空。
79
+
80
+ ---
81
+
82
+ ## Step 2:查询 Atom 候选空间
83
+
84
+ **调用**:`POST /api/agent/tools/search-skills`
85
+
86
+ 按 bindingRole / category / bundleType 查询可用 Skill 候选列表。
87
+
88
+ ```json
89
+ // 查询所有背景音乐候选
90
+ {
91
+ "matchBindingRoles": ["bgMusic"],
92
+ "allowedBundleTypes": ["aiaudio"]
93
+ }
94
+
95
+ // 查询所有玩法候选(已确认 phaser 引擎在上游)
96
+ {
97
+ "allowedCategories": ["gameplay"],
98
+ "contextAtomIds": ["phaser.aicomponent"]
99
+ }
100
+ ```
101
+
102
+ **Response**:每个候选包含 `atomId`、`label`、`tags`、`bindingRoles`、`imports`(依赖声明)。
103
+
104
+ **速查表:各维度对应的 bindingRole**
105
+
106
+ | 维度 | matchBindingRoles | 典型 bundleType |
107
+ |------|-------------------|----------------|
108
+ | 引擎 | `gameEngine` | `aicomponent` |
109
+ | 背景音乐 | `bgMusic` | `aiaudio` |
110
+ | 点击音效 | `sfxClick` | `aiaudio` |
111
+ | 玩法规则 | `gameplayRule` | `aigameplay` |
112
+ | 关卡数据格式 | `levelDataFormat` | `aicomponent` |
113
+ | 棋盘布局 | `gridBoardLayout` | `aicomponent` |
114
+ | 响应式布局 | `responsiveLayout` | `aicomponent` |
115
+ | HUD 屏幕分区(规范) | `playableHudLayout` | `aicomponent` |
116
+ | 结算屏布局(规范) | `playableEndScreenLayout` | `aicomponent` |
117
+ | 指引层布局(规范) | `playableGuidanceLayout` | `aicomponent` |
118
+ | 顶部 HUD 条 | `topUiBar` | `aicomponent` |
119
+ | 底部 HUD 条 | `bottomUiBar` | `aicomponent` |
120
+ | 游戏主场景 | `gameMainScene` | `aicomponent` |
121
+ | 预加载场景 | `preloaderScene` | `aicomponent` |
122
+ | 胜负面板 | `gameOverDialog` | `aicomponent` |
123
+ | 下载按钮 | `downloadCta` | `aicomponent` |
124
+ | App Logo | `appLogo` | `aiimage` |
125
+ | 胜利面板图 | `successFeedbackPanel` | `aiimage` |
126
+ | 关卡数据集 | `levelDataPack` | `aiconfig` |
127
+ | App 文案 | `appMetadata` | `aiconfig` |
128
+
129
+ ---
130
+
131
+ ## Step 3:DAG 拓扑排序
132
+
133
+ 从 `basicAtomSkillGraph`(位于 `packages/common/src/recommend/atom-graph/basic-atom-skill-graph.ts`)读取图结构,按 `requires` 边做拓扑排序,确定生成顺序:**入度为 0 的节点优先生成**。
134
+
135
+ **典型路径消除游戏的拓扑顺序**:
136
+
137
+ ```
138
+ 1. phaser.aicomponent (引擎,入度=0)
139
+ 2. playable_scripts_build.aicomponent (构建管线,入度=0)
140
+ 3. responsive_2d_layout.aicomponent (布局数学 Canon,入度=0)
141
+ 3b. playable_hud_layout / playable_end_screen_layout / playable_guidance_layer(屏幕分区规范,可与 3 并行阅读,无代码)
142
+ 4. phaser_scene_lifecycle.aicomponent (场景架构,depends: phaser)
143
+ 5. grid_board_layout.aicomponent (棋盘布局,depends: phaser)
144
+ 6. path_elimination_rules.aigameplay (玩法,depends: phaser)
145
+ 7. arrow_path_data_format.aicomponent (数据格式,depends: gameplay)
146
+ 8. game_scene.aicomponent (主场景,depends: 上游多个)
147
+ 9. preloader_scene.aicomponent (预加载,depends: phaser)
148
+ 10. [UI 组件层,互相独立,并行生成]
149
+ 11. [资源层 aiimage/aiaudio,弱依赖容器,并行生成]
150
+ 12. [配置层 aiconfig,独立]
151
+ ```
152
+
153
+ **规则**:
154
+ - `requires` 边是硬约束,必须按序
155
+ - `compatibleWith`、`semanticallyRelatedTo`、`alternativeTo` 边不影响顺序,只影响候选选择
156
+
157
+ ---
158
+
159
+ ## Step 4:计算三信号权重
160
+
161
+ 对每个 Atom 候选,计算 `final_score`,确定最终选哪个:
162
+
163
+ ```
164
+ final_score = α × relevance_score + β × prior_score
165
+ ```
166
+
167
+ ### 4.1 查先验分
168
+
169
+ **调用**:`GET /api/agent/tools/prior-weight?atomId=bg_music.aiaudio`
170
+
171
+ ```json
172
+ // Response
173
+ { "atomId": "bg_music.aiaudio", "priorScore": 0.6, "isMock": true }
174
+ ```
175
+
176
+ `isMock: true` 时,prior_score 来自 mock JSON,不是真实 CTR 数据。
177
+
178
+ ### 4.2 计算相关分(LLM 判断)
179
+
180
+ 对每个候选 Atom,用 LLM 判断其与 IntentTags 的语义关联(0~1):
181
+
182
+ ```
183
+ 示例:用户意图画风=[热带, 自然]
184
+ bg_music.aiaudio → LLM:"热带轻松风格" → 相关分 0.65
185
+ calm_piano.aiaudio → LLM:"钢琴冥想" → 相关分 0.3
186
+ energetic_electronic.aiaudio → LLM:"电子" → 相关分 0.2
187
+ ```
188
+
189
+ ### 4.3 合成
190
+
191
+ ```
192
+ 在乎维度(画风、节奏、玩法): α=0.8, β=0.2
193
+ 不在乎维度(音乐、难度): α=0.2, β=0.8
194
+ 锁定维度: 直接取用户指定值,跳过合成
195
+
196
+ 示例(背景音乐,不在乎维度,α=0.2, β=0.8):
197
+ bg_music.aiaudio: 0.2×0.65 + 0.8×0.6 = 0.61 ← 最高
198
+ calm_piano.aiaudio: 0.2×0.3 + 0.8×0.5 = 0.46
199
+ energetic_electronic: 0.2×0.2 + 0.8×0.5 = 0.44
200
+ ```
201
+
202
+ **Phase 3 MVP 说明**:由于 `parse_intent` 返回空 IntentTags,`caredDimensions` 为空,所有维度均为"不在乎",α=0.2, β=0.8,先验权重主导选择。
203
+
204
+ ---
205
+
206
+ ## Step 5:分歧度判断
207
+
208
+ | 状态 | 条件 | Agent 行为 |
209
+ |------|------|-----------|
210
+ | **高一致** | 三信号 Top-1 一致,或不一致的来自"不在乎"维度 | 自主执行,不打扰用户 |
211
+ | **中分歧** | 最终分与相关分一致但与先验分不一致,且用户在乎该维度 | 呈报冲突:"数据说 X 好,但你倾向 Y,按哪个走?" |
212
+ | **高分歧** | 三信号各异,或在乎维度上信号互相矛盾 | 主动补问,列出 2-3 个方向让用户选 |
213
+
214
+ 用户每次选择 = 最干净的信用分配信号,记录为偏好。
215
+
216
+ ---
217
+
218
+ ## Step 6:按拓扑序执行各 Atom Skill
219
+
220
+ 对 Step 3 排好序的每个 Atom,读取其 `SKILL.md` 并执行:
221
+
222
+ 1. 对 **aicomponent** Skill:根据 `scaffold.files` 把 `ref/` 下的文件写入 Remix 沙箱项目目录。
223
+ 2. 对 **aiimage** Skill:按 `generation.prompt` 调用 AI 图像生成管线,产出图片并写入 `assets/`。
224
+ 3. 对 **aiaudio** Skill:若目录下有 `ref/*.mp3`,直接复制;否则调用 AI 音频生成。
225
+ 4. 对 **aiconfig** Skill:按 `generation.params` 写入配置 JSON。
226
+ 5. 对 **aigameplay** Skill:直写 PGS JSON,运行 testCases 验证,迭代直到通过。
227
+
228
+ **写入路径**:所有文件相对于 Remix 沙箱的 `/project` 根目录。写完后调用 `SandboxNotifyService.notifyChange(...)` 触发前端刷新。
229
+
230
+ ---
231
+
232
+ ## Step 7:触发构建
233
+
234
+ 所有封包写入分支后,调用现有构建 API 触发 `@playcraft/build`,产出可交付的 Playable(HTML+JS 单文件)。
235
+
236
+ ---
237
+
238
+ ## 快速参考:当前 MVP 能力边界
239
+
240
+ | 功能 | 状态 | 说明 |
241
+ |------|------|------|
242
+ | `search_skills` | ✅ 可用 | 读文件系统,过滤 Skill 候选 |
243
+ | `prior_weight` | ✅ 可用(mock) | mock JSON,isMock=true,先验分仅供参考 |
244
+ | `parse_intent` | ⚠️ Mock | 全部返回 null,退化为双信号,`TODO(P3.intent)` |
245
+ | 分歧度判断 | ✅ 可用 | 规则计算,不依赖服务 |
246
+ | AtomInstance 持久化 | ❌ 未做 | Phase 5 |
247
+ | Skill Inspector(一致性) | ❌ 未做 | Phase 4 |
248
+ | 自动构建触发 | ❌ 未做 | Phase 4 |
249
+
250
+ ---
251
+
252
+ ## 错误处理原则
253
+
254
+ - **Atom 生成失败**:回退到 Phase 2(使用现有封包),不中断整个流程
255
+ - **`search_skills` 返回空**:扩大过滤条件重试,或向用户报告无候选
256
+ - **预算耗尽**:触发 HITL,由用户决定追加还是终止(见 `docs/agent/agent-human-in-the-loop-design.md`)
257
+ - **`parse_intent` 返回空 IntentTags**(mock 状态):降级为双信号,记录 warning
@@ -0,0 +1,12 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "agent_remix_orchestrator.aicomponent",
4
+ "bundleType": "aicomponent",
5
+ "category": "util",
6
+ "mode": "fixed",
7
+ "label": { "zh": "Remix 编排器指南", "en": "Remix Orchestrator Guide" },
8
+ "tags": ["orchestrator", "l0-manager", "agent-workflow", "remix-assembly", "decision-making"],
9
+ "files": {
10
+ "skill": "SKILL.md"
11
+ }
12
+ }