@reicek/neataptic-ts 0.1.25 → 0.1.26

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.
Files changed (210) hide show
  1. package/.github/copilot-instructions.md +11 -0
  2. package/.github/skills/trace-analyzer-extension/SKILL.md +3 -3
  3. package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +1 -1
  4. package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +1 -1
  5. package/.github/skills/trace-audit-reporting/SKILL.md +3 -3
  6. package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +1 -1
  7. package/package.json +19 -13
  8. package/plans/Flappy_Bird_Folder_Documentation_Pass.md +4 -4
  9. package/plans/README.md +24 -0
  10. package/plans/Roadmap.md +62 -40
  11. package/plans/analyze-trace-solid-split.plans.md +66 -0
  12. package/plans/architecture-solid-split.plans.md +9 -15
  13. package/plans/asciiMaze-typescript-repair.plans.md +1 -1
  14. package/plans/generate-docs-solid-split.plans.md +87 -0
  15. package/plans/methods-docs.plans.md +25 -1
  16. package/plans/methods-solid-split.plans.md +14 -14
  17. package/plans/neat-docs.plans.md +9 -1
  18. package/plans/neat-test-surface-repair.plans.md +1 -1
  19. package/plans/render-docs-html-solid-split.plans.md +68 -0
  20. package/plans/src-no-explicit-any-cleanup.plans.md +1 -1
  21. package/plans/utils-docs.plans.md +6 -1
  22. package/scripts/analyze-trace/analyze-trace.analysis.ts +479 -0
  23. package/scripts/analyze-trace/analyze-trace.constants.ts +35 -0
  24. package/scripts/analyze-trace/analyze-trace.io.ts +69 -0
  25. package/scripts/analyze-trace/analyze-trace.report.ts +100 -0
  26. package/scripts/analyze-trace/analyze-trace.shared.ts +116 -0
  27. package/scripts/analyze-trace/analyze-trace.ts +45 -0
  28. package/scripts/analyze-trace/analyze-trace.types.ts +72 -0
  29. package/scripts/assets/theme.css +80 -23
  30. package/scripts/copy-examples.ts +239 -0
  31. package/scripts/export-onnx.ts +223 -0
  32. package/scripts/generate-bench-tables.ts +378 -37
  33. package/scripts/generate-docs/generate-docs.constants.ts +107 -0
  34. package/scripts/generate-docs/generate-docs.order.ts +355 -0
  35. package/scripts/generate-docs/generate-docs.state.ts +31 -0
  36. package/scripts/generate-docs/generate-docs.targets.ts +165 -0
  37. package/scripts/generate-docs/generate-docs.ts +63 -0
  38. package/scripts/generate-docs/generate-docs.types.ts +112 -0
  39. package/scripts/generate-docs/output/generate-docs.output.folder-index.utils.ts +167 -0
  40. package/scripts/generate-docs/output/generate-docs.output.ordering.utils.ts +353 -0
  41. package/scripts/generate-docs/output/generate-docs.output.readme.utils.ts +420 -0
  42. package/scripts/generate-docs/output/generate-docs.output.ts +123 -0
  43. package/scripts/generate-docs/output/generate-docs.output.warnings.utils.ts +219 -0
  44. package/scripts/generate-docs/symbols/generate-docs.symbols.collection.utils.ts +365 -0
  45. package/scripts/generate-docs/symbols/generate-docs.symbols.jsdoc.utils.ts +373 -0
  46. package/scripts/generate-docs/symbols/generate-docs.symbols.normalize.utils.ts +155 -0
  47. package/scripts/generate-docs/symbols/generate-docs.symbols.render.utils.ts +149 -0
  48. package/scripts/generate-docs/symbols/generate-docs.symbols.signature.utils.ts +289 -0
  49. package/scripts/generate-docs/symbols/generate-docs.symbols.ts +11 -0
  50. package/scripts/mermaid-cli.mjs +102 -22
  51. package/scripts/mermaid-cli.ts +736 -0
  52. package/scripts/render-docs-html/render-docs-html.assets.ts +54 -0
  53. package/scripts/render-docs-html/render-docs-html.mermaid.ts +245 -0
  54. package/scripts/{render-docs-html.sidebar.ts → render-docs-html/render-docs-html.navigation.ts} +141 -144
  55. package/scripts/render-docs-html/render-docs-html.pages.ts +333 -0
  56. package/scripts/render-docs-html/render-docs-html.shared.ts +333 -0
  57. package/scripts/render-docs-html/render-docs-html.types.ts +42 -0
  58. package/scripts/render-docs-html.ts +23 -587
  59. package/scripts/run-docs.ts +238 -0
  60. package/scripts/write-dist-docs-pkg.ts +40 -0
  61. package/src/README.md +75 -75
  62. package/src/architecture/connection/README.md +5 -5
  63. package/src/architecture/layer/README.md +508 -508
  64. package/src/architecture/network/README.md +1458 -1458
  65. package/src/architecture/network/activate/README.md +694 -694
  66. package/src/architecture/network/bootstrap/README.md +77 -77
  67. package/src/architecture/network/connect/README.md +74 -74
  68. package/src/architecture/network/deterministic/README.md +135 -135
  69. package/src/architecture/network/evolve/README.md +364 -364
  70. package/src/architecture/network/gating/README.md +130 -130
  71. package/src/architecture/network/genetic/README.md +399 -399
  72. package/src/architecture/network/mutate/README.md +897 -897
  73. package/src/architecture/network/onnx/README.md +720 -720
  74. package/src/architecture/network/onnx/export/README.md +728 -728
  75. package/src/architecture/network/onnx/export/layers/README.md +450 -450
  76. package/src/architecture/network/onnx/import/README.md +618 -618
  77. package/src/architecture/network/onnx/schema/README.md +32 -32
  78. package/src/architecture/network/prune/README.md +245 -245
  79. package/src/architecture/network/remove/README.md +135 -135
  80. package/src/architecture/network/runtime/README.md +106 -106
  81. package/src/architecture/network/serialize/README.md +542 -542
  82. package/src/architecture/network/slab/README.md +608 -608
  83. package/src/architecture/network/standalone/README.md +212 -212
  84. package/src/architecture/network/stats/README.md +84 -84
  85. package/src/architecture/network/topology/README.md +465 -465
  86. package/src/architecture/network/training/README.md +200 -200
  87. package/src/architecture/node/README.md +5 -5
  88. package/src/architecture/nodePool/README.md +14 -14
  89. package/src/methods/README.md +99 -99
  90. package/src/methods/activation/README.md +189 -189
  91. package/src/methods/cost/README.md +131 -131
  92. package/src/methods/rate/README.md +86 -86
  93. package/src/multithreading/README.md +77 -77
  94. package/src/multithreading/workers/browser/README.md +8 -8
  95. package/src/multithreading/workers/node/README.md +8 -8
  96. package/src/neat/README.md +148 -148
  97. package/src/neat/adaptive/README.md +120 -120
  98. package/src/neat/adaptive/acceptance/README.md +40 -40
  99. package/src/neat/adaptive/complexity/README.md +137 -137
  100. package/src/neat/adaptive/core/README.md +197 -197
  101. package/src/neat/adaptive/lineage/README.md +90 -90
  102. package/src/neat/adaptive/mutation/README.md +284 -284
  103. package/src/neat/compat/README.md +43 -43
  104. package/src/neat/compat/core/README.md +90 -90
  105. package/src/neat/diversity/README.md +35 -35
  106. package/src/neat/diversity/core/README.md +88 -88
  107. package/src/neat/evaluate/README.md +85 -85
  108. package/src/neat/evaluate/auto-distance/README.md +75 -75
  109. package/src/neat/evaluate/entropy-compat/README.md +37 -37
  110. package/src/neat/evaluate/entropy-sharing/README.md +43 -43
  111. package/src/neat/evaluate/fitness/README.md +23 -23
  112. package/src/neat/evaluate/novelty/README.md +120 -120
  113. package/src/neat/evaluate/objectives/README.md +17 -17
  114. package/src/neat/evaluate/shared/README.md +94 -94
  115. package/src/neat/evolve/README.md +96 -96
  116. package/src/neat/evolve/adaptive/README.md +60 -60
  117. package/src/neat/evolve/objectives/README.md +63 -63
  118. package/src/neat/evolve/offspring/README.md +56 -56
  119. package/src/neat/evolve/population/README.md +171 -171
  120. package/src/neat/evolve/runtime/README.md +79 -79
  121. package/src/neat/evolve/speciation/README.md +74 -74
  122. package/src/neat/evolve/warnings/README.md +10 -10
  123. package/src/neat/export/README.md +114 -114
  124. package/src/neat/helpers/README.md +50 -50
  125. package/src/neat/init/README.md +9 -9
  126. package/src/neat/lineage/core/README.md +101 -101
  127. package/src/neat/multiobjective/category/README.md +74 -74
  128. package/src/neat/multiobjective/crowding/README.md +272 -272
  129. package/src/neat/multiobjective/dominance/README.md +171 -171
  130. package/src/neat/multiobjective/fronts/README.md +68 -68
  131. package/src/neat/multiobjective/metrics/README.md +43 -43
  132. package/src/neat/multiobjective/objectives/README.md +31 -31
  133. package/src/neat/multiobjective/shared/README.md +27 -27
  134. package/src/neat/mutation/README.md +97 -97
  135. package/src/neat/mutation/add-conn/README.md +115 -115
  136. package/src/neat/mutation/add-node/README.md +126 -126
  137. package/src/neat/mutation/flow/README.md +149 -149
  138. package/src/neat/mutation/repair/README.md +185 -185
  139. package/src/neat/mutation/select/README.md +117 -117
  140. package/src/neat/mutation/shared/README.md +32 -32
  141. package/src/neat/objectives/README.md +25 -25
  142. package/src/neat/objectives/core/README.md +67 -67
  143. package/src/neat/pruning/README.md +40 -40
  144. package/src/neat/pruning/core/README.md +171 -171
  145. package/src/neat/pruning/facade/README.md +32 -32
  146. package/src/neat/rng/README.md +104 -104
  147. package/src/neat/rng/core/README.md +137 -137
  148. package/src/neat/rng/facade/README.md +50 -50
  149. package/src/neat/selection/README.md +111 -111
  150. package/src/neat/selection/core/README.md +227 -227
  151. package/src/neat/selection/facade/README.md +61 -61
  152. package/src/neat/shared/README.md +163 -163
  153. package/src/neat/speciation/README.md +31 -31
  154. package/src/neat/speciation/threshold/README.md +35 -35
  155. package/src/neat/species/README.md +25 -25
  156. package/src/neat/species/core/README.md +20 -20
  157. package/src/neat/species/core/shared/README.md +18 -18
  158. package/src/neat/species/history/context/README.md +22 -22
  159. package/src/neat/telemetry/accessors/README.md +58 -58
  160. package/src/neat/telemetry/exports/README.md +233 -233
  161. package/src/neat/telemetry/facade/README.md +252 -252
  162. package/src/neat/telemetry/facade/archive/README.md +57 -57
  163. package/src/neat/telemetry/facade/buffer/README.md +43 -43
  164. package/src/neat/telemetry/facade/lineage/README.md +12 -12
  165. package/src/neat/telemetry/facade/objectives/README.md +44 -44
  166. package/src/neat/telemetry/facade/runtime/README.md +26 -26
  167. package/src/neat/telemetry/facade/species/README.md +27 -27
  168. package/src/neat/telemetry/metrics/README.md +696 -696
  169. package/src/neat/telemetry/recorder/README.md +57 -57
  170. package/src/neat/telemetry/types/README.md +32 -32
  171. package/src/neat/topology-intent/README.md +75 -75
  172. package/src/utils/README.md +193 -193
  173. package/test/examples/asciiMaze/browser-entry/README.md +92 -92
  174. package/test/examples/asciiMaze/dashboardManager/README.md +109 -109
  175. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +28 -28
  176. package/test/examples/asciiMaze/evolutionEngine/README.md +1527 -1527
  177. package/test/examples/asciiMaze/mazeMovement/README.md +105 -105
  178. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +16 -16
  179. package/test/examples/asciiMaze/mazeMovement/policy/README.md +57 -57
  180. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +52 -52
  181. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +46 -46
  182. package/test/examples/flappy_bird/browser-entry/README.md +508 -508
  183. package/test/examples/flappy_bird/browser-entry/host/README.md +101 -101
  184. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +144 -144
  185. package/test/examples/flappy_bird/browser-entry/network-view/README.md +194 -194
  186. package/test/examples/flappy_bird/browser-entry/playback/README.md +278 -278
  187. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +129 -129
  188. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +502 -502
  189. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +139 -139
  190. package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +10 -10
  191. package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +43 -43
  192. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +30 -30
  193. package/test/examples/flappy_bird/browser-entry/runtime/README.md +59 -59
  194. package/test/examples/flappy_bird/browser-entry/visualization/README.md +276 -276
  195. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +16 -16
  196. package/test/examples/flappy_bird/constants/README.md +1070 -1070
  197. package/test/examples/flappy_bird/environment/README.md +22 -22
  198. package/test/examples/flappy_bird/evaluation/README.md +32 -32
  199. package/test/examples/flappy_bird/evaluation/rollout/README.md +141 -141
  200. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +425 -425
  201. package/test/examples/flappy_bird/simulation-shared/README.md +170 -170
  202. package/test/examples/flappy_bird/simulation-shared/observation/README.md +109 -109
  203. package/test/examples/flappy_bird/trainer/README.md +325 -325
  204. package/test/examples/flappy_bird/trainer/evaluation/README.md +74 -74
  205. package/scripts/analyze-trace.ts +0 -590
  206. package/scripts/copy-examples.mjs +0 -114
  207. package/scripts/export-onnx.mjs +0 -86
  208. package/scripts/generate-bench-tables.mjs +0 -182
  209. package/scripts/generate-docs.ts +0 -2900
  210. package/scripts/write-dist-docs-pkg.mjs +0 -16
@@ -18,36 +18,37 @@ this boundary exists at all.
18
18
 
19
19
  ## simulation-shared/observation/observation.ts
20
20
 
21
- ### resolveUpcomingPipes
21
+ ### resolveCoreObservationVectorFromFeatures
22
22
 
23
23
  ```ts
24
- resolveUpcomingPipes(
25
- pipes: SharedPipeLike[],
26
- birdCenterXPx: number,
27
- birdRadiusPx: number,
28
- pipeWidthPx: number,
29
- ): [SharedPipeLike | undefined, SharedPipeLike | undefined]
24
+ resolveCoreObservationVectorFromFeatures(
25
+ features: SharedObservationFeatures,
26
+ ): number[]
30
27
  ```
31
28
 
32
- Resolves the next two upcoming pipes in front of the bird.
29
+ Resolves the compact core vector used for temporal stacking.
33
30
 
34
- The observation pipeline only cares about the immediate near future, because
35
- Flappy Bird decisions are dominated by the next gap and the transition after
36
- it. Looking further ahead adds noise faster than it adds useful control
37
- signal.
31
+ The core intentionally keeps directly observed kinematic and geometric
32
+ channels while dropping derived one-step predictors that become redundant
33
+ once short-term temporal memory is available.
34
+
35
+ This is the representation used when the example wants a short history of raw
36
+ observation slices. The idea is similar to frame stacking in reinforcement
37
+ learning: a feed-forward policy can recover some sense of motion by looking
38
+ at several recent compact frames at once.
39
+
40
+ The Wikipedia article on "frame stacking" is a useful conceptual reference.
38
41
 
39
42
  Parameters:
40
- - `pipes` - - Current pipe list.
41
- - `birdCenterXPx` - - Bird center x-position.
42
- - `birdRadiusPx` - - Bird radius.
43
- - `pipeWidthPx` - - Pipe width.
43
+ - `features` - - Structured observation features.
44
44
 
45
- Returns: Tuple of first and second upcoming pipes.
45
+ Returns: Core per-frame vector.
46
46
 
47
47
  Example:
48
48
 
49
49
  ```ts
50
- const [nextPipe, secondPipe] = resolveUpcomingPipes(pipes);
50
+ const coreFrame = resolveCoreObservationVectorFromFeatures(features);
51
+ observationMemoryState.previousCoreFrames.push(coreFrame);
51
52
  ```
52
53
 
53
54
  ### resolveObservationFeatures
@@ -132,41 +133,6 @@ const features = resolveObservationFeatures(input);
132
133
  const networkInput = resolveObservationVectorFromFeatures(features);
133
134
  ```
134
135
 
135
- ### resolveCoreObservationVectorFromFeatures
136
-
137
- ```ts
138
- resolveCoreObservationVectorFromFeatures(
139
- features: SharedObservationFeatures,
140
- ): number[]
141
- ```
142
-
143
- Resolves the compact core vector used for temporal stacking.
144
-
145
- The core intentionally keeps directly observed kinematic and geometric
146
- channels while dropping derived one-step predictors that become redundant
147
- once short-term temporal memory is available.
148
-
149
- This is the representation used when the example wants a short history of raw
150
- observation slices. The idea is similar to frame stacking in reinforcement
151
- learning: a feed-forward policy can recover some sense of motion by looking
152
- at several recent compact frames at once.
153
-
154
- The Wikipedia article on "frame stacking" is a useful conceptual reference.
155
-
156
- Parameters:
157
- - `features` - - Structured observation features.
158
-
159
- Returns: Core per-frame vector.
160
-
161
- Example:
162
-
163
- ```ts
164
- const coreFrame = resolveCoreObservationVectorFromFeatures(features);
165
- observationMemoryState.previousCoreFrames.push(coreFrame);
166
- ```
167
-
168
- ## simulation-shared/observation/observation.features.utils.ts
169
-
170
136
  ### resolveUpcomingPipes
171
137
 
172
138
  ```ts
@@ -199,6 +165,48 @@ Example:
199
165
  const [nextPipe, secondPipe] = resolveUpcomingPipes(pipes);
200
166
  ```
201
167
 
168
+ ## simulation-shared/observation/observation.features.utils.ts
169
+
170
+ ### clamp
171
+
172
+ ```ts
173
+ clamp(
174
+ value: number,
175
+ min: number,
176
+ max: number,
177
+ ): number
178
+ ```
179
+
180
+ Clamps a numeric value to the inclusive [min, max] interval.
181
+
182
+ Observation synthesis normalizes many raw measurements, so this helper keeps
183
+ derived channels inside their documented ranges.
184
+
185
+ Parameters:
186
+ - `value` - - Candidate value.
187
+ - `min` - - Inclusive lower bound.
188
+ - `max` - - Inclusive upper bound.
189
+
190
+ Returns: Clamped value.
191
+
192
+ ### clamp01
193
+
194
+ ```ts
195
+ clamp01(
196
+ value: number,
197
+ ): number
198
+ ```
199
+
200
+ Clamps a numeric value to the inclusive [0, 1] interval.
201
+
202
+ This is used for channels that are naturally interpreted as normalized
203
+ proportions or bounded progress values.
204
+
205
+ Parameters:
206
+ - `value` - - Candidate value.
207
+
208
+ Returns: Value clamped between 0 and 1.
209
+
202
210
  ### resolveObservationFeatures
203
211
 
204
212
  ```ts
@@ -274,47 +282,72 @@ Parameters:
274
282
 
275
283
  Returns: Predicted y-position.
276
284
 
277
- ### clamp
285
+ ### resolveUpcomingPipes
278
286
 
279
287
  ```ts
280
- clamp(
281
- value: number,
282
- min: number,
283
- max: number,
284
- ): number
288
+ resolveUpcomingPipes(
289
+ pipes: SharedPipeLike[],
290
+ birdCenterXPx: number,
291
+ birdRadiusPx: number,
292
+ pipeWidthPx: number,
293
+ ): [SharedPipeLike | undefined, SharedPipeLike | undefined]
285
294
  ```
286
295
 
287
- Clamps a numeric value to the inclusive [min, max] interval.
296
+ Resolves the next two upcoming pipes in front of the bird.
288
297
 
289
- Observation synthesis normalizes many raw measurements, so this helper keeps
290
- derived channels inside their documented ranges.
298
+ The observation pipeline only cares about the immediate near future, because
299
+ Flappy Bird decisions are dominated by the next gap and the transition after
300
+ it. Looking further ahead adds noise faster than it adds useful control
301
+ signal.
291
302
 
292
303
  Parameters:
293
- - `value` - - Candidate value.
294
- - `min` - - Inclusive lower bound.
295
- - `max` - - Inclusive upper bound.
304
+ - `pipes` - - Current pipe list.
305
+ - `birdCenterXPx` - - Bird center x-position.
306
+ - `birdRadiusPx` - - Bird radius.
307
+ - `pipeWidthPx` - - Pipe width.
296
308
 
297
- Returns: Clamped value.
309
+ Returns: Tuple of first and second upcoming pipes.
298
310
 
299
- ### clamp01
311
+ Example:
300
312
 
301
313
  ```ts
302
- clamp01(
303
- value: number,
304
- ): number
314
+ const [nextPipe, secondPipe] = resolveUpcomingPipes(pipes);
305
315
  ```
306
316
 
307
- Clamps a numeric value to the inclusive [0, 1] interval.
317
+ ## simulation-shared/observation/observation.vector.utils.ts
308
318
 
309
- This is used for channels that are naturally interpreted as normalized
310
- proportions or bounded progress values.
319
+ ### resolveCoreObservationVectorFromFeatures
320
+
321
+ ```ts
322
+ resolveCoreObservationVectorFromFeatures(
323
+ features: SharedObservationFeatures,
324
+ ): number[]
325
+ ```
326
+
327
+ Resolves the compact core vector used for temporal stacking.
328
+
329
+ The core intentionally keeps directly observed kinematic and geometric
330
+ channels while dropping derived one-step predictors that become redundant
331
+ once short-term temporal memory is available.
332
+
333
+ This is the representation used when the example wants a short history of raw
334
+ observation slices. The idea is similar to frame stacking in reinforcement
335
+ learning: a feed-forward policy can recover some sense of motion by looking
336
+ at several recent compact frames at once.
337
+
338
+ The Wikipedia article on "frame stacking" is a useful conceptual reference.
311
339
 
312
340
  Parameters:
313
- - `value` - - Candidate value.
341
+ - `features` - - Structured observation features.
314
342
 
315
- Returns: Value clamped between 0 and 1.
343
+ Returns: Core per-frame vector.
316
344
 
317
- ## simulation-shared/observation/observation.vector.utils.ts
345
+ Example:
346
+
347
+ ```ts
348
+ const coreFrame = resolveCoreObservationVectorFromFeatures(features);
349
+ observationMemoryState.previousCoreFrames.push(coreFrame);
350
+ ```
318
351
 
319
352
  ### resolveObservationVectorFromFeatures
320
353
 
@@ -346,36 +379,3 @@ Example:
346
379
  const features = resolveObservationFeatures(input);
347
380
  const networkInput = resolveObservationVectorFromFeatures(features);
348
381
  ```
349
-
350
- ### resolveCoreObservationVectorFromFeatures
351
-
352
- ```ts
353
- resolveCoreObservationVectorFromFeatures(
354
- features: SharedObservationFeatures,
355
- ): number[]
356
- ```
357
-
358
- Resolves the compact core vector used for temporal stacking.
359
-
360
- The core intentionally keeps directly observed kinematic and geometric
361
- channels while dropping derived one-step predictors that become redundant
362
- once short-term temporal memory is available.
363
-
364
- This is the representation used when the example wants a short history of raw
365
- observation slices. The idea is similar to frame stacking in reinforcement
366
- learning: a feed-forward policy can recover some sense of motion by looking
367
- at several recent compact frames at once.
368
-
369
- The Wikipedia article on "frame stacking" is a useful conceptual reference.
370
-
371
- Parameters:
372
- - `features` - - Structured observation features.
373
-
374
- Returns: Core per-frame vector.
375
-
376
- Example:
377
-
378
- ```ts
379
- const coreFrame = resolveCoreObservationVectorFromFeatures(features);
380
- observationMemoryState.previousCoreFrames.push(coreFrame);
381
- ```