@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
@@ -1,20 +1,62 @@
1
- /** Synthetic sample count used for generation-0 warm-start pretraining. */
1
+ /**
2
+ * Synthetic sample count used for generation-0 warm-start pretraining.
3
+ *
4
+ * Educational note:
5
+ * The warm-start service briefly trains a template network on a heuristic
6
+ * teacher before the first NEAT generation is evolved. This value controls how
7
+ * many synthetic state/action examples are generated for that bootstrap pass.
8
+ * Larger values usually make the teacher signal more stable, but they also
9
+ * increase startup latency inside the worker.
10
+ */
2
11
  export const FLAPPY_WORKER_GEN0_PRETRAIN_SAMPLE_COUNT = 512;
3
12
 
4
- /** Visible world width used when generating synthetic warm-start samples. */
13
+ /**
14
+ * Visible world width used when generating synthetic warm-start samples.
15
+ *
16
+ * This should roughly match the browser playback framing so the generated
17
+ * observation vectors look like the states the policy will later see during
18
+ * real worker playback.
19
+ */
5
20
  export const FLAPPY_WORKER_GEN0_PRETRAIN_VISIBLE_WORLD_WIDTH_PX = 720;
6
21
 
7
- /** Optimizer iteration budget for generation-0 warm-start pretraining. */
22
+ /**
23
+ * Optimizer iteration budget for generation-0 warm-start pretraining.
24
+ *
25
+ * The goal is not to fully solve Flappy Bird with supervised learning. The
26
+ * worker only needs a short nudge away from completely random action logits so
27
+ * the first browser-visible generation looks less chaotic.
28
+ */
8
29
  export const FLAPPY_WORKER_GEN0_PRETRAIN_ITERATIONS = 60;
9
30
 
10
- /** Batch size for generation-0 warm-start pretraining. */
31
+ /**
32
+ * Batch size for generation-0 warm-start pretraining.
33
+ *
34
+ * Smaller batches inject a bit more stochasticity into the bootstrap fit,
35
+ * while still keeping the pass cheap enough for a browser worker.
36
+ */
11
37
  export const FLAPPY_WORKER_GEN0_PRETRAIN_BATCH_SIZE = 32;
12
38
 
13
- /** Learning rate for generation-0 warm-start pretraining. */
39
+ /**
40
+ * Learning rate for generation-0 warm-start pretraining.
41
+ *
42
+ * This is intentionally moderate: the template network should learn a simple
43
+ * corridor-following prior without overfitting the heuristic teacher.
44
+ */
14
45
  export const FLAPPY_WORKER_GEN0_PRETRAIN_RATE = 0.02;
15
46
 
16
- /** Gaussian stddev used for post-pretrain connection-weight diversification. */
47
+ /**
48
+ * Gaussian standard deviation used for post-pretrain connection-weight diversification.
49
+ *
50
+ * After the template network is trained once, each genome receives a noisy copy
51
+ * of its weights. That keeps generation 0 visually coherent while preserving
52
+ * enough diversity for NEAT to search meaningfully.
53
+ */
17
54
  export const FLAPPY_WORKER_GEN0_PRETRAIN_WEIGHT_NOISE_STDDEV = 0.08;
18
55
 
19
- /** Gaussian stddev used for post-pretrain node-bias diversification. */
56
+ /**
57
+ * Gaussian standard deviation used for post-pretrain node-bias diversification.
58
+ *
59
+ * Bias noise is slightly smaller than weight noise so the warm-start remains a
60
+ * prior, not a rigid clone of the teacher-fitted template.
61
+ */
20
62
  export const FLAPPY_WORKER_GEN0_PRETRAIN_BIAS_NOISE_STDDEV = 0.03;
@@ -1,20 +1,40 @@
1
1
  import type { WorkerErrorMessage } from './flappy-evolution-worker.types';
2
2
 
3
- /** Worker error emitted when runtime initialization fails unexpectedly. */
3
+ /**
4
+ * Worker error emitted when runtime initialization fails unexpectedly.
5
+ *
6
+ * This message is intentionally stable so the browser host can show a readable
7
+ * error without leaking internal exception shapes into the UI contract.
8
+ */
4
9
  export const FLAPPY_WORKER_INIT_FAILED_ERROR_MESSAGE =
5
10
  'Failed to initialize Flappy evolution worker runtime.';
6
11
 
7
- /** Worker error emitted when playback start is requested before evolution output exists. */
12
+ /**
13
+ * Worker error emitted when playback start is requested before evolution output exists.
14
+ *
15
+ * Playback is defined over an already-evolved population snapshot. The host must
16
+ * request at least one generation before asking the worker to start playback.
17
+ */
8
18
  export const FLAPPY_WORKER_PLAYBACK_START_REQUIRES_GENERATION_ERROR_MESSAGE =
9
19
  'Cannot start playback before a generation is available. Request a generation first.';
10
20
 
11
- /** Worker error emitted when playback stepping is requested before playback start. */
21
+ /**
22
+ * Worker error emitted when playback stepping is requested before playback start.
23
+ *
24
+ * The protocol is stateful: `start-playback` materializes the mutable playback
25
+ * state that later `request-playback-step` messages advance.
26
+ */
12
27
  export const FLAPPY_WORKER_PLAYBACK_STEP_REQUIRES_START_ERROR_MESSAGE =
13
28
  'Playback step requested before playback was initialized. Send start-playback first.';
14
29
 
15
30
  /**
16
31
  * Resolves unknown error-like values into display-safe worker error messages.
17
32
  *
33
+ * Educational note:
34
+ * Browser workers can throw anything, including strings or arbitrary objects.
35
+ * Normalizing that value here gives the rest of the protocol a simple
36
+ * `string`-only error surface.
37
+ *
18
38
  * @param error - Unknown error value thrown by worker logic.
19
39
  * @returns Normalized error message string.
20
40
  */
@@ -25,6 +45,13 @@ export function resolveWorkerUnknownErrorMessage(error: unknown): string {
25
45
  /**
26
46
  * Creates a typed worker error response payload from a message string.
27
47
  *
48
+ * @example
49
+ * ```ts
50
+ * postWorkerMessage(
51
+ * createWorkerErrorMessage('Playback step requested before playback start.'),
52
+ * );
53
+ * ```
54
+ *
28
55
  * @param message - Error message text.
29
56
  * @returns Worker error response message.
30
57
  */
@@ -38,6 +65,10 @@ export function createWorkerErrorMessage(message: string): WorkerErrorMessage {
38
65
  /**
39
66
  * Creates a typed worker error response payload from an unknown thrown value.
40
67
  *
68
+ * This helper keeps the protocol boundary narrow: worker internals can use
69
+ * regular exceptions, while the browser host still receives one predictable
70
+ * `WorkerErrorMessage` shape.
71
+ *
41
72
  * @param error - Unknown thrown value.
42
73
  * @returns Worker error response message.
43
74
  */
@@ -4,6 +4,12 @@ import type { WorkerGenerationReadyMessage } from './flappy-evolution-worker.typ
4
4
 
5
5
  /**
6
6
  * Dependencies required to evolve one generation and prepare host payload output.
7
+ *
8
+ * Educational note:
9
+ * This interface isolates the evolution step from the worker entrypoint. That
10
+ * makes the README easier to follow: the entrypoint owns protocol orchestration,
11
+ * while this service owns one well-defined "run generation -> publish summary"
12
+ * slice of behavior.
7
13
  */
8
14
  export interface WorkerEvolutionServiceOptions {
9
15
  initializationPromise?: Promise<void>;
@@ -16,6 +22,22 @@ export interface WorkerEvolutionServiceOptions {
16
22
  /**
17
23
  * Evolves one generation and creates the compact generation-ready response payload.
18
24
  *
25
+ * Educational note:
26
+ * The worker does not stream the whole population back to the UI after each
27
+ * evolution step. Instead it emits a compact summary containing the generation
28
+ * index, best fitness, and a serializable best-network snapshot for inspection.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const generationMessage = await evolveAndBuildGenerationReadyMessage({
33
+ * initializationPromise,
34
+ * neatRuntime,
35
+ * isStopped: () => false,
36
+ * warmStartGenerationZeroIfNeeded,
37
+ * setCurrentPopulation,
38
+ * });
39
+ * ```
40
+ *
19
41
  * @param options - Evolution dependencies and runtime state accessors.
20
42
  * @returns Generation-ready worker response payload.
21
43
  */
@@ -5,8 +5,11 @@ import {
5
5
  resolveFramePrimaryWinnerIndex,
6
6
  resolveLeaderPipesPassed,
7
7
  } from '../browser-entry/browser-entry.observation.utils';
8
- import { resolveDifficultyProfile } from '../browser-entry/browser-entry.spawn.utils';
9
8
  import { FLAPPY_ENABLE_RUNTIME_INSTRUMENTATION } from '../constants/constants';
9
+ import {
10
+ resolveAdaptiveDifficultyProfile,
11
+ type SharedDifficultyProfile,
12
+ } from '../flappy.simulation.shared.utils';
10
13
  import type {
11
14
  WorkerPlaybackFrameSnapshot,
12
15
  WorkerPlaybackState,
@@ -19,6 +22,20 @@ import type { Neat } from '../../../../src/neataptic';
19
22
  /**
20
23
  * Creates a fresh worker playback session state from the current evolved population.
21
24
  *
25
+ * Educational note:
26
+ * Evolution and playback are intentionally separated. Evolution produces a new
27
+ * population, then playback freezes that population into a deterministic
28
+ * simulation state that the host can step frame-by-frame for rendering.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const session = beginWorkerPlaybackSession({
33
+ * currentPopulation,
34
+ * payload: { visibleWorldWidthPx: 1280, visibleWorldHeightPx: 720 },
35
+ * createPopulationRenderState,
36
+ * });
37
+ * ```
38
+ *
22
39
  * @param currentPopulation - Current evolved population.
23
40
  * @param payload - Playback start viewport payload.
24
41
  * @param createPopulationRenderState - Callback that builds initial simulation state.
@@ -56,6 +73,12 @@ export function beginWorkerPlaybackSession(options: {
56
73
  /**
57
74
  * Processes one worker playback-step request including completion/finalization logic.
58
75
  *
76
+ * Educational note:
77
+ * One playback request may advance multiple simulation steps. This lets the
78
+ * host trade visual smoothness against throughput while keeping the worker in
79
+ * control of simulation correctness, winner selection, and packed snapshot
80
+ * publishing.
81
+ *
59
82
  * @param options - Playback step dependencies and mutable runtime state.
60
83
  * @returns Updated playback runtime state after processing this step.
61
84
  */
@@ -68,16 +91,18 @@ export function processWorkerPlaybackStep(options: {
68
91
  stepPopulationFrame: (
69
92
  renderState: WorkerPlaybackState,
70
93
  rng: ReturnType<typeof createXorshift32>,
71
- difficultyProfile: {
72
- pipeGapPx: number;
73
- pipeSpeedPxPerFrame: number;
74
- pipeSpawnIntervalFrames: number;
75
- },
94
+ difficultyProfile: SharedDifficultyProfile,
76
95
  ) => number;
77
96
  createPlaybackSnapshot: (
78
97
  playbackState: WorkerPlaybackState,
79
98
  ) => WorkerPlaybackFrameSnapshot;
80
- postWorkerMessage: (workerMessage: WorkerResponseMessage) => void;
99
+ resolvePlaybackSnapshotTransferList: (
100
+ snapshot: WorkerPlaybackFrameSnapshot,
101
+ ) => Transferable[];
102
+ postWorkerMessage: (
103
+ workerMessage: WorkerResponseMessage,
104
+ transferList?: Transferable[],
105
+ ) => void;
81
106
  }): {
82
107
  currentPlaybackState: WorkerPlaybackState | undefined;
83
108
  currentPlaybackRng: ReturnType<typeof createXorshift32> | undefined;
@@ -92,6 +117,7 @@ export function processWorkerPlaybackStep(options: {
92
117
  neatRuntime,
93
118
  stepPopulationFrame,
94
119
  createPlaybackSnapshot,
120
+ resolvePlaybackSnapshotTransferList,
95
121
  postWorkerMessage,
96
122
  } = options;
97
123
 
@@ -112,8 +138,9 @@ export function processWorkerPlaybackStep(options: {
112
138
  hasAliveBirds(currentPlaybackState.birds);
113
139
  simulationStepIndex++
114
140
  ) {
115
- const difficultyProfile = resolveDifficultyProfile(
141
+ const difficultyProfile = resolveAdaptiveDifficultyProfile(
116
142
  resolveLeaderPipesPassed(currentPlaybackState.birds),
143
+ 1,
117
144
  );
118
145
  totalActivationCalls += stepPopulationFrame(
119
146
  currentPlaybackState,
@@ -135,16 +162,21 @@ export function processWorkerPlaybackStep(options: {
135
162
  : undefined;
136
163
 
137
164
  const snapshot = createPlaybackSnapshot(currentPlaybackState);
165
+ const snapshotTransferList = resolvePlaybackSnapshotTransferList(snapshot);
138
166
 
139
167
  if (hasAliveBirds(currentPlaybackState.birds)) {
140
- postWorkerMessage({
141
- type: 'playback-step',
142
- payload: {
143
- snapshot,
144
- instrumentation: instrumentationPayload,
145
- done: false,
168
+ postWorkerMessage(
169
+ {
170
+ type: 'playback-step',
171
+ payload: {
172
+ requestId: playbackStepPayload.requestId,
173
+ snapshot,
174
+ instrumentation: instrumentationPayload,
175
+ done: false,
176
+ },
146
177
  },
147
- });
178
+ snapshotTransferList,
179
+ );
148
180
  return {
149
181
  currentPlaybackState,
150
182
  currentPlaybackRng,
@@ -190,18 +222,22 @@ export function processWorkerPlaybackStep(options: {
190
222
  const p90FramesSurvived =
191
223
  sortedFramesSurvived.length > 0 ? sortedFramesSurvived[p90FrameIndex] : 0;
192
224
 
193
- postWorkerMessage({
194
- type: 'playback-step',
195
- payload: {
196
- snapshot,
197
- instrumentation: instrumentationPayload,
198
- done: true,
199
- averagePipesPassed,
200
- p90FramesSurvived,
201
- winnerPipesPassed: winnerBird?.pipesPassed ?? 0,
202
- winnerFramesSurvived: winnerBird?.framesSurvived ?? 0,
225
+ postWorkerMessage(
226
+ {
227
+ type: 'playback-step',
228
+ payload: {
229
+ requestId: playbackStepPayload.requestId,
230
+ snapshot,
231
+ instrumentation: instrumentationPayload,
232
+ done: true,
233
+ averagePipesPassed,
234
+ p90FramesSurvived,
235
+ winnerPipesPassed: winnerBird?.pipesPassed ?? 0,
236
+ winnerFramesSurvived: winnerBird?.framesSurvived ?? 0,
237
+ },
203
238
  },
204
- });
239
+ snapshotTransferList,
240
+ );
205
241
 
206
242
  return {
207
243
  currentPlaybackState: undefined,
@@ -13,6 +13,11 @@ import {
13
13
 
14
14
  /**
15
15
  * Callback bundle used by worker protocol routing.
16
+ *
17
+ * Each callback corresponds to one legal transition in the worker message
18
+ * protocol. Keeping the router dependent on this narrow interface makes the
19
+ * protocol easy to read in generated docs and easy to test independently from
20
+ * the worker-global `self.onmessage` hook.
16
21
  */
17
22
  export interface WorkerProtocolHandlers {
18
23
  markStopped: () => void;
@@ -24,12 +29,33 @@ export interface WorkerProtocolHandlers {
24
29
  ) => void;
25
30
  hasPopulation: () => boolean;
26
31
  hasPlaybackState: () => boolean;
27
- postWorkerMessage: (workerMessage: WorkerResponseMessage) => void;
32
+ postWorkerMessage: (
33
+ workerMessage: WorkerResponseMessage,
34
+ transferList?: Transferable[],
35
+ ) => void;
28
36
  }
29
37
 
30
38
  /**
31
39
  * Routes one inbound worker request message to the corresponding runtime action.
32
40
  *
41
+ * Educational note:
42
+ * This router is the protocol gatekeeper for the worker. It enforces the two
43
+ * important sequencing rules in the demo:
44
+ * - playback requires a previously evolved population,
45
+ * - playback stepping requires an active playback session.
46
+ *
47
+ * In practice this acts like a tiny finite-state machine. If you want a quick
48
+ * conceptual refresher, the Wikipedia article on "finite-state machine" maps
49
+ * well onto the worker's init -> evolve -> start playback -> step playback flow.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * routeWorkerProtocolMessage(
54
+ * { type: 'request-generation' },
55
+ * workerProtocolHandlers,
56
+ * );
57
+ * ```
58
+ *
33
59
  * @param workerMessage - Inbound worker request payload.
34
60
  * @param handlers - Runtime action callbacks and state probes.
35
61
  * @returns Nothing.
@@ -12,6 +12,29 @@ import {
12
12
  /**
13
13
  * Creates and configures the worker-local NEAT runtime used by browser evolution playback.
14
14
  *
15
+ * Educational note:
16
+ * The browser worker reuses the same core NeatapticTS runtime as the Node-side
17
+ * trainer, but trims configuration down to the pieces needed for an interactive
18
+ * example: deterministic seeding, feed-forward mutation policy, and a fitness
19
+ * function that favors quick browser-visible iteration.
20
+ *
21
+ * The resulting runtime is both the evolution engine and the source of the
22
+ * population that later playback requests visualize.
23
+ *
24
+ * For background reading, the Wikipedia article on "Neuroevolution of
25
+ * augmenting topologies" is a useful overview of the family of ideas this demo
26
+ * is exercising, even though the repository implements its own detailed runtime
27
+ * behavior and modern extensions.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const neatRuntime = createInitializedWorkerRuntime({
32
+ * populationSize: 50,
33
+ * elitismCount: 10,
34
+ * rngSeed: 12345,
35
+ * });
36
+ * ```
37
+ *
15
38
  * @param initPayload - Initialization values from the browser host.
16
39
  * @returns Initialized NEAT runtime.
17
40
  */