@reicek/neataptic-ts 0.1.21 → 0.1.22

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 (223) hide show
  1. package/.github/agents/boundary-mapper.agent.md +29 -0
  2. package/.github/agents/docs-scout.agent.md +29 -0
  3. package/.github/agents/plan-scout.agent.md +29 -0
  4. package/.github/agents/solid-split.agent.md +138 -0
  5. package/.github/copilot-instructions.md +103 -0
  6. package/package.json +6 -3
  7. package/plans/ES2023 migration +13 -8
  8. package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
  9. package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
  10. package/plans/Memory_Optimization.md +3 -3
  11. package/plans/README.md +63 -0
  12. package/plans/Roadmap.md +15 -3
  13. package/plans/asciiMaze_SOLID_split.done.md +130 -0
  14. package/plans/flappy_bird_SOLID_split.done.md +67 -0
  15. package/scripts/assets/theme.css +221 -34
  16. package/scripts/copy-examples.mjs +9 -5
  17. package/scripts/export-onnx.mjs +3 -3
  18. package/scripts/generate-bench-tables.mjs +10 -10
  19. package/scripts/generate-bench-tables.ts +10 -10
  20. package/scripts/generate-docs.ts +1415 -449
  21. package/scripts/render-docs-html.ts +15 -8
  22. package/src/README.md +101 -223
  23. package/src/architecture/README.md +57 -185
  24. package/src/architecture/layer/README.md +38 -38
  25. package/src/architecture/network/README.md +33 -31
  26. package/src/architecture/network/activate/README.md +77 -77
  27. package/src/architecture/network/connect/README.md +15 -13
  28. package/src/architecture/network/deterministic/README.md +7 -7
  29. package/src/architecture/network/evolve/README.md +44 -44
  30. package/src/architecture/network/gating/README.md +20 -20
  31. package/src/architecture/network/genetic/README.md +51 -51
  32. package/src/architecture/network/mutate/README.md +97 -97
  33. package/src/architecture/network/onnx/README.md +264 -264
  34. package/src/architecture/network/prune/README.md +39 -39
  35. package/src/architecture/network/remove/README.md +26 -26
  36. package/src/architecture/network/serialize/README.md +56 -56
  37. package/src/architecture/network/slab/README.md +61 -61
  38. package/src/architecture/network/standalone/README.md +24 -24
  39. package/src/architecture/network/stats/README.md +9 -9
  40. package/src/architecture/network/topology/README.md +46 -46
  41. package/src/architecture/network/training/README.md +21 -21
  42. package/src/methods/README.md +9 -87
  43. package/src/multithreading/README.md +8 -77
  44. package/src/multithreading/workers/README.md +2 -2
  45. package/src/multithreading/workers/browser/README.md +0 -6
  46. package/src/multithreading/workers/node/README.md +0 -3
  47. package/src/neat/README.md +562 -568
  48. package/src/utils/README.md +18 -18
  49. package/test/examples/asciiMaze/README.md +59 -59
  50. package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
  51. package/test/examples/asciiMaze/browser-entry/README.md +196 -0
  52. package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
  53. package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
  54. package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
  55. package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
  56. package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
  57. package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
  58. package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
  59. package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
  60. package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
  61. package/test/examples/asciiMaze/browser-entry.ts +10 -576
  62. package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
  63. package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
  64. package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
  65. package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
  66. package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
  67. package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
  68. package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
  69. package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
  70. package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
  71. package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
  72. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
  73. package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
  74. package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
  75. package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
  76. package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
  77. package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
  78. package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
  79. package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
  80. package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
  81. package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
  82. package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
  83. package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
  84. package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
  85. package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
  86. package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
  87. package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
  88. package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
  89. package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
  90. package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
  91. package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
  92. package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
  93. package/test/examples/asciiMaze/fitness.ts +2 -2
  94. package/test/examples/asciiMaze/fitness.types.ts +65 -0
  95. package/test/examples/asciiMaze/interfaces.ts +64 -1352
  96. package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
  97. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
  98. package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
  99. package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
  100. package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
  101. package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
  102. package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
  103. package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
  104. package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
  105. package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
  106. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
  107. package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
  108. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
  109. package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
  110. package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
  111. package/test/examples/flappy_bird/Trace-20260309T191949.json +24124 -0
  112. package/test/examples/flappy_bird/browser-entry/README.md +1129 -0
  113. package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
  114. package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +6 -399
  115. package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +1 -717
  116. package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
  117. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +15 -893
  118. package/test/examples/flappy_bird/browser-entry/host/README.md +307 -0
  119. package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
  120. package/test/examples/flappy_bird/browser-entry/host/host.ts +562 -6
  121. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +274 -0
  122. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +31 -0
  123. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +360 -0
  124. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +117 -0
  125. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +63 -0
  126. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +250 -0
  127. package/test/examples/flappy_bird/browser-entry/network-view/README.md +399 -0
  128. package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +255 -0
  129. package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +802 -7
  130. package/test/examples/flappy_bird/browser-entry/playback/README.md +684 -0
  131. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +277 -0
  132. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +770 -0
  133. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +178 -0
  134. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +107 -0
  135. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +518 -0
  136. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +117 -0
  137. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +233 -0
  138. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +211 -0
  139. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
  140. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +212 -0
  141. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +81 -0
  142. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
  143. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +62 -0
  144. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +244 -0
  145. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
  146. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +68 -0
  147. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
  148. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +310 -0
  149. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +92 -0
  150. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +272 -0
  151. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +39 -0
  152. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +493 -0
  153. package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
  154. package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +4 -0
  155. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +44 -0
  156. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +39 -122
  157. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +272 -0
  158. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +62 -0
  159. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
  160. package/test/examples/flappy_bird/browser-entry/playback/playback.ts +409 -8
  161. package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +4 -12
  162. package/test/examples/flappy_bird/browser-entry/runtime/README.md +235 -0
  163. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +45 -0
  164. package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +81 -0
  165. package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +74 -0
  166. package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
  167. package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +36 -0
  168. package/test/examples/flappy_bird/browser-entry/visualization/README.md +557 -0
  169. package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
  170. package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +957 -19
  171. package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +138 -3
  172. package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +3 -27
  173. package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +1 -23
  174. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +156 -0
  175. package/test/examples/flappy_bird/constants/README.md +1179 -0
  176. package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
  177. package/test/examples/flappy_bird/constants/constants.palette.ts +7 -0
  178. package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
  179. package/test/examples/flappy_bird/environment/README.md +143 -0
  180. package/test/examples/flappy_bird/environment/environment.observation.utils.ts +1 -19
  181. package/test/examples/flappy_bird/environment/environment.step.service.ts +3 -66
  182. package/test/examples/flappy_bird/evaluation/README.md +130 -0
  183. package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +1 -1
  184. package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +5 -375
  185. package/test/examples/flappy_bird/evaluation/rollout/README.md +291 -0
  186. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +30 -0
  187. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +58 -0
  188. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +310 -0
  189. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +56 -0
  190. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +368 -0
  191. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +618 -0
  192. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +7 -7
  193. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +364 -0
  194. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +14 -0
  195. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +4 -201
  196. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +184 -345
  197. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +291 -0
  198. package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +5 -0
  199. package/test/examples/flappy_bird/simulation-shared/README.md +417 -0
  200. package/test/examples/flappy_bird/simulation-shared/observation/README.md +183 -0
  201. package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +301 -0
  202. package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +9 -0
  203. package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +59 -0
  204. package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +5 -403
  205. package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +20 -6
  206. package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +23 -8
  207. package/test/examples/flappy_bird/trainer/README.md +563 -0
  208. package/test/examples/flappy_bird/trainer/evaluation/README.md +199 -0
  209. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +9 -0
  210. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +73 -0
  211. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +165 -0
  212. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +25 -0
  213. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +161 -0
  214. package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
  215. package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
  216. package/test/examples/flappy_bird/trainer/trainer.report.service.ts +126 -0
  217. package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
  218. package/test/examples/flappy_bird/trainer/trainer.ts +11 -553
  219. package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
  220. package/test/examples/flappy_bird/environment/environment.ts +0 -7
  221. package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
  222. package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
  223. package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
@@ -0,0 +1,14 @@
1
+ # dashboardManager/live
2
+
3
+ ## dashboardManager/live/dashboardManager.live.services.ts
4
+
5
+ ### redrawDashboard
6
+
7
+ `(context: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerContext, currentMaze: string[], neat: unknown) => void`
8
+
9
+ Repaint the live dashboard from current state and refresh the detailed snapshot.
10
+
11
+ Parameters:
12
+ - `context` - - Dashboard runtime context for state and output callbacks.
13
+ - `currentMaze` - - Maze currently being evolved.
14
+ - `neat` - - Optional NEAT runtime instance used for detailed stats.
@@ -0,0 +1,264 @@
1
+ import { colors } from '../../colors';
2
+ import type { IMazeRunResult, INetwork } from '../../interfaces';
3
+ import { MazeVisualization } from '../../mazeVisualization';
4
+ import { NetworkVisualization } from '../../networkVisualization';
5
+ import { DASHBOARD_MANAGER_CONSTANTS as C } from '../dashboardManager.constants';
6
+ import type { DashboardManagerContext } from '../dashboardManager.types';
7
+ import { createDetailedStatsSnapshot } from '../telemetry/dashboardManager.telemetry.services';
8
+
9
+ const int32ScratchPool: Int32Array[] = [];
10
+
11
+ /**
12
+ * Repaint the live dashboard from current state and refresh the detailed snapshot.
13
+ *
14
+ * @param context - Dashboard runtime context for state and output callbacks.
15
+ * @param currentMaze - Maze currently being evolved.
16
+ * @param neat - Optional NEAT runtime instance used for detailed stats.
17
+ */
18
+ export function redrawDashboard(
19
+ context: DashboardManagerContext,
20
+ currentMaze: string[],
21
+ neat?: unknown,
22
+ ): void {
23
+ context.state.lastUpdateTs = globalThis.performance?.now?.() ?? Date.now();
24
+ context.clearFn();
25
+ printTopFrame(context);
26
+ if (context.state.currentBest) {
27
+ printCurrentBestSection(context, currentMaze);
28
+ }
29
+ context.state.lastDetailedStats = createDetailedStatsSnapshot(
30
+ context.state,
31
+ neat,
32
+ );
33
+ context.logBlank();
34
+ }
35
+
36
+ function printTopFrame(context: DashboardManagerContext): void {
37
+ context.logFn(
38
+ `${colors.blueCore}╔${NetworkVisualization.pad(
39
+ C.FRAME_SINGLE_LINE_CHAR,
40
+ C.FRAME_INNER_WIDTH,
41
+ C.FRAME_SINGLE_LINE_CHAR,
42
+ )}╗${colors.reset}`,
43
+ );
44
+ context.logFn(
45
+ `${colors.blueCore}╚${NetworkVisualization.pad(
46
+ C.FRAME_BRIDGE_TOP,
47
+ C.FRAME_INNER_WIDTH,
48
+ C.FRAME_SINGLE_LINE_CHAR,
49
+ )}╝${colors.reset}`,
50
+ );
51
+
52
+ const uncoloredTemplate = '║ ASCII maze ║';
53
+ const remainingSpace = C.FRAME_INNER_WIDTH - uncoloredTemplate.length;
54
+ const leftPaddingCount = Math.max(0, Math.ceil(remainingSpace / 2)) + 1;
55
+ const rightPaddingCount = Math.max(0, remainingSpace - leftPaddingCount);
56
+ context.logFn(
57
+ `${colors.blueCore}${' '.repeat(leftPaddingCount)}║ ${colors.neonYellow}ASCII maze${colors.blueCore} ║${' '.repeat(rightPaddingCount)}${colors.reset}`,
58
+ );
59
+ context.logFn(
60
+ `${colors.blueCore}╔${NetworkVisualization.pad(
61
+ C.FRAME_BRIDGE_BOTTOM,
62
+ C.FRAME_INNER_WIDTH,
63
+ C.FRAME_SINGLE_LINE_CHAR,
64
+ )}╗${colors.reset}`,
65
+ );
66
+ }
67
+
68
+ function printCurrentBestSection(
69
+ context: DashboardManagerContext,
70
+ currentMaze: string[],
71
+ ): void {
72
+ const generation = context.state.currentBest?.generation ?? 0;
73
+ context.logFn(
74
+ `${colors.blueCore}╠${NetworkVisualization.pad(
75
+ C.EVOLVING_SECTION_LINE,
76
+ C.FRAME_INNER_WIDTH,
77
+ '═',
78
+ )}${colors.blueCore}╣${colors.reset}`,
79
+ );
80
+ context.logFn(
81
+ `${colors.blueCore}║${NetworkVisualization.pad(
82
+ `${colors.orangeNeon}EVOLVING (GEN ${generation})`,
83
+ C.FRAME_INNER_WIDTH,
84
+ ' ',
85
+ )}${colors.blueCore}║${colors.reset}`,
86
+ );
87
+ context.logFn(
88
+ `${colors.blueCore}╠${NetworkVisualization.pad(
89
+ C.EVOLVING_SECTION_LINE,
90
+ C.FRAME_INNER_WIDTH,
91
+ '═',
92
+ )}${colors.blueCore}╣${colors.reset}`,
93
+ );
94
+ context.logBlank();
95
+ printNetworkSummary(context);
96
+ printLiveMaze(context, currentMaze);
97
+ printLiveStats(context, currentMaze);
98
+ printProgressBar(context);
99
+ }
100
+
101
+ function printNetworkSummary(context: DashboardManagerContext): void {
102
+ context.logBlank();
103
+ const currentBest = context.state.currentBest;
104
+ if (currentBest?.network) {
105
+ context.logFn(
106
+ NetworkVisualization.visualizeNetworkSummary(currentBest.network),
107
+ );
108
+ } else {
109
+ context.logFn(
110
+ context.formatStat(
111
+ 'Architecture',
112
+ 'n/a',
113
+ colors.neonSilver,
114
+ colors.cyanNeon,
115
+ ),
116
+ );
117
+ }
118
+ context.logBlank();
119
+ }
120
+
121
+ function printLiveMaze(
122
+ context: DashboardManagerContext,
123
+ currentMaze: string[],
124
+ ): void {
125
+ const currentBest = context.state.currentBest;
126
+ if (!currentBest) {
127
+ context.logBlank();
128
+ return;
129
+ }
130
+
131
+ const endOfPathPosition = currentBest.result.path?.at(-1) ?? [0, 0];
132
+ const visualization = MazeVisualization.visualizeMaze(
133
+ currentMaze,
134
+ endOfPathPosition as readonly [number, number],
135
+ currentBest.result.path,
136
+ );
137
+ const visualizationLines = Array.isArray(visualization)
138
+ ? visualization
139
+ : visualization.split('\n');
140
+
141
+ context.logBlank();
142
+ for (const unpaddedRow of visualizationLines) {
143
+ const paddedRow = NetworkVisualization.pad(
144
+ unpaddedRow,
145
+ C.FRAME_INNER_WIDTH,
146
+ ' ',
147
+ );
148
+ context.logFn(
149
+ `${colors.blueCore}║${paddedRow}${colors.blueCore}║${colors.reset}`,
150
+ );
151
+ }
152
+ context.logBlank();
153
+ }
154
+
155
+ function printLiveStats(
156
+ context: DashboardManagerContext,
157
+ currentMaze: string[],
158
+ ): void {
159
+ context.logBlank();
160
+ const currentBest = context.state.currentBest;
161
+ if (!currentBest) {
162
+ context.logBlank();
163
+ return;
164
+ }
165
+
166
+ const scratch = rentInt32(3);
167
+ scratch[0] =
168
+ typeof currentBest.result?.fitness === 'number' &&
169
+ Number.isFinite(currentBest.result.fitness)
170
+ ? Math.round(currentBest.result.fitness * 100)
171
+ : 0;
172
+ scratch[1] = Number.isFinite(Number(currentBest.result?.steps ?? 0))
173
+ ? Number(currentBest.result.steps)
174
+ : 0;
175
+ scratch[2] = Number.isFinite(Number(currentBest.result?.progress ?? 0))
176
+ ? Math.round(Number(currentBest.result.progress) * 100)
177
+ : 0;
178
+
179
+ context.logFn(
180
+ context.formatStat(
181
+ 'Fitness',
182
+ (scratch[0] / 100).toFixed(2),
183
+ colors.neonSilver,
184
+ colors.cyanNeon,
185
+ C.SOLVED_LABEL_WIDTH,
186
+ ),
187
+ );
188
+ context.logFn(
189
+ context.formatStat(
190
+ 'Steps',
191
+ `${scratch[1]}`,
192
+ colors.neonSilver,
193
+ colors.cyanNeon,
194
+ C.SOLVED_LABEL_WIDTH,
195
+ ),
196
+ );
197
+ context.logFn(
198
+ context.formatStat(
199
+ 'Progress',
200
+ `${scratch[2]}%`,
201
+ colors.neonSilver,
202
+ colors.cyanNeon,
203
+ C.SOLVED_LABEL_WIDTH,
204
+ ),
205
+ );
206
+ if (currentBest.network) {
207
+ MazeVisualization.printMazeStats(
208
+ currentBest as {
209
+ result: IMazeRunResult;
210
+ network: INetwork;
211
+ generation: number;
212
+ },
213
+ currentMaze,
214
+ context.logFn,
215
+ );
216
+ }
217
+ releaseInt32(scratch);
218
+ context.logBlank();
219
+ }
220
+
221
+ function printProgressBar(context: DashboardManagerContext): void {
222
+ const emitFrameBlank = () =>
223
+ context.logFn(
224
+ `${colors.blueCore}║${NetworkVisualization.pad(
225
+ ' ',
226
+ C.FRAME_INNER_WIDTH,
227
+ ' ',
228
+ )}${colors.blueCore}║${colors.reset}`,
229
+ );
230
+
231
+ emitFrameBlank();
232
+ const rawProgressValue = context.state.currentBest?.result?.progress ?? 0;
233
+ const safeProgressFraction = Number.isFinite(Number(rawProgressValue))
234
+ ? Number(rawProgressValue)
235
+ : 0;
236
+ const progressLabel = `Progress to exit: ${MazeVisualization.displayProgressBar(
237
+ safeProgressFraction,
238
+ )}`;
239
+ context.logFn(
240
+ `${colors.blueCore}║${NetworkVisualization.pad(
241
+ ` ${colors.neonSilver}${progressLabel}${colors.reset}`,
242
+ C.FRAME_INNER_WIDTH,
243
+ ' ',
244
+ )}${colors.blueCore}║${colors.reset}`,
245
+ );
246
+ emitFrameBlank();
247
+ }
248
+
249
+ function rentInt32(requestedLength: number): Int32Array {
250
+ const pooled = int32ScratchPool.pop();
251
+ if (pooled && pooled.length >= requestedLength) {
252
+ return pooled.subarray(0, requestedLength) as Int32Array;
253
+ }
254
+ return new Int32Array(requestedLength);
255
+ }
256
+
257
+ function releaseInt32(buffer: Int32Array): void {
258
+ if (int32ScratchPool.length < 8) {
259
+ const isFullView =
260
+ buffer.byteOffset === 0 && buffer.byteLength === buffer.buffer.byteLength;
261
+ const pooledBuffer = isFullView ? buffer : new Int32Array(buffer.buffer);
262
+ int32ScratchPool.push(pooledBuffer);
263
+ }
264
+ }
@@ -0,0 +1,47 @@
1
+ # dashboardManager/telemetry
2
+
3
+ ## dashboardManager/telemetry/dashboardManager.telemetry.services.ts
4
+
5
+ ### createDetailedStatsSnapshot
6
+
7
+ `(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState, neat: unknown) => import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").AsciiMazeDetailedStats | null`
8
+
9
+ Build the rich telemetry detail snapshot shown in browser hooks and exported snapshots.
10
+
11
+ Parameters:
12
+ - `state` - - Mutable dashboard state with histories and current best candidate.
13
+ - `neat` - - Optional NEAT instance used for population-level telemetry.
14
+
15
+ Returns: Detailed telemetry snapshot or `null` when no data is available.
16
+
17
+ ### emitTelemetryPayload
18
+
19
+ `(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState, generation: number, telemetryHook: ((payload: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardTelemetryPayload) => void) | undefined) => void`
20
+
21
+ Emit the structured telemetry payload used by browser hosts and runtime hooks.
22
+
23
+ Parameters:
24
+ - `state` - - Mutable dashboard state used to assemble the payload.
25
+ - `generation` - - Current generation number.
26
+ - `telemetryHook` - - Optional runtime hook installed by the browser host.
27
+
28
+ ### getDashboardLastTelemetry
29
+
30
+ `(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState) => import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").AsciiMazeTelemetrySnapshot`
31
+
32
+ Produce the latest public telemetry snapshot from current dashboard state.
33
+
34
+ Parameters:
35
+ - `state` - - Mutable dashboard state.
36
+
37
+ Returns: Public telemetry snapshot used by browser hosts.
38
+
39
+ ### updateTelemetryHistory
40
+
41
+ `(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState, neatInstance: { getTelemetry?: (() => unknown[]) | undefined; } | undefined) => void`
42
+
43
+ Pull the latest NEAT telemetry snapshot and update bounded dashboard histories.
44
+
45
+ Parameters:
46
+ - `state` - - Mutable dashboard state that owns bounded histories.
47
+ - `neatInstance` - - Optional NEAT-like runtime exposing `getTelemetry()`.