@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,10 +1,149 @@
1
1
  import Network from '../../../../../src/architecture/network';
2
- import type { NetworkLegendLayout } from '../browser-entry.types';
3
- import { resolveDefaultNetworkLegendLayoutInternal } from '../browser-entry.visualization.utils';
2
+ import {
3
+ FLAPPY_NETWORK_LEGEND_BOTTOM_PADDING_PX,
4
+ FLAPPY_NETWORK_LEGEND_COMPACT_HEIGHT_THRESHOLD_PX,
5
+ FLAPPY_NETWORK_LEGEND_COMPACT_ROW_HEIGHT_PX,
6
+ FLAPPY_NETWORK_LEGEND_COMPACT_SECTION_GAP_PX,
7
+ FLAPPY_NETWORK_LEGEND_COMPACT_SECTION_TITLE_HEIGHT_PX,
8
+ FLAPPY_NETWORK_LEGEND_COMPACT_WIDTH_PX,
9
+ FLAPPY_NETWORK_LEGEND_COMPACT_WIDTH_THRESHOLD_PX,
10
+ FLAPPY_NETWORK_LEGEND_HEADER_HEIGHT_PX,
11
+ FLAPPY_NETWORK_LEGEND_MARGIN_PX,
12
+ FLAPPY_NETWORK_LEGEND_MIN_TOP_PX,
13
+ FLAPPY_NETWORK_LEGEND_REGULAR_ROW_HEIGHT_PX,
14
+ FLAPPY_NETWORK_LEGEND_REGULAR_SECTION_GAP_PX,
15
+ FLAPPY_NETWORK_LEGEND_REGULAR_SECTION_TITLE_HEIGHT_PX,
16
+ FLAPPY_NETWORK_LEGEND_REGULAR_WIDTH_PX,
17
+ FLAPPY_NETWORK_LEGEND_TARGET_TOP_PX,
18
+ FLAPPY_NETWORK_LEGEND_TOP_LEFT_THRESHOLD_PX,
19
+ } from '../../constants/constants';
20
+ import { clamp } from '../browser-entry.math.utils';
21
+ import type {
22
+ ColorLegendRow,
23
+ NetworkLegendLayout,
24
+ } from '../browser-entry.types';
25
+ import { assertFiniteLegendBound } from './visualization.errors';
26
+ import { resolveNetworkVisualizationColorScales } from './visualization.colors.utils';
27
+ import type { DynamicColorScale } from './visualization.types';
28
+
29
+ /**
30
+ * Legend-layout helpers for network visualization.
31
+ *
32
+ * The legend explains how colors map back to numeric weights and biases. These
33
+ * helpers turn color scales into labeled rows and place the legend so it stays
34
+ * readable across different canvas sizes.
35
+ */
36
+
37
+ /**
38
+ * Creates legend rows from ordered tiers.
39
+ *
40
+ * Each row describes one closed numeric interval and the swatch used to paint
41
+ * it, making the dynamic color scale legible to a human reader.
42
+ *
43
+ * @param scale - Dynamic color scale containing bounds, tiers, and overflow color.
44
+ * @param symbol - Label symbol.
45
+ * @returns Legend rows.
46
+ */
47
+ export function createColorLegendRows(
48
+ scale: DynamicColorScale,
49
+ symbol: 'w' | 'b',
50
+ ): ColorLegendRow[] {
51
+ return scale.tiers.map((tier, tierIndex) => {
52
+ const lowerBound =
53
+ tierIndex === 0
54
+ ? scale.minimumValue
55
+ : scale.tiers[tierIndex - 1].upperBound;
56
+ return {
57
+ label: `${formatLegendBound(lowerBound)} <= ${symbol} <= ${formatLegendBound(tier.upperBound)}`,
58
+ color: tier.color,
59
+ minimumValue: lowerBound,
60
+ maximumValue: tier.upperBound,
61
+ };
62
+ });
63
+ }
64
+
65
+ /**
66
+ * Resolves network legend layout from canvas constraints.
67
+ *
68
+ * The legend layout adapts between regular and compact modes so the network
69
+ * panel can stay informative on smaller viewports without swallowing the whole
70
+ * canvas.
71
+ *
72
+ * @param context - Render context.
73
+ * @param connectionLegendRows - Connection legend rows.
74
+ * @param biasLegendRows - Bias legend rows.
75
+ * @returns Computed legend layout.
76
+ */
77
+ export function resolveNetworkLegendLayout(
78
+ context: CanvasRenderingContext2D,
79
+ connectionLegendRows: ColorLegendRow[],
80
+ biasLegendRows: ColorLegendRow[],
81
+ ): NetworkLegendLayout {
82
+ const compactLegend =
83
+ context.canvas.width < FLAPPY_NETWORK_LEGEND_COMPACT_WIDTH_THRESHOLD_PX ||
84
+ context.canvas.height < FLAPPY_NETWORK_LEGEND_COMPACT_HEIGHT_THRESHOLD_PX;
85
+ const legendWidthPx = compactLegend
86
+ ? FLAPPY_NETWORK_LEGEND_COMPACT_WIDTH_PX
87
+ : FLAPPY_NETWORK_LEGEND_REGULAR_WIDTH_PX;
88
+ const legendHeaderHeightPx = FLAPPY_NETWORK_LEGEND_HEADER_HEIGHT_PX;
89
+ const legendSectionTitleHeightPx = compactLegend
90
+ ? FLAPPY_NETWORK_LEGEND_COMPACT_SECTION_TITLE_HEIGHT_PX
91
+ : FLAPPY_NETWORK_LEGEND_REGULAR_SECTION_TITLE_HEIGHT_PX;
92
+ const legendRowHeightPx = compactLegend
93
+ ? FLAPPY_NETWORK_LEGEND_COMPACT_ROW_HEIGHT_PX
94
+ : FLAPPY_NETWORK_LEGEND_REGULAR_ROW_HEIGHT_PX;
95
+ const legendSectionGapPx = compactLegend
96
+ ? FLAPPY_NETWORK_LEGEND_COMPACT_SECTION_GAP_PX
97
+ : FLAPPY_NETWORK_LEGEND_REGULAR_SECTION_GAP_PX;
98
+ const legendHeightPx =
99
+ legendHeaderHeightPx +
100
+ legendSectionTitleHeightPx +
101
+ connectionLegendRows.length * legendRowHeightPx +
102
+ legendSectionGapPx +
103
+ legendSectionTitleHeightPx +
104
+ biasLegendRows.length * legendRowHeightPx +
105
+ FLAPPY_NETWORK_LEGEND_BOTTOM_PADDING_PX;
106
+ const legendMarginPx = FLAPPY_NETWORK_LEGEND_MARGIN_PX;
107
+ const preferTopLeft =
108
+ context.canvas.width < FLAPPY_NETWORK_LEGEND_TOP_LEFT_THRESHOLD_PX;
109
+
110
+ const maximumLeftPx = Math.max(
111
+ legendMarginPx,
112
+ context.canvas.width - legendWidthPx - legendMarginPx,
113
+ );
114
+ const legendLeftPx = preferTopLeft ? legendMarginPx : maximumLeftPx;
115
+
116
+ const maximumTopPx = Math.max(
117
+ legendMarginPx,
118
+ context.canvas.height - legendHeightPx - legendMarginPx,
119
+ );
120
+ const minimumTopPx = Math.min(FLAPPY_NETWORK_LEGEND_MIN_TOP_PX, maximumTopPx);
121
+ const legendTopPx = clamp(
122
+ FLAPPY_NETWORK_LEGEND_TARGET_TOP_PX,
123
+ minimumTopPx,
124
+ maximumTopPx,
125
+ );
126
+
127
+ return {
128
+ compactLegend,
129
+ legendLeftPx,
130
+ legendTopPx,
131
+ legendWidthPx,
132
+ legendHeightPx,
133
+ legendHeaderHeightPx,
134
+ legendSectionTitleHeightPx,
135
+ legendRowHeightPx,
136
+ legendSectionGapPx,
137
+ };
138
+ }
4
139
 
5
140
  /**
6
141
  * Resolves default legend layout from internal tier definitions.
7
142
  *
143
+ * This convenience helper is used when the caller wants a layout driven by the
144
+ * currently active network and does not need to assemble the intermediate rows
145
+ * manually.
146
+ *
8
147
  * @param context - Render context.
9
148
  * @param network - Active network instance.
10
149
  * @returns Legend layout.
@@ -13,5 +152,20 @@ export function resolveDefaultNetworkLegendLayout(
13
152
  context: CanvasRenderingContext2D,
14
153
  network: Network | undefined,
15
154
  ): NetworkLegendLayout {
16
- return resolveDefaultNetworkLegendLayoutInternal(context, network);
155
+ const colorScales = resolveNetworkVisualizationColorScales(network);
156
+ const connectionLegendRows = createColorLegendRows(
157
+ colorScales.connectionScale,
158
+ 'w',
159
+ );
160
+ const biasLegendRows = createColorLegendRows(colorScales.biasScale, 'b');
161
+ return resolveNetworkLegendLayout(
162
+ context,
163
+ connectionLegendRows,
164
+ biasLegendRows,
165
+ );
166
+ }
167
+
168
+ function formatLegendBound(value: number): string {
169
+ assertFiniteLegendBound(value);
170
+ return value.toFixed(2);
17
171
  }
@@ -1,36 +1,22 @@
1
- import Network from '../../../../../src/architecture/network';
2
- import type { VisualNetworkNodeLike } from '../browser-entry.types';
3
- import {
4
- formatNodeBiasLabelInternal,
5
- resolveNetworkVisualizationLayersInternal,
6
- } from '../browser-entry.visualization.utils';
1
+ /**
2
+ * Shared topology formatting helpers used by network-view and visualization.
3
+ *
4
+ * The topology boundary resolves node layering, while this helper module adds a
5
+ * few small presentation-oriented utilities that are reused by the visualization
6
+ * panel.
7
+ */
8
+ export { resolveNetworkVisualizationLayers } from '../network-view/network-view.topology.utils';
7
9
 
8
10
  /**
9
11
  * Formats node bias labels with fixed sign and precision.
10
12
  *
13
+ * Consistent sign and precision make dense node labels easier to scan quickly in
14
+ * the rendered network panel.
15
+ *
11
16
  * @param nodeBias - Node bias value.
12
17
  * @returns Label text.
13
18
  */
14
19
  export function formatNodeBiasLabel(nodeBias: number): string {
15
- return formatNodeBiasLabelInternal(nodeBias);
16
- }
17
-
18
- /**
19
- * Resolves layered node groups for visualization.
20
- *
21
- * @param network - Runtime network instance.
22
- * @param inputSize - Input count fallback.
23
- * @param outputSize - Output count fallback.
24
- * @returns Layered nodes for rendering.
25
- */
26
- export function resolveNetworkVisualizationLayers(
27
- network: Network | undefined,
28
- inputSize: number,
29
- outputSize: number,
30
- ): VisualNetworkNodeLike[][] {
31
- return resolveNetworkVisualizationLayersInternal(
32
- network,
33
- inputSize,
34
- outputSize,
35
- );
20
+ const roundedBias = Number.isFinite(nodeBias) ? nodeBias : 0;
21
+ return `${roundedBias >= 0 ? '+' : ''}${roundedBias.toFixed(2)}`;
36
22
  }
@@ -1,23 +1,10 @@
1
- import Network from '../../../../../src/architecture/network';
2
- import type { VisualNetworkNodeLike } from '../browser-entry.types';
3
- import { resolveNetworkVisualizationLayers as resolveNetworkVisualizationLayersFromTopology } from './visualization.topology.utils';
4
-
5
1
  /**
6
- * Public visualization entry for resolving layered network node groups.
2
+ * Public visualization facade for browser-entry network rendering.
7
3
  *
8
- * @param network - Runtime network instance.
9
- * @param inputSize - Input count fallback.
10
- * @param outputSize - Output count fallback.
11
- * @returns Layered nodes for rendering.
4
+ * The dedicated visualization folder focuses on turning network structure and
5
+ * parameter ranges into readable graphics. Layer resolution itself is shared
6
+ * with the neighboring network-view topology boundary, so this facade exposes
7
+ * that topology helper while keeping the visualization subsystem's public story
8
+ * in one place.
12
9
  */
13
- export function resolveNetworkVisualizationLayers(
14
- network: Network | undefined,
15
- inputSize: number,
16
- outputSize: number,
17
- ): VisualNetworkNodeLike[][] {
18
- return resolveNetworkVisualizationLayersFromTopology(
19
- network,
20
- inputSize,
21
- outputSize,
22
- );
23
- }
10
+ export { resolveNetworkVisualizationLayers } from '../network-view/network-view.topology.utils';
@@ -1,7 +1,18 @@
1
1
  import type { ColorTier } from '../browser-entry.types';
2
2
 
3
+ /**
4
+ * Visualization-specific color-scale contracts for network rendering.
5
+ *
6
+ * The Flappy Bird demo renders connection weights and node biases with tiered
7
+ * neon ramps so humans can quickly read sign and magnitude without parsing raw
8
+ * numbers on every edge and node.
9
+ */
10
+
3
11
  /**
4
12
  * Dynamic tiered color scale used by visualization render layers.
13
+ *
14
+ * The scale records the observed numeric range plus the ordered threshold tiers
15
+ * used to map values into colors.
5
16
  */
6
17
  export interface DynamicColorScale {
7
18
  minimumValue: number;
@@ -12,6 +23,9 @@ export interface DynamicColorScale {
12
23
 
13
24
  /**
14
25
  * Grouped color scales for connection and bias channels.
26
+ *
27
+ * Keeping the two scales together ensures the legend and drawing code read from
28
+ * one consistent view of the active network range.
15
29
  */
16
30
  export interface NetworkVisualizationColorScales {
17
31
  connectionScale: DynamicColorScale;
@@ -0,0 +1,238 @@
1
+ # browser-entry/worker-channel
2
+
3
+ ## browser-entry/worker-channel/worker-channel.types.ts
4
+
5
+ ### WorkerChannelGenerationPayload
6
+
7
+ Aliases the generation payload contract returned by the worker.
8
+
9
+ This payload arrives when one NEAT generation has finished evolving and the
10
+ browser is ready to update its "best so far" view.
11
+
12
+ ### WorkerChannelMessage
13
+
14
+ Shared protocol contracts for the browser-entry worker channel.
15
+
16
+ These types define the thin translation layer between generic worker messages
17
+ and the specific request/response flows used by the Flappy Bird browser UI.
18
+
19
+ If you want background reading, the Wikipedia article on "message passing"
20
+ gives the right mental model for this boundary.
21
+
22
+ ### WorkerChannelPlaybackStepPayload
23
+
24
+ Aliases the playback-step payload contract returned by the worker.
25
+
26
+ This is the browser-side shape of one streamed playback frame plus its
27
+ accompanying aggregate telemetry.
28
+
29
+ ### WorkerChannelPlaybackStepRequest
30
+
31
+ Request payload sent when asking the worker to advance playback simulation.
32
+
33
+ The request declares both simulation budget and viewport dimensions so the
34
+ worker can package a frame that already matches the browser's current canvas
35
+ world.
36
+
37
+ ## browser-entry/worker-channel/worker-channel.ts
38
+
39
+ ### worker-channel
40
+
41
+ Public worker-channel facade for the Flappy Bird browser runtime.
42
+
43
+ This boundary wraps the lower-level message protocol in a smaller browser API:
44
+ create the worker, request a generation result, or request the next playback
45
+ step. The point is to keep the rest of the UI code thinking in terms of
46
+ intent rather than raw `postMessage` plumbing.
47
+
48
+ ### createEvolutionWorker
49
+
50
+ `() => Worker`
51
+
52
+ Creates the evolution worker used to keep heavy NEAT compute off the UI thread.
53
+
54
+ Returns: Initialized worker instance.
55
+
56
+ ### requestWorkerGeneration
57
+
58
+ `(evolutionWorker: Worker) => Promise<import("test/examples/flappy_bird/browser-entry/browser-entry.worker.types").EvolutionGenerationPayload>`
59
+
60
+ Waits for the next generation payload emitted by the evolution worker.
61
+
62
+ Parameters:
63
+ - `evolutionWorker` - - Worker emitting generation-ready messages.
64
+
65
+ Returns: Next generation payload.
66
+
67
+ ### requestWorkerPlaybackStep
68
+
69
+ `(evolutionWorker: Worker, playbackStepRequest: import("test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types").WorkerChannelPlaybackStepRequest) => Promise<{ requestId: number; snapshot: import("test/examples/flappy_bird/browser-entry/browser-entry.worker.types").EvolutionPlaybackStepSnapshot; instrumentation?: { activationCallsPerFrame: number; simulationStepsPerRaf: number; } | undefined; done: boolean; averagePipesPassed?: number | undefined; p90FramesSurvived?: number | undefined; winnerPipesPassed?: number | undefined; winnerFramesSurvived?: number | undefined; }>`
70
+
71
+ Requests one playback batch step from the worker.
72
+
73
+ Parameters:
74
+ - `evolutionWorker` - - Worker that owns playback simulation state.
75
+ - `playbackStepRequest` - - Requested simulation budget and viewport width.
76
+
77
+ Returns: Playback-step payload including snapshot and completion marker.
78
+
79
+ ## browser-entry/worker-channel/worker-channel.errors.ts
80
+
81
+ ### worker-channel.errors
82
+
83
+ Error raised when the evolution worker responds with an explicit protocol error payload.
84
+
85
+ Protocol errors are different from runtime worker crashes: the worker is
86
+ alive, but it is explicitly telling the browser that the requested operation
87
+ could not be completed.
88
+
89
+ ### createWorkerChannelResponseError
90
+
91
+ `(message: string) => Error`
92
+
93
+ Converts worker protocol error payloads into typed worker-channel errors.
94
+
95
+ Using a dedicated error class makes it easier for browser code to distinguish
96
+ "worker rejected my request" from "the worker crashed".
97
+
98
+ Parameters:
99
+ - `message` - - Message supplied by the worker error payload.
100
+
101
+ Returns: Typed worker-channel protocol error.
102
+
103
+ ### resolveWorkerChannelRuntimeError
104
+
105
+ `(errorLike: unknown, fallbackMessage: string) => Error`
106
+
107
+ Resolves a worker `ErrorEvent` into a normalized `Error` instance.
108
+
109
+ Browser worker errors are not always surfaced as proper `Error` objects, so
110
+ this helper converts the event payload into a predictable error shape before
111
+ it escapes the channel layer.
112
+
113
+ Parameters:
114
+ - `errorLike` - - Optional `event.error` payload.
115
+ - `fallbackMessage` - - Fallback message from `event.message`.
116
+
117
+ Returns: Normalized runtime error.
118
+
119
+ ### WorkerChannelResponseError
120
+
121
+ Error raised when the evolution worker responds with an explicit protocol error payload.
122
+
123
+ Protocol errors are different from runtime worker crashes: the worker is
124
+ alive, but it is explicitly telling the browser that the requested operation
125
+ could not be completed.
126
+
127
+ ## browser-entry/worker-channel/worker-channel.url.service.ts
128
+
129
+ ### worker-channel.url.service
130
+
131
+ Resolves the evolution worker bundle URL relative to the active browser-entry bundle.
132
+
133
+ The browser bundle and worker bundle are emitted side-by-side by the docs/demo
134
+ build. Resolving the worker URL relative to the currently loaded browser
135
+ bundle keeps the demo portable across local files, static hosting, and docs
136
+ builds without hard-coding absolute paths.
137
+
138
+ @returns Absolute URL string for `flappy-evolution.worker.bundle.js`.
139
+
140
+ ### resolveEvolutionWorkerBundleUrl
141
+
142
+ `() => string`
143
+
144
+ Resolves the evolution worker bundle URL relative to the active browser-entry bundle.
145
+
146
+ The browser bundle and worker bundle are emitted side-by-side by the docs/demo
147
+ build. Resolving the worker URL relative to the currently loaded browser
148
+ bundle keeps the demo portable across local files, static hosting, and docs
149
+ builds without hard-coding absolute paths.
150
+
151
+ Returns: Absolute URL string for `flappy-evolution.worker.bundle.js`.
152
+
153
+ ## browser-entry/worker-channel/worker-channel.request.service.ts
154
+
155
+ ### requestWorkerResponse
156
+
157
+ `(options: import("test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service").WorkerChannelRequestOptions<ResponsePayload>) => Promise<ResponsePayload>`
158
+
159
+ Sends one request to the worker and resolves with the first matching response payload.
160
+
161
+ This keeps generation requests simple: the caller describes the response it is
162
+ waiting for, and this helper handles transient listeners, protocol errors,
163
+ and runtime worker failures.
164
+
165
+ Parameters:
166
+ - `options` - - Worker request options and response resolver callback.
167
+
168
+ Returns: Promise resolving with the matched worker response payload.
169
+
170
+ ### WorkerChannelRequestMessage
171
+
172
+ Generic request/response helper for worker-channel interactions.
173
+
174
+ This module implements a small RPC-like pattern on top of browser worker
175
+ events. The browser sends one message, listens for the first matching reply,
176
+ and normalizes protocol failures into ordinary `Error` instances.
177
+
178
+ ### WorkerChannelRequestOptions
179
+
180
+ Configuration used for one worker request/response lifecycle.
181
+
182
+ Callers provide the worker, the outbound message, and the predicate that says
183
+ which inbound worker message should satisfy the request.
184
+
185
+ ## browser-entry/worker-channel/worker-channel.playback.service.ts
186
+
187
+ ### PendingPlaybackRequest
188
+
189
+ Stateful playback request channel for one evolution worker.
190
+
191
+ Playback is intentionally handled differently from generation requests. The
192
+ browser asks for a sequence of incremental frames, and the channel keeps a
193
+ small amount of per-worker state so each request can be matched to the
194
+ correct reply.
195
+
196
+ ### requestWorkerPlaybackStep
197
+
198
+ `(evolutionWorker: Worker, playbackStepRequest: import("test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types").WorkerChannelPlaybackStepRequest) => Promise<{ requestId: number; snapshot: import("test/examples/flappy_bird/browser-entry/browser-entry.worker.types").EvolutionPlaybackStepSnapshot; instrumentation?: { activationCallsPerFrame: number; simulationStepsPerRaf: number; } | undefined; done: boolean; averagePipesPassed?: number | undefined; p90FramesSurvived?: number | undefined; winnerPipesPassed?: number | undefined; winnerFramesSurvived?: number | undefined; }>`
199
+
200
+ Requests one playback batch step from the worker channel.
201
+
202
+ A playback-step request is effectively "advance the simulation by this many
203
+ internal steps, then send me a packed frame I can render". The request is
204
+ tagged with a monotonically increasing request id so stale or out-of-order
205
+ replies can be ignored safely.
206
+
207
+ Parameters:
208
+ - `evolutionWorker` - - Worker that owns playback simulation state.
209
+ - `playbackStepRequest` - - Requested simulation budget and viewport size.
210
+
211
+ Returns: Playback-step payload including snapshot and completion marker.
212
+
213
+ ### resolvePlaybackWorkerChannelState
214
+
215
+ `(evolutionWorker: Worker) => PlaybackWorkerChannelState`
216
+
217
+ Resolves persistent playback worker-channel state for one worker instance.
218
+
219
+ The state tracks request ids and the one allowed in-flight playback request.
220
+ That single-flight rule keeps the protocol simple and avoids ambiguous frame
221
+ ordering on the browser side.
222
+
223
+ Parameters:
224
+ - `evolutionWorker` - - Worker that owns playback simulation state.
225
+
226
+ Returns: Persistent playback worker-channel state for the worker.
227
+
228
+ ## browser-entry/worker-channel/worker-channel.generation.service.ts
229
+
230
+ ### requestWorkerGeneration
231
+
232
+ `(evolutionWorker: Worker) => Promise<import("test/examples/flappy_bird/browser-entry/browser-entry.worker.types").EvolutionGenerationPayload>`
233
+
234
+ Generation request helper for the browser-entry worker channel.
235
+
236
+ This module asks the worker to evolve until the next generation boundary and
237
+ then returns the summary payload the browser needs for HUD updates and best
238
+ network visualization.
@@ -1,5 +1,9 @@
1
1
  /**
2
2
  * Error raised when the evolution worker responds with an explicit protocol error payload.
3
+ *
4
+ * Protocol errors are different from runtime worker crashes: the worker is
5
+ * alive, but it is explicitly telling the browser that the requested operation
6
+ * could not be completed.
3
7
  */
4
8
  export class WorkerChannelResponseError extends Error {
5
9
  /**
@@ -14,6 +18,9 @@ export class WorkerChannelResponseError extends Error {
14
18
  /**
15
19
  * Converts worker protocol error payloads into typed worker-channel errors.
16
20
  *
21
+ * Using a dedicated error class makes it easier for browser code to distinguish
22
+ * "worker rejected my request" from "the worker crashed".
23
+ *
17
24
  * @param message - Message supplied by the worker error payload.
18
25
  * @returns Typed worker-channel protocol error.
19
26
  */
@@ -24,6 +31,10 @@ export function createWorkerChannelResponseError(message: string): Error {
24
31
  /**
25
32
  * Resolves a worker `ErrorEvent` into a normalized `Error` instance.
26
33
  *
34
+ * Browser worker errors are not always surfaced as proper `Error` objects, so
35
+ * this helper converts the event payload into a predictable error shape before
36
+ * it escapes the channel layer.
37
+ *
27
38
  * @param errorLike - Optional `event.error` payload.
28
39
  * @param fallbackMessage - Fallback message from `event.message`.
29
40
  * @returns Normalized runtime error.
@@ -4,9 +4,21 @@ import type {
4
4
  } from './worker-channel.types';
5
5
  import { requestWorkerResponse } from './worker-channel.request.service';
6
6
 
7
+ /**
8
+ * Generation request helper for the browser-entry worker channel.
9
+ *
10
+ * This module asks the worker to evolve until the next generation boundary and
11
+ * then returns the summary payload the browser needs for HUD updates and best
12
+ * network visualization.
13
+ */
14
+
7
15
  /**
8
16
  * Requests the next evolved generation payload from the worker channel.
9
17
  *
18
+ * Unlike playback streaming, generation evolution is a simple single-response
19
+ * exchange: ask for the next generation and wait for the next
20
+ * `generation-ready` message.
21
+ *
10
22
  * @param evolutionWorker - Worker emitting generation-ready messages.
11
23
  * @returns Next generation payload.
12
24
  */