@reicek/neataptic-ts 0.1.21 → 0.1.23

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 (361) hide show
  1. package/.github/agents/boundary-mapper.agent.md +31 -0
  2. package/.github/agents/docs-scout.agent.md +29 -0
  3. package/.github/agents/plan-scout.agent.md +31 -0
  4. package/.github/agents/solid-split.agent.md +143 -0
  5. package/.github/copilot-instructions.md +119 -0
  6. package/.github/skills/solid-split-playbook/SKILL.md +220 -0
  7. package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
  8. package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
  9. package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
  10. package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
  11. package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
  12. package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
  13. package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
  14. package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
  15. package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
  16. package/package.json +7 -3
  17. package/plans/ES2023 migration +13 -8
  18. package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
  19. package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
  20. package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
  21. package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
  22. package/plans/Memory_Optimization.md +3 -3
  23. package/plans/README.md +63 -0
  24. package/plans/Roadmap.md +15 -3
  25. package/plans/asciiMaze_SOLID_split.done.md +130 -0
  26. package/plans/flappy_bird_SOLID_split.done.md +67 -0
  27. package/scripts/analyze-trace.ts +590 -0
  28. package/scripts/assets/theme.css +221 -34
  29. package/scripts/copy-examples.mjs +9 -5
  30. package/scripts/export-onnx.mjs +3 -3
  31. package/scripts/generate-bench-tables.mjs +10 -10
  32. package/scripts/generate-bench-tables.ts +10 -10
  33. package/scripts/generate-docs.ts +1415 -449
  34. package/scripts/render-docs-html.ts +15 -8
  35. package/src/README.md +127 -222
  36. package/src/architecture/README.md +117 -184
  37. package/src/architecture/architect.ts +6 -0
  38. package/src/architecture/layer/README.md +38 -38
  39. package/src/architecture/network/README.md +49 -31
  40. package/src/architecture/network/activate/README.md +77 -77
  41. package/src/architecture/network/connect/README.md +15 -13
  42. package/src/architecture/network/deterministic/README.md +7 -7
  43. package/src/architecture/network/evolve/README.md +44 -44
  44. package/src/architecture/network/gating/README.md +20 -20
  45. package/src/architecture/network/genetic/README.md +51 -51
  46. package/src/architecture/network/mutate/README.md +97 -97
  47. package/src/architecture/network/network.types.ts +39 -0
  48. package/src/architecture/network/onnx/README.md +264 -264
  49. package/src/architecture/network/prune/README.md +39 -39
  50. package/src/architecture/network/remove/README.md +26 -26
  51. package/src/architecture/network/serialize/README.md +56 -56
  52. package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
  53. package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
  54. package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
  55. package/src/architecture/network/slab/README.md +61 -61
  56. package/src/architecture/network/standalone/README.md +24 -24
  57. package/src/architecture/network/stats/README.md +9 -9
  58. package/src/architecture/network/topology/README.md +46 -46
  59. package/src/architecture/network/training/README.md +21 -21
  60. package/src/architecture/network.ts +114 -10
  61. package/src/methods/README.md +9 -87
  62. package/src/multithreading/README.md +8 -77
  63. package/src/multithreading/workers/README.md +2 -2
  64. package/src/multithreading/workers/browser/README.md +0 -6
  65. package/src/multithreading/workers/node/README.md +0 -3
  66. package/src/neat/README.md +623 -568
  67. package/src/neat/neat.evolve.population.utils.ts +29 -5
  68. package/src/neat/neat.helpers.ts +16 -0
  69. package/src/neat/neat.topology-intent.utils.ts +160 -0
  70. package/src/utils/README.md +18 -18
  71. package/test/examples/asciiMaze/README.md +59 -59
  72. package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
  73. package/test/examples/asciiMaze/browser-entry/README.md +196 -0
  74. package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
  75. package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
  76. package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
  77. package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
  78. package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
  79. package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
  80. package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
  81. package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
  82. package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
  83. package/test/examples/asciiMaze/browser-entry.ts +10 -576
  84. package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
  85. package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
  86. package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
  87. package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
  88. package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
  89. package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
  90. package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
  91. package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
  92. package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
  93. package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
  94. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
  95. package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
  96. package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
  97. package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
  98. package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
  99. package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
  100. package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
  101. package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
  102. package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
  103. package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
  104. package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
  105. package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
  106. package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
  107. package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
  108. package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
  109. package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
  110. package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
  111. package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
  112. package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
  113. package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
  114. package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
  115. package/test/examples/asciiMaze/fitness.ts +2 -2
  116. package/test/examples/asciiMaze/fitness.types.ts +65 -0
  117. package/test/examples/asciiMaze/interfaces.ts +64 -1352
  118. package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
  119. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
  120. package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
  121. package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
  122. package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
  123. package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
  124. package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
  125. package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
  126. package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
  127. package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
  128. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
  129. package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
  130. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
  131. package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
  132. package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
  133. package/test/examples/flappy_bird/README.md +193 -88
  134. package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
  135. package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
  136. package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
  137. package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
  138. package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
  139. package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
  140. package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
  141. package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
  142. package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
  143. package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
  144. package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
  145. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
  146. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
  147. package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
  148. package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
  149. package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
  150. package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
  151. package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
  152. package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
  153. package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
  154. package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
  155. package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
  156. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
  157. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
  158. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
  159. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
  160. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
  161. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
  162. package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
  163. package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
  164. package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
  165. package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
  166. package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
  167. package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
  168. package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
  169. package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
  170. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
  171. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
  172. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
  173. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
  174. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
  175. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
  176. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
  177. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
  178. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
  179. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
  180. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
  181. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
  182. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
  183. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
  184. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
  185. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
  186. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
  187. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
  188. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
  189. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
  190. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
  191. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
  192. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
  193. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
  194. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
  195. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
  196. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
  197. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
  198. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
  199. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
  200. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
  201. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
  202. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
  203. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
  204. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
  205. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
  206. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
  207. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
  208. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
  209. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
  210. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
  211. package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
  212. package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
  213. package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
  214. package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
  215. package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
  216. package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
  217. package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
  218. package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
  219. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
  220. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
  221. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
  222. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
  223. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
  224. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
  225. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
  226. package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
  227. package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
  228. package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
  229. package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
  230. package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
  231. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
  232. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
  233. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
  234. package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
  235. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
  236. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
  237. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
  238. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
  239. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
  240. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
  241. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
  242. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
  243. package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
  244. package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
  245. package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
  246. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
  247. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
  248. package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
  249. package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
  250. package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
  251. package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
  252. package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
  253. package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
  254. package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
  255. package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
  256. package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
  257. package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
  258. package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
  259. package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
  260. package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
  261. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
  262. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
  263. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
  264. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
  265. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
  266. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
  267. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
  268. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
  269. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
  270. package/test/examples/flappy_bird/constants/README.md +1163 -0
  271. package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
  272. package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
  273. package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
  274. package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
  275. package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
  276. package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
  277. package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
  278. package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
  279. package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
  280. package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
  281. package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
  282. package/test/examples/flappy_bird/constants/constants.ts +6 -0
  283. package/test/examples/flappy_bird/environment/README.md +182 -0
  284. package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
  285. package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
  286. package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
  287. package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
  288. package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
  289. package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
  290. package/test/examples/flappy_bird/evaluation/README.md +155 -0
  291. package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
  292. package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
  293. package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
  294. package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
  295. package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
  296. package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
  297. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
  298. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
  299. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
  300. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
  301. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
  302. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
  303. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
  304. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
  305. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
  306. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
  307. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
  308. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
  309. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
  310. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
  311. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
  312. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
  313. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
  314. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
  315. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
  316. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
  317. package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
  318. package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
  319. package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
  320. package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
  321. package/test/examples/flappy_bird/index.ts +8 -2
  322. package/test/examples/flappy_bird/rng.ts +10 -0
  323. package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
  324. package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
  325. package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
  326. package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
  327. package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
  328. package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
  329. package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
  330. package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
  331. package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
  332. package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
  333. package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
  334. package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
  335. package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
  336. package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
  337. package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
  338. package/test/examples/flappy_bird/trainer/README.md +676 -0
  339. package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
  340. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
  341. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
  342. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
  343. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
  344. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
  345. package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
  346. package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
  347. package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
  348. package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
  349. package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
  350. package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
  351. package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
  352. package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
  353. package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
  354. package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
  355. package/test/neat/neat.topology-intent.test.ts +129 -0
  356. package/test/network/network.topology-intent.test.ts +44 -0
  357. package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
  358. package/test/examples/flappy_bird/environment/environment.ts +0 -7
  359. package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
  360. package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
  361. package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
@@ -8,6 +8,9 @@
8
8
  /** Maximum number of trail points retained per bird trail polyline. */
9
9
  export const FLAPPY_TRAIL_MAX_POINTS = 40;
10
10
 
11
+ /** Maximum number of trail points retained for the champion-only short trail. */
12
+ export const FLAPPY_CHAMPION_TRAIL_MAX_POINTS = 12;
13
+
11
14
  /** Stroke width used for per-bird trail line rendering. */
12
15
  export const FLAPPY_TRAIL_LINE_WIDTH_PX = 1.5;
13
16
 
@@ -17,30 +20,12 @@ export const FLAPPY_TRAIL_EDGE_FADE_DISTANCE_PX = 48;
17
20
  /** Opacity used for non-champion bird fills and trails. */
18
21
  export const FLAPPY_NON_CHAMPION_OPACITY = 0.1;
19
22
 
20
- /** Ratio of bird side length used for top-left shine square. */
21
- export const FLAPPY_BIRD_SHINE_SIZE_RATIO = 0.42;
22
-
23
- /** Ratio of bird side length used to inset shine from top-left corner. */
24
- export const FLAPPY_BIRD_SHINE_INSET_RATIO = 0.2;
25
-
26
- /** Fill style used for the bird shine highlight. */
27
- export const FLAPPY_BIRD_SHINE_FILL_STYLE = 'rgba(255, 255, 255, 0.7)';
28
-
29
- /** Fill style used for the champion bird shine highlight (xterm 196 red). */
30
- export const FLAPPY_BIRD_CHAMPION_SHINE_FILL_STYLE = 'rgba(255, 0, 0, 0.7)';
31
-
32
- /** Neon glow color used for the condensed white highlight shine. */
33
- export const FLAPPY_BIRD_WHITE_SHINE_GLOW_COLOR = '#ffffff';
34
-
35
- /** Neon glow color used for the champion shine highlight (xterm 196 red). */
36
- export const FLAPPY_BIRD_CHAMPION_SHINE_GLOW_COLOR = '#ff0000';
37
-
38
- /** Neon blur radius used for the condensed white highlight shine. */
39
- export const FLAPPY_BIRD_WHITE_SHINE_GLOW_BLUR_PX = 2;
40
-
41
23
  /** Base neon blur radius used for bird body glow. */
42
24
  export const FLAPPY_BIRD_BODY_GLOW_BLUR_PX = 10;
43
25
 
26
+ /** Glow blur radius used for simplified non-champion bird bodies. */
27
+ export const FLAPPY_NON_CHAMPION_BODY_GLOW_BLUR_PX = 0;
28
+
44
29
  /**
45
30
  * Opacity used for the extra Radiant-style aura around each bird.
46
31
  *
@@ -55,26 +40,19 @@ export const FLAPPY_BIRD_AURA_EXPAND_PX = 3;
55
40
  /** Blur multiplier used for the Radiant-style bird aura plate. */
56
41
  export const FLAPPY_BIRD_AURA_BLUR_MULTIPLIER = 2.6;
57
42
 
58
- /** Additional blur radius applied to the champion red body glow. */
59
- export const FLAPPY_BIRD_CHAMPION_EXTRA_GLOW_BLUR_PX = 7;
60
-
61
- /** Opacity used for the expanded champion red glow plate. */
62
- export const FLAPPY_BIRD_CHAMPION_RED_GLOW_ALPHA = 0.62;
63
-
64
- /** Pixel expansion used for the champion red glow plate. */
65
- export const FLAPPY_BIRD_CHAMPION_RED_GLOW_EXPAND_PX = 4;
43
+ /**
44
+ * Additional blur radius applied to the champion red body glow.
45
+ *
46
+ * This keeps the champion body bloom aligned with the same neon blur
47
+ * intensity used by the pipe outline glow, so the leader reads with
48
+ * comparable visual weight.
49
+ */
50
+ export const FLAPPY_BIRD_CHAMPION_EXTRA_GLOW_BLUR_PX =
51
+ Math.max(24, Math.round(FLAPPY_BIRD_BODY_GLOW_BLUR_PX * 3.2)) -
52
+ FLAPPY_BIRD_BODY_GLOW_BLUR_PX;
66
53
 
67
54
  /** Minimum horizontal segment length used by stepped trail rendering. */
68
55
  export const FLAPPY_TRAIL_MIN_HORIZONTAL_SEGMENT_PX = 2;
69
56
 
70
57
  /** Minimum vertical segment length used by stepped trail rendering. */
71
58
  export const FLAPPY_TRAIL_MIN_VERTICAL_SEGMENT_PX = 2;
72
-
73
- /** Additional radius applied when drawing champion leader ring. */
74
- export const FLAPPY_LEADER_RING_RADIUS_OFFSET_PX = 2;
75
-
76
- /** Stroke width used when drawing champion leader ring. */
77
- export const FLAPPY_LEADER_RING_LINE_WIDTH_PX = 2;
78
-
79
- /** Neon blur radius used when drawing the champion outline stroke. */
80
- export const FLAPPY_LEADER_RING_GLOW_BLUR_PX = 10;
@@ -69,6 +69,27 @@ export const FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES = Math.max(
69
69
  ),
70
70
  );
71
71
 
72
+ /**
73
+ * Actual edge-to-edge spacing produced at peak adaptive difficulty.
74
+ *
75
+ * The recovery target above is a lower bound, but the runtime cadence is
76
+ * ultimately quantized by whole frames. This value is the real rendered pipe
77
+ * spacing once the minimum spawn interval has been rounded to an integer.
78
+ */
79
+ export const FLAPPY_MAX_DIFFICULTY_EDGE_TO_EDGE_PIPE_SPACING_PX =
80
+ FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES * FLAPPY_PIPE_SPEED_MAX_PX_PER_FRAME -
81
+ FLAPPY_PIPE_WIDTH_PX;
82
+
83
+ /**
84
+ * Full pipe-to-pipe pitch produced at peak adaptive difficulty.
85
+ *
86
+ * This is the distance from one pipe's leading edge to the next pipe's leading
87
+ * edge at the hardest steady-state cadence. It is the periodicity the ground
88
+ * grid must match if each spawned pipe should land on the same grid phase.
89
+ */
90
+ export const FLAPPY_MAX_DIFFICULTY_PIPE_PITCH_PX =
91
+ FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES * FLAPPY_PIPE_SPEED_MAX_PX_PER_FRAME;
92
+
72
93
  /** Initial spawn-interval multiplier relative to the current hardest interval target. */
73
94
  export const FLAPPY_PIPE_SPAWN_INTERVAL_START_MULTIPLIER = 2.35;
74
95
 
@@ -41,9 +41,15 @@ export const FLAPPY_NETWORK_GRAPH_RIGHT_PADDING_PX = 20;
41
41
  /** Graph-bottom padding for network visualization content. */
42
42
  export const FLAPPY_NETWORK_GRAPH_BOTTOM_PADDING_PX = 18;
43
43
 
44
+ /** Minimum drawable graph dimension after padding is removed. */
45
+ export const FLAPPY_NETWORK_MIN_DRAWABLE_SIZE_PX = 1;
46
+
44
47
  /** Gap between graph body and floating legend panel. */
45
48
  export const FLAPPY_NETWORK_LEGEND_GRAPH_GAP_PX = 10;
46
49
 
50
+ /** Ratio used to decide whether the legend occupies the right half of the canvas. */
51
+ export const FLAPPY_NETWORK_LEGEND_RIGHT_SIDE_THRESHOLD_RATIO = 0.5;
52
+
47
53
  /** Inner node-layout padding inside drawable network region. */
48
54
  export const FLAPPY_NETWORK_NODE_LAYOUT_PADDING_PX = 2;
49
55
 
@@ -161,6 +167,9 @@ export const FLAPPY_NETWORK_HEADER_FONT_SIZE_PX = 11;
161
167
  /** Extra pixel allowance above label baseline for minimum node-height readability. */
162
168
  export const FLAPPY_NETWORK_MIN_NODE_HEIGHT_LABEL_EXTRA_PX = 4;
163
169
 
170
+ /** Minimum fit-based node height before width and label constraints are applied. */
171
+ export const FLAPPY_NETWORK_MIN_NODE_FIT_HEIGHT_PX = 4;
172
+
164
173
  /**
165
174
  * Layer-fit divisor used when deriving max node height from dense layer stacks.
166
175
  *
@@ -215,3 +224,18 @@ export const FLAPPY_NETWORK_INPUT_GROUP_LABEL_FONT_WEIGHT = 700;
215
224
 
216
225
  /** Text color for vertical input-group labels on neon backgrounds. */
217
226
  export const FLAPPY_NETWORK_INPUT_GROUP_LABEL_TEXT_COLOR = '#000000';
227
+
228
+ /** Placeholder label used when the network has no hidden layers. */
229
+ export const FLAPPY_NETWORK_EMPTY_HIDDEN_LAYER_LABEL = '-';
230
+
231
+ /** Prefix used when hidden-layer counts are inferred rather than declared. */
232
+ export const FLAPPY_NETWORK_INFERRED_HIDDEN_LAYER_PREFIX = '~';
233
+
234
+ /** Separator used between hidden-layer sizes inside architecture labels. */
235
+ export const FLAPPY_NETWORK_HIDDEN_LAYER_SEPARATOR = ' - ';
236
+
237
+ /** Separator used between architecture columns in the compact header label. */
238
+ export const FLAPPY_NETWORK_ARCHITECTURE_COLUMN_SEPARATOR = ' | ';
239
+
240
+ /** Line separator used by the two-line architecture label block. */
241
+ export const FLAPPY_NETWORK_ARCHITECTURE_LINE_SEPARATOR = '\n';
@@ -27,4 +27,4 @@ export const FLAPPY_NETWORK_OUTPUT_SIZE = 2;
27
27
  * Using at least two hidden layers improves representational flexibility for
28
28
  * precise vertical control near narrow, fast-changing pipe targets.
29
29
  */
30
- export const FLAPPY_NETWORK_HIDDEN_LAYER_SIZES = [8, 6, 4] as const;
30
+ export const FLAPPY_NETWORK_HIDDEN_LAYER_SIZES = [10, 8, 6, 4] as const;
@@ -3,6 +3,10 @@
3
3
  *
4
4
  * These values are used by both browser playback and headless environment
5
5
  * simulation when building normalized feature vectors.
6
+ *
7
+ * Keeping normalization constants shared is important because even tiny drift in
8
+ * feature scaling would make trainer, worker, and browser policies "see"
9
+ * different worlds.
6
10
  */
7
11
 
8
12
  /**
@@ -10,5 +14,8 @@
10
14
  *
11
15
  * Prevents division by near-zero values when view-dependent scales are very
12
16
  * small, keeping feature values numerically stable.
17
+ *
18
+ * If you want a quick refresher on why feature scaling matters, the Wikipedia
19
+ * article on "feature scaling" is a useful background reference.
13
20
  */
14
21
  export const FLAPPY_NORMALIZATION_EPSILON = 0.001;
@@ -11,8 +11,8 @@ export const FLAPPY_NEON_PALETTE = {
11
11
  pipeFill: '#00ff66',
12
12
  pipeEdgeOuter: '#2dff78',
13
13
  pipeEdgeInner: '#bfffd4',
14
- championBird: '#ff0000',
15
- nonChampionBird: '#ffe94d',
14
+ championBird: '#ff4a8d',
15
+ nonChampionBird: '#00e5ff',
16
16
  leaderRing: '#ffffff',
17
17
  trail: '#875fff',
18
18
  currentRunText: '#00ff66',
@@ -22,6 +22,13 @@ export const FLAPPY_NEON_PALETTE = {
22
22
  hudAccent: '#ff9a2e',
23
23
  hudPanelBackground: '#000000',
24
24
  hudPanelBorder: '#0fb5ff',
25
+ horizonLine: '#0a8ea0',
26
+ horizonGlow: 'rgba(10, 142, 160, 0.95)',
27
+ groundGridLine: '#0a8ea0',
28
+ groundGridGlow: 'rgba(10, 142, 160, 0.9)',
29
+ groundGridFog: 'rgba(10, 142, 160, 0.55)',
30
+ groundGridPulseFill: '#fff14a',
31
+ groundGridPulseGlow: 'rgba(255, 241, 74, 0.92)',
25
32
  } as const;
26
33
 
27
34
  /** Neon bird palette for per-agent render color assignment. */
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * Values in this module shape how quickly the bird falls, how strongly a flap
5
5
  * responds, and how often a policy can react inside each visible frame.
6
+ *
7
+ * Small changes here have outsized behavioral impact because they reshape the
8
+ * control problem the policy is trying to solve.
6
9
  */
7
10
 
8
11
  /**
@@ -33,6 +36,9 @@ export const FLAPPY_MAX_FALL_SPEED_PX_PER_FRAME = 7;
33
36
  *
34
37
  * Values > 1 give agents finer temporal control in tight scenarios by allowing
35
38
  * multiple react-and-integrate passes before the frame counter advances.
39
+ *
40
+ * This is one of the main levers that keeps high-speed play numerically stable
41
+ * without forcing the visible frame rate to explode.
36
42
  */
37
43
  export const FLAPPY_CONTROL_SUBSTEPS_PER_FRAME = 4;
38
44
 
@@ -41,5 +47,8 @@ export const FLAPPY_CONTROL_SUBSTEPS_PER_FRAME = 4;
41
47
  *
42
48
  * A smaller value means the policy is expected to correct more frequently
43
49
  * (effectively "jumping more often"), which supports narrower endgame gaps.
50
+ *
51
+ * The value is used analytically when estimating whether a late recovery is
52
+ * still plausible, not as the direct execution cadence of the simulation loop.
44
53
  */
45
54
  export const FLAPPY_TARGET_FLAP_INTERVAL_FRAMES = 2;
@@ -30,6 +30,9 @@ export const FLAPPY_PIPE_OUTLINE_GLOW_ALPHA = 0.68;
30
30
  /** Stroke width used for the soft pipe glow stroke pass (pixels). */
31
31
  export const FLAPPY_PIPE_OUTLINE_GLOW_STROKE_WIDTH_PX = 8;
32
32
 
33
+ /** Inset used for the pipe entrance rim line measured from the gap-facing edge. */
34
+ export const FLAPPY_PIPE_ENTRY_RIM_INSET_PX = 10;
35
+
33
36
  /**
34
37
  * Cyan neon glow used for pipe outline shadow.
35
38
  *
@@ -5,6 +5,11 @@ import { FLAPPY_WORLD_HEIGHT_PX } from './constants.world';
5
5
  *
6
6
  * These values describe the canonical pipe body size, opening geometry, visual
7
7
  * outline offsets, and default leftward movement cadence.
8
+ *
9
+ * Educational note:
10
+ * Pipe constants do double duty: some values describe actual gameplay geometry,
11
+ * while others are chosen so the visible pipe outline and the collision envelope
12
+ * feel aligned to a human viewer.
8
13
  */
9
14
 
10
15
  /** Pipe width (pixels). */
@@ -40,13 +45,27 @@ export const FLAPPY_PIPE_COLLISION_ENTRANCE_EXPAND_PX = Math.round(
40
45
  FLAPPY_PIPE_OUTLINE_STROKE_WIDTH_PX * 0.5,
41
46
  );
42
47
 
43
- /** Vertical opening size of each pipe gap (pixels). */
48
+ /**
49
+ * Vertical opening size of each pipe gap (pixels).
50
+ *
51
+ * This is the nominal baseline gap before adaptive difficulty narrows it.
52
+ */
44
53
  export const FLAPPY_PIPE_GAP_PX = 150;
45
54
 
46
- /** Pipe horizontal speed (pixels/frame). */
55
+ /**
56
+ * Pipe horizontal speed (pixels/frame).
57
+ *
58
+ * Higher values shrink reaction time, which makes the same gap geometry much
59
+ * harder even before the adaptive curriculum starts tightening gaps.
60
+ */
47
61
  export const FLAPPY_PIPE_SPEED_PX_PER_FRAME = 5;
48
62
 
49
- /** Frames between spawning new pipes. */
63
+ /**
64
+ * Frames between spawning new pipes.
65
+ *
66
+ * Together with pipe speed, this controls horizontal pacing and how much time a
67
+ * policy has to recover between obstacles.
68
+ */
50
69
  export const FLAPPY_PIPE_SPAWN_INTERVAL_FRAMES = 50;
51
70
 
52
71
  /** Minimum allowed gap center height (pixels). */
@@ -5,6 +5,10 @@ import { FLAPPY_NORMALIZATION_EPSILON as SHARED_FLAPPY_NORMALIZATION_EPSILON } f
5
5
  *
6
6
  * These values control startup defaults, emulation cadence, and common
7
7
  * placeholder/status values rendered by the UI.
8
+ *
9
+ * This module is less about game physics and more about operator experience:
10
+ * what the browser shows while loading, how frequently HUD numbers refresh, and
11
+ * which defaults the demo uses when bootstrapping the worker.
8
12
  */
9
13
 
10
14
  /** Default host container id for the browser demo mount point. */
@@ -13,16 +17,36 @@ export const DEFAULT_CONTAINER_ID = 'flappy-bird-output';
13
17
  /** Emulation speed multiplier for browser playback (1.5 => 50% faster). */
14
18
  export const FLAPPY_EMULATION_SPEED_MULTIPLIER = 1.5;
15
19
 
16
- /** Update HUD counters every N simulation frames to reduce DOM churn. */
20
+ /**
21
+ * Update HUD counters every N simulation frames to reduce DOM churn.
22
+ *
23
+ * The value trades freshness for stability. Updating every frame would make the
24
+ * numbers twitchier and force more frequent DOM work on the main thread.
25
+ */
17
26
  export const FLAPPY_HUD_UPDATE_INTERVAL_FRAMES = 10;
18
27
 
19
- /** Default population size for browser playback worker initialization. */
28
+ /**
29
+ * Default population size for browser playback worker initialization.
30
+ *
31
+ * The browser default is intentionally smaller than the long-running trainer so
32
+ * the interactive demo remains responsive.
33
+ */
20
34
  export const FLAPPY_BROWSER_POPULATION_SIZE = 10;
21
35
 
22
- /** Default elitism count for browser playback worker initialization. */
36
+ /**
37
+ * Default elitism count for browser playback worker initialization.
38
+ *
39
+ * Keeping elitism small in the browser demo emphasizes visible variety over raw
40
+ * training efficiency.
41
+ */
23
42
  export const FLAPPY_BROWSER_ELITISM_COUNT = 1;
24
43
 
25
- /** Deterministic default RNG seed shared by browser runtime and trainer flows. */
44
+ /**
45
+ * Deterministic default RNG seed shared by browser runtime and trainer flows.
46
+ *
47
+ * Reusing one canonical seed makes debugging and README examples more
48
+ * repeatable.
49
+ */
26
50
  export const FLAPPY_DEFAULT_RNG_SEED = 0x1234abcd;
27
51
 
28
52
  /** Normalized decision threshold used for scalar output flap policies. */
@@ -10,6 +10,42 @@ import { FLAPPY_WORLD_HEIGHT_PX } from './constants.world';
10
10
  /** Width of one repeated starfield tile (pixels). */
11
11
  export const FLAPPY_STARFIELD_TILE_WIDTH_PX = 512;
12
12
 
13
+ /** Minimum positive dimension allowed for generated starfield canvases. */
14
+ export const FLAPPY_STARFIELD_MIN_DIMENSION_PX = 1;
15
+
16
+ /** Zero pixel origin used for starfield canvas clears and draws. */
17
+ export const FLAPPY_STARFIELD_ORIGIN_PX = 0;
18
+
19
+ /** Canvas rendering context identifier used for starfield tile generation. */
20
+ export const FLAPPY_STARFIELD_CANVAS_CONTEXT_ID = '2d';
21
+
22
+ /** Composite mode used for normal starfield canvas drawing passes. */
23
+ export const FLAPPY_STARFIELD_COMPOSITE_SOURCE_OVER = 'source-over';
24
+
25
+ /** Transparent shadow reset value used after glow drawing. */
26
+ export const FLAPPY_STARFIELD_TRANSPARENT_SHADOW_COLOR = 'transparent';
27
+
28
+ /** Default fully opaque alpha restored after tile generation. */
29
+ export const FLAPPY_STARFIELD_FULL_ALPHA = 1;
30
+
31
+ /** Blur reset value used after the star glow pass. */
32
+ export const FLAPPY_STARFIELD_NO_BLUR_PX = 0;
33
+
34
+ /** Inclusive range offset used when converting size bounds into random spans. */
35
+ export const FLAPPY_STARFIELD_INCLUSIVE_RANGE_OFFSET = 1;
36
+
37
+ /** Divisor that normalizes unsigned 32-bit RNG state into the unit interval. */
38
+ export const FLAPPY_STARFIELD_UNSIGNED_NORMALIZATION_DIVISOR = 0x1_0000_0000;
39
+
40
+ /** Primary left-shift used by the xorshift32 random transition. */
41
+ export const FLAPPY_STARFIELD_XORSHIFT_LEFT_SHIFT_PRIMARY = 13;
42
+
43
+ /** Middle right-shift used by the xorshift32 random transition. */
44
+ export const FLAPPY_STARFIELD_XORSHIFT_RIGHT_SHIFT = 17;
45
+
46
+ /** Final left-shift used by the xorshift32 random transition. */
47
+ export const FLAPPY_STARFIELD_XORSHIFT_LEFT_SHIFT_FINAL = 5;
48
+
13
49
  /** Height of one repeated starfield tile (pixels). */
14
50
  export const FLAPPY_STARFIELD_TILE_HEIGHT_PX = FLAPPY_WORLD_HEIGHT_PX;
15
51
 
@@ -17,10 +53,49 @@ export const FLAPPY_STARFIELD_TILE_HEIGHT_PX = FLAPPY_WORLD_HEIGHT_PX;
17
53
  export const FLAPPY_STARFIELD_CYAN_FILL_STYLE = 'rgba(95, 255, 255, 1)';
18
54
 
19
55
  /** Horizontal scroll ratio for the farthest parallax layer. */
20
- export const FLAPPY_STARFIELD_FAR_SCROLL_RATIO = 0.08;
56
+ export const FLAPPY_STARFIELD_FAR_SCROLL_RATIO = 0.03;
21
57
 
22
58
  /** Horizontal scroll ratio for the middle parallax layer. */
23
- export const FLAPPY_STARFIELD_MID_SCROLL_RATIO = 0.12;
59
+ export const FLAPPY_STARFIELD_MID_SCROLL_RATIO = 0.04;
24
60
 
25
61
  /** Horizontal scroll ratio for the nearest parallax layer. */
26
- export const FLAPPY_STARFIELD_NEAR_SCROLL_RATIO = 0.18;
62
+ export const FLAPPY_STARFIELD_NEAR_SCROLL_RATIO = 0.05;
63
+
64
+ /**
65
+ * Declarative layer specs for the default starfield parallax bands.
66
+ *
67
+ * Keeping the layer recipe in data form makes it easier to swap the lower
68
+ * segment to a different parallax family without changing the tile builder.
69
+ */
70
+ export const FLAPPY_STARFIELD_LAYER_SPECS = [
71
+ {
72
+ seed: 1_337,
73
+ scrollRatio: FLAPPY_STARFIELD_FAR_SCROLL_RATIO,
74
+ starCount: 35,
75
+ minSizePx: 1,
76
+ maxSizePx: 2,
77
+ minAlpha: 0.08,
78
+ maxAlpha: 0.22,
79
+ blurPx: 4,
80
+ },
81
+ {
82
+ seed: 2_777,
83
+ scrollRatio: FLAPPY_STARFIELD_MID_SCROLL_RATIO,
84
+ starCount: 28,
85
+ minSizePx: 1,
86
+ maxSizePx: 3,
87
+ minAlpha: 0.1,
88
+ maxAlpha: 0.28,
89
+ blurPx: 6,
90
+ },
91
+ {
92
+ seed: 4_242,
93
+ scrollRatio: FLAPPY_STARFIELD_NEAR_SCROLL_RATIO,
94
+ starCount: 23,
95
+ minSizePx: 2,
96
+ maxSizePx: 4,
97
+ minAlpha: 0.12,
98
+ maxAlpha: 0.34,
99
+ blurPx: 8,
100
+ },
101
+ ] as const;
@@ -4,6 +4,11 @@
4
4
  * Constants are now organized into small, category-focused modules
5
5
  * (`constants.*.ts`). This file remains as a compatibility export surface so
6
6
  * existing imports continue to work while callers migrate gradually.
7
+ *
8
+ * Educational note:
9
+ * Treat this file as the folder map, not the best place to learn individual
10
+ * values. The category modules below are where the real documentation lives:
11
+ * physics, pipes, observation, runtime, rendering, network layout, and so on.
7
12
  */
8
13
 
9
14
  export * from './constants.world';
@@ -41,6 +46,7 @@ export * from './constants.stats';
41
46
  export * from './constants.network-view';
42
47
  export * from './constants.birds';
43
48
  export {
49
+ FLAPPY_PIPE_ENTRY_RIM_INSET_PX,
44
50
  FLAPPY_PIPE_OUTLINE_GLOW_ALPHA,
45
51
  FLAPPY_PIPE_OUTLINE_GLOW_STROKE_WIDTH_PX,
46
52
  FLAPPY_PIPE_OUTLINE_CYAN_GLOW_COLOR,
@@ -0,0 +1,182 @@
1
+ # environment
2
+
3
+ ## environment/environment.types.ts
4
+
5
+ ### FlappyBird
6
+
7
+ Bird kinematic state for one simulation frame.
8
+
9
+ The environment keeps only the minimum physics state needed to advance the
10
+ episode: vertical position and vertical velocity.
11
+
12
+ ### FlappyDifficultyScale
13
+
14
+ Difficulty scale used by the curriculum scheduler.
15
+
16
+ - `0` means easiest profile (wide gaps, slower pipes).
17
+ - `1` means fully adaptive profile based on passed pipes.
18
+
19
+ Values between `0` and `1` interpolate between those extremes, which lets the
20
+ trainer or environment caller dial curriculum strength continuously.
21
+
22
+ ### FlappyGameState
23
+
24
+ Full simulation state for one Flappy episode.
25
+
26
+ Educational note:
27
+ This is the canonical single-episode world state used by evaluation and some
28
+ trainer-facing helpers. It is intentionally compact so stepping the world is
29
+ deterministic and easy to inspect.
30
+
31
+ ### FlappyObservationFeatures
32
+
33
+ Structured observation features used to build the neural-network input vector.
34
+
35
+ Re-exported from shared simulation utilities so trainer and browser paths
36
+ stay synchronized as the observation schema evolves.
37
+
38
+ ### FlappyPipe
39
+
40
+ Pipe obstacle definition.
41
+
42
+ Pipes move from right to left. The bird scores once per pipe when the pipe
43
+ completely crosses the bird x-position.
44
+
45
+ This is the environment-owned pipe state, distinct from the packed snapshot
46
+ transport shapes used by the browser worker.
47
+
48
+ ## environment/environment.constants.ts
49
+
50
+ ### FLAPPY_ENVIRONMENT_DEFAULT_CONTROL_SUBSTEPS_PER_FRAME
51
+
52
+ ### FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE
53
+
54
+ ### FLAPPY_ENVIRONMENT_MAX_FRAMES_PER_EPISODE
55
+
56
+ ## environment/environment.step.service.ts
57
+
58
+ ### stepFlappyState
59
+
60
+ `(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, rng: import("test/examples/flappy_bird/rng").FlappyRng, flap: boolean, difficultyScale: number) => void`
61
+
62
+ Advance the simulation by one frame.
63
+
64
+ This is the simplest stepping surface: one logical frame and one flap choice.
65
+ More advanced callers can use the control-substep variant below.
66
+
67
+ Parameters:
68
+ - `state` - - Mutable state object to update in-place.
69
+ - `rng` - - Random source used to spawn pipes.
70
+ - `flap` - - If true, applies an upward velocity impulse.
71
+ - `difficultyScale` - - Curriculum difficulty scale in [0, 1].
72
+
73
+ Returns: Nothing.
74
+
75
+ ### stepFlappyStateWithControlSubsteps
76
+
77
+ `(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, rng: import("test/examples/flappy_bird/rng").FlappyRng, shouldFlapForSubstep: () => boolean, difficultyScale: number, controlSubstepsPerFrame: number) => void`
78
+
79
+ Advance one logical frame using multiple control/physics substeps.
80
+
81
+ This allows policies to react multiple times before `frameIndex` advances,
82
+ improving responsiveness in high-difficulty scenarios.
83
+
84
+ Educational note:
85
+ Splitting a logical frame into smaller control steps is a simple numerical
86
+ stability trick. It reduces the chance that fast pipes or large velocity
87
+ updates make the environment feel artificially coarse.
88
+
89
+ For background reading, the Wikipedia article on "numerical integration"
90
+ provides the general idea behind updating continuous motion in small steps.
91
+
92
+ Parameters:
93
+ - `state` - - Mutable state object to update in-place.
94
+ - `rng` - - Random source used to spawn pipes.
95
+ - `shouldFlapForSubstep` - - Callback deciding flap action per substep.
96
+ - `difficultyScale` - - Curriculum difficulty scale in [0, 1].
97
+ - `controlSubstepsPerFrame` - - Number of substeps to run this frame.
98
+
99
+ Returns: Nothing.
100
+
101
+ ## environment/environment.state.service.ts
102
+
103
+ ### createInitialFlappyState
104
+
105
+ `(rng: import("test/examples/flappy_bird/rng").FlappyRng) => import("test/examples/flappy_bird/environment/environment.types").FlappyGameState`
106
+
107
+ Create a fresh Flappy Bird episode state.
108
+
109
+ Educational note:
110
+ A new episode starts with one initial pipe already materialized so the first
111
+ observation is meaningful immediately. That avoids a cold-start phase where a
112
+ policy would receive mostly empty-space inputs.
113
+
114
+ Parameters:
115
+ - `rng` - - Random source used to generate initial pipe configuration.
116
+
117
+ Returns: Initial state for one deterministic rollout.
118
+
119
+ ## environment/environment.collision.utils.ts
120
+
121
+ ### updateCollisionAndProgressState
122
+
123
+ `(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState) => void`
124
+
125
+ Apply out-of-bounds, pipe-collision, and pass-credit rules for one substep.
126
+
127
+ Educational note:
128
+ Collision resolution and progress credit live together because both depend on
129
+ the same bird-vs-pipe geometry for the current substep. Keeping them in one
130
+ place helps the environment avoid inconsistent "passed but also collided"
131
+ edge cases.
132
+
133
+ Parameters:
134
+ - `state` - - Mutable simulation state to update in-place.
135
+
136
+ Returns: Nothing.
137
+
138
+ ## environment/environment.observation.utils.ts
139
+
140
+ ### getFlappyObservation
141
+
142
+ `(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, difficultyScale: number) => number[]`
143
+
144
+ Generate the network observation vector for the current state.
145
+
146
+ Educational note:
147
+ This helper is the environment-facing bridge into the shared observation
148
+ system. It keeps the environment API simple while ensuring evaluation,
149
+ training, and browser playback all derive their policy inputs from the same
150
+ feature definitions.
151
+
152
+ Observation (12 numbers):
153
+ 1) bird y position normalized to [0, 1]
154
+ 2) bird vertical velocity normalized to [-1, 1]
155
+ 3) distance to next pipe normalized to [0, 1]
156
+ 4) delta (bird y - gap center y) normalized to [-1, 1]
157
+ 5) next pipe gap top normalized to [0, 1]
158
+ 6) next pipe gap bottom normalized to [0, 1]
159
+ 7) distance to second pipe normalized to [0, 1]
160
+ 8) delta to second gap center normalized to [-1, 1]
161
+ 9) time-to-next-pipe closeness normalized to [0, 1]
162
+ 10) signed clearance relative to next gap normalized to [-1, 1]
163
+ 11) required vertical velocity toward next gap center normalized to [-1, 1]
164
+ 12) gap-center transition (next to second) normalized to [-1, 1]
165
+
166
+ Parameters:
167
+ - `state` - - Current state.
168
+ - `difficultyScale` - - Curriculum difficulty scale in [0, 1].
169
+
170
+ Returns: Input vector for the neural network.
171
+
172
+ ### getFlappyObservationFeatures
173
+
174
+ `(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, difficultyScale: number) => import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures`
175
+
176
+ Resolve structured observation features for policy input and reward shaping.
177
+
178
+ Parameters:
179
+ - `state` - - Current state.
180
+ - `difficultyScale` - - Curriculum difficulty scale in [0, 1].
181
+
182
+ Returns: Named feature object.
@@ -11,7 +11,14 @@ import type { FlappyGameState } from './environment.types';
11
11
  /**
12
12
  * Apply out-of-bounds, pipe-collision, and pass-credit rules for one substep.
13
13
  *
14
+ * Educational note:
15
+ * Collision resolution and progress credit live together because both depend on
16
+ * the same bird-vs-pipe geometry for the current substep. Keeping them in one
17
+ * place helps the environment avoid inconsistent "passed but also collided"
18
+ * edge cases.
19
+ *
14
20
  * @param state - Mutable simulation state to update in-place.
21
+ * @returns Nothing.
15
22
  */
16
23
  export function updateCollisionAndProgressState(state: FlappyGameState): void {
17
24
  // Step 1: Resolve world-bound collisions.