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