@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
|
@@ -1,13 +1,104 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import
|
|
1
|
+
import type Network from '../../../../../src/architecture/network';
|
|
2
|
+
import {
|
|
3
|
+
FLAPPY_FRAME_MONOSPACE_FONT,
|
|
4
|
+
FLAPPY_HEADER_CANVAS_HEIGHT_PX,
|
|
5
|
+
FLAPPY_HEADER_TITLE_TEXT,
|
|
6
|
+
FLAPPY_NEON_PALETTE,
|
|
7
|
+
FLAPPY_SCREEN_PADDING_PX,
|
|
8
|
+
FLAPPY_UI_CANVAS_INSET_SHADOW,
|
|
9
|
+
FLAPPY_UI_CONTENT_COLUMN_TOP_PADDING_PX,
|
|
10
|
+
FLAPPY_UI_DOUBLE_PANEL_BORDER,
|
|
11
|
+
FLAPPY_UI_NETWORK_CANVAS_BACKGROUND,
|
|
12
|
+
FLAPPY_UI_NETWORK_HOST_BACKGROUND,
|
|
13
|
+
FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX,
|
|
14
|
+
FLAPPY_UI_NETWORK_HOST_INITIAL_HEIGHT_PX,
|
|
15
|
+
FLAPPY_UI_NETWORK_HOST_INSET_PX,
|
|
16
|
+
FLAPPY_UI_OUTER_FRAME_BACKGROUND,
|
|
17
|
+
FLAPPY_UI_OUTER_FRAME_MIN_SIDE_PADDING_PX,
|
|
18
|
+
FLAPPY_UI_OUTER_FRAME_SIDE_PADDING_OFFSET_PX,
|
|
19
|
+
FLAPPY_UI_UNIFIED_INSET_SHADOW,
|
|
20
|
+
FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
|
|
21
|
+
FLAPPY_NETWORK_INPUT_SIZE,
|
|
22
|
+
FLAPPY_NETWORK_OUTPUT_SIZE,
|
|
23
|
+
} from '../../constants/constants';
|
|
24
|
+
import type {
|
|
25
|
+
FlappyStatsTableCells,
|
|
26
|
+
NetworkVisualizationHandle,
|
|
27
|
+
} from '../browser-entry.types';
|
|
28
|
+
import { renderStandaloneTitleBox } from '../browser-entry.text-frame.utils';
|
|
29
|
+
import {
|
|
30
|
+
drawNetworkVisualization,
|
|
31
|
+
resolveNetworkVisualizationHeightPx,
|
|
32
|
+
} from '../network-view/network-view';
|
|
33
|
+
import {
|
|
34
|
+
applyCanvasBackingSize,
|
|
35
|
+
resolveNetworkCanvasSizePx,
|
|
36
|
+
} from './host.canvas.service';
|
|
3
37
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
38
|
+
FLAPPY_HOST_PANEL_PADDING,
|
|
39
|
+
FLAPPY_HOST_PANEL_TRANSITION,
|
|
40
|
+
FLAPPY_HOST_STATS_SPLIT_GAP,
|
|
41
|
+
FLAPPY_HOST_TABLE_HOST_PADDING,
|
|
42
|
+
} from './host.constants';
|
|
43
|
+
import { resolveRequiredCanvas2dContext } from './host.dom.service';
|
|
44
|
+
import { installResponsiveViewportSizing } from './resize/host.resize.service';
|
|
45
|
+
import {
|
|
46
|
+
createAndAttachHostStatsTable,
|
|
47
|
+
updateStatsTableValues as updateHostStatsTableValues,
|
|
48
|
+
} from './host.stats.service';
|
|
49
|
+
import type { CanvasHostResult, HostStatsPartialValues } from './host.types';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Browser host assembly for the Flappy Bird demo UI.
|
|
53
|
+
*
|
|
54
|
+
* The host boundary is responsible for building the browser-side shell around
|
|
55
|
+
* the simulation: framed title, main canvas, stats panel, and network
|
|
56
|
+
* visualization panel. It does not run evolution itself; it prepares the stage
|
|
57
|
+
* on which the runtime loop renders.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
type HostVisualPrimitives = {
|
|
61
|
+
unifiedBorder: string;
|
|
62
|
+
unifiedInsetShadow: string;
|
|
63
|
+
sidePaddingPx: number;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
type HostLayoutElements = {
|
|
67
|
+
outerFrame: HTMLElement;
|
|
68
|
+
contentColumn: HTMLDivElement;
|
|
69
|
+
mainSplitContainer: HTMLDivElement;
|
|
70
|
+
statsContainer: HTMLDivElement;
|
|
71
|
+
statsSplitContainer: HTMLDivElement;
|
|
72
|
+
statsTableHost: HTMLDivElement;
|
|
73
|
+
networkCanvasHost: HTMLDivElement;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
type HostCanvasElements = {
|
|
77
|
+
headerCanvas: HTMLCanvasElement;
|
|
78
|
+
headerContext: CanvasRenderingContext2D;
|
|
79
|
+
canvas: HTMLCanvasElement;
|
|
80
|
+
context: CanvasRenderingContext2D;
|
|
81
|
+
networkCanvas: HTMLCanvasElement;
|
|
82
|
+
networkContext: CanvasRenderingContext2D;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
type HostNetworkVisualizationState = {
|
|
86
|
+
previousNetworkForVisualization: Network | undefined;
|
|
87
|
+
previousVisualizationInputSize: number;
|
|
88
|
+
previousVisualizationOutputSize: number;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
type HostNetworkVisualizationController = {
|
|
92
|
+
renderNetworkArchitecture: NetworkVisualizationHandle['renderNetworkArchitecture'];
|
|
93
|
+
resizeNetworkCanvasToHost: () => void;
|
|
94
|
+
redrawCurrentNetworkArchitecture: () => void;
|
|
95
|
+
};
|
|
7
96
|
|
|
8
97
|
/**
|
|
9
98
|
* Builds the browser demo host tree and returns rendering handles.
|
|
10
99
|
*
|
|
100
|
+
* This is the public host entrypoint used by the runtime startup path.
|
|
101
|
+
*
|
|
11
102
|
* @param containerElement - Root host container.
|
|
12
103
|
* @returns Canvas handles, stats cells and network render callback.
|
|
13
104
|
*/
|
|
@@ -17,9 +108,82 @@ export function createCanvasHost(
|
|
|
17
108
|
return createCanvasHostInternal(containerElement);
|
|
18
109
|
}
|
|
19
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Builds the browser demo host tree and returns rendering handles.
|
|
113
|
+
*
|
|
114
|
+
* The orchestration is deliberately step-shaped: clear old DOM, build layout,
|
|
115
|
+
* create canvases, wire resize behavior, render placeholders, then return the
|
|
116
|
+
* handles the runtime will mutate during execution.
|
|
117
|
+
*
|
|
118
|
+
* @param containerElement - Root host container.
|
|
119
|
+
* @returns Canvas handles, stats cells and network render callback.
|
|
120
|
+
*/
|
|
121
|
+
export function createCanvasHostInternal(
|
|
122
|
+
containerElement: HTMLElement,
|
|
123
|
+
): CanvasHostResult {
|
|
124
|
+
// Step 1: Reset the host container and resolve shared visual primitives.
|
|
125
|
+
resetHostContainer(containerElement);
|
|
126
|
+
const hostVisualPrimitives = resolveHostVisualPrimitives();
|
|
127
|
+
|
|
128
|
+
// Step 2: Create layout elements, canvases, and stats table state.
|
|
129
|
+
const hostLayoutElements = createHostLayoutElements(hostVisualPrimitives);
|
|
130
|
+
const hostCanvasElements = createHostCanvasElements(hostVisualPrimitives);
|
|
131
|
+
const statsValueByKey = createAndAttachHostStatsTable(
|
|
132
|
+
hostLayoutElements.statsTableHost,
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
// Step 3: Create reusable header and network visualization controllers.
|
|
136
|
+
const drawHeaderFrame = createHeaderFrameRenderer(
|
|
137
|
+
hostCanvasElements.headerCanvas,
|
|
138
|
+
hostCanvasElements.headerContext,
|
|
139
|
+
);
|
|
140
|
+
const hostNetworkVisualizationController =
|
|
141
|
+
createHostNetworkVisualizationController(
|
|
142
|
+
hostLayoutElements.networkCanvasHost,
|
|
143
|
+
hostCanvasElements.networkCanvas,
|
|
144
|
+
hostCanvasElements.networkContext,
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
// Step 4: Mount the host DOM tree in final order.
|
|
148
|
+
mountCanvasHostTree(
|
|
149
|
+
containerElement,
|
|
150
|
+
hostLayoutElements,
|
|
151
|
+
hostCanvasElements.headerCanvas,
|
|
152
|
+
hostCanvasElements.canvas,
|
|
153
|
+
hostCanvasElements.networkCanvas,
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
// Step 5: Install resize hooks that keep the header and network view in sync.
|
|
157
|
+
installCanvasHostResizeHooks(
|
|
158
|
+
hostCanvasElements.canvas,
|
|
159
|
+
hostLayoutElements,
|
|
160
|
+
hostCanvasElements.networkCanvas,
|
|
161
|
+
drawHeaderFrame,
|
|
162
|
+
hostNetworkVisualizationController,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
// Step 6: Render the initial header and placeholder network visualization.
|
|
166
|
+
renderInitialCanvasHostState(
|
|
167
|
+
drawHeaderFrame,
|
|
168
|
+
hostNetworkVisualizationController.renderNetworkArchitecture,
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
// Step 7: Return the public host handles used by the runtime.
|
|
172
|
+
return {
|
|
173
|
+
canvas: hostCanvasElements.canvas,
|
|
174
|
+
context: hostCanvasElements.context,
|
|
175
|
+
statsValueByKey,
|
|
176
|
+
renderNetworkArchitecture:
|
|
177
|
+
hostNetworkVisualizationController.renderNetworkArchitecture,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
20
181
|
/**
|
|
21
182
|
* Applies partial stat updates to the rendered stats table.
|
|
22
183
|
*
|
|
184
|
+
* The runtime writes HUD values incrementally, so the host exposes a narrow
|
|
185
|
+
* partial-update helper rather than requiring full table redraws.
|
|
186
|
+
*
|
|
23
187
|
* @param statsValueByKey - Lookup of stat keys to value cells.
|
|
24
188
|
* @param partialValues - Subset of values to write this tick.
|
|
25
189
|
* @returns Nothing.
|
|
@@ -28,5 +192,427 @@ export function updateStatsTableValues(
|
|
|
28
192
|
statsValueByKey: FlappyStatsTableCells,
|
|
29
193
|
partialValues: HostStatsPartialValues,
|
|
30
194
|
): void {
|
|
31
|
-
|
|
195
|
+
updateHostStatsTableValues(statsValueByKey, partialValues);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { updateStatsTableValues as updateStatsTableValuesInternal };
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Clears any previous runtime DOM before rebuilding the browser host tree.
|
|
202
|
+
*
|
|
203
|
+
* The demo rebuilds the host from scratch on each startup so repeated runs begin
|
|
204
|
+
* from a known clean DOM state.
|
|
205
|
+
*
|
|
206
|
+
* @param containerElement - Root host container.
|
|
207
|
+
* @returns Nothing.
|
|
208
|
+
*/
|
|
209
|
+
function resetHostContainer(containerElement: HTMLElement): void {
|
|
210
|
+
// Step 1: Remove any prior child content before rebuilding the host tree.
|
|
211
|
+
containerElement.innerHTML = '';
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Resolves shared border, shadow, and padding values for host assembly.
|
|
216
|
+
*
|
|
217
|
+
* Centralizing these primitives keeps the DOM-building code focused on layout
|
|
218
|
+
* structure instead of duplicating presentation constants everywhere.
|
|
219
|
+
*
|
|
220
|
+
* @returns Shared visual primitives reused across host sections.
|
|
221
|
+
*/
|
|
222
|
+
function resolveHostVisualPrimitives(): HostVisualPrimitives {
|
|
223
|
+
// Step 1: Resolve the responsive outer padding used by the host frame.
|
|
224
|
+
const sidePaddingPx = Math.max(
|
|
225
|
+
FLAPPY_UI_OUTER_FRAME_MIN_SIDE_PADDING_PX,
|
|
226
|
+
FLAPPY_SCREEN_PADDING_PX - FLAPPY_UI_OUTER_FRAME_SIDE_PADDING_OFFSET_PX,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
// Step 2: Return the shared border, shadow, and padding primitives.
|
|
230
|
+
return {
|
|
231
|
+
unifiedBorder: FLAPPY_UI_DOUBLE_PANEL_BORDER,
|
|
232
|
+
unifiedInsetShadow: FLAPPY_UI_UNIFIED_INSET_SHADOW,
|
|
233
|
+
sidePaddingPx,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Creates the host layout elements used to assemble the browser UI tree.
|
|
239
|
+
*
|
|
240
|
+
* This creates the structural DOM only. Canvases, stats content, and
|
|
241
|
+
* visualization wiring are layered on afterward.
|
|
242
|
+
*
|
|
243
|
+
* @param hostVisualPrimitives - Shared visual primitives for border and shadow styling.
|
|
244
|
+
* @returns Layout elements grouped by host responsibility.
|
|
245
|
+
*/
|
|
246
|
+
function createHostLayoutElements(
|
|
247
|
+
hostVisualPrimitives: HostVisualPrimitives,
|
|
248
|
+
): HostLayoutElements {
|
|
249
|
+
// Step 1: Create and style the outer frame shell.
|
|
250
|
+
const outerFrame = document.createElement('section');
|
|
251
|
+
outerFrame.style.width = '100%';
|
|
252
|
+
outerFrame.style.height = '100%';
|
|
253
|
+
outerFrame.style.boxSizing = 'border-box';
|
|
254
|
+
outerFrame.style.padding = `0 ${hostVisualPrimitives.sidePaddingPx}px ${hostVisualPrimitives.sidePaddingPx}px ${hostVisualPrimitives.sidePaddingPx}px`;
|
|
255
|
+
outerFrame.style.border = hostVisualPrimitives.unifiedBorder;
|
|
256
|
+
outerFrame.style.background = FLAPPY_UI_OUTER_FRAME_BACKGROUND;
|
|
257
|
+
outerFrame.style.boxShadow = hostVisualPrimitives.unifiedInsetShadow;
|
|
258
|
+
outerFrame.style.position = 'relative';
|
|
259
|
+
|
|
260
|
+
// Step 2: Create the top-level content and simulation split containers.
|
|
261
|
+
const contentColumn = document.createElement('div');
|
|
262
|
+
contentColumn.style.width = '100%';
|
|
263
|
+
contentColumn.style.height = '100%';
|
|
264
|
+
contentColumn.style.display = 'flex';
|
|
265
|
+
contentColumn.style.flexDirection = 'column';
|
|
266
|
+
contentColumn.style.gap = '0';
|
|
267
|
+
contentColumn.style.alignItems = 'stretch';
|
|
268
|
+
contentColumn.style.overflow = 'hidden';
|
|
269
|
+
contentColumn.style.paddingTop = `${FLAPPY_UI_CONTENT_COLUMN_TOP_PADDING_PX}px`;
|
|
270
|
+
|
|
271
|
+
const mainSplitContainer = document.createElement('div');
|
|
272
|
+
mainSplitContainer.style.width = '100%';
|
|
273
|
+
mainSplitContainer.style.flex = '1 1 0';
|
|
274
|
+
mainSplitContainer.style.minHeight = '0';
|
|
275
|
+
mainSplitContainer.style.display = 'flex';
|
|
276
|
+
mainSplitContainer.style.flexDirection = 'column';
|
|
277
|
+
mainSplitContainer.style.alignItems = 'stretch';
|
|
278
|
+
mainSplitContainer.style.gap = `${FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX}px`;
|
|
279
|
+
|
|
280
|
+
// Step 3: Create the stats panel and its inner split layout.
|
|
281
|
+
const statsContainer = document.createElement('div');
|
|
282
|
+
statsContainer.style.marginTop = '0';
|
|
283
|
+
statsContainer.style.boxSizing = 'border-box';
|
|
284
|
+
statsContainer.style.background = FLAPPY_NEON_PALETTE.hudPanelBackground;
|
|
285
|
+
statsContainer.style.border = hostVisualPrimitives.unifiedBorder;
|
|
286
|
+
statsContainer.style.boxShadow = hostVisualPrimitives.unifiedInsetShadow;
|
|
287
|
+
statsContainer.style.padding = FLAPPY_HOST_PANEL_PADDING;
|
|
288
|
+
statsContainer.style.overflow = 'hidden';
|
|
289
|
+
statsContainer.style.transition = FLAPPY_HOST_PANEL_TRANSITION;
|
|
290
|
+
statsContainer.style.minHeight = '0';
|
|
291
|
+
|
|
292
|
+
const statsSplitContainer = document.createElement('div');
|
|
293
|
+
statsSplitContainer.style.display = 'flex';
|
|
294
|
+
statsSplitContainer.style.flexDirection = 'row';
|
|
295
|
+
statsSplitContainer.style.alignItems = 'flex-start';
|
|
296
|
+
statsSplitContainer.style.gap = FLAPPY_HOST_STATS_SPLIT_GAP;
|
|
297
|
+
statsSplitContainer.style.width = '100%';
|
|
298
|
+
statsSplitContainer.style.boxSizing = 'border-box';
|
|
299
|
+
|
|
300
|
+
const statsTableHost = document.createElement('div');
|
|
301
|
+
statsTableHost.style.flex = '1 1 0';
|
|
302
|
+
statsTableHost.style.minHeight = '120px';
|
|
303
|
+
statsTableHost.style.minWidth = '0';
|
|
304
|
+
statsTableHost.style.overflow = 'hidden';
|
|
305
|
+
statsTableHost.style.boxSizing = 'border-box';
|
|
306
|
+
statsTableHost.style.border = hostVisualPrimitives.unifiedBorder;
|
|
307
|
+
statsTableHost.style.padding = FLAPPY_HOST_TABLE_HOST_PADDING;
|
|
308
|
+
|
|
309
|
+
// Step 4: Create the network panel host.
|
|
310
|
+
const networkCanvasHost = document.createElement('div');
|
|
311
|
+
networkCanvasHost.style.flex = '1 1 0';
|
|
312
|
+
networkCanvasHost.style.minWidth = '0';
|
|
313
|
+
networkCanvasHost.style.height = `${FLAPPY_UI_NETWORK_HOST_INITIAL_HEIGHT_PX}px`;
|
|
314
|
+
networkCanvasHost.style.background = FLAPPY_UI_NETWORK_HOST_BACKGROUND;
|
|
315
|
+
networkCanvasHost.style.boxSizing = 'border-box';
|
|
316
|
+
networkCanvasHost.style.border = hostVisualPrimitives.unifiedBorder;
|
|
317
|
+
networkCanvasHost.style.padding = `${FLAPPY_UI_NETWORK_HOST_INSET_PX / 2}px`;
|
|
318
|
+
networkCanvasHost.style.boxShadow = FLAPPY_UI_CANVAS_INSET_SHADOW;
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
outerFrame,
|
|
322
|
+
contentColumn,
|
|
323
|
+
mainSplitContainer,
|
|
324
|
+
statsContainer,
|
|
325
|
+
statsSplitContainer,
|
|
326
|
+
statsTableHost,
|
|
327
|
+
networkCanvasHost,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Creates the canvases and 2D contexts used by the host UI.
|
|
333
|
+
*
|
|
334
|
+
* The host manages three canvas surfaces with different jobs: a title/header
|
|
335
|
+
* frame, the main simulation view, and the side-panel network visualization.
|
|
336
|
+
*
|
|
337
|
+
* @param hostVisualPrimitives - Shared visual primitives for border and shadow styling.
|
|
338
|
+
* @returns Simulation, header, and network canvases with required contexts.
|
|
339
|
+
*/
|
|
340
|
+
function createHostCanvasElements(
|
|
341
|
+
hostVisualPrimitives: HostVisualPrimitives,
|
|
342
|
+
): HostCanvasElements {
|
|
343
|
+
// Step 1: Create the header canvas used by the framed title renderer.
|
|
344
|
+
const headerCanvas = document.createElement('canvas');
|
|
345
|
+
headerCanvas.width = 1;
|
|
346
|
+
headerCanvas.height = 1;
|
|
347
|
+
headerCanvas.style.width = '100%';
|
|
348
|
+
headerCanvas.style.height = `${FLAPPY_HEADER_CANVAS_HEIGHT_PX}px`;
|
|
349
|
+
headerCanvas.style.display = 'block';
|
|
350
|
+
headerCanvas.style.maxWidth = '100%';
|
|
351
|
+
headerCanvas.style.boxSizing = 'border-box';
|
|
352
|
+
headerCanvas.style.background = 'transparent';
|
|
353
|
+
const headerContext = resolveRequiredCanvas2dContext(
|
|
354
|
+
headerCanvas,
|
|
355
|
+
'Header canvas 2D context unavailable',
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
// Step 2: Create the main simulation canvas.
|
|
359
|
+
const canvas = document.createElement('canvas');
|
|
360
|
+
canvas.width = 1;
|
|
361
|
+
canvas.height = 1;
|
|
362
|
+
canvas.style.width = '100%';
|
|
363
|
+
canvas.style.height = '1px';
|
|
364
|
+
canvas.style.display = 'block';
|
|
365
|
+
canvas.style.maxWidth = '100%';
|
|
366
|
+
canvas.style.boxSizing = 'border-box';
|
|
367
|
+
canvas.style.flex = '0 0 auto';
|
|
368
|
+
canvas.style.alignSelf = 'flex-start';
|
|
369
|
+
canvas.style.imageRendering = 'pixelated';
|
|
370
|
+
canvas.style.background = FLAPPY_NEON_PALETTE.background;
|
|
371
|
+
canvas.style.border = hostVisualPrimitives.unifiedBorder;
|
|
372
|
+
canvas.style.boxShadow = FLAPPY_UI_CANVAS_INSET_SHADOW;
|
|
373
|
+
const context = resolveRequiredCanvas2dContext(
|
|
374
|
+
canvas,
|
|
375
|
+
'Canvas 2D context unavailable',
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
// Step 3: Create the network visualization canvas.
|
|
379
|
+
const networkCanvas = document.createElement('canvas');
|
|
380
|
+
networkCanvas.width = 1;
|
|
381
|
+
networkCanvas.height = 1;
|
|
382
|
+
networkCanvas.style.display = 'block';
|
|
383
|
+
networkCanvas.style.width = '100%';
|
|
384
|
+
networkCanvas.style.height = '100%';
|
|
385
|
+
networkCanvas.style.maxWidth = '100%';
|
|
386
|
+
networkCanvas.style.background = FLAPPY_UI_NETWORK_CANVAS_BACKGROUND;
|
|
387
|
+
networkCanvas.style.border = 'none';
|
|
388
|
+
networkCanvas.style.boxSizing = 'border-box';
|
|
389
|
+
const networkContext = resolveRequiredCanvas2dContext(
|
|
390
|
+
networkCanvas,
|
|
391
|
+
'Network canvas 2D context unavailable',
|
|
392
|
+
);
|
|
393
|
+
|
|
394
|
+
return {
|
|
395
|
+
headerCanvas,
|
|
396
|
+
headerContext,
|
|
397
|
+
canvas,
|
|
398
|
+
context,
|
|
399
|
+
networkCanvas,
|
|
400
|
+
networkContext,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Creates the reusable title-frame renderer for the header canvas.
|
|
406
|
+
*
|
|
407
|
+
* @param headerCanvas - Header canvas element.
|
|
408
|
+
* @param headerContext - Header canvas 2D context.
|
|
409
|
+
* @returns Callback that redraws the framed title.
|
|
410
|
+
*/
|
|
411
|
+
function createHeaderFrameRenderer(
|
|
412
|
+
headerCanvas: HTMLCanvasElement,
|
|
413
|
+
headerContext: CanvasRenderingContext2D,
|
|
414
|
+
): () => void {
|
|
415
|
+
/**
|
|
416
|
+
* Redraws the title box after syncing canvas backing size to display width.
|
|
417
|
+
*
|
|
418
|
+
* @returns Nothing.
|
|
419
|
+
*/
|
|
420
|
+
return () => {
|
|
421
|
+
// Step 1: Sync backing resolution to the current display width.
|
|
422
|
+
const displayWidthPx = Math.max(1, Math.floor(headerCanvas.clientWidth));
|
|
423
|
+
const displayHeightPx = FLAPPY_HEADER_CANVAS_HEIGHT_PX;
|
|
424
|
+
if (
|
|
425
|
+
headerCanvas.width !== displayWidthPx ||
|
|
426
|
+
headerCanvas.height !== displayHeightPx
|
|
427
|
+
) {
|
|
428
|
+
headerCanvas.width = displayWidthPx;
|
|
429
|
+
headerCanvas.height = displayHeightPx;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Step 2: Render the title box using the shared framed-text renderer.
|
|
433
|
+
renderStandaloneTitleBox({
|
|
434
|
+
context: headerContext,
|
|
435
|
+
widthPx: displayWidthPx,
|
|
436
|
+
heightPx: displayHeightPx,
|
|
437
|
+
titleText: FLAPPY_HEADER_TITLE_TEXT,
|
|
438
|
+
glyphColor: FLAPPY_NEON_PALETTE.hudPanelBorder,
|
|
439
|
+
font: FLAPPY_FRAME_MONOSPACE_FONT,
|
|
440
|
+
});
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Creates the network visualization renderer and redraw controller.
|
|
446
|
+
*
|
|
447
|
+
* @param networkCanvasHost - Host element wrapping the network canvas.
|
|
448
|
+
* @param networkCanvas - Network visualization canvas.
|
|
449
|
+
* @param networkContext - Network visualization 2D context.
|
|
450
|
+
* @returns Renderer and redraw callbacks for the network panel.
|
|
451
|
+
*/
|
|
452
|
+
function createHostNetworkVisualizationController(
|
|
453
|
+
networkCanvasHost: HTMLDivElement,
|
|
454
|
+
networkCanvas: HTMLCanvasElement,
|
|
455
|
+
networkContext: CanvasRenderingContext2D,
|
|
456
|
+
): HostNetworkVisualizationController {
|
|
457
|
+
const hostNetworkVisualizationState: HostNetworkVisualizationState = {
|
|
458
|
+
previousNetworkForVisualization: undefined,
|
|
459
|
+
previousVisualizationInputSize: FLAPPY_NETWORK_INPUT_SIZE,
|
|
460
|
+
previousVisualizationOutputSize: FLAPPY_NETWORK_OUTPUT_SIZE,
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Resizes the network canvas backing store to match the host element.
|
|
465
|
+
*
|
|
466
|
+
* @returns Nothing.
|
|
467
|
+
*/
|
|
468
|
+
const resizeNetworkCanvasToHost = (): void => {
|
|
469
|
+
// Step 1: Resolve the drawable network canvas bounds from the host panel.
|
|
470
|
+
const { widthPx, heightPx } = resolveNetworkCanvasSizePx(
|
|
471
|
+
networkCanvasHost,
|
|
472
|
+
FLAPPY_UI_NETWORK_HOST_INSET_PX,
|
|
473
|
+
);
|
|
474
|
+
|
|
475
|
+
// Step 2: Apply backing-store dimensions to the network canvas.
|
|
476
|
+
applyCanvasBackingSize(networkCanvas, widthPx, heightPx);
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
const renderNetworkArchitecture: NetworkVisualizationHandle['renderNetworkArchitecture'] =
|
|
480
|
+
(network, inputSize, outputSize) => {
|
|
481
|
+
// Step 1: Resolve preferred visualization height and lock the panel size.
|
|
482
|
+
resolveNetworkVisualizationHeightPx(network, inputSize, outputSize);
|
|
483
|
+
const fixedNetworkPanelHeightPx = FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX;
|
|
484
|
+
networkCanvasHost.dataset.preferredHeightPx = String(
|
|
485
|
+
fixedNetworkPanelHeightPx,
|
|
486
|
+
);
|
|
487
|
+
networkCanvasHost.style.height = `${fixedNetworkPanelHeightPx}px`;
|
|
488
|
+
|
|
489
|
+
// Step 2: Resize the canvas and persist the last rendered payload.
|
|
490
|
+
resizeNetworkCanvasToHost();
|
|
491
|
+
hostNetworkVisualizationState.previousNetworkForVisualization = network;
|
|
492
|
+
hostNetworkVisualizationState.previousVisualizationInputSize = inputSize;
|
|
493
|
+
hostNetworkVisualizationState.previousVisualizationOutputSize =
|
|
494
|
+
outputSize;
|
|
495
|
+
|
|
496
|
+
// Step 3: Draw the current network visualization payload.
|
|
497
|
+
drawNetworkVisualization(networkContext, network, inputSize, outputSize);
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Redraws the most recently rendered network visualization payload.
|
|
502
|
+
*
|
|
503
|
+
* @returns Nothing.
|
|
504
|
+
*/
|
|
505
|
+
const redrawCurrentNetworkArchitecture = (): void => {
|
|
506
|
+
// Step 1: Re-render the last known payload after external resize changes.
|
|
507
|
+
renderNetworkArchitecture(
|
|
508
|
+
hostNetworkVisualizationState.previousNetworkForVisualization,
|
|
509
|
+
hostNetworkVisualizationState.previousVisualizationInputSize,
|
|
510
|
+
hostNetworkVisualizationState.previousVisualizationOutputSize,
|
|
511
|
+
);
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
return {
|
|
515
|
+
renderNetworkArchitecture,
|
|
516
|
+
resizeNetworkCanvasToHost,
|
|
517
|
+
redrawCurrentNetworkArchitecture,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Mounts the completed host DOM tree into the container in final order.
|
|
523
|
+
*
|
|
524
|
+
* @param containerElement - Root host container.
|
|
525
|
+
* @param hostLayoutElements - Prepared layout containers.
|
|
526
|
+
* @param headerCanvas - Header title canvas.
|
|
527
|
+
* @param canvas - Main simulation canvas.
|
|
528
|
+
* @param networkCanvas - Network visualization canvas.
|
|
529
|
+
* @returns Nothing.
|
|
530
|
+
*/
|
|
531
|
+
function mountCanvasHostTree(
|
|
532
|
+
containerElement: HTMLElement,
|
|
533
|
+
hostLayoutElements: HostLayoutElements,
|
|
534
|
+
headerCanvas: HTMLCanvasElement,
|
|
535
|
+
canvas: HTMLCanvasElement,
|
|
536
|
+
networkCanvas: HTMLCanvasElement,
|
|
537
|
+
): void {
|
|
538
|
+
// Step 1: Mount the stats section and network panel into the stats container.
|
|
539
|
+
hostLayoutElements.networkCanvasHost.appendChild(networkCanvas);
|
|
540
|
+
hostLayoutElements.statsSplitContainer.appendChild(
|
|
541
|
+
hostLayoutElements.statsTableHost,
|
|
542
|
+
);
|
|
543
|
+
hostLayoutElements.statsSplitContainer.appendChild(
|
|
544
|
+
hostLayoutElements.networkCanvasHost,
|
|
545
|
+
);
|
|
546
|
+
hostLayoutElements.statsContainer.appendChild(
|
|
547
|
+
hostLayoutElements.statsSplitContainer,
|
|
548
|
+
);
|
|
549
|
+
|
|
550
|
+
// Step 2: Mount the header, simulation canvas, and stats area into the frame.
|
|
551
|
+
hostLayoutElements.contentColumn.appendChild(headerCanvas);
|
|
552
|
+
hostLayoutElements.mainSplitContainer.appendChild(canvas);
|
|
553
|
+
hostLayoutElements.mainSplitContainer.appendChild(
|
|
554
|
+
hostLayoutElements.statsContainer,
|
|
555
|
+
);
|
|
556
|
+
hostLayoutElements.contentColumn.appendChild(
|
|
557
|
+
hostLayoutElements.mainSplitContainer,
|
|
558
|
+
);
|
|
559
|
+
hostLayoutElements.outerFrame.appendChild(hostLayoutElements.contentColumn);
|
|
560
|
+
containerElement.appendChild(hostLayoutElements.outerFrame);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Installs responsive resize hooks for the simulation canvas and side panel.
|
|
565
|
+
*
|
|
566
|
+
* @param canvas - Simulation canvas.
|
|
567
|
+
* @param hostLayoutElements - Prepared layout containers.
|
|
568
|
+
* @param networkCanvas - Network visualization canvas.
|
|
569
|
+
* @param drawHeaderFrame - Callback that redraws the header title.
|
|
570
|
+
* @param hostNetworkVisualizationController - Network panel resize/redraw controller.
|
|
571
|
+
* @returns Nothing.
|
|
572
|
+
*/
|
|
573
|
+
function installCanvasHostResizeHooks(
|
|
574
|
+
canvas: HTMLCanvasElement,
|
|
575
|
+
hostLayoutElements: HostLayoutElements,
|
|
576
|
+
networkCanvas: HTMLCanvasElement,
|
|
577
|
+
drawHeaderFrame: () => void,
|
|
578
|
+
hostNetworkVisualizationController: HostNetworkVisualizationController,
|
|
579
|
+
): void {
|
|
580
|
+
// Step 1: Install responsive sizing and redraw hooks across host sections.
|
|
581
|
+
installResponsiveViewportSizing(
|
|
582
|
+
canvas,
|
|
583
|
+
hostLayoutElements.contentColumn,
|
|
584
|
+
hostLayoutElements.mainSplitContainer,
|
|
585
|
+
hostLayoutElements.statsContainer,
|
|
586
|
+
hostLayoutElements.statsSplitContainer,
|
|
587
|
+
hostLayoutElements.statsTableHost,
|
|
588
|
+
networkCanvas,
|
|
589
|
+
hostLayoutElements.networkCanvasHost,
|
|
590
|
+
() => {
|
|
591
|
+
drawHeaderFrame();
|
|
592
|
+
hostNetworkVisualizationController.resizeNetworkCanvasToHost();
|
|
593
|
+
hostNetworkVisualizationController.redrawCurrentNetworkArchitecture();
|
|
594
|
+
},
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Renders the initial header and placeholder network visualization state.
|
|
600
|
+
*
|
|
601
|
+
* @param drawHeaderFrame - Callback that redraws the header title.
|
|
602
|
+
* @param renderNetworkArchitecture - Network visualization renderer.
|
|
603
|
+
* @returns Nothing.
|
|
604
|
+
*/
|
|
605
|
+
function renderInitialCanvasHostState(
|
|
606
|
+
drawHeaderFrame: () => void,
|
|
607
|
+
renderNetworkArchitecture: NetworkVisualizationHandle['renderNetworkArchitecture'],
|
|
608
|
+
): void {
|
|
609
|
+
// Step 1: Paint the placeholder network visualization before simulation starts.
|
|
610
|
+
renderNetworkArchitecture(
|
|
611
|
+
undefined,
|
|
612
|
+
FLAPPY_NETWORK_INPUT_SIZE,
|
|
613
|
+
FLAPPY_NETWORK_OUTPUT_SIZE,
|
|
614
|
+
);
|
|
615
|
+
|
|
616
|
+
// Step 2: Render the framed header title.
|
|
617
|
+
drawHeaderFrame();
|
|
32
618
|
}
|
|
@@ -4,8 +4,18 @@ import type {
|
|
|
4
4
|
NetworkVisualizationHandle,
|
|
5
5
|
} from '../browser-entry.types';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Public type contracts for the browser-entry host boundary.
|
|
9
|
+
*
|
|
10
|
+
* These types describe what the host builder returns to the runtime and how HUD
|
|
11
|
+
* value updates are represented once the UI tree exists.
|
|
12
|
+
*/
|
|
13
|
+
|
|
7
14
|
/**
|
|
8
15
|
* Result payload returned after constructing the browser host UI tree.
|
|
16
|
+
*
|
|
17
|
+
* This is the runtime's handle into the rendered browser shell: the main canvas,
|
|
18
|
+
* its 2D context, the stats-cell lookup, and the network-panel draw callback.
|
|
9
19
|
*/
|
|
10
20
|
export interface CanvasHostResult {
|
|
11
21
|
canvas: HTMLCanvasElement;
|
|
@@ -16,5 +26,8 @@ export interface CanvasHostResult {
|
|
|
16
26
|
|
|
17
27
|
/**
|
|
18
28
|
* Partial stats update map keyed by stats-table keys.
|
|
29
|
+
*
|
|
30
|
+
* Using a partial map lets the runtime update only the HUD fields that changed
|
|
31
|
+
* on a given tick.
|
|
19
32
|
*/
|
|
20
33
|
export type HostStatsPartialValues = Partial<Record<FlappyStatsKey, string>>;
|