@reicek/neataptic-ts 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/agents/boundary-mapper.agent.md +31 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +31 -0
- package/.github/agents/solid-split.agent.md +143 -0
- package/.github/copilot-instructions.md +119 -0
- package/.github/skills/solid-split-playbook/SKILL.md +220 -0
- package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
- package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
- package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
- package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
- package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
- package/package.json +7 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
- package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
- package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
- package/plans/Memory_Optimization.md +3 -3
- package/plans/README.md +63 -0
- package/plans/Roadmap.md +15 -3
- package/plans/asciiMaze_SOLID_split.done.md +130 -0
- package/plans/flappy_bird_SOLID_split.done.md +67 -0
- package/scripts/analyze-trace.ts +590 -0
- package/scripts/assets/theme.css +221 -34
- package/scripts/copy-examples.mjs +9 -5
- package/scripts/export-onnx.mjs +3 -3
- package/scripts/generate-bench-tables.mjs +10 -10
- package/scripts/generate-bench-tables.ts +10 -10
- package/scripts/generate-docs.ts +1415 -449
- package/scripts/render-docs-html.ts +15 -8
- package/src/README.md +127 -222
- package/src/architecture/README.md +117 -184
- package/src/architecture/architect.ts +6 -0
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +49 -31
- package/src/architecture/network/activate/README.md +77 -77
- package/src/architecture/network/connect/README.md +15 -13
- package/src/architecture/network/deterministic/README.md +7 -7
- package/src/architecture/network/evolve/README.md +44 -44
- package/src/architecture/network/gating/README.md +20 -20
- package/src/architecture/network/genetic/README.md +51 -51
- package/src/architecture/network/mutate/README.md +97 -97
- package/src/architecture/network/network.types.ts +39 -0
- package/src/architecture/network/onnx/README.md +264 -264
- package/src/architecture/network/prune/README.md +39 -39
- package/src/architecture/network/remove/README.md +26 -26
- package/src/architecture/network/serialize/README.md +56 -56
- package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
- package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
- package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
- package/src/architecture/network/slab/README.md +61 -61
- package/src/architecture/network/standalone/README.md +24 -24
- package/src/architecture/network/stats/README.md +9 -9
- package/src/architecture/network/topology/README.md +46 -46
- package/src/architecture/network/training/README.md +21 -21
- package/src/architecture/network.ts +114 -10
- package/src/methods/README.md +9 -87
- package/src/multithreading/README.md +8 -77
- package/src/multithreading/workers/README.md +2 -2
- package/src/multithreading/workers/browser/README.md +0 -6
- package/src/multithreading/workers/node/README.md +0 -3
- package/src/neat/README.md +623 -568
- package/src/neat/neat.evolve.population.utils.ts +29 -5
- package/src/neat/neat.helpers.ts +16 -0
- package/src/neat/neat.topology-intent.utils.ts +160 -0
- package/src/utils/README.md +18 -18
- package/test/examples/asciiMaze/README.md +59 -59
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
- package/test/examples/asciiMaze/browser-entry/README.md +196 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
- package/test/examples/asciiMaze/browser-entry.ts +10 -576
- package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
- package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
- package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
- package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
- package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
- package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
- package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
- package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
- package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
- package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
- package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
- package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
- package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
- package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
- package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
- package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
- package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
- package/test/examples/asciiMaze/fitness.ts +2 -2
- package/test/examples/asciiMaze/fitness.types.ts +65 -0
- package/test/examples/asciiMaze/interfaces.ts +64 -1352
- package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
- package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
- package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
- package/test/examples/flappy_bird/README.md +193 -88
- package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
- package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
- package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
- package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
- package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
- package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
- package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
- package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
- package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
- package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
- package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
- package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
- package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
- package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
- package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
- package/test/examples/flappy_bird/constants/README.md +1163 -0
- package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
- package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
- package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
- package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
- package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
- package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
- package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/constants/constants.ts +6 -0
- package/test/examples/flappy_bird/environment/README.md +182 -0
- package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
- package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
- package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
- package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
- package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
- package/test/examples/flappy_bird/evaluation/README.md +155 -0
- package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
- package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
- package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
- package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
- package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
- package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
- package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
- package/test/examples/flappy_bird/index.ts +8 -2
- package/test/examples/flappy_bird/rng.ts +10 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
- package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
- package/test/examples/flappy_bird/trainer/README.md +676 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
- package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
- package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
- package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
- package/test/neat/neat.topology-intent.test.ts +129 -0
- package/test/network/network.topology-intent.test.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
- package/test/examples/flappy_bird/environment/environment.ts +0 -7
- package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
- package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { requestWorkerPlaybackStep } from './worker-channel.playback.service';
|
|
2
|
+
import type { WorkerChannelPlaybackStepPayload } from './worker-channel.types';
|
|
3
|
+
|
|
4
|
+
describe('requestWorkerPlaybackStep', () => {
|
|
5
|
+
it('registers playback listeners only once per worker across sequential requests', async () => {
|
|
6
|
+
const evolutionWorker = createMockWorker();
|
|
7
|
+
const firstRequestPromise = requestWorkerPlaybackStep(evolutionWorker, {
|
|
8
|
+
simulationSteps: 1,
|
|
9
|
+
visibleWorldWidthPx: 640,
|
|
10
|
+
visibleWorldHeightPx: 480,
|
|
11
|
+
});
|
|
12
|
+
evolutionWorker.emitMessage(createPlaybackStepMessage(1, 1));
|
|
13
|
+
await firstRequestPromise;
|
|
14
|
+
|
|
15
|
+
const secondRequestPromise = requestWorkerPlaybackStep(evolutionWorker, {
|
|
16
|
+
simulationSteps: 2,
|
|
17
|
+
visibleWorldWidthPx: 640,
|
|
18
|
+
visibleWorldHeightPx: 480,
|
|
19
|
+
});
|
|
20
|
+
evolutionWorker.emitMessage(createPlaybackStepMessage(2, 2));
|
|
21
|
+
await secondRequestPromise;
|
|
22
|
+
|
|
23
|
+
expect(evolutionWorker.addEventListener).toHaveBeenCalledTimes(2);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('rejects concurrent playback-step requests on the same worker', async () => {
|
|
27
|
+
const evolutionWorker = createMockWorker();
|
|
28
|
+
const firstRequestPromise = requestWorkerPlaybackStep(evolutionWorker, {
|
|
29
|
+
simulationSteps: 1,
|
|
30
|
+
visibleWorldWidthPx: 640,
|
|
31
|
+
visibleWorldHeightPx: 480,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const concurrentRequestResult = requestWorkerPlaybackStep(evolutionWorker, {
|
|
35
|
+
simulationSteps: 1,
|
|
36
|
+
visibleWorldWidthPx: 640,
|
|
37
|
+
visibleWorldHeightPx: 480,
|
|
38
|
+
}).catch((error: Error) => error.message);
|
|
39
|
+
|
|
40
|
+
evolutionWorker.emitMessage(createPlaybackStepMessage(1, 1));
|
|
41
|
+
|
|
42
|
+
expect(
|
|
43
|
+
await Promise.all([firstRequestPromise, concurrentRequestResult]),
|
|
44
|
+
).toEqual([
|
|
45
|
+
createPlaybackStepPayload(1, 1),
|
|
46
|
+
'Concurrent playback-step requests are not supported by the playback worker channel.',
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('ignores stale playback-step responses with older request ids', async () => {
|
|
51
|
+
const evolutionWorker = createMockWorker();
|
|
52
|
+
const playbackRequestPromise = requestWorkerPlaybackStep(evolutionWorker, {
|
|
53
|
+
simulationSteps: 1,
|
|
54
|
+
visibleWorldWidthPx: 640,
|
|
55
|
+
visibleWorldHeightPx: 480,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
evolutionWorker.emitMessage(createPlaybackStepMessage(99, 0));
|
|
59
|
+
evolutionWorker.emitMessage(createPlaybackStepMessage(1, 1));
|
|
60
|
+
|
|
61
|
+
expect(await playbackRequestPromise).toEqual(
|
|
62
|
+
createPlaybackStepPayload(1, 1),
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
function createMockWorker(): Worker & {
|
|
68
|
+
emitMessage: (message: unknown) => void;
|
|
69
|
+
} {
|
|
70
|
+
const messageListeners: Array<(event: MessageEvent<unknown>) => void> = [];
|
|
71
|
+
const errorListeners: Array<(event: ErrorEvent) => void> = [];
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
addEventListener: jest.fn(
|
|
75
|
+
(
|
|
76
|
+
eventType: string,
|
|
77
|
+
listener: EventListenerOrEventListenerObject,
|
|
78
|
+
): void => {
|
|
79
|
+
if (typeof listener !== 'function') {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (eventType === 'message') {
|
|
84
|
+
messageListeners.push(
|
|
85
|
+
listener as (event: MessageEvent<unknown>) => void,
|
|
86
|
+
);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (eventType === 'error') {
|
|
91
|
+
errorListeners.push(listener as (event: ErrorEvent) => void);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
),
|
|
95
|
+
postMessage: jest.fn(),
|
|
96
|
+
emitMessage: (message: unknown): void => {
|
|
97
|
+
for (const listener of messageListeners) {
|
|
98
|
+
listener({ data: message } as MessageEvent<unknown>);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
for (const listener of errorListeners) {
|
|
102
|
+
void listener;
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
} as unknown as Worker & { emitMessage: (message: unknown) => void };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function createPlaybackStepMessage(frameIndex: number, requestId: number) {
|
|
109
|
+
return {
|
|
110
|
+
type: 'playback-step' as const,
|
|
111
|
+
payload: createPlaybackStepPayload(frameIndex, requestId),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function createPlaybackStepPayload(
|
|
116
|
+
frameIndex: number,
|
|
117
|
+
requestId: number,
|
|
118
|
+
): WorkerChannelPlaybackStepPayload {
|
|
119
|
+
return {
|
|
120
|
+
requestId,
|
|
121
|
+
snapshot: {
|
|
122
|
+
format: 'packed-v1',
|
|
123
|
+
frameIndex,
|
|
124
|
+
cumulativePipeTravelPx: 0,
|
|
125
|
+
visibleWorldWidthPx: 640,
|
|
126
|
+
visibleWorldHeightPx: 480,
|
|
127
|
+
pipeCount: 0,
|
|
128
|
+
birdCount: 0,
|
|
129
|
+
pipes: {
|
|
130
|
+
xPositionsPx: new Float32Array([]),
|
|
131
|
+
gapCenterYPositionsPx: new Float32Array([]),
|
|
132
|
+
gapSizesPx: new Float32Array([]),
|
|
133
|
+
},
|
|
134
|
+
birds: {
|
|
135
|
+
yPositionsPx: new Float32Array([]),
|
|
136
|
+
pipesPassed: new Uint32Array([]),
|
|
137
|
+
framesSurvived: new Uint32Array([]),
|
|
138
|
+
doneFlags: new Uint8Array([]),
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
done: false,
|
|
142
|
+
};
|
|
143
|
+
}
|
package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts
CHANGED
|
@@ -3,32 +3,158 @@ import type {
|
|
|
3
3
|
WorkerChannelPlaybackStepPayload,
|
|
4
4
|
WorkerChannelPlaybackStepRequest,
|
|
5
5
|
} from './worker-channel.types';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
createWorkerChannelResponseError,
|
|
8
|
+
resolveWorkerChannelRuntimeError,
|
|
9
|
+
} from './worker-channel.errors';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Stateful playback request channel for one evolution worker.
|
|
13
|
+
*
|
|
14
|
+
* Playback is intentionally handled differently from generation requests. The
|
|
15
|
+
* browser asks for a sequence of incremental frames, and the channel keeps a
|
|
16
|
+
* small amount of per-worker state so each request can be matched to the
|
|
17
|
+
* correct reply.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
type PendingPlaybackRequest = {
|
|
21
|
+
requestId: number;
|
|
22
|
+
reject: (error: Error) => void;
|
|
23
|
+
resolve: (payload: WorkerChannelPlaybackStepPayload) => void;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type PlaybackWorkerChannelState = {
|
|
27
|
+
nextRequestId: number;
|
|
28
|
+
pendingPlaybackRequest: PendingPlaybackRequest | null;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const playbackWorkerChannelStateByWorker = new WeakMap<
|
|
32
|
+
Worker,
|
|
33
|
+
PlaybackWorkerChannelState
|
|
34
|
+
>();
|
|
7
35
|
|
|
8
36
|
/**
|
|
9
37
|
* Requests one playback batch step from the worker channel.
|
|
10
38
|
*
|
|
39
|
+
* A playback-step request is effectively "advance the simulation by this many
|
|
40
|
+
* internal steps, then send me a packed frame I can render". The request is
|
|
41
|
+
* tagged with a monotonically increasing request id so stale or out-of-order
|
|
42
|
+
* replies can be ignored safely.
|
|
43
|
+
*
|
|
11
44
|
* @param evolutionWorker - Worker that owns playback simulation state.
|
|
12
45
|
* @param playbackStepRequest - Requested simulation budget and viewport size.
|
|
13
46
|
* @returns Playback-step payload including snapshot and completion marker.
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const playbackPayload = await requestWorkerPlaybackStep(evolutionWorker, {
|
|
50
|
+
* simulationSteps: 2,
|
|
51
|
+
* visibleWorldWidthPx: 640,
|
|
52
|
+
* visibleWorldHeightPx: 480,
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
14
55
|
*/
|
|
15
56
|
export function requestWorkerPlaybackStep(
|
|
16
57
|
evolutionWorker: Worker,
|
|
17
58
|
playbackStepRequest: WorkerChannelPlaybackStepRequest,
|
|
18
59
|
): Promise<WorkerChannelPlaybackStepPayload> {
|
|
19
|
-
|
|
20
|
-
evolutionWorker
|
|
21
|
-
|
|
60
|
+
const playbackWorkerChannelState =
|
|
61
|
+
resolvePlaybackWorkerChannelState(evolutionWorker);
|
|
62
|
+
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
if (playbackWorkerChannelState.pendingPlaybackRequest) {
|
|
65
|
+
reject(
|
|
66
|
+
new Error(
|
|
67
|
+
'Concurrent playback-step requests are not supported by the playback worker channel.',
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const requestId = playbackWorkerChannelState.nextRequestId;
|
|
74
|
+
playbackWorkerChannelState.nextRequestId += 1;
|
|
75
|
+
|
|
76
|
+
playbackWorkerChannelState.pendingPlaybackRequest = {
|
|
77
|
+
requestId,
|
|
78
|
+
reject,
|
|
79
|
+
resolve,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
evolutionWorker.postMessage({
|
|
22
83
|
type: 'request-playback-step',
|
|
23
|
-
payload:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
)
|
|
28
|
-
if (workerMessage.type === 'playback-step') {
|
|
29
|
-
return workerMessage.payload;
|
|
30
|
-
}
|
|
31
|
-
return undefined;
|
|
32
|
-
},
|
|
84
|
+
payload: {
|
|
85
|
+
...playbackStepRequest,
|
|
86
|
+
requestId,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
33
89
|
});
|
|
34
90
|
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Resolves persistent playback worker-channel state for one worker instance.
|
|
94
|
+
*
|
|
95
|
+
* The state tracks request ids and the one allowed in-flight playback request.
|
|
96
|
+
* That single-flight rule keeps the protocol simple and avoids ambiguous frame
|
|
97
|
+
* ordering on the browser side.
|
|
98
|
+
*
|
|
99
|
+
* @param evolutionWorker - Worker that owns playback simulation state.
|
|
100
|
+
* @returns Persistent playback worker-channel state for the worker.
|
|
101
|
+
*/
|
|
102
|
+
function resolvePlaybackWorkerChannelState(
|
|
103
|
+
evolutionWorker: Worker,
|
|
104
|
+
): PlaybackWorkerChannelState {
|
|
105
|
+
const cachedState = playbackWorkerChannelStateByWorker.get(evolutionWorker);
|
|
106
|
+
if (cachedState) {
|
|
107
|
+
return cachedState;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const playbackWorkerChannelState: PlaybackWorkerChannelState = {
|
|
111
|
+
nextRequestId: 1,
|
|
112
|
+
pendingPlaybackRequest: null,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
evolutionWorker.addEventListener('message', ((
|
|
116
|
+
event: MessageEvent<WorkerChannelMessage>,
|
|
117
|
+
): void => {
|
|
118
|
+
const pendingPlaybackRequest =
|
|
119
|
+
playbackWorkerChannelState.pendingPlaybackRequest;
|
|
120
|
+
if (!pendingPlaybackRequest) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (event.data.type === 'playback-step') {
|
|
125
|
+
if (event.data.payload.requestId !== pendingPlaybackRequest.requestId) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
playbackWorkerChannelState.pendingPlaybackRequest = null;
|
|
130
|
+
pendingPlaybackRequest.resolve(event.data.payload);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (event.data.type === 'error') {
|
|
135
|
+
playbackWorkerChannelState.pendingPlaybackRequest = null;
|
|
136
|
+
pendingPlaybackRequest.reject(
|
|
137
|
+
createWorkerChannelResponseError(event.data.payload.message),
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}) as EventListener);
|
|
141
|
+
|
|
142
|
+
evolutionWorker.addEventListener('error', ((event: ErrorEvent): void => {
|
|
143
|
+
const pendingPlaybackRequest =
|
|
144
|
+
playbackWorkerChannelState.pendingPlaybackRequest;
|
|
145
|
+
if (!pendingPlaybackRequest) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
playbackWorkerChannelState.pendingPlaybackRequest = null;
|
|
150
|
+
pendingPlaybackRequest.reject(
|
|
151
|
+
resolveWorkerChannelRuntimeError(event.error, event.message),
|
|
152
|
+
);
|
|
153
|
+
}) as EventListener);
|
|
154
|
+
|
|
155
|
+
playbackWorkerChannelStateByWorker.set(
|
|
156
|
+
evolutionWorker,
|
|
157
|
+
playbackWorkerChannelState,
|
|
158
|
+
);
|
|
159
|
+
return playbackWorkerChannelState;
|
|
160
|
+
}
|
package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts
CHANGED
|
@@ -4,8 +4,19 @@ import {
|
|
|
4
4
|
} from './worker-channel.errors';
|
|
5
5
|
import type { WorkerChannelMessage } from './worker-channel.types';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Generic request/response helper for worker-channel interactions.
|
|
9
|
+
*
|
|
10
|
+
* This module implements a small RPC-like pattern on top of browser worker
|
|
11
|
+
* events. The browser sends one message, listens for the first matching reply,
|
|
12
|
+
* and normalizes protocol failures into ordinary `Error` instances.
|
|
13
|
+
*/
|
|
14
|
+
|
|
7
15
|
/**
|
|
8
16
|
* Message shape sent to the worker request channel.
|
|
17
|
+
*
|
|
18
|
+
* The worker protocol stays stringly-typed at the transport edge on purpose so
|
|
19
|
+
* the message stream is easy to inspect during debugging.
|
|
9
20
|
*/
|
|
10
21
|
export interface WorkerChannelRequestMessage {
|
|
11
22
|
type: string;
|
|
@@ -14,6 +25,9 @@ export interface WorkerChannelRequestMessage {
|
|
|
14
25
|
|
|
15
26
|
/**
|
|
16
27
|
* Configuration used for one worker request/response lifecycle.
|
|
28
|
+
*
|
|
29
|
+
* Callers provide the worker, the outbound message, and the predicate that says
|
|
30
|
+
* which inbound worker message should satisfy the request.
|
|
17
31
|
*/
|
|
18
32
|
export interface WorkerChannelRequestOptions<ResponsePayload> {
|
|
19
33
|
evolutionWorker: Worker;
|
|
@@ -26,8 +40,21 @@ export interface WorkerChannelRequestOptions<ResponsePayload> {
|
|
|
26
40
|
/**
|
|
27
41
|
* Sends one request to the worker and resolves with the first matching response payload.
|
|
28
42
|
*
|
|
43
|
+
* This keeps generation requests simple: the caller describes the response it is
|
|
44
|
+
* waiting for, and this helper handles transient listeners, protocol errors,
|
|
45
|
+
* and runtime worker failures.
|
|
46
|
+
*
|
|
29
47
|
* @param options - Worker request options and response resolver callback.
|
|
30
48
|
* @returns Promise resolving with the matched worker response payload.
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const generation = await requestWorkerResponse({
|
|
52
|
+
* evolutionWorker,
|
|
53
|
+
* requestMessage: { type: 'request-generation' },
|
|
54
|
+
* resolveResponsePayload: (message) =>
|
|
55
|
+
* message.type === 'generation-ready' ? message.payload : undefined,
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
31
58
|
*/
|
|
32
59
|
export function requestWorkerResponse<ResponsePayload>(
|
|
33
60
|
options: WorkerChannelRequestOptions<ResponsePayload>,
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public worker-channel facade for the Flappy Bird browser runtime.
|
|
3
|
+
*
|
|
4
|
+
* This boundary wraps the lower-level message protocol in a smaller browser API:
|
|
5
|
+
* create the worker, request a generation result, or request the next playback
|
|
6
|
+
* step. The point is to keep the rest of the UI code thinking in terms of
|
|
7
|
+
* intent rather than raw `postMessage` plumbing.
|
|
8
|
+
*/
|
|
1
9
|
export {
|
|
2
10
|
createEvolutionWorker,
|
|
3
11
|
requestWorkerGeneration,
|
|
@@ -4,24 +4,47 @@ import type {
|
|
|
4
4
|
EvolutionWorkerMessage,
|
|
5
5
|
} from '../browser-entry.types';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Shared protocol contracts for the browser-entry worker channel.
|
|
9
|
+
*
|
|
10
|
+
* These types define the thin translation layer between generic worker messages
|
|
11
|
+
* and the specific request/response flows used by the Flappy Bird browser UI.
|
|
12
|
+
*
|
|
13
|
+
* If you want background reading, the Wikipedia article on "message passing"
|
|
14
|
+
* gives the right mental model for this boundary.
|
|
15
|
+
*/
|
|
16
|
+
|
|
7
17
|
/**
|
|
8
18
|
* Aliases the shared worker message union for worker-channel modules.
|
|
19
|
+
*
|
|
20
|
+
* Keeping the alias local makes submodules read as protocol-focused code rather
|
|
21
|
+
* than browser-entry plumbing.
|
|
9
22
|
*/
|
|
10
23
|
export type WorkerChannelMessage = EvolutionWorkerMessage;
|
|
11
24
|
|
|
12
25
|
/**
|
|
13
26
|
* Aliases the generation payload contract returned by the worker.
|
|
27
|
+
*
|
|
28
|
+
* This payload arrives when one NEAT generation has finished evolving and the
|
|
29
|
+
* browser is ready to update its "best so far" view.
|
|
14
30
|
*/
|
|
15
31
|
export type WorkerChannelGenerationPayload = EvolutionGenerationPayload;
|
|
16
32
|
|
|
17
33
|
/**
|
|
18
34
|
* Aliases the playback-step payload contract returned by the worker.
|
|
35
|
+
*
|
|
36
|
+
* This is the browser-side shape of one streamed playback frame plus its
|
|
37
|
+
* accompanying aggregate telemetry.
|
|
19
38
|
*/
|
|
20
39
|
export type WorkerChannelPlaybackStepPayload =
|
|
21
40
|
EvolutionPlaybackStepMessage['payload'];
|
|
22
41
|
|
|
23
42
|
/**
|
|
24
43
|
* Request payload sent when asking the worker to advance playback simulation.
|
|
44
|
+
*
|
|
45
|
+
* The request declares both simulation budget and viewport dimensions so the
|
|
46
|
+
* worker can package a frame that already matches the browser's current canvas
|
|
47
|
+
* world.
|
|
25
48
|
*/
|
|
26
49
|
export interface WorkerChannelPlaybackStepRequest {
|
|
27
50
|
simulationSteps: number;
|
package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolves the evolution worker bundle URL relative to the active browser-entry bundle.
|
|
3
3
|
*
|
|
4
|
+
* The browser bundle and worker bundle are emitted side-by-side by the docs/demo
|
|
5
|
+
* build. Resolving the worker URL relative to the currently loaded browser
|
|
6
|
+
* bundle keeps the demo portable across local files, static hosting, and docs
|
|
7
|
+
* builds without hard-coding absolute paths.
|
|
8
|
+
*
|
|
4
9
|
* @returns Absolute URL string for `flappy-evolution.worker.bundle.js`.
|
|
5
10
|
*/
|
|
6
11
|
export function resolveEvolutionWorkerBundleUrl(): string {
|