@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
@@ -0,0 +1,196 @@
1
+ # browser-entry
2
+
3
+ ## browser-entry/browser-entry.types.ts
4
+
5
+ ### AsciiMazeRunHandle
6
+
7
+ Public lifecycle handle returned by the browser demo entrypoint.
8
+
9
+ ### BrowserEntryCurriculumContext
10
+
11
+ State and callbacks used by the curriculum runtime service.
12
+
13
+ ### BrowserEntryEvolutionSettings
14
+
15
+ Evolution settings used for a single procedural maze phase.
16
+
17
+ ### BrowserEntryHostElements
18
+
19
+ Resolved host elements used by logger, dashboard, and resize services.
20
+
21
+ ### BrowserEntryHostServices
22
+
23
+ Browser host services assembled for one running demo instance.
24
+
25
+ ### BrowserEntryStartFunction
26
+
27
+ `(container: string | HTMLElement | undefined, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions | undefined) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
28
+
29
+ Stable callable shape used by globals compatibility wiring.
30
+
31
+ ### BrowserEntryStartOptions
32
+
33
+ Options accepted by the browser-hosted ASCII Maze entrypoint.
34
+
35
+ ### BrowserEntryTelemetryHub
36
+
37
+ Lightweight telemetry hub contract shared between host and public handle.
38
+
39
+ ### RuntimeAbortSignal
40
+
41
+ Runtime AbortSignal shape used for older or polyfilled environments.
42
+
43
+ ### RuntimeAbortSignalConstructor
44
+
45
+ AbortSignal constructor shape with optional static composition helpers.
46
+
47
+ ### RuntimeWindow
48
+
49
+ Global namespace exposed for direct browser-script loading compatibility.
50
+
51
+ ## browser-entry/browser-entry.ts
52
+
53
+ ### browser-entry
54
+
55
+ Public browser entry facade for the ASCII Maze demo module boundary.
56
+
57
+ The folder now owns host bootstrap, runtime orchestration, globals
58
+ compatibility, and resize handling behind focused helpers. This facade keeps
59
+ the public API stable while presenting a small orchestration-first surface.
60
+
61
+ ### AsciiMazeRunHandle
62
+
63
+ Public lifecycle handle returned by the browser demo entrypoint.
64
+
65
+ ### BrowserEntryStartFunction
66
+
67
+ `(container: string | HTMLElement | undefined, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions | undefined) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
68
+
69
+ Stable callable shape used by globals compatibility wiring.
70
+
71
+ ### BrowserEntryStartOptions
72
+
73
+ Options accepted by the browser-hosted ASCII Maze entrypoint.
74
+
75
+ ### start
76
+
77
+ `(container: string | HTMLElement, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
78
+
79
+ ## browser-entry/browser-entry.services.ts
80
+
81
+ ### browser-entry.services
82
+
83
+ Compatibility facade for the dedicated browser-entry service modules.
84
+
85
+ The concrete implementations now live in focused files so callers can keep
86
+ importing from this stable boundary while internals evolve independently.
87
+
88
+ ### composeBrowserEntryAbortSignal
89
+
90
+ `(internalController: AbortController, externalSignal: AbortSignal | undefined) => AbortSignal`
91
+
92
+ ### createBrowserEntryEvolutionHostAdapter
93
+
94
+ `() => import("test/examples/asciiMaze/evolutionEngine/evolutionEngine.types").EvolutionHostAdapter`
95
+
96
+ ### createBrowserEntryHostServices
97
+
98
+ `(hostElements: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostServices`
99
+
100
+ ### installBrowserEntryGlobals
101
+
102
+ `(start: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartFunction) => void`
103
+
104
+ ### runBrowserEntryCurriculum
105
+
106
+ `(context: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryCurriculumContext) => void`
107
+
108
+ ## browser-entry/browser-entry.constants.ts
109
+
110
+ ### browser-entry.constants
111
+
112
+ Shared constants for the browser-hosted ASCII Maze demo lifecycle.
113
+
114
+ These values keep the browser entry facade declarative while the host,
115
+ resize, and curriculum services consume a single named configuration table.
116
+
117
+ ### BROWSER_ENTRY_CONSTANTS
118
+
119
+ ## browser-entry/browser-entry.host.services.ts
120
+
121
+ ### createBrowserEntryHostServices
122
+
123
+ `(hostElements: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostServices`
124
+
125
+ ### createTelemetryHub
126
+
127
+ `() => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryTelemetryHub<TTelemetry>`
128
+
129
+ Create a minimal telemetry hub backed by a Set of listeners.
130
+
131
+ Returns: A small hub optimized for browser demo listener counts.
132
+
133
+ ### installResizeRedraw
134
+
135
+ `(observeTarget: HTMLElement | null, runtimeDashboard: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardPresentationAdapter) => () => void`
136
+
137
+ Attach dashboard redraw behavior to host resizes and return a cleanup function.
138
+
139
+ Parameters:
140
+ - `observeTarget` - - Element whose width should trigger redraw checks.
141
+ - `runtimeDashboard` - - Shared dashboard presentation adapter with redraw support.
142
+
143
+ Returns: Cleanup function that removes active observers or listeners.
144
+
145
+ ### safelyRedrawDashboard
146
+
147
+ `(runtimeDashboard: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardPresentationAdapter) => void`
148
+
149
+ Safely request a dashboard redraw without letting host issues break the run.
150
+
151
+ Parameters:
152
+ - `runtimeDashboard` - - Shared dashboard presentation adapter with optional redraw support.
153
+
154
+ ## browser-entry/browser-entry.abort.services.ts
155
+
156
+ ### composeBrowserEntryAbortSignal
157
+
158
+ `(internalController: AbortController, externalSignal: AbortSignal | undefined) => AbortSignal`
159
+
160
+ ## browser-entry/browser-entry.globals.services.ts
161
+
162
+ ### createBrowserEntryEvolutionHostAdapter
163
+
164
+ `() => import("test/examples/asciiMaze/evolutionEngine/evolutionEngine.types").EvolutionHostAdapter`
165
+
166
+ ### installBrowserEntryGlobals
167
+
168
+ `(start: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartFunction) => void`
169
+
170
+ ## browser-entry/browser-entry.curriculum.services.ts
171
+
172
+ ### runBrowserEntryCurriculum
173
+
174
+ `(context: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryCurriculumContext) => void`
175
+
176
+ ## browser-entry/browser-entry.utils.ts
177
+
178
+ ### createBrowserEvolutionSettings
179
+
180
+ `(dimension: number) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryEvolutionSettings`
181
+
182
+ ### didSolveBrowserMaze
183
+
184
+ `(progress: unknown) => boolean`
185
+
186
+ ### getNextBrowserMazeDimension
187
+
188
+ `(currentDimension: number) => number`
189
+
190
+ ### resolveBrowserEntryHostElements
191
+
192
+ `(container: string | HTMLElement) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements`
193
+
194
+ ### scheduleBrowserEntryFrame
195
+
196
+ `(callback: () => void) => void`
@@ -0,0 +1,95 @@
1
+ import type {
2
+ RuntimeAbortSignal,
3
+ RuntimeAbortSignalConstructor,
4
+ } from './browser-entry.types';
5
+
6
+ /**
7
+ * Browser abort-composition service boundary for the ASCII Maze browser entry.
8
+ *
9
+ * This leaf module isolates runtime-safe signal composition so browser-entry
10
+ * orchestration can stay focused on lifecycle flow instead of platform quirks.
11
+ */
12
+
13
+ /**
14
+ * Compose an internal and external abort signal into one cooperative signal.
15
+ *
16
+ * @param internalController - Internal controller owned by the browser run handle.
17
+ * @param externalSignal - Optional caller-provided signal.
18
+ * @returns A signal that aborts when either source aborts.
19
+ */
20
+ export const composeBrowserEntryAbortSignal = (
21
+ internalController: AbortController,
22
+ externalSignal?: AbortSignal,
23
+ ): AbortSignal => {
24
+ if (!externalSignal) {
25
+ return internalController.signal;
26
+ }
27
+
28
+ const runtimeExternalSignal = externalSignal as RuntimeAbortSignal;
29
+ const internalSignal = internalController.signal;
30
+
31
+ switch (true) {
32
+ case !!runtimeExternalSignal.aborted:
33
+ return runtimeExternalSignal as unknown as AbortSignal;
34
+
35
+ case typeof (AbortSignal as unknown as RuntimeAbortSignalConstructor)
36
+ .any === 'function': {
37
+ try {
38
+ return (AbortSignal as unknown as RuntimeAbortSignalConstructor).any!([
39
+ runtimeExternalSignal as unknown as AbortSignal,
40
+ internalSignal,
41
+ ]);
42
+ } catch {
43
+ // Fall through to manual wiring when native composition is unavailable at runtime.
44
+ }
45
+ break;
46
+ }
47
+
48
+ default:
49
+ break;
50
+ }
51
+
52
+ try {
53
+ runtimeExternalSignal.addEventListener(
54
+ 'abort',
55
+ () => {
56
+ try {
57
+ internalController.abort();
58
+ } catch {
59
+ // Ignore duplicate or unsupported aborts.
60
+ }
61
+ },
62
+ { once: true },
63
+ );
64
+ } catch {
65
+ // Ignore event wiring failures in minimal DOM environments.
66
+ }
67
+
68
+ try {
69
+ runtimeExternalSignal.onabort = () => {
70
+ try {
71
+ internalController.abort();
72
+ } catch {
73
+ // Ignore duplicate or unsupported aborts.
74
+ }
75
+ };
76
+ } catch {
77
+ // Ignore environments that do not allow onabort assignment.
78
+ }
79
+
80
+ try {
81
+ queueMicrotask(() => {
82
+ if (runtimeExternalSignal.aborted) {
83
+ try {
84
+ internalController.abort();
85
+ } catch {
86
+ // Ignore duplicate or unsupported aborts.
87
+ }
88
+ }
89
+ });
90
+ } catch {
91
+ // Ignore environments that do not expose queueMicrotask.
92
+ }
93
+
94
+ return internalSignal;
95
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared constants for the browser-hosted ASCII Maze demo lifecycle.
3
+ *
4
+ * These values keep the browser entry facade declarative while the host,
5
+ * resize, and curriculum services consume a single named configuration table.
6
+ */
7
+ export const BROWSER_ENTRY_CONSTANTS = {
8
+ DEFAULT_CONTAINER_ID: 'ascii-maze-output',
9
+ RESIZE_WIDTH_THRESHOLD: 8,
10
+ RESIZE_DEBOUNCE_MS: 120,
11
+ AUTO_START_DELAY_MS: 20,
12
+ MIN_PROGRESS_TO_PASS: 90,
13
+ DEFAULT_MAX_STAGNANT_GENERATIONS: 50,
14
+ DEFAULT_MAX_GENERATIONS: 100,
15
+ PER_GENERATION_LOG_FREQUENCY: 1,
16
+ INITIAL_MAZE_DIMENSION: 8,
17
+ MAX_MAZE_DIMENSION: 40,
18
+ MAZE_DIMENSION_INCREMENT: 4,
19
+ AGENT_MAX_STEPS: 600,
20
+ POPULATION_SIZE: 20,
21
+ LAMARCKIAN_ITERATIONS: 4,
22
+ LAMARCKIAN_SAMPLE_SIZE: 12,
23
+ } as const;
@@ -0,0 +1,115 @@
1
+ import { EvolutionEngine } from '../evolutionEngine';
2
+ import { resolveMazeEvolutionPhaseOutcome } from '../evolutionEngine';
3
+ import type { INetwork } from '../interfaces';
4
+ import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
5
+ import type { BrowserEntryCurriculumContext } from './browser-entry.types';
6
+ import {
7
+ createBrowserEvolutionSettings,
8
+ getNextBrowserMazeDimension,
9
+ scheduleBrowserEntryFrame,
10
+ } from './browser-entry.utils';
11
+
12
+ /**
13
+ * Browser curriculum-runtime service boundary for the ASCII Maze browser entry.
14
+ *
15
+ * This module now owns browser-only curriculum progression concerns: dimension
16
+ * scheduling, frame pacing, and lifecycle completion. Evolution-phase result
17
+ * interpretation and winner carry-over refinement live behind the engine-owned
18
+ * curriculum helper so browser-entry stays focused on host runtime behavior.
19
+ */
20
+
21
+ /**
22
+ * Run the progressive browser curriculum across increasingly larger mazes.
23
+ *
24
+ * @param context - Runtime dashboard, cancellation, and completion callbacks for one browser session.
25
+ * @returns Nothing.
26
+ */
27
+ export const runBrowserEntryCurriculum = (
28
+ context: BrowserEntryCurriculumContext,
29
+ ): void => {
30
+ let currentDimension: number = C.INITIAL_MAZE_DIMENSION;
31
+ let previousBestNetwork: INetwork | undefined;
32
+
33
+ void runCurrentPhase();
34
+
35
+ async function runCurrentPhase(): Promise<void> {
36
+ if (context.isCancelled()) {
37
+ context.finish();
38
+ return;
39
+ }
40
+
41
+ const settings = createBrowserEvolutionSettings(currentDimension);
42
+ const mazeLayout = settings.mazeFactory();
43
+ let solved = false;
44
+
45
+ try {
46
+ const result = await EvolutionEngine.runMazeEvolution({
47
+ mazeConfig: { maze: mazeLayout },
48
+ agentSimConfig: { maxSteps: settings.agentMaxSteps },
49
+ evolutionAlgorithmConfig: {
50
+ allowRecurrent: true,
51
+ popSize: settings.popSize,
52
+ maxStagnantGenerations: settings.maxStagnantGenerations,
53
+ minProgressToPass: C.MIN_PROGRESS_TO_PASS,
54
+ maxGenerations: settings.maxGenerations,
55
+ autoPauseOnSolve: false,
56
+ stopOnlyOnSolve: false,
57
+ lamarckianIterations: settings.lamarckianIterations,
58
+ lamarckianSampleSize: settings.lamarckianSampleSize,
59
+ initialBestNetwork: previousBestNetwork,
60
+ },
61
+ reportingConfig: {
62
+ dashboardManager: context.dashboard,
63
+ hostAdapter: context.hostAdapter,
64
+ logEvery: C.PER_GENERATION_LOG_FREQUENCY,
65
+ label: `browser-procedural-${currentDimension}x${currentDimension}`,
66
+ paceEveryGeneration: true,
67
+ },
68
+ cancellation: { isCancelled: () => context.isCancelled() },
69
+ signal: context.combinedSignal,
70
+ });
71
+ const phaseOutcome = resolveMazeEvolutionPhaseOutcome(
72
+ result,
73
+ previousBestNetwork,
74
+ C.MIN_PROGRESS_TO_PASS,
75
+ );
76
+ const progress = phaseOutcome.progress;
77
+
78
+ previousBestNetwork = phaseOutcome.nextBestNetwork;
79
+ solved = phaseOutcome.solved;
80
+
81
+ try {
82
+ console.log(
83
+ '[asciiMaze] maze complete',
84
+ currentDimension,
85
+ 'solved?',
86
+ solved,
87
+ 'progress',
88
+ progress,
89
+ );
90
+ } catch {
91
+ // Ignore console failures in minimal or proxied environments.
92
+ }
93
+ } catch (error: unknown) {
94
+ console.error(
95
+ 'Error while running procedural maze',
96
+ currentDimension,
97
+ error,
98
+ );
99
+ }
100
+
101
+ if (
102
+ !context.isCancelled() &&
103
+ solved &&
104
+ currentDimension < C.MAX_MAZE_DIMENSION
105
+ ) {
106
+ currentDimension = getNextBrowserMazeDimension(currentDimension);
107
+ scheduleBrowserEntryFrame(() => {
108
+ void runCurrentPhase();
109
+ });
110
+ return;
111
+ }
112
+
113
+ context.finish();
114
+ }
115
+ };
@@ -0,0 +1,106 @@
1
+ import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
2
+ import type {
3
+ BrowserEntryStartFunction,
4
+ RuntimeWindow,
5
+ } from './browser-entry.types';
6
+ import type { EvolutionHostAdapter } from '../evolutionEngine/evolutionEngine.types';
7
+
8
+ /**
9
+ * Browser globals-compatibility service boundary for the ASCII Maze browser entry.
10
+ *
11
+ * This module isolates script-loader compatibility and guarded auto-start
12
+ * behavior so runtime orchestration can stay focused on session lifecycle.
13
+ */
14
+
15
+ /**
16
+ * Create the browser-owned engine host adapter used for pause polling and solve notifications.
17
+ *
18
+ * @returns Host adapter that keeps browser globals and DOM events out of engine internals.
19
+ */
20
+ export const createBrowserEntryEvolutionHostAdapter =
21
+ (): EvolutionHostAdapter => ({
22
+ isPauseRequested: (): boolean => {
23
+ if (typeof window === 'undefined') {
24
+ return false;
25
+ }
26
+
27
+ return (window as RuntimeWindow).asciiMazePaused === true;
28
+ },
29
+ handleStop: ({
30
+ reason,
31
+ maze,
32
+ completedGenerations,
33
+ progress,
34
+ requestHostPause,
35
+ }): void => {
36
+ if (typeof window === 'undefined') {
37
+ return;
38
+ }
39
+
40
+ const globalWindow = window as RuntimeWindow;
41
+
42
+ if (reason === 'solved' && requestHostPause) {
43
+ globalWindow.asciiMazePaused = true;
44
+ }
45
+
46
+ if (reason !== 'solved') {
47
+ return;
48
+ }
49
+
50
+ try {
51
+ window.dispatchEvent(
52
+ new CustomEvent('asciiMazeSolved', {
53
+ detail: {
54
+ maze,
55
+ generations: completedGenerations,
56
+ progress,
57
+ },
58
+ }),
59
+ );
60
+ } catch {
61
+ // Ignore CustomEvent dispatch failures in restricted browser runtimes.
62
+ }
63
+ },
64
+ });
65
+
66
+ /**
67
+ * Install browser globals and one-time auto-start compatibility hooks.
68
+ *
69
+ * @param start - Public browser entry function to expose on the window namespace.
70
+ * @returns Nothing.
71
+ */
72
+ export const installBrowserEntryGlobals = (
73
+ start: BrowserEntryStartFunction,
74
+ ): void => {
75
+ if (typeof window === 'undefined' || !(window as RuntimeWindow).document) {
76
+ return;
77
+ }
78
+
79
+ const globalWindow = window as RuntimeWindow;
80
+ globalWindow.asciiMaze = globalWindow.asciiMaze || {};
81
+ globalWindow.asciiMaze.start = start;
82
+
83
+ if (!globalWindow.asciiMazeStart) {
84
+ globalWindow.asciiMazeStart = (containerElement?: unknown) => {
85
+ console.warn(
86
+ '[asciiMaze] window.asciiMazeStart is deprecated; use import { start } ... or window.asciiMaze.start',
87
+ );
88
+ return start(containerElement as string | HTMLElement | undefined);
89
+ };
90
+ }
91
+
92
+ if (globalWindow.asciiMaze._autoStarted) {
93
+ return;
94
+ }
95
+
96
+ globalWindow.asciiMaze._autoStarted = true;
97
+ setTimeout(() => {
98
+ try {
99
+ if (document.getElementById(C.DEFAULT_CONTAINER_ID)) {
100
+ void start();
101
+ }
102
+ } catch {
103
+ // Ignore auto-start failures so browser embedding can recover manually.
104
+ }
105
+ }, C.AUTO_START_DELAY_MS);
106
+ };
@@ -0,0 +1,157 @@
1
+ import { BrowserTerminalUtility } from '../browserTerminalUtility';
2
+ import { createBrowserLogger } from '../browserLogger';
3
+ import { DashboardManager } from '../dashboardManager';
4
+ import type {
5
+ DashboardPresentationAdapter,
6
+ DashboardTelemetryPayload,
7
+ } from '../dashboardManager/dashboardManager.types';
8
+ import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
9
+ import type {
10
+ BrowserEntryHostElements,
11
+ BrowserEntryHostServices,
12
+ BrowserEntryTelemetryHub,
13
+ } from './browser-entry.types';
14
+
15
+ /**
16
+ * Browser host-service boundary for the ASCII Maze browser entry.
17
+ *
18
+ * This module owns the DOM-facing dashboard wiring, telemetry fan-out, and
19
+ * resize redraw behavior used by one browser-hosted ASCII Maze session.
20
+ */
21
+
22
+ /**
23
+ * Create the browser host services used by one ASCII Maze demo run.
24
+ *
25
+ * @param hostElements - Resolved host elements for live output, archive output, and resize observation.
26
+ * @returns Dashboard, telemetry hub, runtime dashboard adapter, and resize cleanup.
27
+ */
28
+ export const createBrowserEntryHostServices = (
29
+ hostElements: BrowserEntryHostElements,
30
+ ): BrowserEntryHostServices => {
31
+ const clearer = BrowserTerminalUtility.createTerminalClearer(
32
+ hostElements.liveElement ?? undefined,
33
+ );
34
+ const liveLogger = createBrowserLogger(hostElements.liveElement ?? undefined);
35
+ const archiveLogger = createBrowserLogger(
36
+ hostElements.archiveElement ?? undefined,
37
+ );
38
+ const dashboard = new DashboardManager(
39
+ clearer,
40
+ liveLogger as unknown as (...args: unknown[]) => void,
41
+ archiveLogger as unknown as (...args: unknown[]) => void,
42
+ );
43
+ const telemetryHub = createTelemetryHub<DashboardTelemetryPayload>();
44
+ const runtimeDashboard: DashboardPresentationAdapter = dashboard;
45
+
46
+ runtimeDashboard._telemetryHook = (telemetry: DashboardTelemetryPayload) => {
47
+ telemetryHub.dispatch(telemetry);
48
+ };
49
+
50
+ return {
51
+ dashboard,
52
+ runtimeDashboard,
53
+ telemetryHub,
54
+ disposeResizeHandling: installResizeRedraw(
55
+ hostElements.observeTarget,
56
+ runtimeDashboard,
57
+ ),
58
+ };
59
+ };
60
+
61
+ /**
62
+ * Create a minimal telemetry hub backed by a Set of listeners.
63
+ *
64
+ * @returns A small hub optimized for browser demo listener counts.
65
+ */
66
+ function createTelemetryHub<
67
+ TTelemetry extends Record<string, unknown>,
68
+ >(): BrowserEntryTelemetryHub<TTelemetry> {
69
+ const listeners = new Set<(payload: TTelemetry) => void>();
70
+
71
+ return {
72
+ add(listener: (payload: TTelemetry) => void): () => void {
73
+ listeners.add(listener);
74
+ return () => listeners.delete(listener);
75
+ },
76
+
77
+ dispatch(payload: TTelemetry): void {
78
+ const snapshot = Array.from(listeners);
79
+ for (const listener of snapshot) {
80
+ try {
81
+ listener(payload);
82
+ } catch {
83
+ // Ignore listener failures so telemetry never destabilizes evolution.
84
+ }
85
+ }
86
+ },
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Attach dashboard redraw behavior to host resizes and return a cleanup function.
92
+ *
93
+ * @param observeTarget - Element whose width should trigger redraw checks.
94
+ * @param runtimeDashboard - Shared dashboard presentation adapter with redraw support.
95
+ * @returns Cleanup function that removes active observers or listeners.
96
+ */
97
+ function installResizeRedraw(
98
+ observeTarget: HTMLElement | null,
99
+ runtimeDashboard: DashboardPresentationAdapter,
100
+ ): () => void {
101
+ if (!observeTarget) {
102
+ return () => {};
103
+ }
104
+
105
+ try {
106
+ if (typeof ResizeObserver !== 'undefined') {
107
+ let lastObservedWidth = observeTarget.clientWidth;
108
+ const resizeObserver = new ResizeObserver((entries) => {
109
+ for (const entry of entries) {
110
+ const width = entry.contentRect.width;
111
+ if (Math.abs(width - lastObservedWidth) > C.RESIZE_WIDTH_THRESHOLD) {
112
+ lastObservedWidth = width;
113
+ safelyRedrawDashboard(runtimeDashboard);
114
+ }
115
+ }
116
+ });
117
+ resizeObserver.observe(observeTarget);
118
+ return () => resizeObserver.disconnect();
119
+ }
120
+
121
+ let debounceTimer: number | undefined;
122
+ const handleResize = () => {
123
+ if (typeof debounceTimer === 'number') {
124
+ clearTimeout(debounceTimer);
125
+ }
126
+
127
+ debounceTimer = window.setTimeout(() => {
128
+ safelyRedrawDashboard(runtimeDashboard);
129
+ }, C.RESIZE_DEBOUNCE_MS);
130
+ };
131
+
132
+ window.addEventListener('resize', handleResize);
133
+ return () => {
134
+ window.removeEventListener('resize', handleResize);
135
+ if (typeof debounceTimer === 'number') {
136
+ clearTimeout(debounceTimer);
137
+ }
138
+ };
139
+ } catch {
140
+ return () => {};
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Safely request a dashboard redraw without letting host issues break the run.
146
+ *
147
+ * @param runtimeDashboard - Shared dashboard presentation adapter with optional redraw support.
148
+ */
149
+ function safelyRedrawDashboard(
150
+ runtimeDashboard: DashboardPresentationAdapter,
151
+ ): void {
152
+ try {
153
+ runtimeDashboard.redraw?.([], undefined);
154
+ } catch {
155
+ // Ignore redraw failures because they are presentation-only.
156
+ }
157
+ }