@reicek/neataptic-ts 0.1.21 → 0.1.22
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 +29 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +29 -0
- package/.github/agents/solid-split.agent.md +138 -0
- package/.github/copilot-instructions.md +103 -0
- package/package.json +6 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- 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/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 +101 -223
- package/src/architecture/README.md +57 -185
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +33 -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/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/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/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 +562 -568
- 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/Trace-20260309T191949.json +24124 -0
- package/test/examples/flappy_bird/browser-entry/README.md +1129 -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 +6 -399
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +1 -717
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +15 -893
- package/test/examples/flappy_bird/browser-entry/host/README.md +307 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.ts +562 -6
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +274 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +31 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +360 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +117 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +63 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +250 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +399 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +255 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +802 -7
- package/test/examples/flappy_bird/browser-entry/playback/README.md +684 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +277 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +770 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +178 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +107 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +518 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +117 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +233 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +211 -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 +212 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +81 -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 +62 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +244 -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 +68 -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 +310 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +39 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +493 -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 +4 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +39 -122
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +62 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +409 -8
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +4 -12
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +235 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +557 -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 +957 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +138 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +3 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +1 -23
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +156 -0
- package/test/examples/flappy_bird/constants/README.md +1179 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/environment/README.md +143 -0
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +1 -19
- package/test/examples/flappy_bird/environment/environment.step.service.ts +3 -66
- package/test/examples/flappy_bird/evaluation/README.md +130 -0
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +1 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +5 -375
- package/test/examples/flappy_bird/evaluation/rollout/README.md +291 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +30 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +58 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +310 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +56 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +368 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +618 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +7 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +364 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +14 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +4 -201
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +184 -345
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +291 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +5 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +417 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +183 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +301 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +59 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +5 -403
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +20 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +23 -8
- package/test/examples/flappy_bird/trainer/README.md +563 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +199 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +9 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +73 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +165 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +25 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +161 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +126 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +11 -553
- 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,120 @@
|
|
|
1
|
+
import type { DashboardManager } from '../dashboardManager';
|
|
2
|
+
import type {
|
|
3
|
+
AsciiMazeTelemetrySnapshot,
|
|
4
|
+
DashboardPresentationAdapter,
|
|
5
|
+
DashboardTelemetryPayload,
|
|
6
|
+
} from '../dashboardManager/dashboardManager.types';
|
|
7
|
+
import type { EvolutionHostAdapter } from '../evolutionEngine/evolutionEngine.types';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Public lifecycle handle returned by the browser demo entrypoint.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const handle = await start('ascii-maze-output');
|
|
15
|
+
* const unsubscribe = handle.onTelemetry((telemetry) => {
|
|
16
|
+
* console.log('generation', telemetry.generation);
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* await handle.done;
|
|
20
|
+
* unsubscribe();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface AsciiMazeRunHandle {
|
|
24
|
+
/** Stop the running curriculum. This also aborts the internal signal. */
|
|
25
|
+
stop: () => void;
|
|
26
|
+
/** Whether the curriculum is still active. */
|
|
27
|
+
isRunning: () => boolean;
|
|
28
|
+
/** Promise that resolves when the curriculum finishes or is stopped. */
|
|
29
|
+
done: Promise<void>;
|
|
30
|
+
/** Subscribe to per-generation telemetry payloads emitted by the dashboard boundary. */
|
|
31
|
+
onTelemetry: (
|
|
32
|
+
listener: (telemetry: DashboardTelemetryPayload) => void,
|
|
33
|
+
) => () => void;
|
|
34
|
+
/** Pull the most recently emitted telemetry snapshot, if one exists. */
|
|
35
|
+
getTelemetry: () => AsciiMazeTelemetrySnapshot | undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Options accepted by the browser-hosted ASCII Maze entrypoint. */
|
|
39
|
+
export interface BrowserEntryStartOptions {
|
|
40
|
+
/** Optional external abort signal that cooperatively stops the curriculum. */
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Stable callable shape used by globals compatibility wiring. */
|
|
45
|
+
export type BrowserEntryStartFunction = (
|
|
46
|
+
container?: string | HTMLElement,
|
|
47
|
+
opts?: BrowserEntryStartOptions,
|
|
48
|
+
) => Promise<AsciiMazeRunHandle>;
|
|
49
|
+
|
|
50
|
+
/** Runtime AbortSignal shape used for older or polyfilled environments. */
|
|
51
|
+
export interface RuntimeAbortSignal {
|
|
52
|
+
aborted?: boolean;
|
|
53
|
+
onabort?: (() => void) | null;
|
|
54
|
+
addEventListener: AbortSignal['addEventListener'];
|
|
55
|
+
removeEventListener: AbortSignal['removeEventListener'];
|
|
56
|
+
dispatchEvent: AbortSignal['dispatchEvent'];
|
|
57
|
+
reason?: unknown;
|
|
58
|
+
throwIfAborted?: () => void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** AbortSignal constructor shape with optional static composition helpers. */
|
|
62
|
+
export interface RuntimeAbortSignalConstructor {
|
|
63
|
+
prototype: AbortSignal;
|
|
64
|
+
new (): AbortSignal;
|
|
65
|
+
any?: (signals: AbortSignal[]) => AbortSignal;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Global namespace exposed for direct browser-script loading compatibility. */
|
|
69
|
+
export interface RuntimeWindow extends Window {
|
|
70
|
+
asciiMaze?: {
|
|
71
|
+
start?: BrowserEntryStartFunction;
|
|
72
|
+
_autoStarted?: boolean;
|
|
73
|
+
[key: string]: unknown;
|
|
74
|
+
};
|
|
75
|
+
asciiMazePaused?: boolean;
|
|
76
|
+
asciiMazeStart?: (containerElement?: unknown) => unknown;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Resolved host elements used by logger, dashboard, and resize services. */
|
|
81
|
+
export interface BrowserEntryHostElements {
|
|
82
|
+
hostElement: HTMLElement | null;
|
|
83
|
+
archiveElement: HTMLElement | null;
|
|
84
|
+
liveElement: HTMLElement | null;
|
|
85
|
+
observeTarget: HTMLElement | null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Evolution settings used for a single procedural maze phase. */
|
|
89
|
+
export interface BrowserEntryEvolutionSettings {
|
|
90
|
+
agentMaxSteps: number;
|
|
91
|
+
popSize: number;
|
|
92
|
+
maxStagnantGenerations: number;
|
|
93
|
+
maxGenerations: number;
|
|
94
|
+
lamarckianIterations: number;
|
|
95
|
+
lamarckianSampleSize: number;
|
|
96
|
+
mazeFactory: () => string[];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Lightweight telemetry hub contract shared between host and public handle. */
|
|
100
|
+
export interface BrowserEntryTelemetryHub<TTelemetry extends object> {
|
|
101
|
+
add(listener: (payload: TTelemetry) => void): () => void;
|
|
102
|
+
dispatch(payload: TTelemetry): void;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Browser host services assembled for one running demo instance. */
|
|
106
|
+
export interface BrowserEntryHostServices {
|
|
107
|
+
dashboard: DashboardManager;
|
|
108
|
+
runtimeDashboard: DashboardPresentationAdapter;
|
|
109
|
+
telemetryHub: BrowserEntryTelemetryHub<DashboardTelemetryPayload>;
|
|
110
|
+
disposeResizeHandling: () => void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** State and callbacks used by the curriculum runtime service. */
|
|
114
|
+
export interface BrowserEntryCurriculumContext {
|
|
115
|
+
dashboard: DashboardManager;
|
|
116
|
+
combinedSignal: AbortSignal;
|
|
117
|
+
isCancelled: () => boolean;
|
|
118
|
+
finish: () => void;
|
|
119
|
+
hostAdapter: EvolutionHostAdapter;
|
|
120
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { MazeGenerator } from '../mazes';
|
|
2
|
+
import { BROWSER_ENTRY_CONSTANTS as C } from './browser-entry.constants';
|
|
3
|
+
import type {
|
|
4
|
+
BrowserEntryEvolutionSettings,
|
|
5
|
+
BrowserEntryHostElements,
|
|
6
|
+
} from './browser-entry.types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the browser host elements used by the demo logger and dashboard.
|
|
10
|
+
*
|
|
11
|
+
* @param container - Element id or host element provided by the caller.
|
|
12
|
+
* @returns Resolved host, archive, live, and resize-observer targets.
|
|
13
|
+
*/
|
|
14
|
+
export const resolveBrowserEntryHostElements = (
|
|
15
|
+
container: string | HTMLElement,
|
|
16
|
+
): BrowserEntryHostElements => {
|
|
17
|
+
const hostElement =
|
|
18
|
+
typeof container === 'string'
|
|
19
|
+
? document.getElementById(container)
|
|
20
|
+
: container;
|
|
21
|
+
const archiveElement = hostElement
|
|
22
|
+
? (hostElement.querySelector('#ascii-maze-archive') as HTMLElement | null)
|
|
23
|
+
: null;
|
|
24
|
+
const liveElement = hostElement
|
|
25
|
+
? (hostElement.querySelector('#ascii-maze-live') as HTMLElement | null)
|
|
26
|
+
: null;
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
hostElement,
|
|
30
|
+
archiveElement,
|
|
31
|
+
liveElement,
|
|
32
|
+
observeTarget:
|
|
33
|
+
hostElement ?? document.getElementById(C.DEFAULT_CONTAINER_ID),
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Build immutable evolution settings for a single maze dimension.
|
|
39
|
+
*
|
|
40
|
+
* @param dimension - Side length in cells for the procedural square maze.
|
|
41
|
+
* @returns Per-phase evolution settings consumed by the curriculum runtime.
|
|
42
|
+
*/
|
|
43
|
+
export const createBrowserEvolutionSettings = (
|
|
44
|
+
dimension: number,
|
|
45
|
+
): BrowserEntryEvolutionSettings => {
|
|
46
|
+
return {
|
|
47
|
+
agentMaxSteps: C.AGENT_MAX_STEPS,
|
|
48
|
+
popSize: C.POPULATION_SIZE,
|
|
49
|
+
maxStagnantGenerations: C.DEFAULT_MAX_STAGNANT_GENERATIONS,
|
|
50
|
+
maxGenerations: C.DEFAULT_MAX_GENERATIONS,
|
|
51
|
+
lamarckianIterations: C.LAMARCKIAN_ITERATIONS,
|
|
52
|
+
lamarckianSampleSize: C.LAMARCKIAN_SAMPLE_SIZE,
|
|
53
|
+
mazeFactory: () => new MazeGenerator(dimension, dimension).generate(),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Schedule follow-up curriculum work on the next animation tick when possible.
|
|
59
|
+
*
|
|
60
|
+
* @param callback - Follow-up phase callback.
|
|
61
|
+
*/
|
|
62
|
+
export const scheduleBrowserEntryFrame = (callback: () => void): void => {
|
|
63
|
+
try {
|
|
64
|
+
if (typeof requestAnimationFrame === 'function') {
|
|
65
|
+
requestAnimationFrame(callback);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
} catch {
|
|
69
|
+
// Fall through to setTimeout when the browser scheduler is unavailable.
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
setTimeout(callback, 0);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Determine whether a reported progress value counts as solved for curriculum advancement.
|
|
77
|
+
*
|
|
78
|
+
* @param progress - Runtime progress emitted by the evolution layer.
|
|
79
|
+
* @returns Whether the maze phase should advance to the next dimension.
|
|
80
|
+
*/
|
|
81
|
+
export const didSolveBrowserMaze = (progress: unknown): boolean => {
|
|
82
|
+
return typeof progress === 'number' && progress >= C.MIN_PROGRESS_TO_PASS;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Advance the procedural maze dimension without exceeding the configured maximum.
|
|
87
|
+
*
|
|
88
|
+
* @param currentDimension - Current maze side length.
|
|
89
|
+
* @returns Next side length to use.
|
|
90
|
+
*/
|
|
91
|
+
export const getNextBrowserMazeDimension = (
|
|
92
|
+
currentDimension: number,
|
|
93
|
+
): number => {
|
|
94
|
+
return Math.min(
|
|
95
|
+
currentDimension + C.MAZE_DIMENSION_INCREMENT,
|
|
96
|
+
C.MAX_MAZE_DIMENSION,
|
|
97
|
+
);
|
|
98
|
+
};
|