@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.
- package/.github/agents/boundary-mapper.agent.md +31 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +31 -0
- package/.github/agents/solid-split.agent.md +143 -0
- package/.github/copilot-instructions.md +119 -0
- package/.github/skills/solid-split-playbook/SKILL.md +220 -0
- package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
- package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
- package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
- package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
- package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
- package/package.json +7 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
- package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
- package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
- package/plans/Memory_Optimization.md +3 -3
- package/plans/README.md +63 -0
- package/plans/Roadmap.md +15 -3
- package/plans/asciiMaze_SOLID_split.done.md +130 -0
- package/plans/flappy_bird_SOLID_split.done.md +67 -0
- package/scripts/analyze-trace.ts +590 -0
- package/scripts/assets/theme.css +221 -34
- package/scripts/copy-examples.mjs +9 -5
- package/scripts/export-onnx.mjs +3 -3
- package/scripts/generate-bench-tables.mjs +10 -10
- package/scripts/generate-bench-tables.ts +10 -10
- package/scripts/generate-docs.ts +1415 -449
- package/scripts/render-docs-html.ts +15 -8
- package/src/README.md +127 -222
- package/src/architecture/README.md +117 -184
- package/src/architecture/architect.ts +6 -0
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +49 -31
- package/src/architecture/network/activate/README.md +77 -77
- package/src/architecture/network/connect/README.md +15 -13
- package/src/architecture/network/deterministic/README.md +7 -7
- package/src/architecture/network/evolve/README.md +44 -44
- package/src/architecture/network/gating/README.md +20 -20
- package/src/architecture/network/genetic/README.md +51 -51
- package/src/architecture/network/mutate/README.md +97 -97
- package/src/architecture/network/network.types.ts +39 -0
- package/src/architecture/network/onnx/README.md +264 -264
- package/src/architecture/network/prune/README.md +39 -39
- package/src/architecture/network/remove/README.md +26 -26
- package/src/architecture/network/serialize/README.md +56 -56
- package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
- package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
- package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
- package/src/architecture/network/slab/README.md +61 -61
- package/src/architecture/network/standalone/README.md +24 -24
- package/src/architecture/network/stats/README.md +9 -9
- package/src/architecture/network/topology/README.md +46 -46
- package/src/architecture/network/training/README.md +21 -21
- package/src/architecture/network.ts +114 -10
- package/src/methods/README.md +9 -87
- package/src/multithreading/README.md +8 -77
- package/src/multithreading/workers/README.md +2 -2
- package/src/multithreading/workers/browser/README.md +0 -6
- package/src/multithreading/workers/node/README.md +0 -3
- package/src/neat/README.md +623 -568
- package/src/neat/neat.evolve.population.utils.ts +29 -5
- package/src/neat/neat.helpers.ts +16 -0
- package/src/neat/neat.topology-intent.utils.ts +160 -0
- package/src/utils/README.md +18 -18
- package/test/examples/asciiMaze/README.md +59 -59
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
- package/test/examples/asciiMaze/browser-entry/README.md +196 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
- package/test/examples/asciiMaze/browser-entry.ts +10 -576
- package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
- package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
- package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
- package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
- package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
- package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
- package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
- package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
- package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
- package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
- package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
- package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
- package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
- package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
- package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
- package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
- package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
- package/test/examples/asciiMaze/fitness.ts +2 -2
- package/test/examples/asciiMaze/fitness.types.ts +65 -0
- package/test/examples/asciiMaze/interfaces.ts +64 -1352
- package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
- package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
- package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
- package/test/examples/flappy_bird/README.md +193 -88
- package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
- package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
- package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
- package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
- package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
- package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
- package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
- package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
- package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
- package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
- package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
- package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
- package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
- package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
- package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
- package/test/examples/flappy_bird/constants/README.md +1163 -0
- package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
- package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
- package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
- package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
- package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
- package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
- package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/constants/constants.ts +6 -0
- package/test/examples/flappy_bird/environment/README.md +182 -0
- package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
- package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
- package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
- package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
- package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
- package/test/examples/flappy_bird/evaluation/README.md +155 -0
- package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
- package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
- package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
- package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
- package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
- package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
- package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
- package/test/examples/flappy_bird/index.ts +8 -2
- package/test/examples/flappy_bird/rng.ts +10 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
- package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
- package/test/examples/flappy_bird/trainer/README.md +676 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
- package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
- package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
- package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
- package/test/neat/neat.topology-intent.test.ts +129 -0
- package/test/network/network.topology-intent.test.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
- package/test/examples/flappy_bird/environment/environment.ts +0 -7
- package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
- package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# dashboardManager
|
|
2
|
+
|
|
3
|
+
## dashboardManager/dashboardManager.types.ts
|
|
4
|
+
|
|
5
|
+
### AsciiMazeComplexityStats
|
|
6
|
+
|
|
7
|
+
### AsciiMazeDetailedStats
|
|
8
|
+
|
|
9
|
+
Expanded telemetry details retained by the dashboard between redraws.
|
|
10
|
+
|
|
11
|
+
### AsciiMazeTelemetrySnapshot
|
|
12
|
+
|
|
13
|
+
Public telemetry snapshot surfaced to browser consumers.
|
|
14
|
+
|
|
15
|
+
### CurrentBestRecord
|
|
16
|
+
|
|
17
|
+
Latest best candidate used by live rendering and telemetry.
|
|
18
|
+
|
|
19
|
+
### DashboardArchiveFunction
|
|
20
|
+
|
|
21
|
+
`(args: unknown[]) => void`
|
|
22
|
+
|
|
23
|
+
### DashboardClearFunction
|
|
24
|
+
|
|
25
|
+
`() => void`
|
|
26
|
+
|
|
27
|
+
### DashboardHistoryState
|
|
28
|
+
|
|
29
|
+
Bounded numeric histories used for trends and exports.
|
|
30
|
+
|
|
31
|
+
### DashboardLogFunction
|
|
32
|
+
|
|
33
|
+
`(args: unknown[]) => void`
|
|
34
|
+
|
|
35
|
+
### DashboardManagerContext
|
|
36
|
+
|
|
37
|
+
Shared runtime context passed into dashboard services.
|
|
38
|
+
|
|
39
|
+
### DashboardManagerState
|
|
40
|
+
|
|
41
|
+
Mutable runtime state owned by one dashboard instance.
|
|
42
|
+
|
|
43
|
+
### DashboardManagerUpdateArgs
|
|
44
|
+
|
|
45
|
+
Input accepted by the update orchestration service.
|
|
46
|
+
|
|
47
|
+
### DashboardPresentationAdapter
|
|
48
|
+
|
|
49
|
+
Shared presentation adapter used by browser and non-browser hosts.
|
|
50
|
+
|
|
51
|
+
### DashboardScratchState
|
|
52
|
+
|
|
53
|
+
Reused scratch arrays to keep redraw allocations predictable.
|
|
54
|
+
|
|
55
|
+
### DashboardTelemetry
|
|
56
|
+
|
|
57
|
+
Raw telemetry shape received from NEAT dashboard integrations.
|
|
58
|
+
|
|
59
|
+
### DashboardTelemetryHook
|
|
60
|
+
|
|
61
|
+
`(payload: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardTelemetryPayload) => void`
|
|
62
|
+
|
|
63
|
+
### DashboardTelemetryPayload
|
|
64
|
+
|
|
65
|
+
Telemetry payload emitted through events, postMessage, and runtime hooks.
|
|
66
|
+
|
|
67
|
+
### MutationStatsMap
|
|
68
|
+
|
|
69
|
+
### NeatGenome
|
|
70
|
+
|
|
71
|
+
NEAT genome/network with runtime properties used by dashboard telemetry.
|
|
72
|
+
|
|
73
|
+
### NeatInstance
|
|
74
|
+
|
|
75
|
+
NEAT instance shape needed by dashboard helpers.
|
|
76
|
+
|
|
77
|
+
### NeatSpecies
|
|
78
|
+
|
|
79
|
+
NEAT species collection entry surface used by dashboard telemetry.
|
|
80
|
+
|
|
81
|
+
### NumericTelemetryMap
|
|
82
|
+
|
|
83
|
+
### OperatorStatsEntry
|
|
84
|
+
|
|
85
|
+
Operator stats entry from NEAT.
|
|
86
|
+
|
|
87
|
+
### RuntimeDashboardManager
|
|
88
|
+
|
|
89
|
+
Compatibility alias for older runtime-facing imports.
|
|
90
|
+
|
|
91
|
+
### SolvedMazeRecord
|
|
92
|
+
|
|
93
|
+
Stored solved-maze archive entry.
|
|
94
|
+
|
|
95
|
+
## dashboardManager/dashboardManager.ts
|
|
96
|
+
|
|
97
|
+
### dashboardManager
|
|
98
|
+
|
|
99
|
+
Public DashboardManager facade for the dedicated dashboardManager module boundary.
|
|
100
|
+
|
|
101
|
+
The folder now owns local contracts, constants, pure formatting helpers, and
|
|
102
|
+
stateful rendering and telemetry services. This facade keeps the established
|
|
103
|
+
class-based API stable while delegating the heavy work to focused helpers.
|
|
104
|
+
|
|
105
|
+
### DashboardManager
|
|
106
|
+
|
|
107
|
+
Rich ASCII maze dashboard used by browser and terminal example hosts.
|
|
108
|
+
|
|
109
|
+
#### getLastTelemetry
|
|
110
|
+
|
|
111
|
+
`() => import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").AsciiMazeTelemetrySnapshot`
|
|
112
|
+
|
|
113
|
+
Return the latest public telemetry snapshot, including rich detail history when available.
|
|
114
|
+
|
|
115
|
+
Returns: Latest dashboard telemetry snapshot.
|
|
116
|
+
|
|
117
|
+
#### logFunction
|
|
118
|
+
|
|
119
|
+
Optional log function exposed for engine-side safe-writer fallbacks.
|
|
120
|
+
|
|
121
|
+
#### redraw
|
|
122
|
+
|
|
123
|
+
`(currentMaze: string[], neat: unknown) => void`
|
|
124
|
+
|
|
125
|
+
Clear and repaint the live dashboard using the current best candidate and histories.
|
|
126
|
+
|
|
127
|
+
Parameters:
|
|
128
|
+
- `currentMaze` - - Maze currently shown in the live panel.
|
|
129
|
+
- `neat` - - Optional NEAT instance used to enrich stats.
|
|
130
|
+
|
|
131
|
+
#### reset
|
|
132
|
+
|
|
133
|
+
`() => void`
|
|
134
|
+
|
|
135
|
+
Clear archive, current best, and telemetry state so the instance can be reused.
|
|
136
|
+
|
|
137
|
+
#### update
|
|
138
|
+
|
|
139
|
+
`(maze: string[], result: import("test/examples/asciiMaze/interfaces").IMazeRunResult | undefined, network: import("test/examples/asciiMaze/interfaces").INetwork | null, generation: number, neatInstance: import("src/neat").default | undefined) => void`
|
|
140
|
+
|
|
141
|
+
Ingest one evolution update, refresh the live dashboard, and emit telemetry.
|
|
142
|
+
|
|
143
|
+
Parameters:
|
|
144
|
+
- `maze` - - Current maze layout.
|
|
145
|
+
- `result` - - Latest run result for the tracked candidate.
|
|
146
|
+
- `network` - - Candidate network used for the run.
|
|
147
|
+
- `generation` - - Current generation number.
|
|
148
|
+
- `neatInstance` - - Optional NEAT runtime used for advanced telemetry.
|
|
149
|
+
|
|
150
|
+
## dashboardManager/dashboardManager.services.ts
|
|
151
|
+
|
|
152
|
+
### applyDashboardUpdate
|
|
153
|
+
|
|
154
|
+
`(context: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerContext, args: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerUpdateArgs) => void`
|
|
155
|
+
|
|
156
|
+
Ingest one engine update, refresh the live view, and emit external telemetry.
|
|
157
|
+
|
|
158
|
+
Parameters:
|
|
159
|
+
- `context` - - Dashboard runtime context for state and output callbacks.
|
|
160
|
+
- `args` - - Latest update payload from the evolution engine.
|
|
161
|
+
|
|
162
|
+
### getDashboardLastTelemetry
|
|
163
|
+
|
|
164
|
+
`(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState) => import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").AsciiMazeTelemetrySnapshot`
|
|
165
|
+
|
|
166
|
+
Produce the latest public telemetry snapshot from current dashboard state.
|
|
167
|
+
|
|
168
|
+
Parameters:
|
|
169
|
+
- `state` - - Mutable dashboard state.
|
|
170
|
+
|
|
171
|
+
Returns: Public telemetry snapshot used by browser hosts.
|
|
172
|
+
|
|
173
|
+
### redrawDashboard
|
|
174
|
+
|
|
175
|
+
`(context: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerContext, currentMaze: string[], neat: unknown) => void`
|
|
176
|
+
|
|
177
|
+
Repaint the live dashboard from current state and refresh the detailed snapshot.
|
|
178
|
+
|
|
179
|
+
Parameters:
|
|
180
|
+
- `context` - - Dashboard runtime context for state and output callbacks.
|
|
181
|
+
- `currentMaze` - - Maze currently being evolved.
|
|
182
|
+
- `neat` - - Optional NEAT runtime instance used for detailed stats.
|
|
183
|
+
|
|
184
|
+
### resetDashboardState
|
|
185
|
+
|
|
186
|
+
`(state: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerState) => void`
|
|
187
|
+
|
|
188
|
+
Clear retained archive, best-candidate, and history state for a fresh run.
|
|
189
|
+
|
|
190
|
+
Parameters:
|
|
191
|
+
- `state` - - Mutable dashboard state to clear.
|
|
192
|
+
|
|
193
|
+
## dashboardManager/dashboardManager.constants.ts
|
|
194
|
+
|
|
195
|
+
### dashboardManager.constants
|
|
196
|
+
|
|
197
|
+
Shared sizing, formatting, and top-N limits for the ASCII maze dashboard.
|
|
198
|
+
|
|
199
|
+
These values are kept in one place so rendering, archive output, and
|
|
200
|
+
telemetry helpers stay visually and semantically aligned.
|
|
201
|
+
|
|
202
|
+
### DASHBOARD_MANAGER_CONSTANTS
|
|
203
|
+
|
|
204
|
+
## dashboardManager/dashboardManager.utils.ts
|
|
205
|
+
|
|
206
|
+
### buildDashboardSparkline
|
|
207
|
+
|
|
208
|
+
`(series: number[], width: number) => string`
|
|
209
|
+
|
|
210
|
+
Convert the recent tail of a numeric series into a compact sparkline.
|
|
211
|
+
|
|
212
|
+
Parameters:
|
|
213
|
+
- `series` - - Numeric history in chronological order.
|
|
214
|
+
- `width` - - Maximum sample count included in the sparkline.
|
|
215
|
+
|
|
216
|
+
Returns: Unicode sparkline string.
|
|
217
|
+
|
|
218
|
+
### computeDashboardPathMetrics
|
|
219
|
+
|
|
220
|
+
`(maze: string[], result: Pick<import("test/examples/asciiMaze/interfaces").IMazeRunResult, "path" | "steps" | "fitness">) => { optimalLength: number; pathLength: number; efficiencyPct: string; overheadPct: string; uniqueCellsVisited: number; revisitedCells: number; totalSteps: number; fitnessValue: number; }`
|
|
221
|
+
|
|
222
|
+
Compute solved-path efficiency and visitation metrics for archive output.
|
|
223
|
+
|
|
224
|
+
Parameters:
|
|
225
|
+
- `maze` - - Maze layout containing start and exit markers.
|
|
226
|
+
- `result` - - Run result with path, steps, and fitness.
|
|
227
|
+
|
|
228
|
+
Returns: Derived path metrics used by solved archive formatting.
|
|
229
|
+
|
|
230
|
+
### deriveDashboardArchitecture
|
|
231
|
+
|
|
232
|
+
`(networkInstance: import("test/examples/asciiMaze/interfaces").INetwork | null | undefined) => string`
|
|
233
|
+
|
|
234
|
+
Infer a compact architecture string from a network-like runtime object.
|
|
235
|
+
|
|
236
|
+
Parameters:
|
|
237
|
+
- `networkInstance` - - Network instance from the maze example runtime.
|
|
238
|
+
|
|
239
|
+
Returns: Architecture string such as `6 - 8 - 4`, or `n/a` when unavailable.
|
|
240
|
+
|
|
241
|
+
### formatDashboardStat
|
|
242
|
+
|
|
243
|
+
`(label: string, value: string | number, colorLabel: string, colorValue: string, labelWidth: number) => string`
|
|
244
|
+
|
|
245
|
+
Format a single framed dashboard stat line with aligned label and value columns.
|
|
246
|
+
|
|
247
|
+
Parameters:
|
|
248
|
+
- `label` - - Descriptive stat label.
|
|
249
|
+
- `value` - - String or number value displayed after the label.
|
|
250
|
+
- `colorLabel` - - Color token applied to the label segment.
|
|
251
|
+
- `colorValue` - - Color token applied to the value segment.
|
|
252
|
+
- `labelWidth` - - Fixed width used for the label column.
|
|
253
|
+
|
|
254
|
+
Returns: Ready-to-log framed stat line.
|
|
255
|
+
|
|
256
|
+
### getDashboardMazeKey
|
|
257
|
+
|
|
258
|
+
`(maze: string[]) => string`
|
|
259
|
+
|
|
260
|
+
Build a lightweight dedupe key for a maze layout.
|
|
261
|
+
|
|
262
|
+
Parameters:
|
|
263
|
+
- `maze` - - Maze rows in display order.
|
|
264
|
+
|
|
265
|
+
Returns: Joined maze key used by the solved archive.
|
|
266
|
+
|
|
267
|
+
### sliceDashboardHistoryForExport
|
|
268
|
+
|
|
269
|
+
`(history: number[] | null | undefined) => number[]`
|
|
270
|
+
|
|
271
|
+
Return the recent export window of a bounded numeric history buffer.
|
|
272
|
+
|
|
273
|
+
Parameters:
|
|
274
|
+
- `history` - - History buffer in chronological order.
|
|
275
|
+
|
|
276
|
+
Returns: Independent tail slice suitable for telemetry export.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# dashboardManager/archive
|
|
2
|
+
|
|
3
|
+
## dashboardManager/archive/dashboardManager.archive.services.ts
|
|
4
|
+
|
|
5
|
+
### recordSolvedMaze
|
|
6
|
+
|
|
7
|
+
`(context: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardManagerContext, maze: string[], result: import("test/examples/asciiMaze/interfaces").IMazeRunResult, network: import("test/examples/asciiMaze/interfaces").INetwork, generation: number) => void`
|
|
8
|
+
|
|
9
|
+
Record and emit a newly solved maze archive block when the layout has not been seen before.
|
|
10
|
+
|
|
11
|
+
Parameters:
|
|
12
|
+
- `context` - - Dashboard runtime context containing archive state and callbacks.
|
|
13
|
+
- `maze` - - Solved maze layout.
|
|
14
|
+
- `result` - - Successful run result used for archive stats.
|
|
15
|
+
- `network` - - Network that solved the maze.
|
|
16
|
+
- `generation` - - Generation number at solve time.
|
|
@@ -0,0 +1,267 @@
|
|
|
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 {
|
|
7
|
+
DashboardManagerContext,
|
|
8
|
+
SolvedMazeRecord,
|
|
9
|
+
} from '../dashboardManager.types';
|
|
10
|
+
import {
|
|
11
|
+
buildDashboardSparkline,
|
|
12
|
+
computeDashboardPathMetrics,
|
|
13
|
+
deriveDashboardArchitecture,
|
|
14
|
+
getDashboardMazeKey,
|
|
15
|
+
} from '../dashboardManager.utils';
|
|
16
|
+
|
|
17
|
+
let cachedSolvedFooterBorder: string | null = null;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Record and emit a newly solved maze archive block when the layout has not been seen before.
|
|
21
|
+
*
|
|
22
|
+
* @param context - Dashboard runtime context containing archive state and callbacks.
|
|
23
|
+
* @param maze - Solved maze layout.
|
|
24
|
+
* @param result - Successful run result used for archive stats.
|
|
25
|
+
* @param network - Network that solved the maze.
|
|
26
|
+
* @param generation - Generation number at solve time.
|
|
27
|
+
*/
|
|
28
|
+
export function recordSolvedMaze(
|
|
29
|
+
context: DashboardManagerContext,
|
|
30
|
+
maze: string[],
|
|
31
|
+
result: IMazeRunResult,
|
|
32
|
+
network: INetwork,
|
|
33
|
+
generation: number,
|
|
34
|
+
): void {
|
|
35
|
+
const { state } = context;
|
|
36
|
+
const solvedMazeKey = getDashboardMazeKey(maze);
|
|
37
|
+
if (state.solvedMazeKeys.has(solvedMazeKey)) return;
|
|
38
|
+
|
|
39
|
+
const solvedRecord: SolvedMazeRecord = { maze, result, network, generation };
|
|
40
|
+
state.solvedMazes.push(solvedRecord);
|
|
41
|
+
state.solvedMazeKeys.add(solvedMazeKey);
|
|
42
|
+
appendSolvedToArchive(context, solvedRecord, state.solvedMazes.length);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function appendSolvedToArchive(
|
|
46
|
+
context: DashboardManagerContext,
|
|
47
|
+
solved: SolvedMazeRecord,
|
|
48
|
+
displayNumber: number,
|
|
49
|
+
): void {
|
|
50
|
+
if (!context.archiveFn) return;
|
|
51
|
+
|
|
52
|
+
const blockLines: string[] = [];
|
|
53
|
+
appendSolvedHeader(blockLines, solved, displayNumber);
|
|
54
|
+
appendSolvedSparklines(context, blockLines, solved.network);
|
|
55
|
+
appendSolvedMaze(blockLines, solved);
|
|
56
|
+
appendSolvedPathStats(context, blockLines, solved);
|
|
57
|
+
appendSolvedFooterAndEmit(context.archiveFn, blockLines);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function appendSolvedHeader(
|
|
61
|
+
blockLines: string[],
|
|
62
|
+
solved: SolvedMazeRecord,
|
|
63
|
+
displayNumber: number,
|
|
64
|
+
): void {
|
|
65
|
+
const rawFitness = solved.result?.fitness;
|
|
66
|
+
const formattedFitness =
|
|
67
|
+
typeof rawFitness === 'number' && Number.isFinite(rawFitness)
|
|
68
|
+
? rawFitness.toFixed(2)
|
|
69
|
+
: 'n/a';
|
|
70
|
+
const title = ` SOLVED #${Math.max(1, displayNumber)} (GEN ${solved.generation}) FITNESS ${formattedFitness} `;
|
|
71
|
+
const leftPaddingSize = Math.max(
|
|
72
|
+
0,
|
|
73
|
+
Math.floor((C.FRAME_INNER_WIDTH - title.length) / 2),
|
|
74
|
+
);
|
|
75
|
+
const rightPaddingSize = Math.max(
|
|
76
|
+
0,
|
|
77
|
+
C.FRAME_INNER_WIDTH - title.length - leftPaddingSize,
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
blockLines.push(
|
|
81
|
+
`${colors.blueCore}╔${NetworkVisualization.pad(
|
|
82
|
+
'═'.repeat(C.FRAME_INNER_WIDTH),
|
|
83
|
+
C.FRAME_INNER_WIDTH,
|
|
84
|
+
'═',
|
|
85
|
+
)}╗${colors.reset}`,
|
|
86
|
+
);
|
|
87
|
+
blockLines.push(
|
|
88
|
+
`${colors.blueCore}║${' '.repeat(leftPaddingSize)}${colors.orangeNeon}${title}${colors.blueCore}${' '.repeat(rightPaddingSize)}║${colors.reset}`,
|
|
89
|
+
);
|
|
90
|
+
blockLines.push(
|
|
91
|
+
`${colors.blueCore}║${NetworkVisualization.pad(' ', C.FRAME_INNER_WIDTH, ' ')}║${colors.reset}`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function appendSolvedSparklines(
|
|
96
|
+
context: DashboardManagerContext,
|
|
97
|
+
blockLines: string[],
|
|
98
|
+
network?: INetwork | null,
|
|
99
|
+
): void {
|
|
100
|
+
const pushIfPresent = (label: string, value: string | null | undefined) => {
|
|
101
|
+
if (!value) return;
|
|
102
|
+
blockLines.push(
|
|
103
|
+
context.formatStat(
|
|
104
|
+
label,
|
|
105
|
+
value,
|
|
106
|
+
colors.neonSilver,
|
|
107
|
+
colors.cyanNeon,
|
|
108
|
+
C.SOLVED_LABEL_WIDTH,
|
|
109
|
+
),
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const architecture = deriveDashboardArchitecture(network);
|
|
114
|
+
if (architecture !== 'n/a') {
|
|
115
|
+
pushIfPresent(C.LABEL_ARCH, architecture.split(/\s*-\s*/).join(' <=> '));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const { histories } = context.state;
|
|
119
|
+
pushIfPresent(
|
|
120
|
+
'Fitness trend',
|
|
121
|
+
buildDashboardSparkline(histories.bestFitness, C.ARCHIVE_SPARK_WIDTH),
|
|
122
|
+
);
|
|
123
|
+
pushIfPresent(
|
|
124
|
+
'Nodes trend',
|
|
125
|
+
buildDashboardSparkline(histories.complexityNodes, C.ARCHIVE_SPARK_WIDTH),
|
|
126
|
+
);
|
|
127
|
+
pushIfPresent(
|
|
128
|
+
'Conns trend',
|
|
129
|
+
buildDashboardSparkline(histories.complexityConns, C.ARCHIVE_SPARK_WIDTH),
|
|
130
|
+
);
|
|
131
|
+
pushIfPresent(
|
|
132
|
+
'Hypervol trend',
|
|
133
|
+
buildDashboardSparkline(histories.hypervolume, C.ARCHIVE_SPARK_WIDTH),
|
|
134
|
+
);
|
|
135
|
+
pushIfPresent(
|
|
136
|
+
'Progress trend',
|
|
137
|
+
buildDashboardSparkline(histories.progress, C.ARCHIVE_SPARK_WIDTH),
|
|
138
|
+
);
|
|
139
|
+
pushIfPresent(
|
|
140
|
+
'Species trend',
|
|
141
|
+
buildDashboardSparkline(histories.speciesCount, C.ARCHIVE_SPARK_WIDTH),
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
blockLines.push(
|
|
145
|
+
`${colors.blueCore}║${NetworkVisualization.pad(' ', C.FRAME_INNER_WIDTH, ' ')}${colors.blueCore}║${colors.reset}`,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function appendSolvedMaze(
|
|
150
|
+
blockLines: string[],
|
|
151
|
+
solved: Pick<SolvedMazeRecord, 'maze' | 'result'>,
|
|
152
|
+
): void {
|
|
153
|
+
const pathCoordinates = solved.result.path;
|
|
154
|
+
const endPosition = pathCoordinates?.at(-1) ?? [0, 0];
|
|
155
|
+
const visualization = MazeVisualization.visualizeMaze(
|
|
156
|
+
solved.maze,
|
|
157
|
+
endPosition as [number, number],
|
|
158
|
+
pathCoordinates,
|
|
159
|
+
);
|
|
160
|
+
const rawLines = Array.isArray(visualization)
|
|
161
|
+
? visualization
|
|
162
|
+
: visualization.split('\n');
|
|
163
|
+
|
|
164
|
+
for (const rawLine of rawLines) {
|
|
165
|
+
const paddedRow = NetworkVisualization.pad(
|
|
166
|
+
rawLine,
|
|
167
|
+
C.FRAME_INNER_WIDTH,
|
|
168
|
+
' ',
|
|
169
|
+
);
|
|
170
|
+
blockLines.push(
|
|
171
|
+
`${colors.blueCore}║${NetworkVisualization.pad(
|
|
172
|
+
paddedRow,
|
|
173
|
+
C.FRAME_INNER_WIDTH,
|
|
174
|
+
' ',
|
|
175
|
+
)}${colors.blueCore}║${colors.reset}`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function appendSolvedPathStats(
|
|
181
|
+
context: DashboardManagerContext,
|
|
182
|
+
blockLines: string[],
|
|
183
|
+
solved: Pick<SolvedMazeRecord, 'maze' | 'result'>,
|
|
184
|
+
): void {
|
|
185
|
+
const metrics = computeDashboardPathMetrics(solved.maze, solved.result);
|
|
186
|
+
blockLines.push(
|
|
187
|
+
context.formatStat(
|
|
188
|
+
C.LABEL_PATH_EFF,
|
|
189
|
+
`${metrics.optimalLength}/${metrics.pathLength} (${metrics.efficiencyPct}%)`,
|
|
190
|
+
colors.neonSilver,
|
|
191
|
+
colors.cyanNeon,
|
|
192
|
+
C.SOLVED_LABEL_WIDTH,
|
|
193
|
+
),
|
|
194
|
+
);
|
|
195
|
+
blockLines.push(
|
|
196
|
+
context.formatStat(
|
|
197
|
+
C.LABEL_PATH_OVER,
|
|
198
|
+
`${metrics.overheadPct}% longer than optimal`,
|
|
199
|
+
colors.neonSilver,
|
|
200
|
+
colors.cyanNeon,
|
|
201
|
+
C.SOLVED_LABEL_WIDTH,
|
|
202
|
+
),
|
|
203
|
+
);
|
|
204
|
+
blockLines.push(
|
|
205
|
+
context.formatStat(
|
|
206
|
+
C.LABEL_UNIQUE,
|
|
207
|
+
`${metrics.uniqueCellsVisited}`,
|
|
208
|
+
colors.neonSilver,
|
|
209
|
+
colors.cyanNeon,
|
|
210
|
+
C.SOLVED_LABEL_WIDTH,
|
|
211
|
+
),
|
|
212
|
+
);
|
|
213
|
+
blockLines.push(
|
|
214
|
+
context.formatStat(
|
|
215
|
+
C.LABEL_REVISITS,
|
|
216
|
+
`${metrics.revisitedCells} times`,
|
|
217
|
+
colors.neonSilver,
|
|
218
|
+
colors.cyanNeon,
|
|
219
|
+
C.SOLVED_LABEL_WIDTH,
|
|
220
|
+
),
|
|
221
|
+
);
|
|
222
|
+
blockLines.push(
|
|
223
|
+
context.formatStat(
|
|
224
|
+
C.LABEL_STEPS,
|
|
225
|
+
`${metrics.totalSteps}`,
|
|
226
|
+
colors.neonSilver,
|
|
227
|
+
colors.cyanNeon,
|
|
228
|
+
C.SOLVED_LABEL_WIDTH,
|
|
229
|
+
),
|
|
230
|
+
);
|
|
231
|
+
blockLines.push(
|
|
232
|
+
context.formatStat(
|
|
233
|
+
C.LABEL_FITNESS,
|
|
234
|
+
`${metrics.fitnessValue.toFixed(2)}`,
|
|
235
|
+
colors.neonSilver,
|
|
236
|
+
colors.cyanNeon,
|
|
237
|
+
C.SOLVED_LABEL_WIDTH,
|
|
238
|
+
),
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function appendSolvedFooterAndEmit(
|
|
243
|
+
archiveFn: (...args: unknown[]) => void,
|
|
244
|
+
blockLines: string[],
|
|
245
|
+
): void {
|
|
246
|
+
if (cachedSolvedFooterBorder === null) {
|
|
247
|
+
cachedSolvedFooterBorder = `${colors.blueCore}╚${NetworkVisualization.pad(
|
|
248
|
+
'═'.repeat(C.FRAME_INNER_WIDTH),
|
|
249
|
+
C.FRAME_INNER_WIDTH,
|
|
250
|
+
'═',
|
|
251
|
+
)}╝${colors.reset}`;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
blockLines.push(cachedSolvedFooterBorder);
|
|
255
|
+
try {
|
|
256
|
+
const archiveEmitter = archiveFn as (
|
|
257
|
+
payload: string,
|
|
258
|
+
options?: { prepend?: boolean },
|
|
259
|
+
) => void;
|
|
260
|
+
archiveEmitter(blockLines.join('\n'), { prepend: true });
|
|
261
|
+
} catch {
|
|
262
|
+
for (const lineValue of blockLines) {
|
|
263
|
+
archiveFn(lineValue);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
blockLines.length = 0;
|
|
267
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared sizing, formatting, and top-N limits for the ASCII maze dashboard.
|
|
3
|
+
*
|
|
4
|
+
* These values are kept in one place so rendering, archive output, and
|
|
5
|
+
* telemetry helpers stay visually and semantically aligned.
|
|
6
|
+
*/
|
|
7
|
+
export const DASHBOARD_MANAGER_CONSTANTS = {
|
|
8
|
+
HISTORY_MAX: 500,
|
|
9
|
+
FRAME_INNER_WIDTH: 148,
|
|
10
|
+
LEFT_PADDING: 7,
|
|
11
|
+
RIGHT_PADDING: 1,
|
|
12
|
+
CONTENT_WIDTH: 148 - 7 - 1,
|
|
13
|
+
STAT_LABEL_WIDTH: 28,
|
|
14
|
+
ARCHIVE_SPARK_WIDTH: 64,
|
|
15
|
+
GENERAL_SPARK_WIDTH: 64,
|
|
16
|
+
SOLVED_LABEL_WIDTH: 22,
|
|
17
|
+
HISTORY_EXPORT_WINDOW: 200,
|
|
18
|
+
SPARK_BLOCKS: Object.freeze(['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']),
|
|
19
|
+
DELTA_EPSILON: 1e-9,
|
|
20
|
+
TOP_OPERATOR_LIMIT: 6,
|
|
21
|
+
TOP_MUTATION_LIMIT: 8,
|
|
22
|
+
TOP_SPECIES_LIMIT: 5,
|
|
23
|
+
LAYER_INFER_LOOP_MULTIPLIER: 4,
|
|
24
|
+
LABEL_PATH_EFF: 'Path efficiency',
|
|
25
|
+
LABEL_PATH_OVER: 'Path overhead',
|
|
26
|
+
LABEL_UNIQUE: 'Unique cells visited',
|
|
27
|
+
LABEL_REVISITS: 'Cells revisited',
|
|
28
|
+
LABEL_STEPS: 'Steps',
|
|
29
|
+
LABEL_FITNESS: 'Fitness',
|
|
30
|
+
LABEL_ARCH: 'Architecture',
|
|
31
|
+
FRAME_SINGLE_LINE_CHAR: '═',
|
|
32
|
+
FRAME_BRIDGE_TOP: '╦════════════╦',
|
|
33
|
+
FRAME_BRIDGE_BOTTOM: '╩════════════╩',
|
|
34
|
+
EVOLVING_SECTION_LINE: '══════════════════════',
|
|
35
|
+
} as const;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AsciiMazeTelemetrySnapshot,
|
|
3
|
+
DashboardManagerContext,
|
|
4
|
+
DashboardManagerState,
|
|
5
|
+
DashboardManagerUpdateArgs,
|
|
6
|
+
} from './dashboardManager.types';
|
|
7
|
+
import { recordSolvedMaze } from './archive/dashboardManager.archive.services';
|
|
8
|
+
import { redrawDashboard as redrawDashboardLive } from './live/dashboardManager.live.services';
|
|
9
|
+
import {
|
|
10
|
+
emitTelemetryPayload,
|
|
11
|
+
getDashboardLastTelemetry as getDashboardLastTelemetrySnapshot,
|
|
12
|
+
updateTelemetryHistory,
|
|
13
|
+
} from './telemetry/dashboardManager.telemetry.services';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Repaint the live dashboard from current state and refresh the detailed snapshot.
|
|
17
|
+
*
|
|
18
|
+
* @param context - Dashboard runtime context for state and output callbacks.
|
|
19
|
+
* @param currentMaze - Maze currently being evolved.
|
|
20
|
+
* @param neat - Optional NEAT runtime instance used for detailed stats.
|
|
21
|
+
*/
|
|
22
|
+
export function redrawDashboard(
|
|
23
|
+
context: DashboardManagerContext,
|
|
24
|
+
currentMaze: string[],
|
|
25
|
+
neat?: unknown,
|
|
26
|
+
): void {
|
|
27
|
+
redrawDashboardLive(context, currentMaze, neat);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Ingest one engine update, refresh the live view, and emit external telemetry.
|
|
32
|
+
*
|
|
33
|
+
* @param context - Dashboard runtime context for state and output callbacks.
|
|
34
|
+
* @param args - Latest update payload from the evolution engine.
|
|
35
|
+
*/
|
|
36
|
+
export function applyDashboardUpdate(
|
|
37
|
+
context: DashboardManagerContext,
|
|
38
|
+
args: DashboardManagerUpdateArgs,
|
|
39
|
+
): void {
|
|
40
|
+
const { state } = context;
|
|
41
|
+
const { generation, maze, result, network, neatInstance, telemetryHook } =
|
|
42
|
+
args;
|
|
43
|
+
|
|
44
|
+
if (state.runStartTs == null) {
|
|
45
|
+
state.runStartTs = Date.now();
|
|
46
|
+
state.perfStart = globalThis.performance?.now?.() ?? state.runStartTs;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
state.lastUpdateTs = globalThis.performance?.now?.() ?? Date.now();
|
|
50
|
+
state.lastGeneration = generation;
|
|
51
|
+
|
|
52
|
+
if (result) {
|
|
53
|
+
state.currentBest = { result, network, generation };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (result?.success && network) {
|
|
57
|
+
recordSolvedMaze(context, maze, result, network, generation);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
updateTelemetryHistory(state, neatInstance);
|
|
61
|
+
redrawDashboardLive(context, maze, neatInstance);
|
|
62
|
+
emitTelemetryPayload(state, generation, telemetryHook);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Produce the latest public telemetry snapshot from current dashboard state.
|
|
67
|
+
*
|
|
68
|
+
* @param state - Mutable dashboard state.
|
|
69
|
+
* @returns Public telemetry snapshot used by browser hosts.
|
|
70
|
+
*/
|
|
71
|
+
export function getDashboardLastTelemetry(
|
|
72
|
+
state: DashboardManagerState,
|
|
73
|
+
): AsciiMazeTelemetrySnapshot {
|
|
74
|
+
return getDashboardLastTelemetrySnapshot(state);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Clear retained archive, best-candidate, and history state for a fresh run.
|
|
79
|
+
*
|
|
80
|
+
* @param state - Mutable dashboard state to clear.
|
|
81
|
+
*/
|
|
82
|
+
export function resetDashboardState(state: DashboardManagerState): void {
|
|
83
|
+
state.solvedMazes = [];
|
|
84
|
+
state.solvedMazeKeys.clear();
|
|
85
|
+
state.currentBest = null;
|
|
86
|
+
state.lastTelemetry = null;
|
|
87
|
+
state.lastBestFitness = null;
|
|
88
|
+
state.lastDetailedStats = null;
|
|
89
|
+
state.runStartTs = null;
|
|
90
|
+
state.perfStart = null;
|
|
91
|
+
state.lastGeneration = null;
|
|
92
|
+
state.lastUpdateTs = null;
|
|
93
|
+
state.histories.bestFitness = [];
|
|
94
|
+
state.histories.complexityNodes = [];
|
|
95
|
+
state.histories.complexityConns = [];
|
|
96
|
+
state.histories.hypervolume = [];
|
|
97
|
+
state.histories.progress = [];
|
|
98
|
+
state.histories.speciesCount = [];
|
|
99
|
+
state.scratch.scores.length = 0;
|
|
100
|
+
state.scratch.speciesSizes.length = 0;
|
|
101
|
+
state.scratch.operatorStats.length = 0;
|
|
102
|
+
state.scratch.mutationEntries.length = 0;
|
|
103
|
+
}
|