@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,196 @@
|
|
|
1
|
+
# browser-entry
|
|
2
|
+
|
|
3
|
+
## browser-entry/browser-entry.types.ts
|
|
4
|
+
|
|
5
|
+
### AsciiMazeRunHandle
|
|
6
|
+
|
|
7
|
+
Public lifecycle handle returned by the browser demo entrypoint.
|
|
8
|
+
|
|
9
|
+
### BrowserEntryCurriculumContext
|
|
10
|
+
|
|
11
|
+
State and callbacks used by the curriculum runtime service.
|
|
12
|
+
|
|
13
|
+
### BrowserEntryEvolutionSettings
|
|
14
|
+
|
|
15
|
+
Evolution settings used for a single procedural maze phase.
|
|
16
|
+
|
|
17
|
+
### BrowserEntryHostElements
|
|
18
|
+
|
|
19
|
+
Resolved host elements used by logger, dashboard, and resize services.
|
|
20
|
+
|
|
21
|
+
### BrowserEntryHostServices
|
|
22
|
+
|
|
23
|
+
Browser host services assembled for one running demo instance.
|
|
24
|
+
|
|
25
|
+
### BrowserEntryStartFunction
|
|
26
|
+
|
|
27
|
+
`(container: string | HTMLElement | undefined, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions | undefined) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
|
|
28
|
+
|
|
29
|
+
Stable callable shape used by globals compatibility wiring.
|
|
30
|
+
|
|
31
|
+
### BrowserEntryStartOptions
|
|
32
|
+
|
|
33
|
+
Options accepted by the browser-hosted ASCII Maze entrypoint.
|
|
34
|
+
|
|
35
|
+
### BrowserEntryTelemetryHub
|
|
36
|
+
|
|
37
|
+
Lightweight telemetry hub contract shared between host and public handle.
|
|
38
|
+
|
|
39
|
+
### RuntimeAbortSignal
|
|
40
|
+
|
|
41
|
+
Runtime AbortSignal shape used for older or polyfilled environments.
|
|
42
|
+
|
|
43
|
+
### RuntimeAbortSignalConstructor
|
|
44
|
+
|
|
45
|
+
AbortSignal constructor shape with optional static composition helpers.
|
|
46
|
+
|
|
47
|
+
### RuntimeWindow
|
|
48
|
+
|
|
49
|
+
Global namespace exposed for direct browser-script loading compatibility.
|
|
50
|
+
|
|
51
|
+
## browser-entry/browser-entry.ts
|
|
52
|
+
|
|
53
|
+
### browser-entry
|
|
54
|
+
|
|
55
|
+
Public browser entry facade for the ASCII Maze demo module boundary.
|
|
56
|
+
|
|
57
|
+
The folder now owns host bootstrap, runtime orchestration, globals
|
|
58
|
+
compatibility, and resize handling behind focused helpers. This facade keeps
|
|
59
|
+
the public API stable while presenting a small orchestration-first surface.
|
|
60
|
+
|
|
61
|
+
### AsciiMazeRunHandle
|
|
62
|
+
|
|
63
|
+
Public lifecycle handle returned by the browser demo entrypoint.
|
|
64
|
+
|
|
65
|
+
### BrowserEntryStartFunction
|
|
66
|
+
|
|
67
|
+
`(container: string | HTMLElement | undefined, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions | undefined) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
|
|
68
|
+
|
|
69
|
+
Stable callable shape used by globals compatibility wiring.
|
|
70
|
+
|
|
71
|
+
### BrowserEntryStartOptions
|
|
72
|
+
|
|
73
|
+
Options accepted by the browser-hosted ASCII Maze entrypoint.
|
|
74
|
+
|
|
75
|
+
### start
|
|
76
|
+
|
|
77
|
+
`(container: string | HTMLElement, opts: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartOptions) => Promise<import("test/examples/asciiMaze/browser-entry/browser-entry.types").AsciiMazeRunHandle>`
|
|
78
|
+
|
|
79
|
+
## browser-entry/browser-entry.services.ts
|
|
80
|
+
|
|
81
|
+
### browser-entry.services
|
|
82
|
+
|
|
83
|
+
Compatibility facade for the dedicated browser-entry service modules.
|
|
84
|
+
|
|
85
|
+
The concrete implementations now live in focused files so callers can keep
|
|
86
|
+
importing from this stable boundary while internals evolve independently.
|
|
87
|
+
|
|
88
|
+
### composeBrowserEntryAbortSignal
|
|
89
|
+
|
|
90
|
+
`(internalController: AbortController, externalSignal: AbortSignal | undefined) => AbortSignal`
|
|
91
|
+
|
|
92
|
+
### createBrowserEntryEvolutionHostAdapter
|
|
93
|
+
|
|
94
|
+
`() => import("test/examples/asciiMaze/evolutionEngine/evolutionEngine.types").EvolutionHostAdapter`
|
|
95
|
+
|
|
96
|
+
### createBrowserEntryHostServices
|
|
97
|
+
|
|
98
|
+
`(hostElements: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostServices`
|
|
99
|
+
|
|
100
|
+
### installBrowserEntryGlobals
|
|
101
|
+
|
|
102
|
+
`(start: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartFunction) => void`
|
|
103
|
+
|
|
104
|
+
### runBrowserEntryCurriculum
|
|
105
|
+
|
|
106
|
+
`(context: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryCurriculumContext) => void`
|
|
107
|
+
|
|
108
|
+
## browser-entry/browser-entry.constants.ts
|
|
109
|
+
|
|
110
|
+
### browser-entry.constants
|
|
111
|
+
|
|
112
|
+
Shared constants for the browser-hosted ASCII Maze demo lifecycle.
|
|
113
|
+
|
|
114
|
+
These values keep the browser entry facade declarative while the host,
|
|
115
|
+
resize, and curriculum services consume a single named configuration table.
|
|
116
|
+
|
|
117
|
+
### BROWSER_ENTRY_CONSTANTS
|
|
118
|
+
|
|
119
|
+
## browser-entry/browser-entry.host.services.ts
|
|
120
|
+
|
|
121
|
+
### createBrowserEntryHostServices
|
|
122
|
+
|
|
123
|
+
`(hostElements: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostServices`
|
|
124
|
+
|
|
125
|
+
### createTelemetryHub
|
|
126
|
+
|
|
127
|
+
`() => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryTelemetryHub<TTelemetry>`
|
|
128
|
+
|
|
129
|
+
Create a minimal telemetry hub backed by a Set of listeners.
|
|
130
|
+
|
|
131
|
+
Returns: A small hub optimized for browser demo listener counts.
|
|
132
|
+
|
|
133
|
+
### installResizeRedraw
|
|
134
|
+
|
|
135
|
+
`(observeTarget: HTMLElement | null, runtimeDashboard: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardPresentationAdapter) => () => void`
|
|
136
|
+
|
|
137
|
+
Attach dashboard redraw behavior to host resizes and return a cleanup function.
|
|
138
|
+
|
|
139
|
+
Parameters:
|
|
140
|
+
- `observeTarget` - - Element whose width should trigger redraw checks.
|
|
141
|
+
- `runtimeDashboard` - - Shared dashboard presentation adapter with redraw support.
|
|
142
|
+
|
|
143
|
+
Returns: Cleanup function that removes active observers or listeners.
|
|
144
|
+
|
|
145
|
+
### safelyRedrawDashboard
|
|
146
|
+
|
|
147
|
+
`(runtimeDashboard: import("test/examples/asciiMaze/dashboardManager/dashboardManager.types").DashboardPresentationAdapter) => void`
|
|
148
|
+
|
|
149
|
+
Safely request a dashboard redraw without letting host issues break the run.
|
|
150
|
+
|
|
151
|
+
Parameters:
|
|
152
|
+
- `runtimeDashboard` - - Shared dashboard presentation adapter with optional redraw support.
|
|
153
|
+
|
|
154
|
+
## browser-entry/browser-entry.abort.services.ts
|
|
155
|
+
|
|
156
|
+
### composeBrowserEntryAbortSignal
|
|
157
|
+
|
|
158
|
+
`(internalController: AbortController, externalSignal: AbortSignal | undefined) => AbortSignal`
|
|
159
|
+
|
|
160
|
+
## browser-entry/browser-entry.globals.services.ts
|
|
161
|
+
|
|
162
|
+
### createBrowserEntryEvolutionHostAdapter
|
|
163
|
+
|
|
164
|
+
`() => import("test/examples/asciiMaze/evolutionEngine/evolutionEngine.types").EvolutionHostAdapter`
|
|
165
|
+
|
|
166
|
+
### installBrowserEntryGlobals
|
|
167
|
+
|
|
168
|
+
`(start: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryStartFunction) => void`
|
|
169
|
+
|
|
170
|
+
## browser-entry/browser-entry.curriculum.services.ts
|
|
171
|
+
|
|
172
|
+
### runBrowserEntryCurriculum
|
|
173
|
+
|
|
174
|
+
`(context: import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryCurriculumContext) => void`
|
|
175
|
+
|
|
176
|
+
## browser-entry/browser-entry.utils.ts
|
|
177
|
+
|
|
178
|
+
### createBrowserEvolutionSettings
|
|
179
|
+
|
|
180
|
+
`(dimension: number) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryEvolutionSettings`
|
|
181
|
+
|
|
182
|
+
### didSolveBrowserMaze
|
|
183
|
+
|
|
184
|
+
`(progress: unknown) => boolean`
|
|
185
|
+
|
|
186
|
+
### getNextBrowserMazeDimension
|
|
187
|
+
|
|
188
|
+
`(currentDimension: number) => number`
|
|
189
|
+
|
|
190
|
+
### resolveBrowserEntryHostElements
|
|
191
|
+
|
|
192
|
+
`(container: string | HTMLElement) => import("test/examples/asciiMaze/browser-entry/browser-entry.types").BrowserEntryHostElements`
|
|
193
|
+
|
|
194
|
+
### scheduleBrowserEntryFrame
|
|
195
|
+
|
|
196
|
+
`(callback: () => void) => void`
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
RuntimeAbortSignal,
|
|
3
|
+
RuntimeAbortSignalConstructor,
|
|
4
|
+
} from './browser-entry.types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Browser abort-composition service boundary for the ASCII Maze browser entry.
|
|
8
|
+
*
|
|
9
|
+
* This leaf module isolates runtime-safe signal composition so browser-entry
|
|
10
|
+
* orchestration can stay focused on lifecycle flow instead of platform quirks.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Compose an internal and external abort signal into one cooperative signal.
|
|
15
|
+
*
|
|
16
|
+
* @param internalController - Internal controller owned by the browser run handle.
|
|
17
|
+
* @param externalSignal - Optional caller-provided signal.
|
|
18
|
+
* @returns A signal that aborts when either source aborts.
|
|
19
|
+
*/
|
|
20
|
+
export const composeBrowserEntryAbortSignal = (
|
|
21
|
+
internalController: AbortController,
|
|
22
|
+
externalSignal?: AbortSignal,
|
|
23
|
+
): AbortSignal => {
|
|
24
|
+
if (!externalSignal) {
|
|
25
|
+
return internalController.signal;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const runtimeExternalSignal = externalSignal as RuntimeAbortSignal;
|
|
29
|
+
const internalSignal = internalController.signal;
|
|
30
|
+
|
|
31
|
+
switch (true) {
|
|
32
|
+
case !!runtimeExternalSignal.aborted:
|
|
33
|
+
return runtimeExternalSignal as unknown as AbortSignal;
|
|
34
|
+
|
|
35
|
+
case typeof (AbortSignal as unknown as RuntimeAbortSignalConstructor)
|
|
36
|
+
.any === 'function': {
|
|
37
|
+
try {
|
|
38
|
+
return (AbortSignal as unknown as RuntimeAbortSignalConstructor).any!([
|
|
39
|
+
runtimeExternalSignal as unknown as AbortSignal,
|
|
40
|
+
internalSignal,
|
|
41
|
+
]);
|
|
42
|
+
} catch {
|
|
43
|
+
// Fall through to manual wiring when native composition is unavailable at runtime.
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
default:
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
runtimeExternalSignal.addEventListener(
|
|
54
|
+
'abort',
|
|
55
|
+
() => {
|
|
56
|
+
try {
|
|
57
|
+
internalController.abort();
|
|
58
|
+
} catch {
|
|
59
|
+
// Ignore duplicate or unsupported aborts.
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{ once: true },
|
|
63
|
+
);
|
|
64
|
+
} catch {
|
|
65
|
+
// Ignore event wiring failures in minimal DOM environments.
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
runtimeExternalSignal.onabort = () => {
|
|
70
|
+
try {
|
|
71
|
+
internalController.abort();
|
|
72
|
+
} catch {
|
|
73
|
+
// Ignore duplicate or unsupported aborts.
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
} catch {
|
|
77
|
+
// Ignore environments that do not allow onabort assignment.
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
queueMicrotask(() => {
|
|
82
|
+
if (runtimeExternalSignal.aborted) {
|
|
83
|
+
try {
|
|
84
|
+
internalController.abort();
|
|
85
|
+
} catch {
|
|
86
|
+
// Ignore duplicate or unsupported aborts.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
} catch {
|
|
91
|
+
// Ignore environments that do not expose queueMicrotask.
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return internalSignal;
|
|
95
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the browser-hosted ASCII Maze demo lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* These values keep the browser entry facade declarative while the host,
|
|
5
|
+
* resize, and curriculum services consume a single named configuration table.
|
|
6
|
+
*/
|
|
7
|
+
export const BROWSER_ENTRY_CONSTANTS = {
|
|
8
|
+
DEFAULT_CONTAINER_ID: 'ascii-maze-output',
|
|
9
|
+
RESIZE_WIDTH_THRESHOLD: 8,
|
|
10
|
+
RESIZE_DEBOUNCE_MS: 120,
|
|
11
|
+
AUTO_START_DELAY_MS: 20,
|
|
12
|
+
MIN_PROGRESS_TO_PASS: 90,
|
|
13
|
+
DEFAULT_MAX_STAGNANT_GENERATIONS: 50,
|
|
14
|
+
DEFAULT_MAX_GENERATIONS: 100,
|
|
15
|
+
PER_GENERATION_LOG_FREQUENCY: 1,
|
|
16
|
+
INITIAL_MAZE_DIMENSION: 8,
|
|
17
|
+
MAX_MAZE_DIMENSION: 40,
|
|
18
|
+
MAZE_DIMENSION_INCREMENT: 4,
|
|
19
|
+
AGENT_MAX_STEPS: 600,
|
|
20
|
+
POPULATION_SIZE: 20,
|
|
21
|
+
LAMARCKIAN_ITERATIONS: 4,
|
|
22
|
+
LAMARCKIAN_SAMPLE_SIZE: 12,
|
|
23
|
+
} as const;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { EvolutionEngine } from '../evolutionEngine';
|
|
2
|
+
import { resolveMazeEvolutionPhaseOutcome } from '../evolutionEngine';
|
|
3
|
+
import type { INetwork } from '../interfaces';
|
|
4
|
+
import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
|
|
5
|
+
import type { BrowserEntryCurriculumContext } from './browser-entry.types';
|
|
6
|
+
import {
|
|
7
|
+
createBrowserEvolutionSettings,
|
|
8
|
+
getNextBrowserMazeDimension,
|
|
9
|
+
scheduleBrowserEntryFrame,
|
|
10
|
+
} from './browser-entry.utils';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Browser curriculum-runtime service boundary for the ASCII Maze browser entry.
|
|
14
|
+
*
|
|
15
|
+
* This module now owns browser-only curriculum progression concerns: dimension
|
|
16
|
+
* scheduling, frame pacing, and lifecycle completion. Evolution-phase result
|
|
17
|
+
* interpretation and winner carry-over refinement live behind the engine-owned
|
|
18
|
+
* curriculum helper so browser-entry stays focused on host runtime behavior.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Run the progressive browser curriculum across increasingly larger mazes.
|
|
23
|
+
*
|
|
24
|
+
* @param context - Runtime dashboard, cancellation, and completion callbacks for one browser session.
|
|
25
|
+
* @returns Nothing.
|
|
26
|
+
*/
|
|
27
|
+
export const runBrowserEntryCurriculum = (
|
|
28
|
+
context: BrowserEntryCurriculumContext,
|
|
29
|
+
): void => {
|
|
30
|
+
let currentDimension: number = C.INITIAL_MAZE_DIMENSION;
|
|
31
|
+
let previousBestNetwork: INetwork | undefined;
|
|
32
|
+
|
|
33
|
+
void runCurrentPhase();
|
|
34
|
+
|
|
35
|
+
async function runCurrentPhase(): Promise<void> {
|
|
36
|
+
if (context.isCancelled()) {
|
|
37
|
+
context.finish();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const settings = createBrowserEvolutionSettings(currentDimension);
|
|
42
|
+
const mazeLayout = settings.mazeFactory();
|
|
43
|
+
let solved = false;
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const result = await EvolutionEngine.runMazeEvolution({
|
|
47
|
+
mazeConfig: { maze: mazeLayout },
|
|
48
|
+
agentSimConfig: { maxSteps: settings.agentMaxSteps },
|
|
49
|
+
evolutionAlgorithmConfig: {
|
|
50
|
+
allowRecurrent: true,
|
|
51
|
+
popSize: settings.popSize,
|
|
52
|
+
maxStagnantGenerations: settings.maxStagnantGenerations,
|
|
53
|
+
minProgressToPass: C.MIN_PROGRESS_TO_PASS,
|
|
54
|
+
maxGenerations: settings.maxGenerations,
|
|
55
|
+
autoPauseOnSolve: false,
|
|
56
|
+
stopOnlyOnSolve: false,
|
|
57
|
+
lamarckianIterations: settings.lamarckianIterations,
|
|
58
|
+
lamarckianSampleSize: settings.lamarckianSampleSize,
|
|
59
|
+
initialBestNetwork: previousBestNetwork,
|
|
60
|
+
},
|
|
61
|
+
reportingConfig: {
|
|
62
|
+
dashboardManager: context.dashboard,
|
|
63
|
+
hostAdapter: context.hostAdapter,
|
|
64
|
+
logEvery: C.PER_GENERATION_LOG_FREQUENCY,
|
|
65
|
+
label: `browser-procedural-${currentDimension}x${currentDimension}`,
|
|
66
|
+
paceEveryGeneration: true,
|
|
67
|
+
},
|
|
68
|
+
cancellation: { isCancelled: () => context.isCancelled() },
|
|
69
|
+
signal: context.combinedSignal,
|
|
70
|
+
});
|
|
71
|
+
const phaseOutcome = resolveMazeEvolutionPhaseOutcome(
|
|
72
|
+
result,
|
|
73
|
+
previousBestNetwork,
|
|
74
|
+
C.MIN_PROGRESS_TO_PASS,
|
|
75
|
+
);
|
|
76
|
+
const progress = phaseOutcome.progress;
|
|
77
|
+
|
|
78
|
+
previousBestNetwork = phaseOutcome.nextBestNetwork;
|
|
79
|
+
solved = phaseOutcome.solved;
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
console.log(
|
|
83
|
+
'[asciiMaze] maze complete',
|
|
84
|
+
currentDimension,
|
|
85
|
+
'solved?',
|
|
86
|
+
solved,
|
|
87
|
+
'progress',
|
|
88
|
+
progress,
|
|
89
|
+
);
|
|
90
|
+
} catch {
|
|
91
|
+
// Ignore console failures in minimal or proxied environments.
|
|
92
|
+
}
|
|
93
|
+
} catch (error: unknown) {
|
|
94
|
+
console.error(
|
|
95
|
+
'Error while running procedural maze',
|
|
96
|
+
currentDimension,
|
|
97
|
+
error,
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (
|
|
102
|
+
!context.isCancelled() &&
|
|
103
|
+
solved &&
|
|
104
|
+
currentDimension < C.MAX_MAZE_DIMENSION
|
|
105
|
+
) {
|
|
106
|
+
currentDimension = getNextBrowserMazeDimension(currentDimension);
|
|
107
|
+
scheduleBrowserEntryFrame(() => {
|
|
108
|
+
void runCurrentPhase();
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
context.finish();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
|
|
2
|
+
import type {
|
|
3
|
+
BrowserEntryStartFunction,
|
|
4
|
+
RuntimeWindow,
|
|
5
|
+
} from './browser-entry.types';
|
|
6
|
+
import type { EvolutionHostAdapter } from '../evolutionEngine/evolutionEngine.types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Browser globals-compatibility service boundary for the ASCII Maze browser entry.
|
|
10
|
+
*
|
|
11
|
+
* This module isolates script-loader compatibility and guarded auto-start
|
|
12
|
+
* behavior so runtime orchestration can stay focused on session lifecycle.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create the browser-owned engine host adapter used for pause polling and solve notifications.
|
|
17
|
+
*
|
|
18
|
+
* @returns Host adapter that keeps browser globals and DOM events out of engine internals.
|
|
19
|
+
*/
|
|
20
|
+
export const createBrowserEntryEvolutionHostAdapter =
|
|
21
|
+
(): EvolutionHostAdapter => ({
|
|
22
|
+
isPauseRequested: (): boolean => {
|
|
23
|
+
if (typeof window === 'undefined') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (window as RuntimeWindow).asciiMazePaused === true;
|
|
28
|
+
},
|
|
29
|
+
handleStop: ({
|
|
30
|
+
reason,
|
|
31
|
+
maze,
|
|
32
|
+
completedGenerations,
|
|
33
|
+
progress,
|
|
34
|
+
requestHostPause,
|
|
35
|
+
}): void => {
|
|
36
|
+
if (typeof window === 'undefined') {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const globalWindow = window as RuntimeWindow;
|
|
41
|
+
|
|
42
|
+
if (reason === 'solved' && requestHostPause) {
|
|
43
|
+
globalWindow.asciiMazePaused = true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (reason !== 'solved') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
window.dispatchEvent(
|
|
52
|
+
new CustomEvent('asciiMazeSolved', {
|
|
53
|
+
detail: {
|
|
54
|
+
maze,
|
|
55
|
+
generations: completedGenerations,
|
|
56
|
+
progress,
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
);
|
|
60
|
+
} catch {
|
|
61
|
+
// Ignore CustomEvent dispatch failures in restricted browser runtimes.
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Install browser globals and one-time auto-start compatibility hooks.
|
|
68
|
+
*
|
|
69
|
+
* @param start - Public browser entry function to expose on the window namespace.
|
|
70
|
+
* @returns Nothing.
|
|
71
|
+
*/
|
|
72
|
+
export const installBrowserEntryGlobals = (
|
|
73
|
+
start: BrowserEntryStartFunction,
|
|
74
|
+
): void => {
|
|
75
|
+
if (typeof window === 'undefined' || !(window as RuntimeWindow).document) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const globalWindow = window as RuntimeWindow;
|
|
80
|
+
globalWindow.asciiMaze = globalWindow.asciiMaze || {};
|
|
81
|
+
globalWindow.asciiMaze.start = start;
|
|
82
|
+
|
|
83
|
+
if (!globalWindow.asciiMazeStart) {
|
|
84
|
+
globalWindow.asciiMazeStart = (containerElement?: unknown) => {
|
|
85
|
+
console.warn(
|
|
86
|
+
'[asciiMaze] window.asciiMazeStart is deprecated; use import { start } ... or window.asciiMaze.start',
|
|
87
|
+
);
|
|
88
|
+
return start(containerElement as string | HTMLElement | undefined);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (globalWindow.asciiMaze._autoStarted) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
globalWindow.asciiMaze._autoStarted = true;
|
|
97
|
+
setTimeout(() => {
|
|
98
|
+
try {
|
|
99
|
+
if (document.getElementById(C.DEFAULT_CONTAINER_ID)) {
|
|
100
|
+
void start();
|
|
101
|
+
}
|
|
102
|
+
} catch {
|
|
103
|
+
// Ignore auto-start failures so browser embedding can recover manually.
|
|
104
|
+
}
|
|
105
|
+
}, C.AUTO_START_DELAY_MS);
|
|
106
|
+
};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { BrowserTerminalUtility } from '../browserTerminalUtility';
|
|
2
|
+
import { createBrowserLogger } from '../browserLogger';
|
|
3
|
+
import { DashboardManager } from '../dashboardManager';
|
|
4
|
+
import type {
|
|
5
|
+
DashboardPresentationAdapter,
|
|
6
|
+
DashboardTelemetryPayload,
|
|
7
|
+
} from '../dashboardManager/dashboardManager.types';
|
|
8
|
+
import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
|
|
9
|
+
import type {
|
|
10
|
+
BrowserEntryHostElements,
|
|
11
|
+
BrowserEntryHostServices,
|
|
12
|
+
BrowserEntryTelemetryHub,
|
|
13
|
+
} from './browser-entry.types';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Browser host-service boundary for the ASCII Maze browser entry.
|
|
17
|
+
*
|
|
18
|
+
* This module owns the DOM-facing dashboard wiring, telemetry fan-out, and
|
|
19
|
+
* resize redraw behavior used by one browser-hosted ASCII Maze session.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Create the browser host services used by one ASCII Maze demo run.
|
|
24
|
+
*
|
|
25
|
+
* @param hostElements - Resolved host elements for live output, archive output, and resize observation.
|
|
26
|
+
* @returns Dashboard, telemetry hub, runtime dashboard adapter, and resize cleanup.
|
|
27
|
+
*/
|
|
28
|
+
export const createBrowserEntryHostServices = (
|
|
29
|
+
hostElements: BrowserEntryHostElements,
|
|
30
|
+
): BrowserEntryHostServices => {
|
|
31
|
+
const clearer = BrowserTerminalUtility.createTerminalClearer(
|
|
32
|
+
hostElements.liveElement ?? undefined,
|
|
33
|
+
);
|
|
34
|
+
const liveLogger = createBrowserLogger(hostElements.liveElement ?? undefined);
|
|
35
|
+
const archiveLogger = createBrowserLogger(
|
|
36
|
+
hostElements.archiveElement ?? undefined,
|
|
37
|
+
);
|
|
38
|
+
const dashboard = new DashboardManager(
|
|
39
|
+
clearer,
|
|
40
|
+
liveLogger as unknown as (...args: unknown[]) => void,
|
|
41
|
+
archiveLogger as unknown as (...args: unknown[]) => void,
|
|
42
|
+
);
|
|
43
|
+
const telemetryHub = createTelemetryHub<DashboardTelemetryPayload>();
|
|
44
|
+
const runtimeDashboard: DashboardPresentationAdapter = dashboard;
|
|
45
|
+
|
|
46
|
+
runtimeDashboard._telemetryHook = (telemetry: DashboardTelemetryPayload) => {
|
|
47
|
+
telemetryHub.dispatch(telemetry);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
dashboard,
|
|
52
|
+
runtimeDashboard,
|
|
53
|
+
telemetryHub,
|
|
54
|
+
disposeResizeHandling: installResizeRedraw(
|
|
55
|
+
hostElements.observeTarget,
|
|
56
|
+
runtimeDashboard,
|
|
57
|
+
),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create a minimal telemetry hub backed by a Set of listeners.
|
|
63
|
+
*
|
|
64
|
+
* @returns A small hub optimized for browser demo listener counts.
|
|
65
|
+
*/
|
|
66
|
+
function createTelemetryHub<
|
|
67
|
+
TTelemetry extends Record<string, unknown>,
|
|
68
|
+
>(): BrowserEntryTelemetryHub<TTelemetry> {
|
|
69
|
+
const listeners = new Set<(payload: TTelemetry) => void>();
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
add(listener: (payload: TTelemetry) => void): () => void {
|
|
73
|
+
listeners.add(listener);
|
|
74
|
+
return () => listeners.delete(listener);
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
dispatch(payload: TTelemetry): void {
|
|
78
|
+
const snapshot = Array.from(listeners);
|
|
79
|
+
for (const listener of snapshot) {
|
|
80
|
+
try {
|
|
81
|
+
listener(payload);
|
|
82
|
+
} catch {
|
|
83
|
+
// Ignore listener failures so telemetry never destabilizes evolution.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Attach dashboard redraw behavior to host resizes and return a cleanup function.
|
|
92
|
+
*
|
|
93
|
+
* @param observeTarget - Element whose width should trigger redraw checks.
|
|
94
|
+
* @param runtimeDashboard - Shared dashboard presentation adapter with redraw support.
|
|
95
|
+
* @returns Cleanup function that removes active observers or listeners.
|
|
96
|
+
*/
|
|
97
|
+
function installResizeRedraw(
|
|
98
|
+
observeTarget: HTMLElement | null,
|
|
99
|
+
runtimeDashboard: DashboardPresentationAdapter,
|
|
100
|
+
): () => void {
|
|
101
|
+
if (!observeTarget) {
|
|
102
|
+
return () => {};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
107
|
+
let lastObservedWidth = observeTarget.clientWidth;
|
|
108
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
const width = entry.contentRect.width;
|
|
111
|
+
if (Math.abs(width - lastObservedWidth) > C.RESIZE_WIDTH_THRESHOLD) {
|
|
112
|
+
lastObservedWidth = width;
|
|
113
|
+
safelyRedrawDashboard(runtimeDashboard);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
resizeObserver.observe(observeTarget);
|
|
118
|
+
return () => resizeObserver.disconnect();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
let debounceTimer: number | undefined;
|
|
122
|
+
const handleResize = () => {
|
|
123
|
+
if (typeof debounceTimer === 'number') {
|
|
124
|
+
clearTimeout(debounceTimer);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
debounceTimer = window.setTimeout(() => {
|
|
128
|
+
safelyRedrawDashboard(runtimeDashboard);
|
|
129
|
+
}, C.RESIZE_DEBOUNCE_MS);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
window.addEventListener('resize', handleResize);
|
|
133
|
+
return () => {
|
|
134
|
+
window.removeEventListener('resize', handleResize);
|
|
135
|
+
if (typeof debounceTimer === 'number') {
|
|
136
|
+
clearTimeout(debounceTimer);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
} catch {
|
|
140
|
+
return () => {};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Safely request a dashboard redraw without letting host issues break the run.
|
|
146
|
+
*
|
|
147
|
+
* @param runtimeDashboard - Shared dashboard presentation adapter with optional redraw support.
|
|
148
|
+
*/
|
|
149
|
+
function safelyRedrawDashboard(
|
|
150
|
+
runtimeDashboard: DashboardPresentationAdapter,
|
|
151
|
+
): void {
|
|
152
|
+
try {
|
|
153
|
+
runtimeDashboard.redraw?.([], undefined);
|
|
154
|
+
} catch {
|
|
155
|
+
// Ignore redraw failures because they are presentation-only.
|
|
156
|
+
}
|
|
157
|
+
}
|