@buley/hexgrid-3d 3.0.1 → 3.2.0

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 (209) hide show
  1. package/dist/HexGridEnhanced.d.ts +15 -0
  2. package/dist/HexGridEnhanced.d.ts.map +1 -0
  3. package/dist/HexGridEnhanced.js +1 -0
  4. package/dist/Snapshot.d.ts +594 -0
  5. package/dist/Snapshot.d.ts.map +1 -0
  6. package/dist/Snapshot.js +757 -0
  7. package/dist/adapters/DashAdapter.d.ts +18 -0
  8. package/dist/adapters/DashAdapter.d.ts.map +1 -0
  9. package/dist/adapters/DashAdapter.js +42 -0
  10. package/dist/adapters.d.ts +53 -0
  11. package/dist/adapters.d.ts.map +1 -0
  12. package/dist/adapters.js +14 -0
  13. package/dist/algorithms/AdvancedStatistics.d.ts +52 -0
  14. package/dist/algorithms/AdvancedStatistics.d.ts.map +1 -0
  15. package/dist/algorithms/AdvancedStatistics.js +307 -0
  16. package/dist/algorithms/BayesianStatistics.d.ts +86 -0
  17. package/dist/algorithms/BayesianStatistics.d.ts.map +1 -0
  18. package/dist/algorithms/BayesianStatistics.js +263 -0
  19. package/dist/algorithms/FlowField.d.ts +55 -0
  20. package/dist/algorithms/FlowField.d.ts.map +1 -0
  21. package/dist/algorithms/FlowField.js +80 -0
  22. package/dist/algorithms/FlowField3D.d.ts +166 -0
  23. package/dist/algorithms/FlowField3D.d.ts.map +1 -0
  24. package/dist/algorithms/FlowField3D.js +327 -0
  25. package/dist/algorithms/FluidEngineFactory.d.ts +15 -0
  26. package/dist/algorithms/FluidEngineFactory.d.ts.map +1 -0
  27. package/dist/algorithms/FluidEngineFactory.js +41 -0
  28. package/dist/algorithms/FluidSimulation.d.ts +41 -0
  29. package/dist/algorithms/FluidSimulation.d.ts.map +1 -0
  30. package/dist/algorithms/FluidSimulation.js +74 -0
  31. package/dist/algorithms/FluidSimulation3D.d.ts +137 -0
  32. package/dist/algorithms/FluidSimulation3D.d.ts.map +1 -0
  33. package/dist/algorithms/FluidSimulation3D.js +464 -0
  34. package/dist/algorithms/FluidSimulation3DGPU.d.ts +41 -0
  35. package/dist/algorithms/FluidSimulation3DGPU.d.ts.map +1 -0
  36. package/dist/algorithms/FluidSimulation3DGPU.js +328 -0
  37. package/dist/algorithms/FluidSimulationWebNN.d.ts +56 -0
  38. package/dist/algorithms/FluidSimulationWebNN.d.ts.map +1 -0
  39. package/dist/algorithms/FluidSimulationWebNN.js +84 -0
  40. package/dist/algorithms/GraphAlgorithms.d.ts +48 -0
  41. package/dist/algorithms/GraphAlgorithms.d.ts.map +1 -0
  42. package/dist/algorithms/GraphAlgorithms.js +122 -0
  43. package/dist/algorithms/OutlierDetection.d.ts +49 -0
  44. package/dist/algorithms/OutlierDetection.d.ts.map +1 -0
  45. package/dist/algorithms/OutlierDetection.js +284 -0
  46. package/dist/algorithms/ParticleSystem.d.ts +36 -0
  47. package/dist/algorithms/ParticleSystem.d.ts.map +1 -0
  48. package/dist/algorithms/ParticleSystem.js +59 -0
  49. package/dist/algorithms/ParticleSystem3D.d.ts +206 -0
  50. package/dist/algorithms/ParticleSystem3D.d.ts.map +1 -0
  51. package/dist/algorithms/ParticleSystem3D.js +371 -0
  52. package/dist/algorithms/index.d.ts +16 -0
  53. package/dist/algorithms/index.d.ts.map +1 -0
  54. package/{src/algorithms/index.ts → dist/algorithms/index.js} +0 -2
  55. package/dist/compat.d.ts +24 -0
  56. package/dist/compat.d.ts.map +1 -0
  57. package/dist/compat.js +88 -0
  58. package/dist/components/HexGrid.d.ts +5 -0
  59. package/dist/components/HexGrid.d.ts.map +1 -0
  60. package/dist/components/HexGrid.js +39 -0
  61. package/dist/components/NarrationOverlay.d.ts +16 -0
  62. package/dist/components/NarrationOverlay.d.ts.map +1 -0
  63. package/dist/components/NarrationOverlay.js +132 -0
  64. package/{src/components/index.ts → dist/components/index.d.ts} +1 -1
  65. package/dist/components/index.d.ts.map +1 -0
  66. package/dist/components/index.js +1 -0
  67. package/dist/features.d.ts +54 -0
  68. package/dist/features.d.ts.map +1 -0
  69. package/dist/features.js +74 -0
  70. package/dist/index.d.ts +12 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +17 -0
  73. package/dist/lib/narration.d.ts +12 -0
  74. package/dist/lib/narration.d.ts.map +1 -0
  75. package/dist/lib/narration.js +8 -0
  76. package/dist/lib/stats-tracker.d.ts +7 -0
  77. package/dist/lib/stats-tracker.d.ts.map +1 -0
  78. package/dist/lib/stats-tracker.js +22 -0
  79. package/dist/lib/theme-colors.d.ts +7 -0
  80. package/dist/lib/theme-colors.d.ts.map +1 -0
  81. package/dist/lib/theme-colors.js +10 -0
  82. package/dist/math/HexCoordinates.d.ts +140 -0
  83. package/dist/math/HexCoordinates.d.ts.map +1 -0
  84. package/dist/math/HexCoordinates.js +741 -0
  85. package/dist/math/Matrix4.d.ts +9 -0
  86. package/dist/math/Matrix4.d.ts.map +1 -0
  87. package/dist/math/Matrix4.js +19 -0
  88. package/dist/math/Quaternion.d.ts +11 -0
  89. package/dist/math/Quaternion.d.ts.map +1 -0
  90. package/dist/math/Quaternion.js +23 -0
  91. package/dist/math/SpatialIndex.d.ts +34 -0
  92. package/dist/math/SpatialIndex.d.ts.map +1 -0
  93. package/dist/math/SpatialIndex.js +75 -0
  94. package/dist/math/Vector3.d.ts +110 -0
  95. package/dist/math/Vector3.d.ts.map +1 -0
  96. package/dist/math/Vector3.js +426 -0
  97. package/dist/math/index.d.ts +11 -0
  98. package/dist/math/index.d.ts.map +1 -0
  99. package/{src/math/index.ts → dist/math/index.js} +0 -1
  100. package/dist/note-adapter.d.ts +44 -0
  101. package/dist/note-adapter.d.ts.map +1 -0
  102. package/dist/note-adapter.js +86 -0
  103. package/dist/ontology-adapter.d.ts +13 -0
  104. package/dist/ontology-adapter.d.ts.map +1 -0
  105. package/dist/ontology-adapter.js +65 -0
  106. package/dist/stores/index.d.ts +2 -0
  107. package/dist/stores/index.d.ts.map +1 -0
  108. package/dist/stores/uiStore.d.ts +18 -0
  109. package/dist/stores/uiStore.d.ts.map +1 -0
  110. package/dist/stores/uiStore.js +77 -0
  111. package/dist/types/index.d.ts +4 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +1 -0
  114. package/dist/types.d.ts +126 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +4 -0
  117. package/dist/utils/image-utils.d.ts +13 -0
  118. package/dist/utils/image-utils.d.ts.map +1 -0
  119. package/dist/utils/image-utils.js +23 -0
  120. package/dist/wasm/HexGridWasmWrapper.d.ts +131 -0
  121. package/dist/wasm/HexGridWasmWrapper.d.ts.map +1 -0
  122. package/dist/wasm/HexGridWasmWrapper.js +610 -0
  123. package/dist/wasm/index.d.ts +7 -0
  124. package/dist/wasm/index.d.ts.map +1 -0
  125. package/{src/wasm/index.ts → dist/wasm/index.js} +0 -1
  126. package/dist/webgpu/WebGPUContext.d.ts +20 -0
  127. package/dist/webgpu/WebGPUContext.d.ts.map +1 -0
  128. package/dist/webgpu/WebGPUContext.js +60 -0
  129. package/dist/webnn/WebNNContext.d.ts +38 -0
  130. package/dist/webnn/WebNNContext.d.ts.map +1 -0
  131. package/dist/webnn/WebNNContext.js +66 -0
  132. package/dist/workers/hexgrid-math.d.ts +79 -0
  133. package/dist/workers/hexgrid-math.d.ts.map +1 -0
  134. package/dist/workers/hexgrid-math.js +136 -0
  135. package/dist/workers/hexgrid-worker.worker.d.ts +35 -0
  136. package/dist/workers/hexgrid-worker.worker.d.ts.map +1 -0
  137. package/dist/workers/hexgrid-worker.worker.js +2014 -0
  138. package/package.json +20 -7
  139. package/.eslintrc.json +0 -28
  140. package/build_log.txt +0 -500
  141. package/build_src_log.txt +0 -8
  142. package/examples/basic-usage.tsx +0 -52
  143. package/public/hexgrid-worker.js +0 -2475
  144. package/rust/Cargo.toml +0 -41
  145. package/rust/src/lib.rs +0 -740
  146. package/rust/src/math.rs +0 -574
  147. package/rust/src/spatial.rs +0 -245
  148. package/rust/src/statistics.rs +0 -496
  149. package/site/.eslintrc.json +0 -3
  150. package/site/DEPLOYMENT.md +0 -196
  151. package/site/INDEX.md +0 -127
  152. package/site/QUICK_START.md +0 -86
  153. package/site/README.md +0 -85
  154. package/site/SITE_SUMMARY.md +0 -180
  155. package/site/next.config.js +0 -12
  156. package/site/package.json +0 -26
  157. package/site/src/app/docs/page.tsx +0 -272
  158. package/site/src/app/examples/page.tsx +0 -151
  159. package/site/src/app/globals.css +0 -160
  160. package/site/src/app/layout.tsx +0 -39
  161. package/site/src/app/page.tsx +0 -235
  162. package/site/tsconfig.json +0 -29
  163. package/site/vercel.json +0 -6
  164. package/src/HexGridEnhanced.ts +0 -16
  165. package/src/Snapshot.ts +0 -1607
  166. package/src/adapters/DashAdapter.ts +0 -57
  167. package/src/adapters.ts +0 -63
  168. package/src/algorithms/AdvancedStatistics.ts +0 -362
  169. package/src/algorithms/BayesianStatistics.ts +0 -348
  170. package/src/algorithms/FlowField.ts +0 -150
  171. package/src/algorithms/FlowField3D.ts +0 -573
  172. package/src/algorithms/FluidEngineFactory.ts +0 -44
  173. package/src/algorithms/FluidSimulation.ts +0 -115
  174. package/src/algorithms/FluidSimulation3D.ts +0 -664
  175. package/src/algorithms/FluidSimulation3DGPU.ts +0 -402
  176. package/src/algorithms/FluidSimulationWebNN.ts +0 -141
  177. package/src/algorithms/GraphAlgorithms.ts +0 -191
  178. package/src/algorithms/OutlierDetection.ts +0 -425
  179. package/src/algorithms/ParticleSystem.ts +0 -95
  180. package/src/algorithms/ParticleSystem3D.ts +0 -567
  181. package/src/compat.ts +0 -96
  182. package/src/components/HexGrid.tsx +0 -61
  183. package/src/components/NarrationOverlay.tsx +0 -309
  184. package/src/features.ts +0 -125
  185. package/src/index.ts +0 -30
  186. package/src/lib/narration.ts +0 -17
  187. package/src/lib/stats-tracker.ts +0 -25
  188. package/src/lib/theme-colors.ts +0 -12
  189. package/src/math/HexCoordinates.ts +0 -863
  190. package/src/math/Matrix4.ts +0 -25
  191. package/src/math/Quaternion.ts +0 -37
  192. package/src/math/SpatialIndex.ts +0 -114
  193. package/src/math/Vector3.ts +0 -540
  194. package/src/note-adapter.ts +0 -132
  195. package/src/ontology-adapter.ts +0 -84
  196. package/src/stores/uiStore.ts +0 -85
  197. package/src/types/index.ts +0 -3
  198. package/src/types/shared-utils.d.ts +0 -10
  199. package/src/types/wgsl.d.ts +0 -4
  200. package/src/types.ts +0 -164
  201. package/src/utils/image-utils.ts +0 -28
  202. package/src/wasm/HexGridWasmWrapper.ts +0 -801
  203. package/src/webgpu/WebGPUContext.ts +0 -71
  204. package/src/webgpu/shaders/fluid_sim.wgsl +0 -140
  205. package/src/webnn/WebNNContext.ts +0 -99
  206. package/src/workers/hexgrid-math.ts +0 -182
  207. package/src/workers/hexgrid-worker.worker.ts +0 -2781
  208. package/tsconfig.json +0 -26
  209. /package/{src/stores/index.ts → dist/stores/index.js} +0 -0
@@ -0,0 +1,15 @@
1
+ import type { Axial } from './math/HexCoordinates';
2
+ import type { Vector2 } from './math/Vector3';
3
+ export interface EnhancedHexCell {
4
+ index: number;
5
+ axial: Axial;
6
+ position: Vector2;
7
+ owner: number;
8
+ population: number;
9
+ infection: number;
10
+ infectedBy: number;
11
+ }
12
+ export interface EnhancedHexGridEngine {
13
+ cells?: EnhancedHexCell[];
14
+ }
15
+ //# sourceMappingURL=HexGridEnhanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HexGridEnhanced.d.ts","sourceRoot":"","sources":["../src/HexGridEnhanced.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,594 @@
1
+ /**
2
+ * Unified Snapshot API
3
+ *
4
+ * Single comprehensive API to get ALL statistics, predictions, and insights
5
+ * about the current game state in one easy method call.
6
+ *
7
+ * @module Snapshot
8
+ *
9
+ * @example Basic Usage
10
+ * ```typescript
11
+ * import { generateSnapshot } from '@buley/hexgrid-3d'
12
+ *
13
+ * const snapshot = generateSnapshot(cells, history, conquests, getNeighbors)
14
+ *
15
+ * // Access player data
16
+ * console.log(snapshot.players[0].winProbability) // 0.72
17
+ * console.log(snapshot.players[0].sparklineAscii) // "▁▂▃▅▆█"
18
+ *
19
+ * // Access game state
20
+ * console.log(snapshot.indices.dominance) // 0.65
21
+ * console.log(snapshot.predictions.likelyWinner) // 2
22
+ *
23
+ * // Get insights
24
+ * console.log(snapshot.insights)
25
+ * // ["🏆 Player 2 dominates with 65.2% of territory",
26
+ * // "🚀 Leader's territory growing steadily"]
27
+ * ```
28
+ *
29
+ * @example Full Response Object
30
+ * ```typescript
31
+ * // GameSnapshot example response:
32
+ * const exampleSnapshot: GameSnapshot = {
33
+ * timestamp: 1705678800000,
34
+ * turnNumber: 45,
35
+ * totalCells: 1000,
36
+ * occupiedCells: 850,
37
+ * playerCount: 4,
38
+ *
39
+ * players: [{
40
+ * id: 2,
41
+ * cellCount: 320,
42
+ * shareOfTotal: 0.376,
43
+ * rank: 1,
44
+ * historyLength: 45,
45
+ * history: [10, 15, 22, 35, ...],
46
+ * recentTrend: 'growing',
47
+ * trendSlope: 4.2,
48
+ * trendConfidence: 0.89,
49
+ * winProbability: 0.72,
50
+ * winCredibleInterval: [0.58, 0.84],
51
+ * forecastNext10: [325, 330, 338, ...],
52
+ * kalmanEstimate: 322.5,
53
+ * kalmanUncertainty: 12.3,
54
+ * conquestRate: 0.15,
55
+ * conquestRateCI: [0.12, 0.18],
56
+ * avgGrowthPerTurn: 6.8,
57
+ * volatility: 0.23,
58
+ * numRegions: 2,
59
+ * largestRegionSize: 290,
60
+ * borderCellCount: 85,
61
+ * compactness: 0.72,
62
+ * sparklineAscii: "▁▂▃▄▅▆▇█",
63
+ * sparklineSvgPath: "M0,30 L10,25 L20,18...",
64
+ * leadOverSecond: 45,
65
+ * turnsUntilOvertake: null
66
+ * }, ...],
67
+ *
68
+ * inequality: {
69
+ * gini: 0.42,
70
+ * theil: 0.35,
71
+ * atkinson: 0.28,
72
+ * herfindahl: 0.31,
73
+ * paretoRatio: 0.72,
74
+ * zipfCoefficient: 1.15,
75
+ * interpretation: "Emerging dominance"
76
+ * },
77
+ *
78
+ * indices: {
79
+ * dominance: 0.65,
80
+ * volatility: 0.35,
81
+ * predictability: 0.72,
82
+ * competitiveness: 0.45,
83
+ * stability: 0.68
84
+ * },
85
+ *
86
+ * predictions: {
87
+ * likelyWinner: 2,
88
+ * winnerConfidence: 0.72,
89
+ * estimatedTurnsToVictory: 25,
90
+ * isEndgame: false,
91
+ * secondPlaceChallenger: 3,
92
+ * comebackPossibility: 0.28
93
+ * },
94
+ *
95
+ * anomalies: {
96
+ * outliers: [{ playerId: 4, type: 'growth_explosion', ... }],
97
+ * hasAnomalies: true,
98
+ * anomalyCount: 1
99
+ * },
100
+ *
101
+ * insights: [
102
+ * "📈 Player 2 leads with majority control (37.6%)",
103
+ * "🚀 Leader's territory growing steadily (slope: 4.2/turn)",
104
+ * "🎯 Player 3 has 22.5% chance of winning"
105
+ * ]
106
+ * }
107
+ * ```
108
+ */
109
+ import { type TerritoryStats } from './algorithms/AdvancedStatistics';
110
+ import { type ProbabilitySnapshot } from './algorithms/BayesianStatistics';
111
+ import { type OutlierResult, type TimeSeriesAnomaly, type GameAnomaly, type MultivariateOutlierResult } from './algorithms/OutlierDetection';
112
+ /**
113
+ * Player-specific statistics
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * const player: PlayerSnapshot = {
118
+ * id: 1,
119
+ * cellCount: 150,
120
+ * shareOfTotal: 0.25,
121
+ * rank: 2,
122
+ * historyLength: 30,
123
+ * history: [10, 15, 25, 40, 60, 90, 120, 150],
124
+ * recentTrend: 'growing',
125
+ * trendSlope: 5.2,
126
+ * trendConfidence: 0.92,
127
+ * winProbability: 0.35,
128
+ * winCredibleInterval: [0.22, 0.48],
129
+ * forecastNext10: [155, 162, 170, 178, 186, 195, 204, 213, 223, 233],
130
+ * kalmanEstimate: 152.3,
131
+ * kalmanUncertainty: 8.5,
132
+ * conquestRate: 0.12,
133
+ * conquestRateCI: [0.08, 0.16],
134
+ * avgGrowthPerTurn: 4.8,
135
+ * volatility: 0.18,
136
+ * numRegions: 1,
137
+ * largestRegionSize: 150,
138
+ * borderCellCount: 42,
139
+ * compactness: 0.78,
140
+ * sparklineAscii: "▁▂▃▄▅▆▇█",
141
+ * sparklineSvgPath: "M0,30 L12.5,25 L25,18 L37.5,12...",
142
+ * leadOverSecond: null, // not the leader
143
+ * turnsUntilOvertake: 8
144
+ * }
145
+ * ```
146
+ */
147
+ export interface PlayerSnapshot {
148
+ /** Unique player identifier */
149
+ id: number;
150
+ /** Current number of cells owned */
151
+ cellCount: number;
152
+ /** Fraction of total occupied cells (0-1) */
153
+ shareOfTotal: number;
154
+ /** Current ranking (1 = leader) */
155
+ rank: number;
156
+ /** Number of turns of history available */
157
+ historyLength: number;
158
+ /** Territory count history (last 20 turns unless includeFullHistory=true) */
159
+ history: number[];
160
+ /** Recent territory trend direction */
161
+ recentTrend: 'growing' | 'shrinking' | 'stable';
162
+ /** Linear regression slope (cells per turn) */
163
+ trendSlope: number;
164
+ /** R² confidence in trend (0-1) */
165
+ trendConfidence: number;
166
+ /** Bayesian probability of winning (0-1) */
167
+ winProbability: number;
168
+ /** 95% credible interval for win probability */
169
+ winCredibleInterval: [number, number];
170
+ /** Forecasted territory for next 10 turns */
171
+ forecastNext10: number[];
172
+ /** Kalman filter smoothed estimate */
173
+ kalmanEstimate: number;
174
+ /** Kalman filter uncertainty (±) */
175
+ kalmanUncertainty: number;
176
+ /** Bayesian conquest success rate */
177
+ conquestRate: number;
178
+ /** 95% credible interval for conquest rate */
179
+ conquestRateCI: [number, number];
180
+ /** Average cells gained per turn */
181
+ avgGrowthPerTurn: number;
182
+ /** Territory volatility (coefficient of variation) */
183
+ volatility: number;
184
+ /** Number of disconnected territory regions */
185
+ numRegions: number;
186
+ /** Size of largest connected region */
187
+ largestRegionSize: number;
188
+ /** Number of cells on territory border */
189
+ borderCellCount: number;
190
+ /** Territory shape compactness (0-1, higher = more compact) */
191
+ compactness: number;
192
+ /** ASCII sparkline visualization of history */
193
+ sparklineAscii: string;
194
+ /** SVG path data for sparkline */
195
+ sparklineSvgPath: string;
196
+ /** Lead over second place (null if not leader) */
197
+ leadOverSecond: number | null;
198
+ /** Estimated turns until this player could overtake leader */
199
+ turnsUntilOvertake: number | null;
200
+ }
201
+ /**
202
+ * Inequality metrics for territory distribution
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * const inequality: InequalityMetrics = {
207
+ * gini: 0.42, // 0=equal, 1=one player has all
208
+ * theil: 0.35, // 0=equal, higher=more unequal
209
+ * atkinson: 0.28, // Sensitive to lower end of distribution
210
+ * herfindahl: 0.31, // Market concentration (0.25=4 equal players)
211
+ * paretoRatio: 0.72, // Top player's share of total
212
+ * zipfCoefficient: 1.15, // Power law exponent
213
+ * interpretation: "Emerging dominance - one player pulling ahead"
214
+ * }
215
+ * ```
216
+ */
217
+ export interface InequalityMetrics {
218
+ gini: number;
219
+ theil: number;
220
+ atkinson: number;
221
+ herfindahl: number;
222
+ paretoRatio: number;
223
+ zipfCoefficient: number;
224
+ interpretation: string;
225
+ }
226
+ /**
227
+ * Diversity/entropy metrics for territory distribution
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const diversity: DiversityMetrics = {
232
+ * shannon: 1.85, // Bits of information
233
+ * normalized: 0.92, // 0-1, relative to max possible
234
+ * renyi: 1.78, // Generalized entropy (order 2)
235
+ * tsallis: 1.52, // Non-extensive entropy
236
+ * interpretation: "High diversity - competitive game"
237
+ * }
238
+ * ```
239
+ */
240
+ export interface DiversityMetrics {
241
+ shannon: number;
242
+ normalized: number;
243
+ renyi: number;
244
+ tsallis: number;
245
+ interpretation: string;
246
+ }
247
+ /**
248
+ * Distribution statistics for territory counts
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const distribution: DistributionMetrics = {
253
+ * mean: 250,
254
+ * median: 220,
255
+ * stdDev: 85,
256
+ * skewness: 0.65, // Positive = right-skewed
257
+ * kurtosis: 2.8, // 3 = normal distribution
258
+ * coefficientOfVariation: 0.34,
259
+ * iqr: 120, // Interquartile range
260
+ * min: 85,
261
+ * max: 420,
262
+ * range: 335
263
+ * }
264
+ * ```
265
+ */
266
+ export interface DistributionMetrics {
267
+ mean: number;
268
+ median: number;
269
+ stdDev: number;
270
+ skewness: number;
271
+ kurtosis: number;
272
+ coefficientOfVariation: number;
273
+ iqr: number;
274
+ min: number;
275
+ max: number;
276
+ range: number;
277
+ }
278
+ /**
279
+ * Game state indices (0-1 scale)
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const indices: GameIndices = {
284
+ * dominance: 0.65, // One player controls 65% relative
285
+ * volatility: 0.35, // 35% average change per turn
286
+ * predictability: 0.72, // 72% confidence in predictions
287
+ * competitiveness: 0.45, // 45% competitive (55% decided)
288
+ * stability: 0.68 // 68% stable territories
289
+ * }
290
+ * ```
291
+ */
292
+ export interface GameIndices {
293
+ /** How dominated by a single player (0=even, 1=total domination) */
294
+ dominance: number;
295
+ /** How much territory changes each turn (0=static, 1=chaotic) */
296
+ volatility: number;
297
+ /** How predictable outcomes are (0=random, 1=deterministic) */
298
+ predictability: number;
299
+ /** How close the competition (0=decided, 1=neck-and-neck) */
300
+ competitiveness: number;
301
+ /** How stable territory boundaries are (0=fluid, 1=locked) */
302
+ stability: number;
303
+ }
304
+ /**
305
+ * Game outcome predictions
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * const predictions: GamePredictions = {
310
+ * likelyWinner: 2,
311
+ * winnerConfidence: 0.72,
312
+ * estimatedTurnsToVictory: 25,
313
+ * isEndgame: false,
314
+ * secondPlaceChallenger: 3,
315
+ * comebackPossibility: 0.28
316
+ * }
317
+ * ```
318
+ */
319
+ export interface GamePredictions {
320
+ /** Player ID most likely to win */
321
+ likelyWinner: number | null;
322
+ /** Confidence in winner prediction (0-1) */
323
+ winnerConfidence: number;
324
+ /** Estimated turns until victory condition */
325
+ estimatedTurnsToVictory: number | null;
326
+ /** Whether game is in endgame phase */
327
+ isEndgame: boolean;
328
+ /** Second place player who could challenge */
329
+ secondPlaceChallenger: number | null;
330
+ /** Probability of comeback by non-leader */
331
+ comebackPossibility: number;
332
+ }
333
+ /**
334
+ * Territory topology metrics
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const topology: TopologyMetrics = {
339
+ * totalRegions: 8,
340
+ * averageRegionSize: 125,
341
+ * territoryFragmentation: 0.35,
342
+ * borderCellPercentage: 0.42,
343
+ * avgCompactness: 0.68
344
+ * }
345
+ * ```
346
+ */
347
+ export interface TopologyMetrics {
348
+ /** Total disconnected regions across all players */
349
+ totalRegions: number;
350
+ /** Average cells per region */
351
+ averageRegionSize: number;
352
+ /** How fragmented territories are (0=solid, 1=scattered) */
353
+ territoryFragmentation: number;
354
+ /** Percentage of cells that are border cells */
355
+ borderCellPercentage: number;
356
+ /** Average compactness across all territories */
357
+ avgCompactness: number;
358
+ }
359
+ /**
360
+ * Time series analysis metrics
361
+ *
362
+ * @example
363
+ * ```typescript
364
+ * const timeSeries: TimeSeriesMetrics = {
365
+ * overallTrend: 'divergent', // Players spreading apart
366
+ * changePoints: [12, 28, 45], // Turn numbers where behavior changed
367
+ * trendStrength: 0.78, // Strength of overall trend
368
+ * autocorrelation: 0.65, // How correlated with past values
369
+ * seasonality: false // No periodic patterns detected
370
+ * }
371
+ * ```
372
+ */
373
+ export interface TimeSeriesMetrics {
374
+ /** Overall trend type */
375
+ overallTrend: 'convergent' | 'divergent' | 'cyclical' | 'chaotic';
376
+ /** Turn numbers where significant changes occurred */
377
+ changePoints: number[];
378
+ /** Strength of overall trend (0-1) */
379
+ trendStrength: number;
380
+ /** Autocorrelation coefficient */
381
+ autocorrelation: number;
382
+ /** Whether periodic patterns detected */
383
+ seasonality: boolean;
384
+ }
385
+ /**
386
+ * Comparison metrics with past states
387
+ *
388
+ * @example
389
+ * ```typescript
390
+ * const comparisons: ComparisonMetrics = {
391
+ * vs5TurnsAgo: { 1: 15, 2: 8, 3: -12, 4: -11 }, // Territory change
392
+ * vs10TurnsAgo: { 1: 45, 2: 22, 3: -35, 4: -32 },
393
+ * divergenceFromUniform: 0.42, // How far from equal distribution
394
+ * divergenceFromPrevious: 0.08 // How much changed from last turn
395
+ * }
396
+ * ```
397
+ */
398
+ export interface ComparisonMetrics {
399
+ /** Territory change per player vs 5 turns ago */
400
+ vs5TurnsAgo: {
401
+ [playerId: number]: number;
402
+ };
403
+ /** Territory change per player vs 10 turns ago */
404
+ vs10TurnsAgo: {
405
+ [playerId: number]: number;
406
+ };
407
+ /** KL divergence from uniform distribution */
408
+ divergenceFromUniform: number;
409
+ /** JS divergence from previous turn */
410
+ divergenceFromPrevious: number;
411
+ }
412
+ /**
413
+ * Anomaly detection summary
414
+ *
415
+ * @example
416
+ * ```typescript
417
+ * const anomalies: AnomalySummary = {
418
+ * outliers: [{
419
+ * playerId: 2,
420
+ * type: 'growth_explosion',
421
+ * severity: 3.2,
422
+ * timestamp: 1705678800000,
423
+ * description: 'Unusual territory gain: +45 cells in one turn',
424
+ * metrics: { growth: 45, avgGrowth: 5.2, zscore: 3.2 }
425
+ * }],
426
+ * hasAnomalies: true,
427
+ * anomalyCount: 1,
428
+ * mostSevere: 'growth_explosion'
429
+ * }
430
+ * ```
431
+ */
432
+ export interface AnomalySummary {
433
+ /** Detected game anomalies */
434
+ outliers: GameAnomaly[];
435
+ /** Whether any anomalies were detected */
436
+ hasAnomalies: boolean;
437
+ /** Total count of anomalies */
438
+ anomalyCount: number;
439
+ /** Type of most severe anomaly (if any) */
440
+ mostSevere: string | null;
441
+ }
442
+ /**
443
+ * Complete game snapshot with all statistics
444
+ *
445
+ * @example Full Response Structure
446
+ * ```typescript
447
+ * const snapshot: GameSnapshot = {
448
+ * timestamp: 1705678800000,
449
+ * turnNumber: 45,
450
+ * totalCells: 1000,
451
+ * occupiedCells: 850,
452
+ * playerCount: 4,
453
+ *
454
+ * players: [
455
+ * { id: 2, cellCount: 320, shareOfTotal: 0.376, rank: 1, ... },
456
+ * { id: 1, cellCount: 210, shareOfTotal: 0.247, rank: 2, ... },
457
+ * { id: 3, cellCount: 180, shareOfTotal: 0.212, rank: 3, ... },
458
+ * { id: 4, cellCount: 140, shareOfTotal: 0.165, rank: 4, ... }
459
+ * ],
460
+ *
461
+ * territoryStats: { ... },
462
+ *
463
+ * inequality: {
464
+ * gini: 0.42,
465
+ * theil: 0.35,
466
+ * atkinson: 0.28,
467
+ * herfindahl: 0.31,
468
+ * paretoRatio: 0.72,
469
+ * zipfCoefficient: 1.15,
470
+ * interpretation: "Emerging dominance"
471
+ * },
472
+ *
473
+ * diversity: {
474
+ * shannon: 1.85,
475
+ * normalized: 0.92,
476
+ * renyi: 1.78,
477
+ * tsallis: 1.52,
478
+ * interpretation: "High diversity"
479
+ * },
480
+ *
481
+ * distribution: {
482
+ * mean: 212.5, median: 195, stdDev: 68.2,
483
+ * skewness: 0.65, kurtosis: 2.8,
484
+ * coefficientOfVariation: 0.32,
485
+ * iqr: 95, min: 140, max: 320, range: 180
486
+ * },
487
+ *
488
+ * indices: {
489
+ * dominance: 0.65,
490
+ * volatility: 0.35,
491
+ * predictability: 0.72,
492
+ * competitiveness: 0.45,
493
+ * stability: 0.68
494
+ * },
495
+ *
496
+ * predictions: {
497
+ * likelyWinner: 2,
498
+ * winnerConfidence: 0.72,
499
+ * estimatedTurnsToVictory: 25,
500
+ * isEndgame: false,
501
+ * secondPlaceChallenger: 1,
502
+ * comebackPossibility: 0.28
503
+ * },
504
+ *
505
+ * anomalies: {
506
+ * outliers: [],
507
+ * hasAnomalies: false,
508
+ * anomalyCount: 0,
509
+ * mostSevere: null
510
+ * },
511
+ *
512
+ * probability: { winProbabilities: Map, ... },
513
+ * topology: { totalRegions: 8, ... },
514
+ * timeSeries: { overallTrend: 'divergent', ... },
515
+ * comparisons: { vs5TurnsAgo: {...}, ... },
516
+ *
517
+ * insights: [
518
+ * "📈 Player 2 leads with 37.6% of territory",
519
+ * "🚀 Leader's territory growing steadily",
520
+ * "🎯 72% confidence in Player 2 victory"
521
+ * ]
522
+ * }
523
+ * ```
524
+ */
525
+ export interface GameSnapshot {
526
+ /** Unix timestamp when snapshot was generated */
527
+ timestamp: number;
528
+ /** Current turn number */
529
+ turnNumber: number;
530
+ /** Total cells on the grid */
531
+ totalCells: number;
532
+ /** Number of cells with an owner */
533
+ occupiedCells: number;
534
+ /** Number of active players */
535
+ playerCount: number;
536
+ /** Detailed stats for each player, sorted by rank */
537
+ players: PlayerSnapshot[];
538
+ /** Aggregate territory statistics */
539
+ territoryStats: TerritoryStats;
540
+ /** Inequality measures for territory distribution */
541
+ inequality: InequalityMetrics;
542
+ /** Diversity/entropy measures */
543
+ diversity: DiversityMetrics;
544
+ /** Statistical distribution of territory counts */
545
+ distribution: DistributionMetrics;
546
+ /** Normalized game state indicators */
547
+ indices: GameIndices;
548
+ /** Game outcome predictions */
549
+ predictions: GamePredictions;
550
+ /** Detected anomalies and outliers */
551
+ anomalies: AnomalySummary;
552
+ /** Full Bayesian probability analysis */
553
+ probability: ProbabilitySnapshot;
554
+ /** Territory topology metrics */
555
+ topology: TopologyMetrics;
556
+ /** Time series analysis */
557
+ timeSeries: TimeSeriesMetrics;
558
+ /** Comparisons with past states */
559
+ comparisons: ComparisonMetrics;
560
+ /** Human-readable insights and observations */
561
+ insights: string[];
562
+ }
563
+ export type { TerritoryStats, ProbabilitySnapshot, OutlierResult, TimeSeriesAnomaly, GameAnomaly, MultivariateOutlierResult, };
564
+ export interface SnapshotConfig {
565
+ /** Number of turns for forecasting */
566
+ forecastHorizon?: number;
567
+ /** Number of Monte Carlo samples */
568
+ monteCarloSamples?: number;
569
+ /** Include detailed history */
570
+ includeFullHistory?: boolean;
571
+ /** Calculate topology (can be expensive) */
572
+ calculateTopology?: boolean;
573
+ /** Generate insights */
574
+ generateInsights?: boolean;
575
+ }
576
+ /**
577
+ * Generate comprehensive snapshot from game state
578
+ */
579
+ export declare function generateSnapshot(cells: {
580
+ owner: number;
581
+ population?: number;
582
+ }[], territoryHistory: Map<number, number[]>, conquestCounts: Map<number, {
583
+ successes: number;
584
+ opportunities: number;
585
+ }>, getNeighbors: (cellIndex: number) => number[], config?: SnapshotConfig): GameSnapshot;
586
+ /**
587
+ * Format snapshot as human-readable text
588
+ */
589
+ export declare function formatSnapshotAsText(snapshot: GameSnapshot): string;
590
+ /**
591
+ * Export snapshot as JSON (removes functions)
592
+ */
593
+ export declare function exportSnapshotAsJSON(snapshot: GameSnapshot): string;
594
+ //# sourceMappingURL=Snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Snapshot.d.ts","sourceRoot":"","sources":["../src/Snapshot.ts"],"names":[],"mappings":"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"}