@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
@@ -20,8 +20,20 @@ import type {
20
20
  } from '../browser-entry.types';
21
21
  import type { RuntimeTelemetryState } from './runtime.telemetry.service';
22
22
 
23
+ /**
24
+ * Long-running evolution/playback orchestration for the browser runtime.
25
+ *
26
+ * This loop is the heart of the interactive demo. It repeatedly asks the worker
27
+ * for the next evolved generation, updates the HUD and network view, plays back
28
+ * that generation on the canvas, then folds the outcome into best-so-far
29
+ * browser state.
30
+ */
31
+
23
32
  /**
24
33
  * Dependencies required to run the browser runtime evolution loop.
34
+ *
35
+ * Grouping these dependencies into one object keeps the public loop entry more
36
+ * declarative and avoids a long positional parameter list.
25
37
  */
26
38
  export interface RuntimeEvolutionLoopOptions {
27
39
  evolutionWorker: Worker;
@@ -40,6 +52,13 @@ export interface RuntimeEvolutionLoopOptions {
40
52
  /**
41
53
  * Runs generation orchestration and playback until a stop signal is observed.
42
54
  *
55
+ * The loop alternates between two phases:
56
+ * 1. Evolve off-thread until the worker emits the next best-generation summary.
57
+ * 2. Play that generation back on the main thread while streaming HUD updates.
58
+ *
59
+ * This rhythm makes the demo feel like a live training dashboard instead of a
60
+ * one-shot batch job.
61
+ *
43
62
  * @param options - Runtime evolution dependencies and mutable state accessors.
44
63
  * @returns Nothing.
45
64
  */
@@ -0,0 +1,96 @@
1
+ import { disconnectRuntimeTelemetry } from './runtime.telemetry.service';
2
+ import type {
3
+ RuntimeMutableLifecycleState,
4
+ RuntimeRunHandle,
5
+ RuntimeStartContext,
6
+ } from './runtime.types';
7
+
8
+ /**
9
+ * Lifecycle and teardown helpers for the browser runtime.
10
+ *
11
+ * The runtime behaves like a small application process. These helpers create the
12
+ * mutable state and public handle needed to stop it cleanly, terminate the
13
+ * worker, and resolve the completion promise exactly once.
14
+ */
15
+
16
+ /**
17
+ * Creates mutable lifecycle state for stop semantics and completion signaling.
18
+ *
19
+ * The returned object is shared across runtime orchestration paths so both
20
+ * expected shutdown and failure-driven shutdown follow the same completion flow.
21
+ *
22
+ * @returns Mutable lifecycle state used by the run handle.
23
+ */
24
+ export function createRuntimeLifecycleState(): RuntimeMutableLifecycleState {
25
+ let resolveDone: (() => void) | undefined;
26
+ const done = new Promise<void>((resolve) => {
27
+ resolveDone = resolve;
28
+ });
29
+
30
+ // Step 1: Return idempotent lifecycle state with an externally resolvable promise.
31
+ return {
32
+ stopped: false,
33
+ resolveDone,
34
+ done,
35
+ };
36
+ }
37
+
38
+ /**
39
+ * Builds the public run handle and binds it to runtime teardown behavior.
40
+ *
41
+ * The handle is the user-facing control surface for the demo. Internally it is
42
+ * just a thin closure layer over the mutable lifecycle state and startup
43
+ * context.
44
+ *
45
+ * @param runtimeStartContext - Shared runtime start context.
46
+ * @param runtimeLifecycleState - Mutable lifecycle state for stop semantics.
47
+ * @returns Public run handle exposed to callers.
48
+ */
49
+ export function createRuntimeRunHandle(
50
+ runtimeStartContext: RuntimeStartContext,
51
+ runtimeLifecycleState: RuntimeMutableLifecycleState,
52
+ ): RuntimeRunHandle {
53
+ /**
54
+ * Stops the running demo and performs idempotent resource teardown.
55
+ *
56
+ * @returns Nothing.
57
+ */
58
+ const stop = () => {
59
+ // Step 1: Keep stop idempotent for repeated calls from multiple paths.
60
+ if (runtimeLifecycleState.stopped) {
61
+ return;
62
+ }
63
+
64
+ // Step 2: Flip the loop guard before releasing runtime resources.
65
+ runtimeLifecycleState.stopped = true;
66
+
67
+ // Step 3: Disconnect telemetry, notify the worker, and terminate it.
68
+ disconnectRuntimeTelemetry(runtimeStartContext.runtimeTelemetryState);
69
+ runtimeStartContext.evolutionWorker.postMessage({ type: 'stop' });
70
+ runtimeStartContext.evolutionWorker.terminate();
71
+
72
+ // Step 4: Resolve the externally visible completion promise.
73
+ runtimeLifecycleState.resolveDone?.();
74
+ };
75
+
76
+ /**
77
+ * Reports whether the runtime loop has been stopped.
78
+ *
79
+ * @returns `true` when the runtime has been stopped.
80
+ */
81
+ const isStopped = () => runtimeLifecycleState.stopped;
82
+
83
+ /**
84
+ * Reports whether the runtime loop is currently active.
85
+ *
86
+ * @returns `true` while the runtime remains active.
87
+ */
88
+ const isRunning = () => !isStopped();
89
+
90
+ // Step 1: Return the public lifecycle handle bound to the mutable state.
91
+ return {
92
+ stop,
93
+ isRunning,
94
+ done: runtimeLifecycleState.done,
95
+ };
96
+ }
@@ -0,0 +1,92 @@
1
+ import { createCanvasHost, updateStatsTableValues } from '../host/host';
2
+ import { createEvolutionWorker } from '../worker-channel/worker-channel';
3
+ import {
4
+ FLAPPY_BROWSER_ELITISM_COUNT,
5
+ FLAPPY_BROWSER_POPULATION_SIZE,
6
+ FLAPPY_HUD_INITIALIZING_TEXT,
7
+ FLAPPY_HUD_ZERO_TEXT,
8
+ } from '../../constants/constants';
9
+ import {
10
+ FLAPPY_NETWORK_INPUT_SIZE,
11
+ FLAPPY_NETWORK_OUTPUT_SIZE,
12
+ } from '../../constants/constants';
13
+ import { resolveRequiredRuntimeHostElement } from './runtime.errors';
14
+ import { createRuntimeTelemetryState } from './runtime.telemetry.service';
15
+ import type {
16
+ RuntimeContainerTarget,
17
+ RuntimeStartConfig,
18
+ RuntimeStartContext,
19
+ } from './runtime.types';
20
+
21
+ /**
22
+ * Runtime startup helpers for the Flappy Bird browser demo.
23
+ *
24
+ * These functions cover the pre-loop phase: resolve the host container, build a
25
+ * typed browser view, derive static config, create telemetry state, spawn the
26
+ * worker, and paint the initial HUD before evolution begins.
27
+ */
28
+
29
+ /**
30
+ * Creates the shared runtime startup dependencies used by the entry orchestration.
31
+ *
32
+ * This is the main bootstrap fold for browser startup. After it returns, the
33
+ * runtime has a host view, a worker channel, telemetry state, and a resolved
34
+ * configuration object.
35
+ *
36
+ * @param container - Element id or HTMLElement to host the demo.
37
+ * @returns Shared runtime start context for setup and loop launch.
38
+ */
39
+ export function createRuntimeStartContext(
40
+ container: RuntimeContainerTarget,
41
+ ): RuntimeStartContext {
42
+ // Step 1: Resolve and validate the runtime host element.
43
+ const hostElement = resolveRequiredRuntimeHostElement(container);
44
+
45
+ // Step 2: Construct the static runtime configuration values.
46
+ const config = createRuntimeStartConfig();
47
+
48
+ // Step 3: Create the browser host, telemetry state, and worker channel.
49
+ return {
50
+ config,
51
+ viewContext: createCanvasHost(hostElement),
52
+ runtimeTelemetryState: createRuntimeTelemetryState(),
53
+ evolutionWorker: createEvolutionWorker(),
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Paints the initial runtime HUD values before the evolution loop starts.
59
+ *
60
+ * The HUD is seeded immediately so the page communicates that startup is in
61
+ * progress rather than appearing blank while the worker and loop are booting.
62
+ *
63
+ * @param runtimeStartContext - Shared runtime start context.
64
+ * @returns Nothing.
65
+ */
66
+ export function initializeRuntimeHud(
67
+ runtimeStartContext: RuntimeStartContext,
68
+ ): void {
69
+ // Step 1: Publish the initializing state and empty bird counters.
70
+ updateStatsTableValues(runtimeStartContext.viewContext.statsValueByKey, {
71
+ status: FLAPPY_HUD_INITIALIZING_TEXT,
72
+ birds: `${FLAPPY_HUD_ZERO_TEXT}/${runtimeStartContext.config.populationSize}`,
73
+ });
74
+ }
75
+
76
+ /**
77
+ * Resolves the static runtime configuration used during browser startup.
78
+ *
79
+ * Centralizing the configuration fold here makes the runtime entry read as
80
+ * orchestration instead of constant plumbing.
81
+ *
82
+ * @returns Runtime configuration derived from shared constants.
83
+ */
84
+ function createRuntimeStartConfig(): RuntimeStartConfig {
85
+ // Step 1: Fold shared runtime constants into one descriptive config object.
86
+ return {
87
+ inputSize: FLAPPY_NETWORK_INPUT_SIZE,
88
+ outputSize: FLAPPY_NETWORK_OUTPUT_SIZE,
89
+ populationSize: FLAPPY_BROWSER_POPULATION_SIZE,
90
+ elitismCount: FLAPPY_BROWSER_ELITISM_COUNT,
91
+ };
92
+ }
@@ -13,8 +13,20 @@ import {
13
13
  } from '../../constants/constants';
14
14
  import type { PlaybackFrameStats } from '../browser-entry.types';
15
15
 
16
+ /**
17
+ * Runtime telemetry helpers for live browser HUD updates.
18
+ *
19
+ * The runtime tracks a small rolling window of operational signals such as HUD
20
+ * update frequency and minor GC activity. These are not part of the simulation
21
+ * itself; they are observability features for understanding how expensive the
22
+ * browser playback loop is.
23
+ */
24
+
16
25
  /**
17
26
  * Runtime telemetry mutable state used for rolling HUD metrics.
27
+ *
28
+ * The state keeps timestamp windows rather than pre-aggregated counters so the
29
+ * HUD can report smoothed recent rates instead of lifetime totals.
18
30
  */
19
31
  export interface RuntimeTelemetryState {
20
32
  hudUpdateTimestampsMs: number[];
@@ -25,6 +37,9 @@ export interface RuntimeTelemetryState {
25
37
  /**
26
38
  * Creates telemetry state and attaches optional minor-GC observer.
27
39
  *
40
+ * Instrumentation is feature-gated so the demo can run in a low-noise mode when
41
+ * telemetry is not desired.
42
+ *
28
43
  * @returns Initialized telemetry state.
29
44
  */
30
45
  export function createRuntimeTelemetryState(): RuntimeTelemetryState {
@@ -41,6 +56,9 @@ export function createRuntimeTelemetryState(): RuntimeTelemetryState {
41
56
  /**
42
57
  * Disconnects runtime telemetry observers.
43
58
  *
59
+ * This is part of runtime teardown and prevents instrumentation observers from
60
+ * lingering after the demo has stopped.
61
+ *
44
62
  * @param telemetryState - Runtime telemetry state.
45
63
  * @returns Nothing.
46
64
  */
@@ -53,6 +71,9 @@ export function disconnectRuntimeTelemetry(
53
71
  /**
54
72
  * Resolves default telemetry HUD values used before first playback updates.
55
73
  *
74
+ * The initial values make the instrumentation section self-describing even
75
+ * before the first playback frame arrives.
76
+ *
56
77
  * @returns Initial telemetry field values.
57
78
  */
58
79
  export function resolveInitialRuntimeTelemetryHudValues(): {
@@ -82,6 +103,9 @@ export function resolveInitialRuntimeTelemetryHudValues(): {
82
103
  /**
83
104
  * Resolves per-frame telemetry HUD values and updates rolling windows.
84
105
  *
106
+ * On each published playback frame, the runtime folds the new telemetry sample
107
+ * into rolling windows and emits human-readable HUD strings.
108
+ *
85
109
  * @param frameStats - Playback frame stats for the current frame.
86
110
  * @param telemetryState - Runtime telemetry mutable state.
87
111
  * @returns Formatted telemetry HUD values for this frame.
@@ -1,26 +1,14 @@
1
- import { createCanvasHost, updateStatsTableValues } from '../host/host';
2
- import {
3
- createRuntimeTelemetryState,
4
- disconnectRuntimeTelemetry,
5
- } from './runtime.telemetry.service';
6
- import { createEvolutionWorker } from '../worker-channel/worker-channel';
7
- import {
8
- FLAPPY_BROWSER_ELITISM_COUNT,
9
- FLAPPY_BROWSER_POPULATION_SIZE,
10
- DEFAULT_CONTAINER_ID,
11
- FLAPPY_HUD_INITIALIZING_TEXT,
12
- FLAPPY_HUD_ZERO_TEXT,
13
- } from '../../constants/constants';
1
+ import { DEFAULT_CONTAINER_ID } from '../../constants/constants';
2
+ import { installRuntimeBrowserGlobals } from './runtime.browser-globals.service';
3
+ import { launchRuntimeEvolution } from './runtime.evolution-launch.service';
14
4
  import {
15
- FLAPPY_NETWORK_INPUT_SIZE,
16
- FLAPPY_NETWORK_OUTPUT_SIZE,
17
- } from '../../constants/constants';
5
+ createRuntimeLifecycleState,
6
+ createRuntimeRunHandle,
7
+ } from './runtime.lifecycle.service';
18
8
  import {
19
- resolveRequiredRuntimeHostElement,
20
- resolveRuntimeHudErrorStatus,
21
- } from './runtime.errors';
22
- import { runRuntimeEvolutionLoop } from './runtime.evolution-loop.service';
23
- import { installRuntimeBrowserGlobals } from './runtime.browser-globals.service';
9
+ createRuntimeStartContext,
10
+ initializeRuntimeHud,
11
+ } from './runtime.startup.service';
24
12
  import type { RuntimeContainerTarget, RuntimeRunHandle } from './runtime.types';
25
13
 
26
14
  export type { RuntimeRunHandle as FlappyBirdRunHandle } from './runtime.types';
@@ -48,106 +36,28 @@ export type { RuntimeRunHandle as FlappyBirdRunHandle } from './runtime.types';
48
36
  export const start = async (
49
37
  container: RuntimeContainerTarget = DEFAULT_CONTAINER_ID,
50
38
  ): Promise<RuntimeRunHandle> => {
51
- // Step 1: Resolve and validate the host element where the demo will render.
52
- const hostElement = resolveRequiredRuntimeHostElement(container);
53
-
54
- /** Network input width used when rendering architecture labels. */
55
- const inputSize = FLAPPY_NETWORK_INPUT_SIZE;
56
- /** Network output width used when rendering architecture labels. */
57
- const outputSize = FLAPPY_NETWORK_OUTPUT_SIZE;
58
- /** Worker initialization population size for browser evolution/playback. */
59
- const populationSize = FLAPPY_BROWSER_POPULATION_SIZE;
60
- /** Worker initialization elitism count for browser evolution/playback. */
61
- const elitismCount = FLAPPY_BROWSER_ELITISM_COUNT;
62
-
63
- // Step 2: Create the browser host (canvas + HUD + network panel render hook).
64
- const { canvas, context, statsValueByKey, renderNetworkArchitecture } =
65
- createCanvasHost(hostElement);
66
-
67
- // Step 3: Attach optional runtime instrumentation observer when enabled.
68
- const runtimeTelemetryState = createRuntimeTelemetryState();
69
-
70
- // Step 4: Paint initial status before worker bootstrapping starts.
71
- updateStatsTableValues(statsValueByKey, {
72
- status: FLAPPY_HUD_INITIALIZING_TEXT,
73
- birds: `${FLAPPY_HUD_ZERO_TEXT}/${populationSize}`,
74
- });
75
-
76
- // Step 5: Create the evolution worker channel used by the orchestrator loop.
77
- const evolutionWorker = createEvolutionWorker();
78
-
79
- /** Mutable stop flag consulted by all loop and callback paths. */
80
- let stopped = false;
81
- /** Resolver captured for the externally exposed completion promise. */
82
- let resolveDone: (() => void) | undefined;
83
- /** Promise that resolves exactly once after stop/teardown is complete. */
84
- const done = new Promise<void>((resolve) => {
85
- resolveDone = resolve;
86
- });
87
-
88
- /**
89
- * Stops the running demo and performs idempotent resource teardown.
90
- *
91
- * Teardown includes:
92
- * - disconnecting instrumentation observers,
93
- * - notifying and terminating the worker,
94
- * - resolving the `done` promise exactly once.
95
- *
96
- * @returns Nothing.
97
- */
98
- const stop = () => {
99
- // Step 1: Keep stop idempotent for repeated calls from multiple paths.
100
- if (stopped) {
101
- return;
102
- }
103
-
104
- // Step 2: Flip loop guard first so no new async work starts.
105
- stopped = true;
106
-
107
- // Step 3: Release runtime resources in deterministic order.
108
- disconnectRuntimeTelemetry(runtimeTelemetryState);
109
- evolutionWorker.postMessage({ type: 'stop' });
110
- evolutionWorker.terminate();
111
-
112
- // Step 4: Resolve external completion handle.
113
- resolveDone?.();
114
- };
115
-
116
- /**
117
- * Reports whether the demo loop has been stopped.
118
- *
119
- * @returns `true` when stopped.
120
- */
121
- const isStopped = () => stopped;
122
-
123
- /**
124
- * Reports whether the demo loop is currently active.
125
- *
126
- * @returns `true` when not stopped.
127
- */
128
- const isRunning = () => !stopped;
129
-
130
- // Step 6: Start orchestration loop and route unexpected errors to HUD + teardown.
131
- void runRuntimeEvolutionLoop({
132
- evolutionWorker,
133
- canvas,
134
- context,
135
- statsValueByKey,
136
- renderNetworkArchitecture,
137
- populationSize,
138
- elitismCount,
139
- inputSize,
140
- outputSize,
141
- runtimeTelemetryState,
142
- isStopped,
143
- }).catch((error: unknown) => {
144
- updateStatsTableValues(statsValueByKey, {
145
- status: resolveRuntimeHudErrorStatus(error),
146
- });
147
- stop();
148
- });
149
-
150
- return { stop, isRunning, done };
39
+ // Step 1: Resolve the runtime view, worker, telemetry, and static config.
40
+ const runtimeStartContext = createRuntimeStartContext(container);
41
+
42
+ // Step 2: Paint the initial HUD state before evolution bootstrapping starts.
43
+ initializeRuntimeHud(runtimeStartContext);
44
+
45
+ // Step 3: Create lifecycle state and externally exposed run-handle methods.
46
+ const runtimeLifecycleState = createRuntimeLifecycleState();
47
+ const runtimeRunHandle = createRuntimeRunHandle(
48
+ runtimeStartContext,
49
+ runtimeLifecycleState,
50
+ );
51
+
52
+ // Step 4: Launch the runtime evolution loop with error-to-HUD routing.
53
+ launchRuntimeEvolution(
54
+ runtimeStartContext,
55
+ runtimeLifecycleState,
56
+ runtimeRunHandle.stop,
57
+ );
58
+
59
+ // Step 5: Return the public lifecycle controls to the caller.
60
+ return runtimeRunHandle;
151
61
  };
152
62
 
153
63
  installRuntimeBrowserGlobals(start);
@@ -1,19 +1,84 @@
1
+ import { createCanvasHost } from '../host/host';
1
2
  import type {
2
3
  FlappyBirdRunHandle,
3
4
  RuntimeWindow,
4
5
  } from '../browser-entry.types';
6
+ import type { RuntimeTelemetryState } from './runtime.telemetry.service';
7
+
8
+ /**
9
+ * Core runtime contracts for the Flappy Bird browser demo.
10
+ *
11
+ * The runtime boundary is where the browser-side application comes together:
12
+ * DOM host setup, worker creation, telemetry wiring, lifecycle control, and the
13
+ * configuration passed into the evolution loop.
14
+ */
5
15
 
6
16
  /**
7
17
  * Public run handle returned by the browser runtime entrypoint.
18
+ *
19
+ * The handle is intentionally minimal so callers can treat the demo like a
20
+ * long-running process with start/stop/status semantics.
8
21
  */
9
22
  export type RuntimeRunHandle = FlappyBirdRunHandle;
10
23
 
11
24
  /**
12
25
  * Browser `window` extension shape used for global runtime wiring.
26
+ *
27
+ * This keeps the auto-start and compatibility globals typed without coupling
28
+ * the runtime modules directly to ad hoc window-property access.
13
29
  */
14
30
  export type RuntimeGlobalWindow = RuntimeWindow;
15
31
 
16
32
  /**
17
33
  * Container argument accepted by the browser runtime start function.
34
+ *
35
+ * Callers can either pass a host element directly or provide an element id for
36
+ * late resolution inside the runtime startup path.
18
37
  */
19
38
  export type RuntimeContainerTarget = string | HTMLElement;
39
+
40
+ /**
41
+ * Static runtime configuration resolved before the browser loop starts.
42
+ *
43
+ * These values define the high-level NEAT and network shape used for the whole
44
+ * browser session.
45
+ */
46
+ export interface RuntimeStartConfig {
47
+ inputSize: number;
48
+ outputSize: number;
49
+ populationSize: number;
50
+ elitismCount: number;
51
+ }
52
+
53
+ /**
54
+ * Browser host view handles used by the runtime entry orchestration.
55
+ *
56
+ * This is the typed bundle of canvas, HUD, and visualization handles returned
57
+ * by the host layer once the browser DOM has been prepared.
58
+ */
59
+ export type RuntimeHostViewContext = ReturnType<typeof createCanvasHost>;
60
+
61
+ /**
62
+ * Mutable lifecycle state used to coordinate stop semantics and completion.
63
+ *
64
+ * The runtime loop is asynchronous and long-lived, so the browser keeps a small
65
+ * shared lifecycle object for idempotent shutdown and completion signaling.
66
+ */
67
+ export interface RuntimeMutableLifecycleState {
68
+ stopped: boolean;
69
+ resolveDone?: () => void;
70
+ done: Promise<void>;
71
+ }
72
+
73
+ /**
74
+ * Shared runtime startup dependencies created before evolution begins.
75
+ *
76
+ * Once this context exists, the browser has everything it needs to launch the
77
+ * actual evolution/playback loop.
78
+ */
79
+ export interface RuntimeStartContext {
80
+ config: RuntimeStartConfig;
81
+ viewContext: RuntimeHostViewContext;
82
+ runtimeTelemetryState: RuntimeTelemetryState;
83
+ evolutionWorker: Worker;
84
+ }