k-l-lambda commited on
Commit
6f4808d
·
1 Parent(s): e144fd4

feat: room rename and room switching with confirmation

Browse files

New features:
- Room rename: admins can rename rooms with editable input
- Room switching during game: confirmation dialog prevents accidental game abandonment
- Auto-resign when leaving active game after confirmation

Bug fixes included:
- Race conditions in join logic
- Reconnect logic to rejoin previous room
- Memory leak prevention in socket listeners
- Fixed offX() methods undefined handler

trigo-web/app/dist/assets/{index-BucvvkZ4.js → index-BW0iN4LO.js} RENAMED
The diff for this file is too large to render. See raw diff
 
trigo-web/app/dist/index.html CHANGED
@@ -5,7 +5,7 @@
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Trigo - 3D Go Game</title>
8
- <script type="module" crossorigin src="/assets/index-BucvvkZ4.js"></script>
9
  <link rel="stylesheet" crossorigin href="/assets/index-Siwlapuk.css">
10
  </head>
11
  <body>
 
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Trigo - 3D Go Game</title>
8
+ <script type="module" crossorigin src="/assets/index-BW0iN4LO.js"></script>
9
  <link rel="stylesheet" crossorigin href="/assets/index-Siwlapuk.css">
10
  </head>
11
  <body>
trigo-web/app/src/components/RoomSelector.vue CHANGED
@@ -38,7 +38,10 @@
38
  }"
39
  @click="handleSelect(room)"
40
  >
41
- <span class="room-id">{{ room.id }}</span>
 
 
 
42
  <span class="player-count" :class="playerCountClass(room)">
43
  {{ room.playerCount }}/2
44
  </span>
@@ -57,6 +60,7 @@ import { ref, computed, onMounted, onUnmounted } from "vue";
57
 
58
  export interface RoomSummary {
59
  id: string;
 
60
  playerCount: number;
61
  maxPlayers: number;
62
  status: "waiting" | "playing" | "finished";
@@ -255,11 +259,26 @@ onUnmounted(() => {
255
  }
256
 
257
  .room-item {
258
- .room-id {
259
- font-family: monospace;
 
 
 
 
 
 
 
260
  font-size: 0.85rem;
261
  color: #fff;
262
- flex: 1;
 
 
 
 
 
 
 
 
263
  }
264
 
265
  .player-count {
 
38
  }"
39
  @click="handleSelect(room)"
40
  >
41
+ <div class="room-info">
42
+ <span class="room-name">{{ room.name || room.id }}</span>
43
+ <span class="room-id">{{ room.id }}</span>
44
+ </div>
45
  <span class="player-count" :class="playerCountClass(room)">
46
  {{ room.playerCount }}/2
47
  </span>
 
60
 
61
  export interface RoomSummary {
62
  id: string;
63
+ name: string;
64
  playerCount: number;
65
  maxPlayers: number;
66
  status: "waiting" | "playing" | "finished";
 
259
  }
260
 
261
  .room-item {
262
+ .room-info {
263
+ display: flex;
264
+ flex-direction: column;
265
+ gap: 0.15rem;
266
+ flex: 1;
267
+ min-width: 0;
268
+ }
269
+
270
+ .room-name {
271
  font-size: 0.85rem;
272
  color: #fff;
273
+ overflow: hidden;
274
+ text-overflow: ellipsis;
275
+ white-space: nowrap;
276
+ }
277
+
278
+ .room-id {
279
+ font-family: monospace;
280
+ font-size: 0.7rem;
281
+ color: rgba(255, 255, 255, 0.5);
282
  }
283
 
284
  .player-count {
trigo-web/app/src/composables/useSocket.ts CHANGED
@@ -62,11 +62,24 @@ export function useSocket() {
62
  return;
63
  }
64
 
 
 
 
 
 
 
 
 
 
65
  // Send echo request and wait for response
66
  socket.emit(
67
  "echo",
68
  { message, timestamp: new Date().toISOString() },
69
  (response: any) => {
 
 
 
 
70
  if (response.error) {
71
  reject(new Error(response.error));
72
  } else {
@@ -74,11 +87,6 @@ export function useSocket() {
74
  }
75
  }
76
  );
77
-
78
- // Timeout after 5 seconds
79
- setTimeout(() => {
80
- reject(new Error("Echo request timeout"));
81
- }, 5000);
82
  });
83
  };
84
 
@@ -152,6 +160,12 @@ export function useSocket() {
152
  socket.emit("resetGame", options, callback);
153
  };
154
 
 
 
 
 
 
 
155
 
156
  // Room list management
157
 
@@ -177,20 +191,48 @@ export function useSocket() {
177
  socket.on("roomDeleted", handler);
178
  };
179
 
 
 
 
 
 
180
  // Room list event cleanup
 
 
181
  const offRoomCreated = (handler?: any): void => {
182
  const socket = getSocket();
183
- socket.off("roomCreated", handler);
 
 
 
 
184
  };
185
 
186
  const offRoomUpdated = (handler?: any): void => {
187
  const socket = getSocket();
188
- socket.off("roomUpdated", handler);
 
 
 
 
189
  };
190
 
191
  const offRoomDeleted = (handler?: any): void => {
192
  const socket = getSocket();
193
- socket.off("roomDeleted", handler);
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  };
195
 
196
 
@@ -243,49 +285,87 @@ export function useSocket() {
243
  };
244
 
245
  // Remove event listeners
 
 
246
  const offPlayerJoined = (handler?: any): void => {
247
  const socket = getSocket();
248
- socket.off("playerJoined", handler);
 
 
 
 
249
  };
250
 
251
  const offPlayerLeft = (handler?: any): void => {
252
  const socket = getSocket();
253
- socket.off("playerLeft", handler);
 
 
 
 
254
  };
255
 
256
  const offNicknameChanged = (handler?: any): void => {
257
  const socket = getSocket();
258
- socket.off("nicknameChanged", handler);
 
 
 
 
259
  };
260
 
261
  const offRoomJoined = (handler?: any): void => {
262
  const socket = getSocket();
263
- socket.off("roomJoined", handler);
 
 
 
 
264
  };
265
 
266
  const offGameUpdate = (handler?: any): void => {
267
  const socket = getSocket();
268
- socket.off("gameUpdate", handler);
 
 
 
 
269
  };
270
 
271
  const offGameEnded = (handler?: any): void => {
272
  const socket = getSocket();
273
- socket.off("gameEnded", handler);
 
 
 
 
274
  };
275
 
276
  const offGameReset = (handler?: any): void => {
277
  const socket = getSocket();
278
- socket.off("gameReset", handler);
 
 
 
 
279
  };
280
 
281
  const offPlayerDisconnected = (handler?: any): void => {
282
  const socket = getSocket();
283
- socket.off("playerDisconnected", handler);
 
 
 
 
284
  };
285
 
286
  const offError = (handler?: any): void => {
287
  const socket = getSocket();
288
- socket.off("error", handler);
 
 
 
 
289
  };
290
 
291
  // Clean up on unmount
@@ -311,6 +391,7 @@ export function useSocket() {
311
  undoMove,
312
  redoMove,
313
  resetGame,
 
314
  // Event listeners
315
  onPlayerJoined,
316
  onPlayerLeft,
@@ -324,6 +405,7 @@ export function useSocket() {
324
  onRoomCreated,
325
  onRoomUpdated,
326
  onRoomDeleted,
 
327
  // Event cleanup
328
  offPlayerJoined,
329
  offPlayerLeft,
@@ -336,14 +418,20 @@ export function useSocket() {
336
  offError,
337
  offRoomCreated,
338
  offRoomUpdated,
339
- offRoomDeleted
 
340
  };
341
  }
342
 
343
  // Export function to manually disconnect (for cleanup)
344
  export function disconnectSocket() {
345
  if (socketInstance) {
 
 
346
  socketInstance.disconnect();
347
  socketInstance = null;
 
 
 
348
  }
349
  }
 
62
  return;
63
  }
64
 
65
+ let settled = false;
66
+
67
+ // Timeout after 5 seconds
68
+ const timeoutId = window.setTimeout(() => {
69
+ if (settled) return;
70
+ settled = true;
71
+ reject(new Error("Echo request timeout"));
72
+ }, 5000);
73
+
74
  // Send echo request and wait for response
75
  socket.emit(
76
  "echo",
77
  { message, timestamp: new Date().toISOString() },
78
  (response: any) => {
79
+ if (settled) return;
80
+ settled = true;
81
+ clearTimeout(timeoutId);
82
+
83
  if (response.error) {
84
  reject(new Error(response.error));
85
  } else {
 
87
  }
88
  }
89
  );
 
 
 
 
 
90
  });
91
  };
92
 
 
160
  socket.emit("resetGame", options, callback);
161
  };
162
 
163
+ // Rename room
164
+ const renameRoom = (name: string, callback?: (response: any) => void): void => {
165
+ const socket = getSocket();
166
+ socket.emit("renameRoom", { name }, callback);
167
+ };
168
+
169
 
170
  // Room list management
171
 
 
191
  socket.on("roomDeleted", handler);
192
  };
193
 
194
+ const onRoomRenamed = (handler: (data: { roomId: string; name: string }) => void): void => {
195
+ const socket = getSocket();
196
+ socket.on("roomRenamed", handler);
197
+ };
198
+
199
  // Room list event cleanup
200
+ // Note: If handler is provided, only that specific handler is removed.
201
+ // If handler is undefined, all handlers for that event are removed.
202
  const offRoomCreated = (handler?: any): void => {
203
  const socket = getSocket();
204
+ if (handler) {
205
+ socket.off("roomCreated", handler);
206
+ } else {
207
+ socket.off("roomCreated");
208
+ }
209
  };
210
 
211
  const offRoomUpdated = (handler?: any): void => {
212
  const socket = getSocket();
213
+ if (handler) {
214
+ socket.off("roomUpdated", handler);
215
+ } else {
216
+ socket.off("roomUpdated");
217
+ }
218
  };
219
 
220
  const offRoomDeleted = (handler?: any): void => {
221
  const socket = getSocket();
222
+ if (handler) {
223
+ socket.off("roomDeleted", handler);
224
+ } else {
225
+ socket.off("roomDeleted");
226
+ }
227
+ };
228
+
229
+ const offRoomRenamed = (handler?: any): void => {
230
+ const socket = getSocket();
231
+ if (handler) {
232
+ socket.off("roomRenamed", handler);
233
+ } else {
234
+ socket.off("roomRenamed");
235
+ }
236
  };
237
 
238
 
 
285
  };
286
 
287
  // Remove event listeners
288
+ // Note: If handler is provided, only that specific handler is removed.
289
+ // If handler is undefined, all handlers for that event are removed.
290
  const offPlayerJoined = (handler?: any): void => {
291
  const socket = getSocket();
292
+ if (handler) {
293
+ socket.off("playerJoined", handler);
294
+ } else {
295
+ socket.off("playerJoined");
296
+ }
297
  };
298
 
299
  const offPlayerLeft = (handler?: any): void => {
300
  const socket = getSocket();
301
+ if (handler) {
302
+ socket.off("playerLeft", handler);
303
+ } else {
304
+ socket.off("playerLeft");
305
+ }
306
  };
307
 
308
  const offNicknameChanged = (handler?: any): void => {
309
  const socket = getSocket();
310
+ if (handler) {
311
+ socket.off("nicknameChanged", handler);
312
+ } else {
313
+ socket.off("nicknameChanged");
314
+ }
315
  };
316
 
317
  const offRoomJoined = (handler?: any): void => {
318
  const socket = getSocket();
319
+ if (handler) {
320
+ socket.off("roomJoined", handler);
321
+ } else {
322
+ socket.off("roomJoined");
323
+ }
324
  };
325
 
326
  const offGameUpdate = (handler?: any): void => {
327
  const socket = getSocket();
328
+ if (handler) {
329
+ socket.off("gameUpdate", handler);
330
+ } else {
331
+ socket.off("gameUpdate");
332
+ }
333
  };
334
 
335
  const offGameEnded = (handler?: any): void => {
336
  const socket = getSocket();
337
+ if (handler) {
338
+ socket.off("gameEnded", handler);
339
+ } else {
340
+ socket.off("gameEnded");
341
+ }
342
  };
343
 
344
  const offGameReset = (handler?: any): void => {
345
  const socket = getSocket();
346
+ if (handler) {
347
+ socket.off("gameReset", handler);
348
+ } else {
349
+ socket.off("gameReset");
350
+ }
351
  };
352
 
353
  const offPlayerDisconnected = (handler?: any): void => {
354
  const socket = getSocket();
355
+ if (handler) {
356
+ socket.off("playerDisconnected", handler);
357
+ } else {
358
+ socket.off("playerDisconnected");
359
+ }
360
  };
361
 
362
  const offError = (handler?: any): void => {
363
  const socket = getSocket();
364
+ if (handler) {
365
+ socket.off("error", handler);
366
+ } else {
367
+ socket.off("error");
368
+ }
369
  };
370
 
371
  // Clean up on unmount
 
391
  undoMove,
392
  redoMove,
393
  resetGame,
394
+ renameRoom,
395
  // Event listeners
396
  onPlayerJoined,
397
  onPlayerLeft,
 
405
  onRoomCreated,
406
  onRoomUpdated,
407
  onRoomDeleted,
408
+ onRoomRenamed,
409
  // Event cleanup
410
  offPlayerJoined,
411
  offPlayerLeft,
 
418
  offError,
419
  offRoomCreated,
420
  offRoomUpdated,
421
+ offRoomDeleted,
422
+ offRoomRenamed
423
  };
424
  }
425
 
426
  // Export function to manually disconnect (for cleanup)
427
  export function disconnectSocket() {
428
  if (socketInstance) {
429
+ // Remove all listeners before disconnecting to prevent memory leaks
430
+ socketInstance.removeAllListeners();
431
  socketInstance.disconnect();
432
  socketInstance = null;
433
+ // Reset reactive state
434
+ connected.value = false;
435
+ error.value = null;
436
  }
437
  }
trigo-web/app/src/stores/playerStore.ts CHANGED
@@ -18,6 +18,8 @@ export interface PlayerState {
18
  playerId: string | null; // Socket ID
19
  playerColor: "black" | "white" | null; // Player's stone color in current game
20
  roomId: string | null; // Current room ID
 
 
21
  opponentNickname: string | null; // Opponent's nickname
22
  connectionStatus: "disconnected" | "connected" | "in-room"; // Connection state
23
  }
@@ -97,6 +99,8 @@ export const usePlayerStore = defineStore("player", {
97
  playerId: null,
98
  playerColor: null,
99
  roomId: null,
 
 
100
  opponentNickname: null,
101
  connectionStatus: "disconnected"
102
  }),
@@ -154,13 +158,25 @@ export const usePlayerStore = defineStore("player", {
154
  * Join a room with the given ID and assigned color
155
  * @param roomId - Room ID
156
  * @param color - Assigned player color
 
 
157
  */
158
- joinRoom(roomId: string, color: "black" | "white"): void {
159
  this.roomId = roomId;
 
 
160
  this.playerColor = color;
161
  this.connectionStatus = "in-room";
162
  },
163
 
 
 
 
 
 
 
 
 
164
  /**
165
  * Set the opponent's nickname
166
  * @param nickname - Opponent's nickname
@@ -174,6 +190,8 @@ export const usePlayerStore = defineStore("player", {
174
  */
175
  leaveRoom(): void {
176
  this.roomId = null;
 
 
177
  this.playerColor = null;
178
  this.opponentNickname = null;
179
  this.connectionStatus = "connected";
@@ -185,6 +203,8 @@ export const usePlayerStore = defineStore("player", {
185
  disconnect(): void {
186
  this.playerId = null;
187
  this.roomId = null;
 
 
188
  this.playerColor = null;
189
  this.opponentNickname = null;
190
  this.connectionStatus = "disconnected";
@@ -198,6 +218,8 @@ export const usePlayerStore = defineStore("player", {
198
  this.playerId = null;
199
  this.playerColor = null;
200
  this.roomId = null;
 
 
201
  this.opponentNickname = null;
202
  this.connectionStatus = "disconnected";
203
  }
 
18
  playerId: string | null; // Socket ID
19
  playerColor: "black" | "white" | null; // Player's stone color in current game
20
  roomId: string | null; // Current room ID
21
+ roomName: string | null; // Human-readable room name
22
+ isAdmin: boolean; // Whether player is room admin
23
  opponentNickname: string | null; // Opponent's nickname
24
  connectionStatus: "disconnected" | "connected" | "in-room"; // Connection state
25
  }
 
99
  playerId: null,
100
  playerColor: null,
101
  roomId: null,
102
+ roomName: null,
103
+ isAdmin: false,
104
  opponentNickname: null,
105
  connectionStatus: "disconnected"
106
  }),
 
158
  * Join a room with the given ID and assigned color
159
  * @param roomId - Room ID
160
  * @param color - Assigned player color
161
+ * @param roomName - Human-readable room name
162
+ * @param isAdmin - Whether player is room admin
163
  */
164
+ joinRoom(roomId: string, color: "black" | "white", roomName?: string, isAdmin?: boolean): void {
165
  this.roomId = roomId;
166
+ this.roomName = roomName || null;
167
+ this.isAdmin = isAdmin || false;
168
  this.playerColor = color;
169
  this.connectionStatus = "in-room";
170
  },
171
 
172
+ /**
173
+ * Set the room name
174
+ * @param name - New room name
175
+ */
176
+ setRoomName(name: string): void {
177
+ this.roomName = name;
178
+ },
179
+
180
  /**
181
  * Set the opponent's nickname
182
  * @param nickname - Opponent's nickname
 
190
  */
191
  leaveRoom(): void {
192
  this.roomId = null;
193
+ this.roomName = null;
194
+ this.isAdmin = false;
195
  this.playerColor = null;
196
  this.opponentNickname = null;
197
  this.connectionStatus = "connected";
 
203
  disconnect(): void {
204
  this.playerId = null;
205
  this.roomId = null;
206
+ this.roomName = null;
207
+ this.isAdmin = false;
208
  this.playerColor = null;
209
  this.opponentNickname = null;
210
  this.connectionStatus = "disconnected";
 
218
  this.playerId = null;
219
  this.playerColor = null;
220
  this.roomId = null;
221
+ this.roomName = null;
222
+ this.isAdmin = false;
223
  this.opponentNickname = null;
224
  this.connectionStatus = "disconnected";
225
  }
trigo-web/app/src/views/TrigoView.vue CHANGED
@@ -41,7 +41,23 @@
41
  <div v-else-if="gameMode === 'vs-people'" class="view-status people-mode">
42
  <div class="room-info">
43
  <span class="room-label">Room:</span>
44
- <span class="room-code">{{ playerStore.roomId || "---" }}</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  <button
46
  v-if="playerStore.roomId"
47
  class="btn-copy-room"
@@ -128,7 +144,6 @@
128
  :current-room="playerStore.roomId"
129
  :rooms="roomList"
130
  :loading="isLoadingRooms"
131
- :disabled="gameStarted && playerStore.hasOpponent"
132
  @create="handleCreateRoom"
133
  @select="handleRoomSelect"
134
  />
@@ -385,6 +400,12 @@
385
  const { getRoomIdFromHash, updateHash, clearHash, isValidRoomId } = useRoomHash();
386
  const isJoiningRoom = ref(false);
387
 
 
 
 
 
 
 
388
  // Room list state (for VS People mode room selector)
389
  const roomList = ref<RoomSummary[]>([]);
390
  const isLoadingRooms = ref(false);
@@ -1069,6 +1090,29 @@
1069
  };
1070
 
1071
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1072
  // ===== Room Management Functions (VS People Mode) =====
1073
 
1074
  /**
@@ -1119,7 +1163,7 @@
1119
  function setupRoomListeners() {
1120
  console.log("[TrigoView] Setting up room listeners, socket connected:", socketApi.socket.connected, "socket id:", socketApi.socket.id);
1121
 
1122
- socketApi.onRoomCreated((data: RoomSummary) => {
1123
  console.log("[TrigoView] >>> Received roomCreated event:", data);
1124
  console.log("[TrigoView] Current roomList before add:", JSON.stringify(roomList.value));
1125
  // Add new room to list if not already present
@@ -1127,9 +1171,10 @@
1127
  roomList.value = [...roomList.value, data]; // Use spread to ensure reactivity
1128
  console.log("[TrigoView] Added room to list, new count:", roomList.value.length, "rooms:", roomList.value.map(r => r.id));
1129
  }
1130
- });
 
1131
 
1132
- socketApi.onRoomUpdated((data: RoomSummary) => {
1133
  console.log("[TrigoView] >>> Received roomUpdated event:", data);
1134
  const index = roomList.value.findIndex(r => r.id === data.id);
1135
  if (index >= 0) {
@@ -1138,25 +1183,60 @@
1138
  roomList.value = [...roomList.value, data];
1139
  }
1140
  console.log("[TrigoView] roomList after update:", roomList.value.map(r => r.id));
1141
- });
 
1142
 
1143
- socketApi.onRoomDeleted((data: { roomId: string }) => {
1144
  console.log("[TrigoView] >>> Received roomDeleted event:", data);
1145
  roomList.value = roomList.value.filter(r => r.id !== data.roomId);
1146
  console.log("[TrigoView] roomList after delete:", roomList.value.map(r => r.id));
1147
- });
 
 
 
 
 
 
 
 
 
 
1148
  }
1149
 
1150
  function cleanupRoomListeners() {
1151
- socketApi.offRoomCreated();
1152
- socketApi.offRoomUpdated();
1153
- socketApi.offRoomDeleted();
 
 
 
 
 
 
 
 
 
 
 
 
 
1154
  }
1155
 
1156
  // Room selector event handlers
1157
  async function handleRoomSelect(roomId: string) {
1158
  if (playerStore.roomId === roomId) return; // Already in this room
1159
 
 
 
 
 
 
 
 
 
 
 
 
1160
  // Leave current room if any
1161
  if (playerStore.roomId) {
1162
  socketApi.leaveRoom();
@@ -1168,6 +1248,17 @@
1168
  }
1169
 
1170
  async function handleCreateRoom() {
 
 
 
 
 
 
 
 
 
 
 
1171
  // Leave current room if any
1172
  if (playerStore.roomId) {
1173
  socketApi.leaveRoom();
@@ -1226,7 +1317,8 @@
1226
  return;
1227
  }
1228
  isJoiningRoom.value = true;
1229
- console.log("[TrigoView] Set isJoiningRoom to true");
 
1230
 
1231
  try {
1232
  console.log("[TrigoView] Waiting for socket connection...");
@@ -1234,11 +1326,17 @@
1234
  console.log("[TrigoView] Socket connection ready, calling joinRoom");
1235
 
1236
  socketApi.joinRoom({ nickname: playerStore.nickname }, (response: any) => {
 
 
 
 
 
 
1237
  console.log("[TrigoView] joinRoom callback received:", response);
1238
  isJoiningRoom.value = false;
1239
 
1240
  if (response.success !== false && response.roomId) {
1241
- playerStore.joinRoom(response.roomId, response.playerColor);
1242
  updateHash(response.roomId);
1243
  console.log(`[TrigoView] Room created: ${response.roomId}`);
1244
  } else {
@@ -1247,7 +1345,9 @@
1247
  }
1248
  });
1249
  } catch (err) {
1250
- isJoiningRoom.value = false;
 
 
1251
  console.error("[TrigoView] Socket connection failed:", err);
1252
  alert("Connection failed. Please check your internet and try again.");
1253
  }
@@ -1260,15 +1360,22 @@
1260
  async function joinRoomByHash(roomId: string) {
1261
  if (isJoiningRoom.value) return;
1262
  isJoiningRoom.value = true;
 
1263
 
1264
  try {
1265
  await waitForSocketConnection();
1266
 
1267
  socketApi.joinRoom({ roomId, nickname: playerStore.nickname }, (response: any) => {
 
 
 
 
 
 
1268
  isJoiningRoom.value = false;
1269
 
1270
  if (response.success !== false && response.roomId) {
1271
- playerStore.joinRoom(response.roomId, response.playerColor);
1272
  console.log(`[TrigoView] Room joined: ${response.roomId}`);
1273
 
1274
  // Sync game state from server (board shape, moves, etc.)
@@ -1338,7 +1445,9 @@
1338
  }
1339
  });
1340
  } catch (err) {
1341
- isJoiningRoom.value = false;
 
 
1342
  console.error("[TrigoView] Socket connection failed:", err);
1343
  alert("Connection failed. Please check your internet and try again.");
1344
  }
@@ -1442,6 +1551,24 @@
1442
  // Flag to track if VS People mode has been initialized
1443
  let vsPeopleModeInitialized = false;
1444
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1445
  // Initialize VS People mode - sets up all socket event listeners
1446
  const initializeVsPeopleMode = () => {
1447
  if (vsPeopleModeInitialized) {
@@ -1451,9 +1578,10 @@
1451
 
1452
  console.log("[TrigoView] Initializing VS People mode...");
1453
  vsPeopleModeInitialized = true;
 
1454
 
1455
  // Listen for nickname changes
1456
- socketApi.onNicknameChanged((data) => {
1457
  console.log(
1458
  `[TrigoView] Player ${data.playerId} changed nickname: ${data.oldNickname} -> ${data.nickname}`
1459
  );
@@ -1462,10 +1590,11 @@
1462
  if (data.playerId !== socketApi.socket.id) {
1463
  playerStore.setOpponentNickname(data.nickname);
1464
  }
1465
- });
 
1466
 
1467
  // Listen for game updates (moves, passes, undo, redo)
1468
- socketApi.onGameUpdate((data) => {
1469
  console.log("[TrigoView] Game update received:", data);
1470
 
1471
  // Update current player from server
@@ -1508,10 +1637,11 @@
1508
  syncViewportWithGame();
1509
  }
1510
  }
1511
- });
 
1512
 
1513
  // Listen for player joined
1514
- socketApi.onPlayerJoined((data) => {
1515
  console.log("[TrigoView] Player joined:", data);
1516
  playerStore.setOpponentNickname(data.nickname);
1517
 
@@ -1523,30 +1653,34 @@
1523
  }
1524
  console.log("[TrigoView] Game started - opponent joined");
1525
  }
1526
- });
 
1527
 
1528
  // Listen for player left
1529
- socketApi.onPlayerLeft((data) => {
1530
  console.log("[TrigoView] Player left:", data);
1531
  playerStore.setOpponentNickname(null);
1532
- });
 
1533
 
1534
  // Listen for player disconnected
1535
- socketApi.onPlayerDisconnected((data) => {
1536
  console.log("[TrigoView] Player disconnected:", data);
1537
  if (data.playerId !== socketApi.socket.id) {
1538
  playerStore.setOpponentNickname(null);
1539
  }
1540
- });
 
1541
 
1542
  // Listen for game ended
1543
- socketApi.onGameEnded((data) => {
1544
  console.log("[TrigoView] Game ended:", data);
1545
  alert(`Game ended! Winner: ${data.winner || "None"}\nReason: ${data.reason}`);
1546
- });
 
1547
 
1548
  // Listen for game reset
1549
- socketApi.onGameReset((data) => {
1550
  console.log("[TrigoView] Game reset:", data);
1551
 
1552
  // Get the new board shape from server, or use current
@@ -1581,12 +1715,14 @@
1581
  playerStore.playerColor = myPlayer.color;
1582
  }
1583
  }
1584
- });
 
1585
 
1586
  // Listen for errors
1587
- socketApi.onError((data) => {
1588
  console.error("[TrigoView] Socket error:", data.message);
1589
- });
 
1590
 
1591
  // Setup room list listeners for room selector
1592
  setupRoomListeners();
@@ -1599,8 +1735,11 @@
1599
  // Listen for browser navigation (back/forward) and URL changes
1600
  window.addEventListener("popstate", handleUrlChange);
1601
 
 
 
 
1602
  // Handle socket connection and reconnection
1603
- socketApi.socket.on("connect", () => {
1604
  console.log("[TrigoView] Socket connected in VS People mode");
1605
 
1606
  // Update player ID and connection status
@@ -1608,30 +1747,41 @@
1608
  playerStore.setPlayerId(socketApi.socket.id);
1609
  }
1610
 
1611
- // Fetch room list for room selector
1612
- fetchRoomList();
 
 
 
1613
 
1614
- // Initialize room based on URL hash (only if not already in a room)
1615
- if (!playerStore.roomId && !isJoiningRoom.value) {
 
 
 
 
1616
  console.log("[TrigoView] Initializing room after socket connection");
1617
  initializeMultiplayerRoom();
1618
  }
1619
- });
 
1620
 
1621
  // Handle socket disconnection
1622
- socketApi.socket.on("disconnect", () => {
1623
  console.log("[TrigoView] Socket disconnected in VS People mode");
 
1624
  // Don't reset roomId - we want to rejoin on reconnect
1625
  if (playerStore.roomId) {
1626
- playerStore.connectionStatus = "connected"; // Still have room info, just disconnected
1627
  } else {
1628
  playerStore.disconnect();
1629
  }
1630
- });
 
1631
 
1632
  // If socket is already connected, initialize room immediately
1633
  if (socketApi.socket.connected) {
1634
  console.log("[TrigoView] Socket already connected, initializing room");
 
1635
  fetchRoomList();
1636
  initializeMultiplayerRoom();
1637
  }
@@ -1646,23 +1796,58 @@
1646
 
1647
  console.log("[TrigoView] Cleaning up VS People mode...");
1648
  vsPeopleModeInitialized = false;
 
1649
 
1650
- socketApi.offNicknameChanged();
1651
- socketApi.offGameUpdate();
1652
- socketApi.offPlayerJoined();
1653
- socketApi.offPlayerLeft();
1654
- socketApi.offPlayerDisconnected();
1655
- socketApi.offGameEnded();
1656
- socketApi.offGameReset();
1657
- socketApi.offError();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1658
  cleanupRoomListeners();
1659
 
1660
  // Remove URL change listener
1661
  window.removeEventListener("popstate", handleUrlChange);
1662
 
1663
- // Remove socket event listeners
1664
- socketApi.socket.off("connect");
1665
- socketApi.socket.off("disconnect");
 
 
 
 
 
 
1666
 
1667
  // Reset player store state
1668
  playerStore.disconnect();
@@ -2163,6 +2348,42 @@
2163
  font-size: 1.1rem;
2164
  }
2165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2166
  .btn-copy-room {
2167
  padding: 0.25rem 0.5rem;
2168
  background-color: transparent;
 
41
  <div v-else-if="gameMode === 'vs-people'" class="view-status people-mode">
42
  <div class="room-info">
43
  <span class="room-label">Room:</span>
44
+ <input
45
+ v-if="playerStore.isAdmin && playerStore.roomId"
46
+ type="text"
47
+ class="room-name-input"
48
+ :value="playerStore.roomName || ''"
49
+ @blur="handleRoomNameBlur"
50
+ @keyup.enter="($event.target as HTMLInputElement).blur()"
51
+ maxlength="50"
52
+ placeholder="Room name..."
53
+ />
54
+ <span v-else-if="playerStore.roomId" class="room-name">
55
+ {{ playerStore.roomName || playerStore.roomId }}
56
+ </span>
57
+ <span v-else class="room-code">---</span>
58
+ <span v-if="playerStore.roomId" class="room-id-badge" title="Room ID">
59
+ {{ playerStore.roomId }}
60
+ </span>
61
  <button
62
  v-if="playerStore.roomId"
63
  class="btn-copy-room"
 
144
  :current-room="playerStore.roomId"
145
  :rooms="roomList"
146
  :loading="isLoadingRooms"
 
147
  @create="handleCreateRoom"
148
  @select="handleRoomSelect"
149
  />
 
400
  const { getRoomIdFromHash, updateHash, clearHash, isValidRoomId } = useRoomHash();
401
  const isJoiningRoom = ref(false);
402
 
403
+ // Join attempt counter to ignore stale callbacks (race condition prevention)
404
+ let joinAttemptCounter = 0;
405
+
406
+ // Flag to track if VS People mode is active (guards callbacks after cleanup)
407
+ let vsPeopleModeActive = false;
408
+
409
  // Room list state (for VS People mode room selector)
410
  const roomList = ref<RoomSummary[]>([]);
411
  const isLoadingRooms = ref(false);
 
1090
  };
1091
 
1092
 
1093
+ const handleRoomNameBlur = (event: Event) => {
1094
+ const input = event.target as HTMLInputElement;
1095
+ const newName = input.value.trim();
1096
+
1097
+ if (!newName || newName === playerStore.roomName) {
1098
+ // Reset to original value if empty or unchanged
1099
+ input.value = playerStore.roomName || "";
1100
+ return;
1101
+ }
1102
+
1103
+ socketApi.renameRoom(newName, (response: any) => {
1104
+ if (response.success) {
1105
+ console.log(`[TrigoView] Room renamed to: ${response.name}`);
1106
+ } else {
1107
+ console.error("[TrigoView] Failed to rename room:", response.error);
1108
+ // Reset input to original value on failure
1109
+ input.value = playerStore.roomName || "";
1110
+ alert(`Failed to rename room: ${response.error}`);
1111
+ }
1112
+ });
1113
+ };
1114
+
1115
+
1116
  // ===== Room Management Functions (VS People Mode) =====
1117
 
1118
  /**
 
1163
  function setupRoomListeners() {
1164
  console.log("[TrigoView] Setting up room listeners, socket connected:", socketApi.socket.connected, "socket id:", socketApi.socket.id);
1165
 
1166
+ socketHandlers.roomCreated = (data: RoomSummary) => {
1167
  console.log("[TrigoView] >>> Received roomCreated event:", data);
1168
  console.log("[TrigoView] Current roomList before add:", JSON.stringify(roomList.value));
1169
  // Add new room to list if not already present
 
1171
  roomList.value = [...roomList.value, data]; // Use spread to ensure reactivity
1172
  console.log("[TrigoView] Added room to list, new count:", roomList.value.length, "rooms:", roomList.value.map(r => r.id));
1173
  }
1174
+ };
1175
+ socketApi.onRoomCreated(socketHandlers.roomCreated);
1176
 
1177
+ socketHandlers.roomUpdated = (data: RoomSummary) => {
1178
  console.log("[TrigoView] >>> Received roomUpdated event:", data);
1179
  const index = roomList.value.findIndex(r => r.id === data.id);
1180
  if (index >= 0) {
 
1183
  roomList.value = [...roomList.value, data];
1184
  }
1185
  console.log("[TrigoView] roomList after update:", roomList.value.map(r => r.id));
1186
+ };
1187
+ socketApi.onRoomUpdated(socketHandlers.roomUpdated);
1188
 
1189
+ socketHandlers.roomDeleted = (data: { roomId: string }) => {
1190
  console.log("[TrigoView] >>> Received roomDeleted event:", data);
1191
  roomList.value = roomList.value.filter(r => r.id !== data.roomId);
1192
  console.log("[TrigoView] roomList after delete:", roomList.value.map(r => r.id));
1193
+ };
1194
+ socketApi.onRoomDeleted(socketHandlers.roomDeleted);
1195
+
1196
+ socketHandlers.roomRenamed = (data: { roomId: string; name: string }) => {
1197
+ console.log("[TrigoView] >>> Received roomRenamed event:", data);
1198
+ // Update local room name if it's our room
1199
+ if (data.roomId === playerStore.roomId) {
1200
+ playerStore.setRoomName(data.name);
1201
+ }
1202
+ };
1203
+ socketApi.onRoomRenamed(socketHandlers.roomRenamed);
1204
  }
1205
 
1206
  function cleanupRoomListeners() {
1207
+ if (socketHandlers.roomCreated) {
1208
+ socketApi.offRoomCreated(socketHandlers.roomCreated);
1209
+ socketHandlers.roomCreated = null;
1210
+ }
1211
+ if (socketHandlers.roomUpdated) {
1212
+ socketApi.offRoomUpdated(socketHandlers.roomUpdated);
1213
+ socketHandlers.roomUpdated = null;
1214
+ }
1215
+ if (socketHandlers.roomDeleted) {
1216
+ socketApi.offRoomDeleted(socketHandlers.roomDeleted);
1217
+ socketHandlers.roomDeleted = null;
1218
+ }
1219
+ if (socketHandlers.roomRenamed) {
1220
+ socketApi.offRoomRenamed(socketHandlers.roomRenamed);
1221
+ socketHandlers.roomRenamed = null;
1222
+ }
1223
  }
1224
 
1225
  // Room selector event handlers
1226
  async function handleRoomSelect(roomId: string) {
1227
  if (playerStore.roomId === roomId) return; // Already in this room
1228
 
1229
+ // Confirm if currently in a game with opponent
1230
+ if (gameStarted.value && playerStore.hasOpponent) {
1231
+ const confirmed = window.confirm(
1232
+ "You are currently in a game. Leaving will forfeit the game. Continue?"
1233
+ );
1234
+ if (!confirmed) return;
1235
+
1236
+ // Resign the current game before leaving
1237
+ socketApi.resign();
1238
+ }
1239
+
1240
  // Leave current room if any
1241
  if (playerStore.roomId) {
1242
  socketApi.leaveRoom();
 
1248
  }
1249
 
1250
  async function handleCreateRoom() {
1251
+ // Confirm if currently in a game with opponent
1252
+ if (gameStarted.value && playerStore.hasOpponent) {
1253
+ const confirmed = window.confirm(
1254
+ "You are currently in a game. Leaving will forfeit the game. Continue?"
1255
+ );
1256
+ if (!confirmed) return;
1257
+
1258
+ // Resign the current game before leaving
1259
+ socketApi.resign();
1260
+ }
1261
+
1262
  // Leave current room if any
1263
  if (playerStore.roomId) {
1264
  socketApi.leaveRoom();
 
1317
  return;
1318
  }
1319
  isJoiningRoom.value = true;
1320
+ const currentAttempt = ++joinAttemptCounter;
1321
+ console.log("[TrigoView] Set isJoiningRoom to true, attempt:", currentAttempt);
1322
 
1323
  try {
1324
  console.log("[TrigoView] Waiting for socket connection...");
 
1326
  console.log("[TrigoView] Socket connection ready, calling joinRoom");
1327
 
1328
  socketApi.joinRoom({ nickname: playerStore.nickname }, (response: any) => {
1329
+ // Ignore stale callback if mode was cleaned up or new attempt started
1330
+ if (!vsPeopleModeActive || currentAttempt !== joinAttemptCounter) {
1331
+ console.log("[TrigoView] Ignoring stale joinRoom callback, attempt:", currentAttempt, "current:", joinAttemptCounter);
1332
+ return;
1333
+ }
1334
+
1335
  console.log("[TrigoView] joinRoom callback received:", response);
1336
  isJoiningRoom.value = false;
1337
 
1338
  if (response.success !== false && response.roomId) {
1339
+ playerStore.joinRoom(response.roomId, response.playerColor, response.roomName, response.isAdmin);
1340
  updateHash(response.roomId);
1341
  console.log(`[TrigoView] Room created: ${response.roomId}`);
1342
  } else {
 
1345
  }
1346
  });
1347
  } catch (err) {
1348
+ if (currentAttempt === joinAttemptCounter) {
1349
+ isJoiningRoom.value = false;
1350
+ }
1351
  console.error("[TrigoView] Socket connection failed:", err);
1352
  alert("Connection failed. Please check your internet and try again.");
1353
  }
 
1360
  async function joinRoomByHash(roomId: string) {
1361
  if (isJoiningRoom.value) return;
1362
  isJoiningRoom.value = true;
1363
+ const currentAttempt = ++joinAttemptCounter;
1364
 
1365
  try {
1366
  await waitForSocketConnection();
1367
 
1368
  socketApi.joinRoom({ roomId, nickname: playerStore.nickname }, (response: any) => {
1369
+ // Ignore stale callback if mode was cleaned up or new attempt started
1370
+ if (!vsPeopleModeActive || currentAttempt !== joinAttemptCounter) {
1371
+ console.log("[TrigoView] Ignoring stale joinRoomByHash callback, attempt:", currentAttempt, "current:", joinAttemptCounter);
1372
+ return;
1373
+ }
1374
+
1375
  isJoiningRoom.value = false;
1376
 
1377
  if (response.success !== false && response.roomId) {
1378
+ playerStore.joinRoom(response.roomId, response.playerColor, response.roomName, response.isAdmin);
1379
  console.log(`[TrigoView] Room joined: ${response.roomId}`);
1380
 
1381
  // Sync game state from server (board shape, moves, etc.)
 
1445
  }
1446
  });
1447
  } catch (err) {
1448
+ if (currentAttempt === joinAttemptCounter) {
1449
+ isJoiningRoom.value = false;
1450
+ }
1451
  console.error("[TrigoView] Socket connection failed:", err);
1452
  alert("Connection failed. Please check your internet and try again.");
1453
  }
 
1551
  // Flag to track if VS People mode has been initialized
1552
  let vsPeopleModeInitialized = false;
1553
 
1554
+ // Store handler references for proper cleanup (avoid removing all listeners on singleton socket)
1555
+ const socketHandlers = {
1556
+ nicknameChanged: null as ((data: any) => void) | null,
1557
+ gameUpdate: null as ((data: any) => void) | null,
1558
+ playerJoined: null as ((data: any) => void) | null,
1559
+ playerLeft: null as ((data: any) => void) | null,
1560
+ playerDisconnected: null as ((data: any) => void) | null,
1561
+ gameEnded: null as ((data: any) => void) | null,
1562
+ gameReset: null as ((data: any) => void) | null,
1563
+ error: null as ((data: any) => void) | null,
1564
+ connect: null as (() => void) | null,
1565
+ disconnect: null as (() => void) | null,
1566
+ roomCreated: null as ((data: any) => void) | null,
1567
+ roomUpdated: null as ((data: any) => void) | null,
1568
+ roomDeleted: null as ((data: any) => void) | null,
1569
+ roomRenamed: null as ((data: any) => void) | null
1570
+ };
1571
+
1572
  // Initialize VS People mode - sets up all socket event listeners
1573
  const initializeVsPeopleMode = () => {
1574
  if (vsPeopleModeInitialized) {
 
1578
 
1579
  console.log("[TrigoView] Initializing VS People mode...");
1580
  vsPeopleModeInitialized = true;
1581
+ vsPeopleModeActive = true;
1582
 
1583
  // Listen for nickname changes
1584
+ socketHandlers.nicknameChanged = (data) => {
1585
  console.log(
1586
  `[TrigoView] Player ${data.playerId} changed nickname: ${data.oldNickname} -> ${data.nickname}`
1587
  );
 
1590
  if (data.playerId !== socketApi.socket.id) {
1591
  playerStore.setOpponentNickname(data.nickname);
1592
  }
1593
+ };
1594
+ socketApi.onNicknameChanged(socketHandlers.nicknameChanged);
1595
 
1596
  // Listen for game updates (moves, passes, undo, redo)
1597
+ socketHandlers.gameUpdate = (data) => {
1598
  console.log("[TrigoView] Game update received:", data);
1599
 
1600
  // Update current player from server
 
1637
  syncViewportWithGame();
1638
  }
1639
  }
1640
+ };
1641
+ socketApi.onGameUpdate(socketHandlers.gameUpdate);
1642
 
1643
  // Listen for player joined
1644
+ socketHandlers.playerJoined = (data) => {
1645
  console.log("[TrigoView] Player joined:", data);
1646
  playerStore.setOpponentNickname(data.nickname);
1647
 
 
1653
  }
1654
  console.log("[TrigoView] Game started - opponent joined");
1655
  }
1656
+ };
1657
+ socketApi.onPlayerJoined(socketHandlers.playerJoined);
1658
 
1659
  // Listen for player left
1660
+ socketHandlers.playerLeft = (data) => {
1661
  console.log("[TrigoView] Player left:", data);
1662
  playerStore.setOpponentNickname(null);
1663
+ };
1664
+ socketApi.onPlayerLeft(socketHandlers.playerLeft);
1665
 
1666
  // Listen for player disconnected
1667
+ socketHandlers.playerDisconnected = (data) => {
1668
  console.log("[TrigoView] Player disconnected:", data);
1669
  if (data.playerId !== socketApi.socket.id) {
1670
  playerStore.setOpponentNickname(null);
1671
  }
1672
+ };
1673
+ socketApi.onPlayerDisconnected(socketHandlers.playerDisconnected);
1674
 
1675
  // Listen for game ended
1676
+ socketHandlers.gameEnded = (data) => {
1677
  console.log("[TrigoView] Game ended:", data);
1678
  alert(`Game ended! Winner: ${data.winner || "None"}\nReason: ${data.reason}`);
1679
+ };
1680
+ socketApi.onGameEnded(socketHandlers.gameEnded);
1681
 
1682
  // Listen for game reset
1683
+ socketHandlers.gameReset = (data) => {
1684
  console.log("[TrigoView] Game reset:", data);
1685
 
1686
  // Get the new board shape from server, or use current
 
1715
  playerStore.playerColor = myPlayer.color;
1716
  }
1717
  }
1718
+ };
1719
+ socketApi.onGameReset(socketHandlers.gameReset);
1720
 
1721
  // Listen for errors
1722
+ socketHandlers.error = (data) => {
1723
  console.error("[TrigoView] Socket error:", data.message);
1724
+ };
1725
+ socketApi.onError(socketHandlers.error);
1726
 
1727
  // Setup room list listeners for room selector
1728
  setupRoomListeners();
 
1735
  // Listen for browser navigation (back/forward) and URL changes
1736
  window.addEventListener("popstate", handleUrlChange);
1737
 
1738
+ // Track if we've already initialized on this connection to prevent duplicate calls
1739
+ let hasInitializedOnConnect = false;
1740
+
1741
  // Handle socket connection and reconnection
1742
+ socketHandlers.connect = () => {
1743
  console.log("[TrigoView] Socket connected in VS People mode");
1744
 
1745
  // Update player ID and connection status
 
1747
  playerStore.setPlayerId(socketApi.socket.id);
1748
  }
1749
 
1750
+ // Fetch room list for room selector (only once per connection)
1751
+ if (!hasInitializedOnConnect) {
1752
+ hasInitializedOnConnect = true;
1753
+ fetchRoomList();
1754
+ }
1755
 
1756
+ // Handle reconnect: rejoin previous room if we had one
1757
+ if (playerStore.roomId && !isJoiningRoom.value) {
1758
+ console.log("[TrigoView] Reconnecting - attempting to rejoin room:", playerStore.roomId);
1759
+ joinRoomByHash(playerStore.roomId);
1760
+ } else if (!playerStore.roomId && !isJoiningRoom.value) {
1761
+ // Initialize room based on URL hash (only if not already in a room)
1762
  console.log("[TrigoView] Initializing room after socket connection");
1763
  initializeMultiplayerRoom();
1764
  }
1765
+ };
1766
+ socketApi.socket.on("connect", socketHandlers.connect);
1767
 
1768
  // Handle socket disconnection
1769
+ socketHandlers.disconnect = () => {
1770
  console.log("[TrigoView] Socket disconnected in VS People mode");
1771
+ hasInitializedOnConnect = false; // Reset for next connection
1772
  // Don't reset roomId - we want to rejoin on reconnect
1773
  if (playerStore.roomId) {
1774
+ playerStore.connectionStatus = "disconnected"; // Disconnected but retain room info for reconnect
1775
  } else {
1776
  playerStore.disconnect();
1777
  }
1778
+ };
1779
+ socketApi.socket.on("disconnect", socketHandlers.disconnect);
1780
 
1781
  // If socket is already connected, initialize room immediately
1782
  if (socketApi.socket.connected) {
1783
  console.log("[TrigoView] Socket already connected, initializing room");
1784
+ hasInitializedOnConnect = true;
1785
  fetchRoomList();
1786
  initializeMultiplayerRoom();
1787
  }
 
1796
 
1797
  console.log("[TrigoView] Cleaning up VS People mode...");
1798
  vsPeopleModeInitialized = false;
1799
+ vsPeopleModeActive = false;
1800
 
1801
+ // Increment join attempt counter to invalidate any in-flight callbacks
1802
+ joinAttemptCounter++;
1803
+
1804
+ // Remove event listeners with stored handler references
1805
+ if (socketHandlers.nicknameChanged) {
1806
+ socketApi.offNicknameChanged(socketHandlers.nicknameChanged);
1807
+ socketHandlers.nicknameChanged = null;
1808
+ }
1809
+ if (socketHandlers.gameUpdate) {
1810
+ socketApi.offGameUpdate(socketHandlers.gameUpdate);
1811
+ socketHandlers.gameUpdate = null;
1812
+ }
1813
+ if (socketHandlers.playerJoined) {
1814
+ socketApi.offPlayerJoined(socketHandlers.playerJoined);
1815
+ socketHandlers.playerJoined = null;
1816
+ }
1817
+ if (socketHandlers.playerLeft) {
1818
+ socketApi.offPlayerLeft(socketHandlers.playerLeft);
1819
+ socketHandlers.playerLeft = null;
1820
+ }
1821
+ if (socketHandlers.playerDisconnected) {
1822
+ socketApi.offPlayerDisconnected(socketHandlers.playerDisconnected);
1823
+ socketHandlers.playerDisconnected = null;
1824
+ }
1825
+ if (socketHandlers.gameEnded) {
1826
+ socketApi.offGameEnded(socketHandlers.gameEnded);
1827
+ socketHandlers.gameEnded = null;
1828
+ }
1829
+ if (socketHandlers.gameReset) {
1830
+ socketApi.offGameReset(socketHandlers.gameReset);
1831
+ socketHandlers.gameReset = null;
1832
+ }
1833
+ if (socketHandlers.error) {
1834
+ socketApi.offError(socketHandlers.error);
1835
+ socketHandlers.error = null;
1836
+ }
1837
  cleanupRoomListeners();
1838
 
1839
  // Remove URL change listener
1840
  window.removeEventListener("popstate", handleUrlChange);
1841
 
1842
+ // Remove socket event listeners with stored handler references
1843
+ if (socketHandlers.connect) {
1844
+ socketApi.socket.off("connect", socketHandlers.connect);
1845
+ socketHandlers.connect = null;
1846
+ }
1847
+ if (socketHandlers.disconnect) {
1848
+ socketApi.socket.off("disconnect", socketHandlers.disconnect);
1849
+ socketHandlers.disconnect = null;
1850
+ }
1851
 
1852
  // Reset player store state
1853
  playerStore.disconnect();
 
2348
  font-size: 1.1rem;
2349
  }
2350
 
2351
+ .room-name {
2352
+ color: #e0e0e0;
2353
+ font-weight: 600;
2354
+ font-size: 1rem;
2355
+ max-width: 150px;
2356
+ overflow: hidden;
2357
+ text-overflow: ellipsis;
2358
+ white-space: nowrap;
2359
+ }
2360
+
2361
+ .room-name-input {
2362
+ background: rgba(0, 0, 0, 0.3);
2363
+ border: 1px solid rgba(255, 255, 255, 0.3);
2364
+ border-radius: 4px;
2365
+ color: #e0e0e0;
2366
+ font-weight: 600;
2367
+ font-size: 1rem;
2368
+ padding: 0.2rem 0.5rem;
2369
+ max-width: 150px;
2370
+ outline: none;
2371
+
2372
+ &:focus {
2373
+ border-color: #e94560;
2374
+ background: rgba(0, 0, 0, 0.5);
2375
+ }
2376
+ }
2377
+
2378
+ .room-id-badge {
2379
+ font-family: monospace;
2380
+ font-size: 0.75rem;
2381
+ color: rgba(255, 255, 255, 0.5);
2382
+ padding: 0.15rem 0.4rem;
2383
+ background: rgba(0, 0, 0, 0.2);
2384
+ border-radius: 3px;
2385
+ }
2386
+
2387
  .btn-copy-room {
2388
  padding: 0.25rem 0.5rem;
2389
  background-color: transparent;
trigo-web/backend/dist/backend/src/services/gameManager.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gameManager.d.ts","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"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"}
 
1
+ {"version":3,"file":"gameManager.d.ts","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAuB,MAAM,yBAAyB,CAAC;AAEzE,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,qBAAa,WAAW;IACvB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,iBAAiB,CAAoC;;IAM7D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;IA4C5H,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;IAoDjH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkBjD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IA4B9F,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAwBnD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiBjD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgBnD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAenD;;;OAGG;IACH,SAAS,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,YAAY,CAAC,EAAE;YAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;SAAE,CAAC;KACzD,GACC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA8DvC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI;IAOjD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM;;;;;;;;IAO3B;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI;IAQ1D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM;IAO3B;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA6B3C;;;OAGG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAqB/C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAMrD,cAAc,IAAI,QAAQ,EAAE;IAM5B,OAAO,CAAC,cAAc;CAGtB"}
trigo-web/backend/dist/backend/src/services/gameManager.js CHANGED
@@ -54,14 +54,19 @@ class GameManager {
54
  if (!room) {
55
  return null;
56
  }
57
- const playerCount = Object.keys(room.players).length;
58
- if (playerCount >= 2) {
 
59
  return null; // Room is full
60
  }
61
  // Try to assign preferred color if specified
62
- const firstPlayer = Object.values(room.players)[0];
63
  let assignedColor;
64
- if (preferredColor && preferredColor !== firstPlayer.color) {
 
 
 
 
65
  // Preferred color is available
66
  assignedColor = preferredColor;
67
  }
@@ -69,6 +74,12 @@ class GameManager {
69
  // Assign opposite of first player's color
70
  assignedColor = firstPlayer.color === "black" ? "white" : "black";
71
  }
 
 
 
 
 
 
72
  room.players[playerId] = {
73
  id: playerId,
74
  nickname,
@@ -77,7 +88,7 @@ class GameManager {
77
  };
78
  this.playerRoomMap.set(playerId, roomId);
79
  // Start the game when second player joins
80
- if (playerCount === 1) {
81
  room.gameState.gameStatus = "playing";
82
  room.startedAt = new Date();
83
  }
 
54
  if (!room) {
55
  return null;
56
  }
57
+ // Count only connected players
58
+ const connectedPlayers = Object.values(room.players).filter(p => p.connected);
59
+ if (connectedPlayers.length >= 2) {
60
  return null; // Room is full
61
  }
62
  // Try to assign preferred color if specified
63
+ const firstPlayer = connectedPlayers[0];
64
  let assignedColor;
65
+ if (!firstPlayer) {
66
+ // No connected players, assign preferred or default to black
67
+ assignedColor = preferredColor || "black";
68
+ }
69
+ else if (preferredColor && preferredColor !== firstPlayer.color) {
70
  // Preferred color is available
71
  assignedColor = preferredColor;
72
  }
 
74
  // Assign opposite of first player's color
75
  assignedColor = firstPlayer.color === "black" ? "white" : "black";
76
  }
77
+ // Clean up old disconnected player entries with the same color
78
+ for (const [pid, player] of Object.entries(room.players)) {
79
+ if (!player.connected && player.color === assignedColor) {
80
+ delete room.players[pid];
81
+ }
82
+ }
83
  room.players[playerId] = {
84
  id: playerId,
85
  nickname,
 
88
  };
89
  this.playerRoomMap.set(playerId, roomId);
90
  // Start the game when second player joins
91
+ if (connectedPlayers.length === 1) {
92
  room.gameState.gameStatus = "playing";
93
  room.startedAt = new Date();
94
  }
trigo-web/backend/dist/backend/src/services/gameManager.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gameManager.js","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAEpC,kDAAyE;AAwBzE,MAAa,WAAW;IAKvB;QAJQ,UAAK,GAA0B,IAAI,GAAG,EAAE,CAAC;QACzC,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC/C,sBAAiB,GAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sBAAsB;QAGnF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAuB,EAAE,cAAkC;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAEnD,qDAAqD;QACrD,MAAM,WAAW,GAAG,cAAc,IAAI,OAAO,CAAC;QAE9C,MAAM,IAAI,GAAa;YACtB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,QAAQ,EAAE,wBAAwB;YAC3C,OAAO,EAAE;gBACR,CAAC,QAAQ,CAAC,EAAE;oBACX,EAAE,EAAE,QAAQ;oBACZ,QAAQ;oBACR,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,IAAI;iBACf;aACD;YACD,IAAI,EAAE,IAAI,gBAAS,CAAC,KAAK,EAAE;gBAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;gBACzD,CAAC;gBACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACvB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;oBACjB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;gBACtC,CAAC;aACD,CAAC;YACF,SAAS,EAAE;gBACV,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,IAAI;aACZ;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,eAAe,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,cAAkC;QAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,CAAC,eAAe;QAC7B,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,aAAgC,CAAC;QAErC,IAAI,cAAc,IAAI,cAAc,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YAC5D,+BAA+B;YAC/B,aAAa,GAAG,cAAc,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,aAAa,GAAG,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;YACxB,EAAE,EAAE,QAAQ;YACZ,QAAQ;YACR,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,0CAA0C;QAC1C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,QAAgB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpC,kCAAkC;QAClC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,iCAAiC,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAyC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEnD,kCAAkC;QAClC,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEnD,kCAAkC;QAClC,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,QAAgB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEtB,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAErE,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAGD;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAGD;;;OAGG;IACH,SAAS,CACR,MAAc,EACd,OAAe,EACf,OAGC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAE9D,yBAAyB;QACzB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;QACxE,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACvC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;QAE3C,6CAA6C;QAC7C,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvD,CAAC;YACF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QAED,2EAA2E;QAC3E,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IACC,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAC9B,CAAC;gBACF,uCAAuC;gBACvC,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAS,CAAC,UAAU,EAAE;oBACrC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBACzD,CAAC;oBACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;wBACvB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;oBACnD,CAAC;oBACD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;wBACjB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;oBACtC,CAAC;iBACD,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,gCAAgC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3G,CAAC;iBAAM,CAAC;gBACP,yBAAyB;gBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,yBAAyB,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;aAAM,CAAC;YACP,gCAAgC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,yBAAyB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClD,OAAO,YAAY,KAAK,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAc;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAE3C,mBAAmB;QACnB,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;QACjC,CAAC;aAAM,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QACvC,OAAO,CAAC,GAAG,CACV,QAAQ,MAAM,kBAAkB,SAAS,CAAC,KAAK,YAAY,SAAS,CAAC,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAC9G,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAAC,MAAc;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAErC,qBAAqB;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEnD,4BAA4B;QAC5B,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,eAAQ,CAAC,IAAI,EAAE,CAAC;YAC9E,wCAAwC;YACxC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,CAClD,CAAC;IACH,CAAC;IAEO,cAAc;QACrB,OAAO,IAAA,SAAM,GAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,CAAC;CACD;AAxZD,kCAwZC"}
 
1
+ {"version":3,"file":"gameManager.js","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"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"}
trigo-web/backend/dist/backend/src/sockets/gameSocket.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gameSocket.d.ts","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,QA6avF"}
 
1
+ {"version":3,"file":"gameSocket.d.ts","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAetD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,QAsfvF"}
trigo-web/backend/dist/backend/src/sockets/gameSocket.js CHANGED
@@ -1,8 +1,34 @@
1
  "use strict";
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
  exports.setupSocketHandlers = setupSocketHandlers;
 
 
 
 
 
 
 
 
 
 
 
 
4
  function setupSocketHandlers(io, socket, gameManager) {
5
  console.log(`Setting up socket handlers for ${socket.id}`);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  // Join room
7
  socket.on("joinRoom", (data, callback) => {
8
  console.log("[gameSocket] joinRoom event received:", {
@@ -30,8 +56,8 @@ function setupSocketHandlers(io, socket, gameManager) {
30
  }
31
  return;
32
  }
33
- const playerCount = Object.keys(existingRoom.players).length;
34
- if (playerCount >= 2) {
35
  // Room is full
36
  if (callback) {
37
  callback({
@@ -50,6 +76,11 @@ function setupSocketHandlers(io, socket, gameManager) {
50
  }
51
  if (room) {
52
  socket.join(room.id);
 
 
 
 
 
53
  // Get complete game data for frontend
54
  const currentPlayer = gameManager.getCurrentPlayer(room.id);
55
  const stats = gameManager.getGameStats(room.id);
@@ -97,10 +128,22 @@ function setupSocketHandlers(io, socket, gameManager) {
97
  socket.emit("roomJoined", response);
98
  }
99
  // Notify other players
 
100
  socket.to(room.id).emit("playerJoined", {
101
  playerId: socket.id,
102
  nickname: nickname
103
  });
 
 
 
 
 
 
 
 
 
 
 
104
  console.log(`Player ${socket.id} ${roomId ? "joined" : "created"} room ${room.id}`);
105
  }
106
  else {
@@ -129,12 +172,21 @@ function setupSocketHandlers(io, socket, gameManager) {
129
  socket.on("leaveRoom", () => {
130
  const room = gameManager.getPlayerRoom(socket.id);
131
  if (room) {
 
132
  socket.leave(room.id);
133
  gameManager.leaveRoom(room.id, socket.id);
134
- // Notify others
135
- socket.to(room.id).emit("playerLeft", {
136
  playerId: socket.id
137
  });
 
 
 
 
 
 
 
 
138
  }
139
  });
140
  // Game moves
@@ -374,8 +426,20 @@ function setupSocketHandlers(io, socket, gameManager) {
374
  socket.on("disconnect", () => {
375
  console.log(`Client disconnected: ${socket.id}`);
376
  const room = gameManager.getPlayerRoom(socket.id);
 
377
  if (room) {
 
 
378
  gameManager.leaveRoom(room.id, socket.id);
 
 
 
 
 
 
 
 
 
379
  socket.to(room.id).emit("playerDisconnected", {
380
  playerId: socket.id
381
  });
 
1
  "use strict";
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
  exports.setupSocketHandlers = setupSocketHandlers;
4
+ // Helper to get room summary for room list
5
+ function getRoomSummary(room) {
6
+ const connectedPlayers = Object.values(room.players).filter((p) => p.connected);
7
+ return {
8
+ id: room.id,
9
+ playerCount: connectedPlayers.length,
10
+ maxPlayers: 2,
11
+ status: room.gameState.gameStatus,
12
+ isFull: connectedPlayers.length >= 2,
13
+ createdAt: room.createdAt.toISOString()
14
+ };
15
+ }
16
  function setupSocketHandlers(io, socket, gameManager) {
17
  console.log(`Setting up socket handlers for ${socket.id}`);
18
+ // List available rooms
19
+ socket.on("listRooms", (callback) => {
20
+ console.log("[gameSocket] listRooms request from:", socket.id);
21
+ const rooms = gameManager.getActiveRooms();
22
+ const roomList = rooms.map(room => getRoomSummary(room));
23
+ console.log("[gameSocket] Returning", roomList.length, "rooms:", roomList.map(r => `${r.id}(${r.playerCount}p)`));
24
+ // Debug: show detailed player state for each room
25
+ rooms.forEach(room => {
26
+ console.log(`[gameSocket] Room ${room.id} detailed state:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
27
+ });
28
+ if (callback) {
29
+ callback({ success: true, rooms: roomList });
30
+ }
31
+ });
32
  // Join room
33
  socket.on("joinRoom", (data, callback) => {
34
  console.log("[gameSocket] joinRoom event received:", {
 
56
  }
57
  return;
58
  }
59
+ const connectedPlayers = Object.values(existingRoom.players).filter((p) => p.connected);
60
+ if (connectedPlayers.length >= 2) {
61
  // Room is full
62
  if (callback) {
63
  callback({
 
76
  }
77
  if (room) {
78
  socket.join(room.id);
79
+ // Debug: Log socket.io room membership and player state
80
+ const roomSockets = io.sockets.adapter.rooms.get(room.id);
81
+ console.log(`[gameSocket] Socket ${socket.id} joined room ${room.id}`);
82
+ console.log(`[gameSocket] Room ${room.id} now has sockets:`, roomSockets ? Array.from(roomSockets) : []);
83
+ console.log(`[gameSocket] Room ${room.id} players:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
84
  // Get complete game data for frontend
85
  const currentPlayer = gameManager.getCurrentPlayer(room.id);
86
  const stats = gameManager.getGameStats(room.id);
 
128
  socket.emit("roomJoined", response);
129
  }
130
  // Notify other players
131
+ console.log(`[gameSocket] Broadcasting playerJoined to room ${room.id} (excluding ${socket.id})`);
132
  socket.to(room.id).emit("playerJoined", {
133
  playerId: socket.id,
134
  nickname: nickname
135
  });
136
+ console.log(`[gameSocket] playerJoined broadcast sent`);
137
+ // Broadcast room update to all sockets (for room list)
138
+ const roomSummary = getRoomSummary(room);
139
+ if (roomId) {
140
+ // Joined existing room
141
+ io.emit("roomUpdated", roomSummary);
142
+ }
143
+ else {
144
+ // Created new room
145
+ io.emit("roomCreated", roomSummary);
146
+ }
147
  console.log(`Player ${socket.id} ${roomId ? "joined" : "created"} room ${room.id}`);
148
  }
149
  else {
 
172
  socket.on("leaveRoom", () => {
173
  const room = gameManager.getPlayerRoom(socket.id);
174
  if (room) {
175
+ const roomId = room.id;
176
  socket.leave(room.id);
177
  gameManager.leaveRoom(room.id, socket.id);
178
+ // Notify others in room
179
+ socket.to(roomId).emit("playerLeft", {
180
  playerId: socket.id
181
  });
182
+ // Broadcast room update or deletion to all sockets
183
+ const updatedRoom = gameManager.getRoom(roomId);
184
+ if (updatedRoom) {
185
+ io.emit("roomUpdated", getRoomSummary(updatedRoom));
186
+ }
187
+ else {
188
+ io.emit("roomDeleted", { roomId });
189
+ }
190
  }
191
  });
192
  // Game moves
 
426
  socket.on("disconnect", () => {
427
  console.log(`Client disconnected: ${socket.id}`);
428
  const room = gameManager.getPlayerRoom(socket.id);
429
+ console.log(`[disconnect] Player ${socket.id} room:`, room ? room.id : 'none');
430
  if (room) {
431
+ console.log(`[disconnect] Room ${room.id} players BEFORE leave:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
432
+ const roomId = room.id;
433
  gameManager.leaveRoom(room.id, socket.id);
434
+ const updatedRoom = gameManager.getRoom(roomId);
435
+ if (updatedRoom) {
436
+ console.log(`[disconnect] Room ${roomId} players AFTER leave:`, Object.entries(updatedRoom.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
437
+ io.emit("roomUpdated", getRoomSummary(updatedRoom));
438
+ }
439
+ else {
440
+ console.log(`[disconnect] Room ${roomId} deleted`);
441
+ io.emit("roomDeleted", { roomId });
442
+ }
443
  socket.to(room.id).emit("playerDisconnected", {
444
  playerId: socket.id
445
  });
trigo-web/backend/dist/backend/src/sockets/gameSocket.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gameSocket.js","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":";;AAGA,kDA6aC;AA7aD,SAAgB,mBAAmB,CAAC,EAAU,EAAE,MAAc,EAAE,WAAwB;IACvF,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3D,YAAY;IACZ,MAAM,CAAC,EAAE,CACR,UAAU,EACV,CAAC,IAA+E,EAAE,QAAkC,EAAE,EAAE;QACvH,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE;YACpD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,CAAC,CAAC,QAAQ;YACvB,QAAQ,EAAE,MAAM,CAAC,EAAE;SACnB,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAElD,6BAA6B;QAC7B,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC;YAET,IAAI,MAAM,EAAE,CAAC;gBACZ,wBAAwB;gBACxB,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,qBAAqB;oBACrB,IAAI,QAAQ,EAAE,CAAC;wBACd,QAAQ,CAAC;4BACR,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,gBAAgB;4BACvB,SAAS,EAAE,gBAAgB;yBAC3B,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC7D,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACtB,eAAe;oBACf,IAAI,QAAQ,EAAE,CAAC;wBACd,QAAQ,CAAC;4BACR,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,cAAc;4BACrB,SAAS,EAAE,WAAW;yBACtB,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACP,oBAAoB;gBACpB,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAErB,sCAAsC;gBACtC,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAE9B,8BAA8B;gBAC9B,MAAM,OAAO,GAA2E,EAAE,CAAC;gBAC3F,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1D,OAAO,CAAC,GAAG,CAAC,GAAG;wBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;qBACnB,CAAC;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG;oBAChB,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK;oBAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE;oBACnC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,8BAA8B;oBACvC,SAAS,EAAE;wBACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAChC,aAAa;wBACb,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;wBAC5C,cAAc,EAAE;4BACf,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;4BAClC,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;yBAClC;wBACD,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU;wBACrC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;wBAC7B,GAAG;qBACH;iBACD,CAAC;gBAEF,6BAA6B;gBAC7B,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE;wBAC1D,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;qBACjC,CAAC,CAAC;oBACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACP,oDAAoD;oBACpD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;oBAC/D,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACrC,CAAC;gBAED,uBAAuB;gBACvB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;oBACvC,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,QAAQ,EAAE,QAAQ;iBAClB,CAAC,CAAC;gBAEH,OAAO,CAAC,GAAG,CACV,UAAU,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,EAAE,EAAE,CACtE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,kBAAkB;gBAClB,IAAI,QAAQ,EAAE,CAAC;oBACd,QAAQ,CAAC;wBACR,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,+BAA+B;wBACtC,SAAS,EAAE,eAAe;qBAC1B,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC;oBACR,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,cAAc;oBACrB,SAAS,EAAE,cAAc;iBACzB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC,CACD,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAE1C,gBAAgB;YAChB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACrC,QAAQ,EAAE,MAAM,CAAC,EAAE;aACnB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAyC,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAC5D,wBAAwB;YACxB,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE9B,mDAAmD;YACnD,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjC,aAAa;gBACb,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE;oBACf,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;oBAClC,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;iBAClC;gBACD,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB;gBAC9C,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC5C,GAAG;aACH,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACnD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE9B,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjC,aAAa;gBACb,MAAM,EAAE,MAAM;gBACd,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC5C,GAAG;aACH,CAAC,CAAC;YAEH,0CAA0C;YAC1C,IAAI,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpD,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBAChC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;oBAC7B,MAAM,EAAE,aAAa;oBACrB,SAAS;iBACT,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,SAAS;IACT,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACpD,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;gBAC7B,MAAM,EAAE,aAAa;aACrB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAGH,YAAY;IACZ,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAkC,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7F,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnG,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzD,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE9B,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjC,aAAa;gBACb,MAAM,EAAE,MAAM;gBACd,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC5C,cAAc,EAAE;oBACf,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;oBAClC,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;iBAClC;gBACD,GAAG;aACH,CAAC,CAAC;YAEH,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC,CAAC,CAAC;IAGH,YAAY;IACZ,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAkC,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7F,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnG,OAAO;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnG,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzD,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE9B,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjC,aAAa;gBACb,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ,EAAE,QAAQ;gBAC5B,cAAc,EAAE;oBACf,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;oBAClC,KAAK,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC;iBAClC;gBACD,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB;gBAC9C,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC5C,GAAG;aACH,CAAC,CAAC;YAEH,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,IAAI,QAAQ;gBAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC,CAAC,CAAC;IAGH,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CACtB,IAG6B,EAC7B,QAAkC,EACjC,EAAE;QACH,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,EAAE,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxD,IAAI,EAAE;gBAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YACjF,OAAO;QACR,CAAC;QAED,uEAAuE;QACvE,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;YAC3D,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;SAC/B,CAAC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEhE,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE9B,0CAA0C;YAC1C,MAAM,OAAO,GAA2E,EAAE,CAAC;YAC3F,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,GAAG;oBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACnB,CAAC;YACH,CAAC;YAED,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChC,aAAa;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChC,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACtC,OAAO;gBACP,GAAG;aACH,CAAC,CAAC;YAEH,IAAI,UAAU;gBAAE,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACP,IAAI,UAAU;gBAAE,UAAU,CAAC;oBAC1B,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,cAAc;oBACrC,SAAS,EAAE,MAAM,CAAC,KAAK,KAAK,oCAAoC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;iBAC/F,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAyB,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;gBAClC,MAAM,EAAE,MAAM,EAAE,QAAQ,IAAI,SAAS;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,MAAM,CAAC,EAAE;aACnB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,CAAC,EAAE,CACR,gBAAgB,EAChB,CAAC,IAA0B,EAAE,QAAkC,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YACzD,IAAI,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEhC,mCAAmC;YACnC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACtC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,WAAW;aACxB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,EAAE,sBAAsB,WAAW,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAExF,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;IACF,CAAC,CACD,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACV,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC7C,QAAQ,EAAE,MAAM,CAAC,EAAE;aACnB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAGD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACzC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC"}
 
1
+ {"version":3,"file":"gameSocket.js","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"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"}
trigo-web/backend/dist/inc/mctsAgent.d.ts CHANGED
@@ -30,6 +30,7 @@ export declare class MCTSAgent {
30
  private treeAgent;
31
  private evaluationAgent;
32
  private config;
 
33
  constructor(treeAgent: TrigoTreeAgent, evaluationAgent: TrigoEvaluationAgent, config?: Partial<MCTSConfig>);
34
  /**
35
  * Select best move using MCTS
@@ -47,12 +48,16 @@ export declare class MCTSAgent {
47
  /**
48
  * Run a single MCTS simulation
49
  * Select -> Expand & Evaluate -> Backup
 
 
 
50
  */
51
  private runSimulation;
52
  /**
53
  * Selection phase: Traverse tree using PUCT
54
  *
55
  * @param root Root node to start selection from
 
56
  * @returns Leaf node and path taken
57
  */
58
  private select;
@@ -60,12 +65,23 @@ export declare class MCTSAgent {
60
  * Expand and evaluate leaf node using neural networks
61
  *
62
  * @param node Leaf node to expand
 
63
  * @returns Value estimate from evaluation network
64
  */
65
  private expandAndEvaluate;
66
  /**
67
  * Backup phase: Propagate value up the tree
68
  *
 
 
 
 
 
 
 
 
 
 
69
  * @param path Path from root to leaf
70
  * @param value Value to propagate (white-positive: positive = white winning)
71
  */
@@ -109,6 +125,9 @@ export declare class MCTSAgent {
109
  * Add Dirichlet noise to prior probabilities at root
110
  * P(s,a) = (1 - ε) * p_a + ε * η_a
111
  * where η ~ Dir(α)
 
 
 
112
  */
113
  private addDirichletNoise;
114
  /**
@@ -120,16 +139,46 @@ export declare class MCTSAgent {
120
  * Sample from standard normal distribution (Box-Muller transform)
121
  */
122
  private randomNormal;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  /**
124
  * Create a new MCTS node
 
 
 
 
 
125
  */
126
  private createNode;
127
  /**
128
  * Encode move to string key for storage in maps
 
129
  */
130
  private encodeAction;
131
  /**
132
  * Decode string key back to move
 
 
133
  */
134
  private decodeAction;
135
  }
 
30
  private treeAgent;
31
  private evaluationAgent;
32
  private config;
33
+ debugMode: boolean;
34
  constructor(treeAgent: TrigoTreeAgent, evaluationAgent: TrigoEvaluationAgent, config?: Partial<MCTSConfig>);
35
  /**
36
  * Select best move using MCTS
 
48
  /**
49
  * Run a single MCTS simulation
50
  * Select -> Expand & Evaluate -> Backup
51
+ *
52
+ * Memory optimization: Clone state once at start, mutate along path.
53
+ * This reduces memory from O(nodes) to O(simulations).
54
  */
55
  private runSimulation;
56
  /**
57
  * Selection phase: Traverse tree using PUCT
58
  *
59
  * @param root Root node to start selection from
60
+ * @param workingState Mutable game state that gets updated along the path
61
  * @returns Leaf node and path taken
62
  */
63
  private select;
 
65
  * Expand and evaluate leaf node using neural networks
66
  *
67
  * @param node Leaf node to expand
68
+ * @param workingState Current game state at this node (passed from simulation)
69
  * @returns Value estimate from evaluation network
70
  */
71
  private expandAndEvaluate;
72
  /**
73
  * Backup phase: Propagate value up the tree
74
  *
75
+ * White-positive minimax propagation:
76
+ * - All Q-values represent White's advantage (positive = White winning)
77
+ * - When all children are terminal, mark parent as terminal with minimax value:
78
+ * * White's turn: terminal_value = max(children terminal values)
79
+ * * Black's turn: terminal_value = min(children terminal values)
80
+ *
81
+ * Improvements (based on GPT-5.1 review):
82
+ * - Uses stored playerToMove instead of computing from depth
83
+ * - Uses stored depth instead of recomputing via parent walk
84
+ *
85
  * @param path Path from root to leaf
86
  * @param value Value to propagate (white-positive: positive = white winning)
87
  */
 
125
  * Add Dirichlet noise to prior probabilities at root
126
  * P(s,a) = (1 - ε) * p_a + ε * η_a
127
  * where η ~ Dir(α)
128
+ *
129
+ * Note: Pass move is excluded from noise to prevent exploration of
130
+ * clearly suboptimal opening passes.
131
  */
132
  private addDirichletNoise;
133
  /**
 
139
  * Sample from standard normal distribution (Box-Muller transform)
140
  */
141
  private randomNormal;
142
+ /**
143
+ * Check if game state is terminal and return value if so
144
+ *
145
+ * Terminal conditions (checked in order of cost):
146
+ * 1. Game already finished (double-pass or resignation) - CHEAPEST
147
+ * 2. Board coverage > 50% AND naturally terminal (calls isNaturallyTerminal) - EXPENSIVE
148
+ *
149
+ * NOTE: The coverage check (> 50%) is an optimization to avoid expensive
150
+ * territory calculations on sparse boards where natural termination is unlikely.
151
+ *
152
+ * @param state Game state to check
153
+ * @returns Terminal value (white-positive) if terminal, null otherwise
154
+ */
155
+ private checkTerminal;
156
+ /**
157
+ * Calculate terminal value from territory scores
158
+ * Uses logarithmic scaling matching the training code
159
+ *
160
+ * @param territory Territory counts from game
161
+ * @returns Value (white-positive: positive = white winning)
162
+ */
163
+ private calculateTerminalValue;
164
  /**
165
  * Create a new MCTS node
166
+ *
167
+ * @param state Game state (only provided for root node, null for others to save memory)
168
+ * @param parent Parent node
169
+ * @param action Action that led to this node
170
+ * @param playerToMove Player to move at this node (derived from state if available)
171
  */
172
  private createNode;
173
  /**
174
  * Encode move to string key for storage in maps
175
+ * Note: Only encodes position, player info is handled separately
176
  */
177
  private encodeAction;
178
  /**
179
  * Decode string key back to move
180
+ * Note: Returns move with placeholder player - caller must set correct player
181
+ * based on game state before using the move externally
182
  */
183
  private decodeAction;
184
  }
trigo-web/backend/dist/inc/mctsAgent.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mctsAgent.d.ts","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAuBD;;;GAGG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAa;gBAI1B,SAAS,EAAE,cAAc,EACzB,eAAe,EAAE,oBAAoB,EACrC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM;IAgBjC;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAuGF;;;OAGG;YACW,aAAa;IAY3B;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAgEd;;;;;OAKG;YACW,iBAAiB;IAoI/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAiBd;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IA8CxB;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuCnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,YAAY;CAQpB"}
 
1
+ {"version":3,"file":"mctsAgent.d.ts","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAgCD;;;GAGG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAa;IACpB,SAAS,EAAE,OAAO,CAAS;gBAIjC,SAAS,EAAE,cAAc,EACzB,eAAe,EAAE,oBAAoB,EACrC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM;IAgBjC;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IA8CF;;;;;;OAMG;YACW,aAAa;IA2B3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAoEd;;;;;;OAMG;YACW,iBAAiB;IA+E/B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM;IAkFd;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAwExB;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuCnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IA4CrB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IAkClB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAUpB"}
trigo-web/backend/dist/inc/mctsAgent.js CHANGED
@@ -17,6 +17,7 @@ exports.MCTSAgent = void 0;
17
  */
18
  class MCTSAgent {
19
  constructor(treeAgent, evaluationAgent, config = {}) {
 
20
  this.treeAgent = treeAgent;
21
  this.evaluationAgent = evaluationAgent;
22
  // Default configuration (AlphaGo Zero-inspired)
@@ -39,69 +40,19 @@ class MCTSAgent {
39
  // Create root node
40
  const root = this.createNode(game, null, null);
41
  // Check if root is already terminal (game over)
42
- // Terminal conditions (checked in order of cost):
43
- // 1. Both players have stones (cheap)
44
- // 2. Board coverage > 50% (cheap)
45
- // 3. No neutral territory (EXPENSIVE - only check if above pass)
46
- // Get board state (cheap)
47
- const board = game.getBoard();
48
- const shape = game.getShape();
49
- const totalPositions = shape.x * shape.y * shape.z;
50
- // Count stones (cheap)
51
- let stoneCount = 0;
52
- let hasBlack = false;
53
- let hasWhite = false;
54
- for (let x = 0; x < shape.x; x++) {
55
- for (let y = 0; y < shape.y; y++) {
56
- for (let z = 0; z < shape.z; z++) {
57
- const stone = board[x][y][z];
58
- if (stone === 1) { // Black
59
- hasBlack = true;
60
- stoneCount++;
61
- }
62
- else if (stone === 2) { // White
63
- hasWhite = true;
64
- stoneCount++;
65
- }
66
- }
67
- }
68
- }
69
- const coverageRatio = stoneCount / totalPositions;
70
- // Early exit: Check cheap conditions first
71
- let isRootTerminal = false;
72
- let territory = null;
73
- if (hasBlack && hasWhite && coverageRatio > 0.5) {
74
- // Only calculate territory if cheap conditions pass (EXPENSIVE)
75
- territory = game.getTerritory();
76
- isRootTerminal = territory.neutral === 0;
77
- }
78
- if (isRootTerminal) {
79
- // Game is over - return Pass move with exact value from territory
80
- // Using same formula as training code
81
- const scoreDiff = territory.white - territory.black;
82
- let rootValue;
83
- if (Math.abs(scoreDiff) < 1e-6) {
84
- // Draw/tie case
85
- rootValue = 0.0;
86
- }
87
- else {
88
- // Match training formula from valueCausalLoss.py:_expand_value_targets
89
- // The log term incentivizes winning by larger margins (logarithmically)
90
- const territory_value_factor = 1.0; // Default from training config
91
- const signScore = Math.sign(scoreDiff);
92
- rootValue = signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
93
- }
94
  const currentPlayer = game.getCurrentPlayer();
95
  return {
96
  move: { player: currentPlayer === 1 ? "black" : "white", isPass: true },
97
  visitCounts: new Map(),
98
  searchPolicy: new Map(),
99
- rootValue
100
  };
101
  }
102
  // Run MCTS simulations
103
  for (let i = 0; i < this.config.numSimulations; i++) {
104
- await this.runSimulation(root);
105
  }
106
  // Temperature schedule: τ=1 for first 30 moves, τ→0 afterward
107
  const temperature = moveNumber < 30 ? this.config.temperature : 0.01;
@@ -124,12 +75,27 @@ class MCTSAgent {
124
  /**
125
  * Run a single MCTS simulation
126
  * Select -> Expand & Evaluate -> Backup
 
 
 
127
  */
128
- async runSimulation(root) {
 
 
 
 
 
 
129
  // 1. Selection: Traverse tree using PUCT until reaching unexpanded node
130
- const { node, path } = this.select(root);
131
  // 2. Expand and Evaluate: Get value from neural network
132
- const value = await this.expandAndEvaluate(node);
 
 
 
 
 
 
133
  // 3. Backup: Propagate value up the tree
134
  this.backup(path, value);
135
  }
@@ -137,13 +103,19 @@ class MCTSAgent {
137
  * Selection phase: Traverse tree using PUCT
138
  *
139
  * @param root Root node to start selection from
 
140
  * @returns Leaf node and path taken
141
  */
142
- select(root) {
143
  const path = [];
144
  let node = root;
145
  // Traverse until we reach an unexpanded node
146
  while (node.expanded) {
 
 
 
 
 
147
  // Get all legal actions
148
  const actionKeys = Array.from(node.P.keys());
149
  // Terminal node check: if expanded but no actions, this is a terminal node
@@ -154,7 +126,7 @@ class MCTSAgent {
154
  // Both players select HIGHEST PUCT value:
155
  // - Black: PUCT = -Q + U, max PUCT = max(-Q) = min(Q) ✓
156
  // - White: PUCT = Q + U, max PUCT = max(Q) ✓
157
- const currentPlayer = node.state.getCurrentPlayer();
158
  const isWhite = currentPlayer === 2;
159
  let bestActionKey = actionKeys[0];
160
  let bestPuct = this.calculatePUCT(node, bestActionKey, isWhite);
@@ -168,19 +140,18 @@ class MCTSAgent {
168
  }
169
  // Record path
170
  path.push({ node, actionKey: bestActionKey });
 
 
 
 
 
 
 
 
171
  // Move to child (create if doesn't exist)
172
  if (!node.children.has(bestActionKey)) {
173
- // Decode action and apply to get child state
174
- const action = this.decodeAction(bestActionKey);
175
- const childState = node.state.clone();
176
- if (action.isPass) {
177
- childState.pass();
178
- }
179
- else if (action.x !== undefined && action.y !== undefined && action.z !== undefined) {
180
- childState.drop({ x: action.x, y: action.y, z: action.z });
181
- }
182
- // Create child node (unexpanded)
183
- const childNode = this.createNode(childState, node, action);
184
  node.children.set(bestActionKey, childNode);
185
  }
186
  node = node.children.get(bestActionKey);
@@ -191,78 +162,32 @@ class MCTSAgent {
191
  * Expand and evaluate leaf node using neural networks
192
  *
193
  * @param node Leaf node to expand
 
194
  * @returns Value estimate from evaluation network
195
  */
196
- async expandAndEvaluate(node) {
197
- // Check if game is over (terminal state)
198
- // Terminal conditions (checked in order of cost):
199
- // 1. Both players have stones (cheap)
200
- // 2. Board coverage > 50% (cheap)
201
- // 3. No neutral territory (EXPENSIVE - only check if above pass)
202
- // Get board state (cheap)
203
- const board = node.state.getBoard();
204
- const shape = node.state.getShape();
205
- const totalPositions = shape.x * shape.y * shape.z;
206
- // Count stones on board (cheap)
207
- let stoneCount = 0;
208
- let hasBlack = false;
209
- let hasWhite = false;
210
- for (let x = 0; x < shape.x; x++) {
211
- for (let y = 0; y < shape.y; y++) {
212
- for (let z = 0; z < shape.z; z++) {
213
- const stone = board[x][y][z];
214
- if (stone === 1) { // Black
215
- hasBlack = true;
216
- stoneCount++;
217
- }
218
- else if (stone === 2) { // White
219
- hasWhite = true;
220
- stoneCount++;
221
- }
222
- }
223
- }
224
  }
225
- const coverageRatio = stoneCount / totalPositions;
226
- // Early exit: Check cheap conditions first
227
- let isTerminal = false;
228
- let territory = null;
229
- if (hasBlack && hasWhite && coverageRatio > 0.5) {
230
- // Only calculate territory if cheap conditions pass (EXPENSIVE)
231
- territory = node.state.getTerritory();
232
- isTerminal = territory.neutral === 0;
233
- }
234
- if (isTerminal) {
235
- // Game is over - return exact result from territory
236
- // Using same formula as training code: target = sign(score) * (1 + log(|score|)) * factor
237
- const scoreDiff = territory.white - territory.black;
238
- let value;
239
- if (Math.abs(scoreDiff) < 1e-6) {
240
- // Draw/tie case
241
- value = 0.0;
242
- }
243
- else {
244
- // Match training formula from valueCausalLoss.py:_expand_value_targets
245
- // target = sign(score) * (1 + log(|score|)) * territory_value_factor
246
- // The log term incentivizes winning by larger margins (logarithmically)
247
- // This balances winning incentive without overwhelming win/loss direction
248
- const territory_value_factor = 1.0; // Default from training config
249
- const signScore = Math.sign(scoreDiff);
250
- value = signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
251
- }
252
  // Mark terminal node as expanded with empty action set to prevent revisits
253
- // This caches the terminal value and avoids repeated getTerritory() calls
254
  node.expanded = true;
 
255
  node.P = new Map(); // No actions available (terminal)
256
  node.N = new Map();
257
  node.W = new Map();
258
  node.Q = new Map();
259
  node.children = new Map();
260
- return value;
261
  }
262
  // Non-terminal state: expand with policy network and evaluate
263
  // Get all valid moves
264
- const currentPlayer = node.state.getCurrentPlayer() === 1 ? "black" : "white";
265
- const validPositions = node.state.validMovePositions();
266
  const moves = validPositions.map(pos => ({
267
  x: pos.x,
268
  y: pos.y,
@@ -271,7 +196,7 @@ class MCTSAgent {
271
  }));
272
  moves.push({ player: currentPlayer, isPass: true });
273
  // Get policy priors from tree agent
274
- const scoredMoves = await this.treeAgent.scoreMoves(node.state, moves);
275
  // Convert log probabilities to probabilities and normalize (stable softmax)
276
  const maxScore = Math.max(...scoredMoves.map(m => m.score));
277
  const expScores = scoredMoves.map(m => Math.exp(m.score - maxScore));
@@ -299,13 +224,23 @@ class MCTSAgent {
299
  // Mark as expanded
300
  node.expanded = true;
301
  // Get value estimate from evaluation agent
302
- const evaluation = await this.evaluationAgent.evaluatePosition(node.state);
303
  // Return value directly (value model returns white-positive by design)
304
  return evaluation.value;
305
  }
306
  /**
307
  * Backup phase: Propagate value up the tree
308
  *
 
 
 
 
 
 
 
 
 
 
309
  * @param path Path from root to leaf
310
  * @param value Value to propagate (white-positive: positive = white winning)
311
  */
@@ -320,6 +255,58 @@ class MCTSAgent {
320
  node.N.set(actionKey, n + 1);
321
  node.W.set(actionKey, w + value);
322
  node.Q.set(actionKey, (w + value) / (n + 1));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  }
324
  }
325
  /**
@@ -356,6 +343,31 @@ class MCTSAgent {
356
  */
357
  selectPlayAction(node, temperature) {
358
  const actionKeys = Array.from(node.N.keys());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
359
  if (temperature < 0.01) {
360
  // Greedy: Select action with highest visit count
361
  let bestActionKey = actionKeys[0];
@@ -443,11 +455,19 @@ class MCTSAgent {
443
  * Add Dirichlet noise to prior probabilities at root
444
  * P(s,a) = (1 - ε) * p_a + ε * η_a
445
  * where η ~ Dir(α)
 
 
 
446
  */
447
  addDirichletNoise(priors) {
448
- const actionKeys = Array.from(priors.keys());
 
449
  const alpha = this.config.dirichletAlpha;
450
  const epsilon = this.config.dirichletEpsilon;
 
 
 
 
451
  // Generate Dirichlet noise (simplified using Gamma distribution)
452
  const noise = [];
453
  let noiseSum = 0;
@@ -462,7 +482,7 @@ class MCTSAgent {
462
  // Fallback: use uniform noise (no mixing, keep original priors)
463
  return;
464
  }
465
- // Normalize and mix with priors
466
  for (let i = 0; i < actionKeys.length; i++) {
467
  const actionKey = actionKeys[i];
468
  const prior = priors.get(actionKey) ?? 0;
@@ -513,10 +533,101 @@ class MCTSAgent {
513
  const u2 = Math.random();
514
  return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
515
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
  /**
517
  * Create a new MCTS node
 
 
 
 
 
518
  */
519
- createNode(state, parent, action) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
  return {
521
  state,
522
  parent,
@@ -526,11 +637,15 @@ class MCTSAgent {
526
  Q: new Map(),
527
  P: new Map(),
528
  children: new Map(),
529
- expanded: false
 
 
 
530
  };
531
  }
532
  /**
533
  * Encode move to string key for storage in maps
 
534
  */
535
  encodeAction(move) {
536
  if (move.isPass) {
@@ -540,13 +655,17 @@ class MCTSAgent {
540
  }
541
  /**
542
  * Decode string key back to move
 
 
543
  */
544
  decodeAction(key) {
545
  if (key === "pass") {
546
- return { player: "black", isPass: true }; // Player will be updated when applied
 
547
  }
548
  const [x, y, z] = key.split(",").map(Number);
549
- return { player: "black", x, y, z }; // Player will be updated when applied
 
550
  }
551
  }
552
  exports.MCTSAgent = MCTSAgent;
 
17
  */
18
  class MCTSAgent {
19
  constructor(treeAgent, evaluationAgent, config = {}) {
20
+ this.debugMode = false; // Enable debug logging
21
  this.treeAgent = treeAgent;
22
  this.evaluationAgent = evaluationAgent;
23
  // Default configuration (AlphaGo Zero-inspired)
 
40
  // Create root node
41
  const root = this.createNode(game, null, null);
42
  // Check if root is already terminal (game over)
43
+ const terminalResult = this.checkTerminal(game);
44
+ if (terminalResult !== null) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  const currentPlayer = game.getCurrentPlayer();
46
  return {
47
  move: { player: currentPlayer === 1 ? "black" : "white", isPass: true },
48
  visitCounts: new Map(),
49
  searchPolicy: new Map(),
50
+ rootValue: terminalResult
51
  };
52
  }
53
  // Run MCTS simulations
54
  for (let i = 0; i < this.config.numSimulations; i++) {
55
+ await this.runSimulation(root, i);
56
  }
57
  // Temperature schedule: τ=1 for first 30 moves, τ→0 afterward
58
  const temperature = moveNumber < 30 ? this.config.temperature : 0.01;
 
75
  /**
76
  * Run a single MCTS simulation
77
  * Select -> Expand & Evaluate -> Backup
78
+ *
79
+ * Memory optimization: Clone state once at start, mutate along path.
80
+ * This reduces memory from O(nodes) to O(simulations).
81
  */
82
+ async runSimulation(root, simIndex) {
83
+ // Invariant: root node must always have a non-null state
84
+ if (!root.state) {
85
+ throw new Error("runSimulation: root node must have a non-null state");
86
+ }
87
+ // Clone root state once for this simulation
88
+ const workingState = root.state.clone();
89
  // 1. Selection: Traverse tree using PUCT until reaching unexpanded node
90
+ const { node, path } = this.select(root, workingState);
91
  // 2. Expand and Evaluate: Get value from neural network
92
+ const value = await this.expandAndEvaluate(node, workingState);
93
+ // Debug logging
94
+ if (this.debugMode && simIndex !== undefined && simIndex < 10) {
95
+ const pathStr = path.map(p => p.actionKey).join(" → ");
96
+ const terminalStr = node.terminalValue !== null ? " [TERMINAL]" : "";
97
+ console.log(`Sim ${simIndex + 1}: ${pathStr || "(root)"} → value=${value.toFixed(4)}${terminalStr}`);
98
+ }
99
  // 3. Backup: Propagate value up the tree
100
  this.backup(path, value);
101
  }
 
103
  * Selection phase: Traverse tree using PUCT
104
  *
105
  * @param root Root node to start selection from
106
+ * @param workingState Mutable game state that gets updated along the path
107
  * @returns Leaf node and path taken
108
  */
109
+ select(root, workingState) {
110
  const path = [];
111
  let node = root;
112
  // Traverse until we reach an unexpanded node
113
  while (node.expanded) {
114
+ // GPT-5.1 recommendation: Stop at terminal nodes immediately
115
+ // Terminal nodes should not be expanded or evaluated further
116
+ if (node.terminalValue !== null) {
117
+ break; // Return terminal node, use its cached value
118
+ }
119
  // Get all legal actions
120
  const actionKeys = Array.from(node.P.keys());
121
  // Terminal node check: if expanded but no actions, this is a terminal node
 
126
  // Both players select HIGHEST PUCT value:
127
  // - Black: PUCT = -Q + U, max PUCT = max(-Q) = min(Q) ✓
128
  // - White: PUCT = Q + U, max PUCT = max(Q) ✓
129
+ const currentPlayer = workingState.getCurrentPlayer();
130
  const isWhite = currentPlayer === 2;
131
  let bestActionKey = actionKeys[0];
132
  let bestPuct = this.calculatePUCT(node, bestActionKey, isWhite);
 
140
  }
141
  // Record path
142
  path.push({ node, actionKey: bestActionKey });
143
+ // Apply action to working state (instead of cloning)
144
+ const action = this.decodeAction(bestActionKey);
145
+ if (action.isPass) {
146
+ workingState.pass();
147
+ }
148
+ else if (action.x !== undefined && action.y !== undefined && action.z !== undefined) {
149
+ workingState.drop({ x: action.x, y: action.y, z: action.z });
150
+ }
151
  // Move to child (create if doesn't exist)
152
  if (!node.children.has(bestActionKey)) {
153
+ // Create child node WITHOUT storing state (memory optimization)
154
+ const childNode = this.createNode(null, node, action);
 
 
 
 
 
 
 
 
 
155
  node.children.set(bestActionKey, childNode);
156
  }
157
  node = node.children.get(bestActionKey);
 
162
  * Expand and evaluate leaf node using neural networks
163
  *
164
  * @param node Leaf node to expand
165
+ * @param workingState Current game state at this node (passed from simulation)
166
  * @returns Value estimate from evaluation network
167
  */
168
+ async expandAndEvaluate(node, workingState) {
169
+ // Check if terminal value is already cached
170
+ if (node.terminalValue !== null) {
171
+ return node.terminalValue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  }
173
+ // Check if game is over (terminal state)
174
+ const terminalValue = this.checkTerminal(workingState);
175
+ if (terminalValue !== null) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  // Mark terminal node as expanded with empty action set to prevent revisits
177
+ // Cache the terminal value to avoid repeated checks
178
  node.expanded = true;
179
+ node.terminalValue = terminalValue;
180
  node.P = new Map(); // No actions available (terminal)
181
  node.N = new Map();
182
  node.W = new Map();
183
  node.Q = new Map();
184
  node.children = new Map();
185
+ return terminalValue;
186
  }
187
  // Non-terminal state: expand with policy network and evaluate
188
  // Get all valid moves
189
+ const currentPlayer = workingState.getCurrentPlayer() === 1 ? "black" : "white";
190
+ const validPositions = workingState.validMovePositions();
191
  const moves = validPositions.map(pos => ({
192
  x: pos.x,
193
  y: pos.y,
 
196
  }));
197
  moves.push({ player: currentPlayer, isPass: true });
198
  // Get policy priors from tree agent
199
+ const scoredMoves = await this.treeAgent.scoreMoves(workingState, moves);
200
  // Convert log probabilities to probabilities and normalize (stable softmax)
201
  const maxScore = Math.max(...scoredMoves.map(m => m.score));
202
  const expScores = scoredMoves.map(m => Math.exp(m.score - maxScore));
 
224
  // Mark as expanded
225
  node.expanded = true;
226
  // Get value estimate from evaluation agent
227
+ const evaluation = await this.evaluationAgent.evaluatePosition(workingState);
228
  // Return value directly (value model returns white-positive by design)
229
  return evaluation.value;
230
  }
231
  /**
232
  * Backup phase: Propagate value up the tree
233
  *
234
+ * White-positive minimax propagation:
235
+ * - All Q-values represent White's advantage (positive = White winning)
236
+ * - When all children are terminal, mark parent as terminal with minimax value:
237
+ * * White's turn: terminal_value = max(children terminal values)
238
+ * * Black's turn: terminal_value = min(children terminal values)
239
+ *
240
+ * Improvements (based on GPT-5.1 review):
241
+ * - Uses stored playerToMove instead of computing from depth
242
+ * - Uses stored depth instead of recomputing via parent walk
243
+ *
244
  * @param path Path from root to leaf
245
  * @param value Value to propagate (white-positive: positive = white winning)
246
  */
 
255
  node.N.set(actionKey, n + 1);
256
  node.W.set(actionKey, w + value);
257
  node.Q.set(actionKey, (w + value) / (n + 1));
258
+ // ========== Terminal State Propagation ==========
259
+ // Check if this node should be marked as terminal
260
+ // Condition: node is fully expanded AND all children are terminal AND node itself not yet marked
261
+ if (node.expanded && node.terminalValue === null) {
262
+ const actionKeys = Array.from(node.P.keys());
263
+ // Skip propagation if no actions (already a terminal leaf, or error state)
264
+ if (actionKeys.length === 0) {
265
+ continue;
266
+ }
267
+ // Check if ALL children are terminal
268
+ let allChildrenTerminal = true;
269
+ const childTerminalValues = [];
270
+ for (const key of actionKeys) {
271
+ const child = node.children.get(key);
272
+ // If child doesn't exist yet, not all children explored
273
+ if (!child) {
274
+ allChildrenTerminal = false;
275
+ break;
276
+ }
277
+ // If child is not terminal, not all children terminal
278
+ if (child.terminalValue === null) {
279
+ allChildrenTerminal = false;
280
+ break;
281
+ }
282
+ // Child is terminal, collect its value
283
+ childTerminalValues.push(child.terminalValue);
284
+ }
285
+ // If all children are terminal, mark current node as terminal with minimax value
286
+ if (allChildrenTerminal && childTerminalValues.length > 0) {
287
+ // Use stored playerToMove instead of computing from depth (GPT-5.1 suggestion)
288
+ const isWhiteTurn = node.playerToMove === 2; // 2 = White, 1 = Black
289
+ // Apply minimax: choose best child value from current player's perspective
290
+ let terminalValue;
291
+ if (isWhiteTurn) {
292
+ // White maximizes Q-value (white-positive)
293
+ terminalValue = Math.max(...childTerminalValues);
294
+ }
295
+ else {
296
+ // Black minimizes Q-value (white-positive)
297
+ terminalValue = Math.min(...childTerminalValues);
298
+ }
299
+ // Mark this node as terminal with the minimax value
300
+ node.terminalValue = terminalValue;
301
+ // Debug logging for terminal propagation
302
+ if (this.debugMode) {
303
+ const playerName = isWhiteTurn ? 'White' : 'Black';
304
+ console.log(`[Terminal Propagation] Node at depth ${node.depth} (${playerName}) marked terminal: ` +
305
+ `value=${terminalValue.toFixed(4)}, children=[${childTerminalValues.map(v => v.toFixed(2)).join(', ')}]`);
306
+ }
307
+ }
308
+ }
309
+ // ================================================
310
  }
311
  }
312
  /**
 
343
  */
344
  selectPlayAction(node, temperature) {
345
  const actionKeys = Array.from(node.N.keys());
346
+ // Edge case: no actions available (unexpanded root or terminal state)
347
+ if (actionKeys.length === 0) {
348
+ // Fallback to priors if available
349
+ const priorKeys = Array.from(node.P.keys());
350
+ if (priorKeys.length > 0) {
351
+ // Sample from prior distribution
352
+ const priors = priorKeys.map(key => node.P.get(key) ?? 0);
353
+ const sumP = priors.reduce((sum, p) => sum + p, 0);
354
+ if (sumP > 0) {
355
+ let rand = Math.random() * sumP;
356
+ for (let i = 0; i < priorKeys.length; i++) {
357
+ rand -= priors[i];
358
+ if (rand <= 0) {
359
+ return this.decodeAction(priorKeys[i]);
360
+ }
361
+ }
362
+ return this.decodeAction(priorKeys[priorKeys.length - 1]);
363
+ }
364
+ // Uniform fallback
365
+ const randomIndex = Math.floor(Math.random() * priorKeys.length);
366
+ return this.decodeAction(priorKeys[randomIndex]);
367
+ }
368
+ // No actions at all - return Pass as last resort
369
+ return { player: "black", isPass: true };
370
+ }
371
  if (temperature < 0.01) {
372
  // Greedy: Select action with highest visit count
373
  let bestActionKey = actionKeys[0];
 
455
  * Add Dirichlet noise to prior probabilities at root
456
  * P(s,a) = (1 - ε) * p_a + ε * η_a
457
  * where η ~ Dir(α)
458
+ *
459
+ * Note: Pass move is excluded from noise to prevent exploration of
460
+ * clearly suboptimal opening passes.
461
  */
462
  addDirichletNoise(priors) {
463
+ // Exclude Pass from Dirichlet noise - it should not be explored at root
464
+ const actionKeys = Array.from(priors.keys()).filter(key => key !== "pass");
465
  const alpha = this.config.dirichletAlpha;
466
  const epsilon = this.config.dirichletEpsilon;
467
+ // If only Pass is available, no noise to add
468
+ if (actionKeys.length === 0) {
469
+ return;
470
+ }
471
  // Generate Dirichlet noise (simplified using Gamma distribution)
472
  const noise = [];
473
  let noiseSum = 0;
 
482
  // Fallback: use uniform noise (no mixing, keep original priors)
483
  return;
484
  }
485
+ // Normalize and mix with priors (only for non-Pass actions)
486
  for (let i = 0; i < actionKeys.length; i++) {
487
  const actionKey = actionKeys[i];
488
  const prior = priors.get(actionKey) ?? 0;
 
533
  const u2 = Math.random();
534
  return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
535
  }
536
+ /**
537
+ * Check if game state is terminal and return value if so
538
+ *
539
+ * Terminal conditions (checked in order of cost):
540
+ * 1. Game already finished (double-pass or resignation) - CHEAPEST
541
+ * 2. Board coverage > 50% AND naturally terminal (calls isNaturallyTerminal) - EXPENSIVE
542
+ *
543
+ * NOTE: The coverage check (> 50%) is an optimization to avoid expensive
544
+ * territory calculations on sparse boards where natural termination is unlikely.
545
+ *
546
+ * @param state Game state to check
547
+ * @returns Terminal value (white-positive) if terminal, null otherwise
548
+ */
549
+ checkTerminal(state) {
550
+ // 1. Check if game is already finished (double-pass, resignation, etc.)
551
+ // This is the cheapest check - just reading a status flag
552
+ if (state.getGameStatus() === "finished") {
553
+ const territory = state.getTerritory();
554
+ return this.calculateTerminalValue(territory);
555
+ }
556
+ // 2. Check for "natural" game end (all territory claimed, no capturing moves)
557
+ // Optimization: Only check if board is reasonably full (> 50% coverage)
558
+ // because natural termination is unlikely on sparse boards
559
+ const board = state.getBoard();
560
+ const shape = state.getShape();
561
+ const totalPositions = shape.x * shape.y * shape.z;
562
+ // Count stones (cheap)
563
+ let stoneCount = 0;
564
+ for (let x = 0; x < shape.x; x++) {
565
+ for (let y = 0; y < shape.y; y++) {
566
+ for (let z = 0; z < shape.z; z++) {
567
+ const stone = board[x][y][z];
568
+ if (stone === 1 || stone === 2) { // StoneType.BLACK or WHITE
569
+ stoneCount++;
570
+ }
571
+ }
572
+ }
573
+ }
574
+ const coverageRatio = stoneCount / totalPositions;
575
+ // Only check for natural termination if board is reasonably full
576
+ if (coverageRatio > 0.5) {
577
+ if (state.isNaturallyTerminal()) {
578
+ const territory = state.getTerritory();
579
+ return this.calculateTerminalValue(territory);
580
+ }
581
+ }
582
+ return null; // Not terminal
583
+ }
584
+ /**
585
+ * Calculate terminal value from territory scores
586
+ * Uses logarithmic scaling matching the training code
587
+ *
588
+ * @param territory Territory counts from game
589
+ * @returns Value (white-positive: positive = white winning)
590
+ */
591
+ calculateTerminalValue(territory) {
592
+ const scoreDiff = territory.white - territory.black;
593
+ if (Math.abs(scoreDiff) < 1e-6) {
594
+ // Draw/tie case
595
+ return 0.0;
596
+ }
597
+ // Match training formula from valueCausalLoss.py:_expand_value_targets
598
+ // target = sign(score) * (1 + log(|score|)) * territory_value_factor
599
+ // The log term incentivizes winning by larger margins (logarithmically)
600
+ const territory_value_factor = 1.0; // Default from training config
601
+ const signScore = Math.sign(scoreDiff);
602
+ return signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
603
+ }
604
  /**
605
  * Create a new MCTS node
606
+ *
607
+ * @param state Game state (only provided for root node, null for others to save memory)
608
+ * @param parent Parent node
609
+ * @param action Action that led to this node
610
+ * @param playerToMove Player to move at this node (derived from state if available)
611
  */
612
+ createNode(state, parent, action, playerToMove) {
613
+ // Determine player to move
614
+ let player;
615
+ if (playerToMove !== undefined) {
616
+ player = playerToMove;
617
+ }
618
+ else if (state) {
619
+ // Most reliable: derive from actual game state
620
+ player = state.getCurrentPlayer();
621
+ }
622
+ else if (parent) {
623
+ // NOTE: Fallback assumes strictly alternating turns (no passes keeping same player)
624
+ // For standard Go-like games with strict alternation, this is safe.
625
+ player = parent.playerToMove === 1 ? 2 : 1;
626
+ }
627
+ else {
628
+ // Default to Black for root if no info
629
+ player = 1;
630
+ }
631
  return {
632
  state,
633
  parent,
 
637
  Q: new Map(),
638
  P: new Map(),
639
  children: new Map(),
640
+ expanded: false,
641
+ terminalValue: null,
642
+ depth: parent ? parent.depth + 1 : 0,
643
+ playerToMove: player
644
  };
645
  }
646
  /**
647
  * Encode move to string key for storage in maps
648
+ * Note: Only encodes position, player info is handled separately
649
  */
650
  encodeAction(move) {
651
  if (move.isPass) {
 
655
  }
656
  /**
657
  * Decode string key back to move
658
+ * Note: Returns move with placeholder player - caller must set correct player
659
+ * based on game state before using the move externally
660
  */
661
  decodeAction(key) {
662
  if (key === "pass") {
663
+ // Player is placeholder - will be set by caller (selectMove sets it from game state)
664
+ return { player: "black", isPass: true };
665
  }
666
  const [x, y, z] = key.split(",").map(Number);
667
+ // Player is placeholder - will be set by caller (selectMove sets it from game state)
668
+ return { player: "black", x, y, z };
669
  }
670
  }
671
  exports.MCTSAgent = MCTSAgent;
trigo-web/backend/dist/inc/mctsAgent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mctsAgent.js","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"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"}
 
1
+ {"version":3,"file":"mctsAgent.js","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"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"}
trigo-web/backend/dist/inc/trigo/game.d.ts CHANGED
@@ -76,8 +76,8 @@ export declare class TrigoGame {
76
  private gameResult?;
77
  private passCount;
78
  private lastCapturedPositions;
79
- private territoryDirty;
80
  private cachedTerritory;
 
81
  /**
82
  * Constructor
83
  * Equivalent to trigo.Game constructor (lines 75-85)
@@ -92,6 +92,11 @@ export declare class TrigoGame {
92
  * Equivalent to Game.reset() (lines 153-163)
93
  */
94
  reset(): void;
 
 
 
 
 
95
  /**
96
  * Clone the game state (deep copy)
97
  * Creates an independent copy with all state preserved
@@ -180,6 +185,42 @@ export declare class TrigoGame {
180
  * @returns Array of all valid move positions
181
  */
182
  validMovePositions(player?: Stone): Position[];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  /**
184
  * Reset pass count (called when a stone is placed)
185
  */
 
76
  private gameResult?;
77
  private passCount;
78
  private lastCapturedPositions;
 
79
  private cachedTerritory;
80
+ private cachedCapturingMove;
81
  /**
82
  * Constructor
83
  * Equivalent to trigo.Game constructor (lines 75-85)
 
92
  * Equivalent to Game.reset() (lines 153-163)
93
  */
94
  reset(): void;
95
+ /**
96
+ * Invalidate all static analysis caches
97
+ * Called when board state changes
98
+ */
99
+ private invalidateAnalysisCache;
100
  /**
101
  * Clone the game state (deep copy)
102
  * Creates an independent copy with all state preserved
 
185
  * @returns Array of all valid move positions
186
  */
187
  validMovePositions(player?: Stone): Position[];
188
+ /**
189
+ * Check if any valid move can capture enemy stones
190
+ * Used by MCTS to determine if a position is truly terminal
191
+ *
192
+ * Results are cached and invalidated when board state changes.
193
+ *
194
+ * @param player - Optional player color (defaults to current player)
195
+ * @returns true if at least one valid move would capture stones
196
+ */
197
+ hasCapturingMove(player?: Stone): boolean;
198
+ /**
199
+ * Internal: Compute whether a player has any capturing move
200
+ */
201
+ private computeHasCapturingMove;
202
+ /**
203
+ * Check if the game has reached a natural terminal state
204
+ *
205
+ * A game is naturally terminal when:
206
+ * - All territory is claimed (neutral === 0)
207
+ * - AND neither player has any capturing moves available
208
+ *
209
+ * This is different from the "finished" status which requires double pass.
210
+ * Natural termination means the game state is completely settled and
211
+ * no further moves can meaningfully change the outcome.
212
+ *
213
+ * NOTE: This method is expensive due to territory calculation and capture move checking.
214
+ * Use coverage ratio check as a pre-filter when calling frequently.
215
+ *
216
+ * Used by:
217
+ * - MCTS agent (terminal detection for tree search)
218
+ * - Model battle (early stopping when settled)
219
+ * - Self-play games (early stopping when settled)
220
+ *
221
+ * @returns true if the game is naturally terminal, false otherwise
222
+ */
223
+ isNaturallyTerminal(): boolean;
224
  /**
225
  * Reset pass count (called when a stone is placed)
226
  */
trigo-web/backend/dist/inc/trigo/game.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
 
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
trigo-web/backend/dist/inc/trigo/game.js CHANGED
@@ -46,9 +46,10 @@ class TrigoGame {
46
  constructor(shape = { x: 5, y: 5, z: 5 }, callbacks = {}) {
47
  // Last captured stones for Ko rule detection
48
  this.lastCapturedPositions = null;
49
- // Territory cache
50
- this.territoryDirty = true;
51
  this.cachedTerritory = null;
 
52
  this.shape = shape;
53
  this.callbacks = callbacks;
54
  this.board = this.createEmptyBoard();
@@ -85,12 +86,19 @@ class TrigoGame {
85
  this.stepHistory = [];
86
  this.currentStepIndex = 0;
87
  this.lastCapturedPositions = null;
88
- this.territoryDirty = true;
89
- this.cachedTerritory = null;
90
  this.gameStatus = "idle";
91
  this.gameResult = undefined;
92
  this.passCount = 0;
93
  }
 
 
 
 
 
 
 
 
94
  /**
95
  * Clone the game state (deep copy)
96
  * Creates an independent copy with all state preserved
@@ -123,9 +131,8 @@ class TrigoGame {
123
  score: this.gameResult.score ? { ...this.gameResult.score } : undefined
124
  };
125
  }
126
- // Territory cache will be recalculated on demand
127
- cloned.territoryDirty = true;
128
- cloned.cachedTerritory = null;
129
  return cloned;
130
  }
131
  /**
@@ -280,6 +287,90 @@ class TrigoGame {
280
  }
281
  return validPositions;
282
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
283
  /**
284
  * Reset pass count (called when a stone is placed)
285
  */
@@ -307,8 +398,8 @@ class TrigoGame {
307
  const capturedPositions = (0, gameUtils_1.executeCaptures)(capturedGroups, this.board);
308
  // Store captured positions for Ko rule
309
  this.lastCapturedPositions = capturedPositions.length > 0 ? capturedPositions : null;
310
- // Mark territory as dirty
311
- this.territoryDirty = true;
312
  // Reset pass count when a stone is placed
313
  this.resetPassCount();
314
  // Create step record
@@ -325,7 +416,7 @@ class TrigoGame {
325
  if (capturedPositions.length > 0 && this.callbacks.onCapture) {
326
  this.callbacks.onCapture(capturedPositions);
327
  }
328
- if (this.territoryDirty && this.callbacks.onTerritoryChange) {
329
  this.callbacks.onTerritoryChange(this.getTerritory());
330
  }
331
  return true;
@@ -444,8 +535,8 @@ class TrigoGame {
444
  else {
445
  this.lastCapturedPositions = null;
446
  }
447
- // Mark territory as dirty
448
- this.territoryDirty = true;
449
  // Trigger callback
450
  if (this.callbacks.onStepBack) {
451
  this.callbacks.onStepBack(lastStep, this.stepHistory.slice(0, this.currentStepIndex));
@@ -483,8 +574,8 @@ class TrigoGame {
483
  // Move forward in history
484
  this.currentStepIndex++;
485
  this.currentPlayer = (0, gameUtils_1.getEnemyColor)(nextStep.player); // Switch to next player
486
- // Mark territory as dirty
487
- this.territoryDirty = true;
488
  // Trigger callback
489
  if (this.callbacks.onStepAdvance) {
490
  this.callbacks.onStepAdvance(nextStep, this.stepHistory.slice(0, this.currentStepIndex));
@@ -554,8 +645,8 @@ class TrigoGame {
554
  this.currentPlayer = movesPlayed % 2 === 0 ? gameUtils_1.StoneType.BLACK : gameUtils_1.StoneType.WHITE;
555
  // Recalculate pass count based on new history position
556
  this.recalculatePassCount();
557
- // Mark territory as dirty
558
- this.territoryDirty = true;
559
  // Trigger callback based on direction
560
  if (index < oldStepIndex && this.callbacks.onStepBack) {
561
  const currentStep = this.stepHistory[index];
@@ -593,10 +684,8 @@ class TrigoGame {
593
  * Returns cached result if territory hasn't changed
594
  */
595
  getTerritory() {
596
- if (this.territoryDirty || !this.cachedTerritory) {
597
  this.cachedTerritory = (0, gameUtils_1.calculateTerritory)(this.board, this.shape);
598
- this.territoryDirty = false;
599
- }
600
  return this.cachedTerritory;
601
  }
602
  /**
@@ -665,8 +754,7 @@ class TrigoGame {
665
  else {
666
  this.lastCapturedPositions = null;
667
  }
668
- this.territoryDirty = true;
669
- this.cachedTerritory = null;
670
  return true;
671
  }
672
  catch (error) {
 
46
  constructor(shape = { x: 5, y: 5, z: 5 }, callbacks = {}) {
47
  // Last captured stones for Ko rule detection
48
  this.lastCapturedPositions = null;
49
+ // Static analysis cache (territory, capturing moves)
50
+ // Invalidated on any board state change
51
  this.cachedTerritory = null;
52
+ this.cachedCapturingMove = new Map();
53
  this.shape = shape;
54
  this.callbacks = callbacks;
55
  this.board = this.createEmptyBoard();
 
86
  this.stepHistory = [];
87
  this.currentStepIndex = 0;
88
  this.lastCapturedPositions = null;
89
+ this.invalidateAnalysisCache();
 
90
  this.gameStatus = "idle";
91
  this.gameResult = undefined;
92
  this.passCount = 0;
93
  }
94
+ /**
95
+ * Invalidate all static analysis caches
96
+ * Called when board state changes
97
+ */
98
+ invalidateAnalysisCache() {
99
+ this.cachedTerritory = null;
100
+ this.cachedCapturingMove.clear();
101
+ }
102
  /**
103
  * Clone the game state (deep copy)
104
  * Creates an independent copy with all state preserved
 
131
  score: this.gameResult.score ? { ...this.gameResult.score } : undefined
132
  };
133
  }
134
+ // Analysis cache will be recalculated on demand
135
+ cloned.invalidateAnalysisCache();
 
136
  return cloned;
137
  }
138
  /**
 
287
  }
288
  return validPositions;
289
  }
290
+ /**
291
+ * Check if any valid move can capture enemy stones
292
+ * Used by MCTS to determine if a position is truly terminal
293
+ *
294
+ * Results are cached and invalidated when board state changes.
295
+ *
296
+ * @param player - Optional player color (defaults to current player)
297
+ * @returns true if at least one valid move would capture stones
298
+ */
299
+ hasCapturingMove(player) {
300
+ const playerColor = player ?? this.currentPlayer;
301
+ // Check cache first
302
+ if (this.cachedCapturingMove.has(playerColor)) {
303
+ return this.cachedCapturingMove.get(playerColor);
304
+ }
305
+ // Compute and cache the result
306
+ const result = this.computeHasCapturingMove(playerColor);
307
+ this.cachedCapturingMove.set(playerColor, result);
308
+ return result;
309
+ }
310
+ /**
311
+ * Internal: Compute whether a player has any capturing move
312
+ */
313
+ computeHasCapturingMove(playerColor) {
314
+ // Iterate through all board positions
315
+ for (let x = 0; x < this.shape.x; x++) {
316
+ for (let y = 0; y < this.shape.y; y++) {
317
+ for (let z = 0; z < this.shape.z; z++) {
318
+ // Skip occupied positions
319
+ if (this.board[x][y][z] !== gameUtils_1.StoneType.EMPTY) {
320
+ continue;
321
+ }
322
+ const pos = { x, y, z };
323
+ // Skip invalid moves (Ko, suicide)
324
+ if ((0, gameUtils_1.isKoViolation)(pos, playerColor, this.board, this.shape, this.lastCapturedPositions)) {
325
+ continue;
326
+ }
327
+ if ((0, gameUtils_1.isSuicideMove)(pos, playerColor, this.board, this.shape)) {
328
+ continue;
329
+ }
330
+ // Check if this move would capture any stones
331
+ const capturedGroups = (0, gameUtils_1.findCapturedGroups)(pos, playerColor, this.board, this.shape);
332
+ if (capturedGroups.length > 0) {
333
+ return true; // Found a capturing move
334
+ }
335
+ }
336
+ }
337
+ }
338
+ return false; // No capturing moves available
339
+ }
340
+ /**
341
+ * Check if the game has reached a natural terminal state
342
+ *
343
+ * A game is naturally terminal when:
344
+ * - All territory is claimed (neutral === 0)
345
+ * - AND neither player has any capturing moves available
346
+ *
347
+ * This is different from the "finished" status which requires double pass.
348
+ * Natural termination means the game state is completely settled and
349
+ * no further moves can meaningfully change the outcome.
350
+ *
351
+ * NOTE: This method is expensive due to territory calculation and capture move checking.
352
+ * Use coverage ratio check as a pre-filter when calling frequently.
353
+ *
354
+ * Used by:
355
+ * - MCTS agent (terminal detection for tree search)
356
+ * - Model battle (early stopping when settled)
357
+ * - Self-play games (early stopping when settled)
358
+ *
359
+ * @returns true if the game is naturally terminal, false otherwise
360
+ */
361
+ isNaturallyTerminal() {
362
+ // Check if all territory is claimed (uses cached territory)
363
+ const territory = this.getTerritory();
364
+ if (territory.neutral !== 0) {
365
+ return false; // Still has neutral territory - not terminal
366
+ }
367
+ // All territory claimed - check if capturing moves are possible
368
+ // IMPORTANT: Check even if one player has no stones - they might still capture!
369
+ const blackCanCapture = this.hasCapturingMove(gameUtils_1.StoneType.BLACK);
370
+ const whiteCanCapture = this.hasCapturingMove(gameUtils_1.StoneType.WHITE);
371
+ // Terminal only if neither player can capture
372
+ return !blackCanCapture && !whiteCanCapture;
373
+ }
374
  /**
375
  * Reset pass count (called when a stone is placed)
376
  */
 
398
  const capturedPositions = (0, gameUtils_1.executeCaptures)(capturedGroups, this.board);
399
  // Store captured positions for Ko rule
400
  this.lastCapturedPositions = capturedPositions.length > 0 ? capturedPositions : null;
401
+ // Invalidate analysis cache
402
+ this.invalidateAnalysisCache();
403
  // Reset pass count when a stone is placed
404
  this.resetPassCount();
405
  // Create step record
 
416
  if (capturedPositions.length > 0 && this.callbacks.onCapture) {
417
  this.callbacks.onCapture(capturedPositions);
418
  }
419
+ if (this.callbacks.onTerritoryChange) {
420
  this.callbacks.onTerritoryChange(this.getTerritory());
421
  }
422
  return true;
 
535
  else {
536
  this.lastCapturedPositions = null;
537
  }
538
+ // Invalidate analysis cache
539
+ this.invalidateAnalysisCache();
540
  // Trigger callback
541
  if (this.callbacks.onStepBack) {
542
  this.callbacks.onStepBack(lastStep, this.stepHistory.slice(0, this.currentStepIndex));
 
574
  // Move forward in history
575
  this.currentStepIndex++;
576
  this.currentPlayer = (0, gameUtils_1.getEnemyColor)(nextStep.player); // Switch to next player
577
+ // Invalidate analysis cache
578
+ this.invalidateAnalysisCache();
579
  // Trigger callback
580
  if (this.callbacks.onStepAdvance) {
581
  this.callbacks.onStepAdvance(nextStep, this.stepHistory.slice(0, this.currentStepIndex));
 
645
  this.currentPlayer = movesPlayed % 2 === 0 ? gameUtils_1.StoneType.BLACK : gameUtils_1.StoneType.WHITE;
646
  // Recalculate pass count based on new history position
647
  this.recalculatePassCount();
648
+ // Invalidate analysis cache
649
+ this.invalidateAnalysisCache();
650
  // Trigger callback based on direction
651
  if (index < oldStepIndex && this.callbacks.onStepBack) {
652
  const currentStep = this.stepHistory[index];
 
684
  * Returns cached result if territory hasn't changed
685
  */
686
  getTerritory() {
687
+ if (!this.cachedTerritory)
688
  this.cachedTerritory = (0, gameUtils_1.calculateTerritory)(this.board, this.shape);
 
 
689
  return this.cachedTerritory;
690
  }
691
  /**
 
754
  else {
755
  this.lastCapturedPositions = null;
756
  }
757
+ this.invalidateAnalysisCache();
 
758
  return true;
759
  }
760
  catch (error) {
trigo-web/backend/dist/inc/trigo/game.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"game.js","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
 
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
trigo-web/backend/dist/inc/trigoTreeAgent.d.ts CHANGED
@@ -14,6 +14,7 @@ export interface ScoredMove {
14
  }
15
  export declare class TrigoTreeAgent {
16
  private inferencer;
 
17
  constructor(inferencer: ModelInferencer);
18
  /**
19
  * Convert Stone type to player string
@@ -68,10 +69,22 @@ export declare class TrigoTreeAgent {
68
  }>;
69
  };
70
  /**
71
- * Select best move using tree attention
 
 
 
 
 
 
 
72
  * Evaluates all valid moves in a single inference call
 
 
 
 
 
73
  */
74
- selectBestMove(game: TrigoGame): Promise<Move | null>;
75
  /**
76
  * Score all moves using tree attention (batch evaluation)
77
  */
 
14
  }
15
  export declare class TrigoTreeAgent {
16
  private inferencer;
17
+ private readonly START_TOKEN;
18
  constructor(inferencer: ModelInferencer);
19
  /**
20
  * Convert Stone type to player string
 
69
  }>;
70
  };
71
  /**
72
+ * Select move using tree attention with optional temperature sampling
73
+ * @param game Current game state
74
+ * @param temperature Sampling temperature (0 = greedy, higher = more random)
75
+ * @returns Selected move (position or Pass if no valid positions)
76
+ */
77
+ selectMove(game: TrigoGame, temperature?: number): Promise<Move>;
78
+ /**
79
+ * Select best move using tree attention (greedy, temperature=0)
80
  * Evaluates all valid moves in a single inference call
81
+ * Pass is excluded from model prediction - returned directly if no positions available
82
+ */
83
+ selectBestMove(game: TrigoGame): Promise<Move>;
84
+ /**
85
+ * Sample a move from scored moves using temperature
86
  */
87
+ private sampleMove;
88
  /**
89
  * Score all moves using tree attention (batch evaluation)
90
  */
trigo-web/backend/dist/inc/trigoTreeAgent.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trigoTreeAgent.d.ts","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,UAAU,CAAkB;gBAExB,UAAU,EAAE,eAAe;IAIvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,eAAe;IA8FvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA0ErB;;OAEG;IACH,gBAAgB,CACf,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,IAAI,EAAE,GACX;QACF,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7B,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnE;IAID;;;OAGG;IACG,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAiC3D;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuKvE"}
 
1
+ {"version":3,"file":"trigoTreeAgent.d.ts","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,UAAU,CAAkB;IAGpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;gBAErB,UAAU,EAAE,eAAe;IAIvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,eAAe;IAiGvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4ErB;;OAEG;IACH,gBAAgB,CACf,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,IAAI,EAAE,GACX;QACF,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7B,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnE;IAID;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCzE;;;;OAIG;IACG,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA+KvE"}
trigo-web/backend/dist/inc/trigoTreeAgent.js CHANGED
@@ -11,6 +11,8 @@ const game_1 = require("./trigo/game");
11
  const ab0yz_1 = require("./trigo/ab0yz");
12
  class TrigoTreeAgent {
13
  constructor(inferencer) {
 
 
14
  this.inferencer = inferencer;
15
  }
16
  /**
@@ -122,6 +124,8 @@ class TrigoTreeAgent {
122
  }
123
  for (const r of roots)
124
  dfs(r);
 
 
125
  // --- Build ancestor mask ---
126
  const mask = new Array(total * total).fill(0);
127
  for (let i = 0; i < total; i++) {
@@ -164,7 +168,7 @@ class TrigoTreeAgent {
164
  // Last line has moves, add space
165
  prefix = currentTGN + " ";
166
  }
167
- const prefixTokens = this.stringToTokens(prefix);
168
  // Encode each move to tokens (only first 2 tokens)
169
  const shape = game.getShape();
170
  const movesWithTokens = moves.map((move) => {
@@ -179,6 +183,8 @@ class TrigoTreeAgent {
179
  throw new Error("Invalid move: missing coordinates");
180
  }
181
  // Exclude the last token
 
 
182
  const fullTokens = this.stringToTokens(notation);
183
  const tokens = fullTokens.slice(0, fullTokens.length - 1);
184
  return { move, notation, tokens };
@@ -204,34 +210,76 @@ class TrigoTreeAgent {
204
  return this.buildMoveTree(game, moves);
205
  }
206
  /**
207
- * Select best move using tree attention
208
- * Evaluates all valid moves in a single inference call
 
 
209
  */
210
- async selectBestMove(game) {
211
  if (!this.inferencer.isReady()) {
212
  throw new Error("Inferencer not initialized");
213
  }
214
  // Get current player as string
215
  const currentPlayer = this.stoneToPlayer(game.getCurrentPlayer());
216
- // Get all valid moves
217
  const validMoves = game.validMovePositions().map((pos) => ({
218
  x: pos.x,
219
  y: pos.y,
220
  z: pos.z,
221
  player: currentPlayer
222
  }));
223
- validMoves.push({ player: currentPlayer, isPass: true }); // Add pass move
224
  if (validMoves.length === 0) {
225
- return null;
226
  }
227
- // Score all moves using tree attention
228
  const scoredMoves = await this.scoreMoves(game, validMoves);
229
- // Return move with highest score
230
  if (scoredMoves.length === 0) {
231
- return null;
 
 
 
 
 
 
232
  }
233
- scoredMoves.sort((a, b) => b.score - a.score);
234
- return scoredMoves[0].move;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
  /**
237
  * Score all moves using tree attention (batch evaluation)
@@ -242,19 +290,6 @@ class TrigoTreeAgent {
242
  }
243
  // Build tree structure
244
  const { prefixTokens, evaluatedIds, mask, parent, moveData } = this.buildMoveTree(game, moves);
245
- // Validate parent array structure
246
- for (let i = 0; i < parent.length; i++) {
247
- const p = parent[i];
248
- if (p !== null && (p < 0 || p >= parent.length)) {
249
- throw new Error(`Invalid parent array: parent[${i}] = ${p}, but array length is ${parent.length}`);
250
- }
251
- }
252
- // Validate leafPos in moveData
253
- for (const data of moveData) {
254
- if (data.leafPos < 0 || data.leafPos >= parent.length) {
255
- throw new Error(`Invalid leafPos: ${data.leafPos} for move ${data.notation}, parent array length: ${parent.length}`);
256
- }
257
- }
258
  //console.debug(`Tree structure: ${evaluatedIds.length} nodes for ${moveData.length} moves`);
259
  //console.debug(`Evaluated IDs:`, evaluatedIds.map((id) => String.fromCharCode(id)).join(""));
260
  //console.debug(
@@ -287,6 +322,28 @@ class TrigoTreeAgent {
287
  };
288
  for (const data of moveData) {
289
  let logProb = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
290
  // Build path from leaf to root using parent array, then reverse
291
  const pathReverse = [];
292
  let pos = data.leafPos;
 
11
  const ab0yz_1 = require("./trigo/ab0yz");
12
  class TrigoTreeAgent {
13
  constructor(inferencer) {
14
+ // Special token constants (must match TGN tokenizer)
15
+ this.START_TOKEN = 1;
16
  this.inferencer = inferencer;
17
  }
18
  /**
 
124
  }
125
  for (const r of roots)
126
  dfs(r);
127
+ // NOTE: moveToLeafPos[i] = -1 means the move has empty tokens (e.g., single-char notation)
128
+ // In this case, we use prefix logits directly for scoring (valid behavior)
129
  // --- Build ancestor mask ---
130
  const mask = new Array(total * total).fill(0);
131
  for (let i = 0; i < total; i++) {
 
168
  // Last line has moves, add space
169
  prefix = currentTGN + " ";
170
  }
171
+ const prefixTokens = [this.START_TOKEN, ...this.stringToTokens(prefix)];
172
  // Encode each move to tokens (only first 2 tokens)
173
  const shape = game.getShape();
174
  const movesWithTokens = moves.map((move) => {
 
183
  throw new Error("Invalid move: missing coordinates");
184
  }
185
  // Exclude the last token
186
+ // For single-char notations, this results in empty tokens array,
187
+ // which means we use prefix logits directly for scoring
188
  const fullTokens = this.stringToTokens(notation);
189
  const tokens = fullTokens.slice(0, fullTokens.length - 1);
190
  return { move, notation, tokens };
 
210
  return this.buildMoveTree(game, moves);
211
  }
212
  /**
213
+ * Select move using tree attention with optional temperature sampling
214
+ * @param game Current game state
215
+ * @param temperature Sampling temperature (0 = greedy, higher = more random)
216
+ * @returns Selected move (position or Pass if no valid positions)
217
  */
218
+ async selectMove(game, temperature = 0) {
219
  if (!this.inferencer.isReady()) {
220
  throw new Error("Inferencer not initialized");
221
  }
222
  // Get current player as string
223
  const currentPlayer = this.stoneToPlayer(game.getCurrentPlayer());
224
+ // Get all valid position moves (excluding Pass)
225
  const validMoves = game.validMovePositions().map((pos) => ({
226
  x: pos.x,
227
  y: pos.y,
228
  z: pos.z,
229
  player: currentPlayer
230
  }));
231
+ // If no position moves available, return Pass directly
232
  if (validMoves.length === 0) {
233
+ return { player: currentPlayer, isPass: true };
234
  }
235
+ // Score only position moves (Pass excluded from inference)
236
  const scoredMoves = await this.scoreMoves(game, validMoves);
237
+ // Fallback to Pass if scoring fails
238
  if (scoredMoves.length === 0) {
239
+ return { player: currentPlayer, isPass: true };
240
+ }
241
+ // Select move based on temperature
242
+ if (temperature <= 0.01) {
243
+ // Greedy selection (use reduce to avoid mutating scoredMoves)
244
+ const best = scoredMoves.reduce((a, b) => (b.score > a.score ? b : a));
245
+ return best.move;
246
  }
247
+ // Temperature sampling
248
+ return this.sampleMove(scoredMoves, temperature);
249
+ }
250
+ /**
251
+ * Select best move using tree attention (greedy, temperature=0)
252
+ * Evaluates all valid moves in a single inference call
253
+ * Pass is excluded from model prediction - returned directly if no positions available
254
+ */
255
+ async selectBestMove(game) {
256
+ return this.selectMove(game, 0);
257
+ }
258
+ /**
259
+ * Sample a move from scored moves using temperature
260
+ */
261
+ sampleMove(scoredMoves, temperature) {
262
+ // Apply temperature scaling to log probabilities
263
+ const adjustedScores = scoredMoves.map((m) => m.score / temperature);
264
+ const maxScore = Math.max(...adjustedScores);
265
+ const expScores = adjustedScores.map((score) => Math.exp(score - maxScore));
266
+ const sumExp = expScores.reduce((sum, exp) => sum + exp, 0);
267
+ if (sumExp === 0 || !isFinite(sumExp)) {
268
+ // Fallback to uniform random
269
+ const idx = Math.floor(Math.random() * scoredMoves.length);
270
+ return scoredMoves[idx].move;
271
+ }
272
+ const probabilities = expScores.map((exp) => exp / sumExp);
273
+ // Weighted random sampling
274
+ const random = Math.random();
275
+ let cumulative = 0;
276
+ for (let i = 0; i < scoredMoves.length; i++) {
277
+ cumulative += probabilities[i];
278
+ if (random <= cumulative) {
279
+ return scoredMoves[i].move;
280
+ }
281
+ }
282
+ return scoredMoves[scoredMoves.length - 1].move;
283
  }
284
  /**
285
  * Score all moves using tree attention (batch evaluation)
 
290
  }
291
  // Build tree structure
292
  const { prefixTokens, evaluatedIds, mask, parent, moveData } = this.buildMoveTree(game, moves);
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  //console.debug(`Tree structure: ${evaluatedIds.length} nodes for ${moveData.length} moves`);
294
  //console.debug(`Evaluated IDs:`, evaluatedIds.map((id) => String.fromCharCode(id)).join(""));
295
  //console.debug(
 
322
  };
323
  for (const data of moveData) {
324
  let logProb = 0;
325
+ // Special case: leafPos = -1 means empty tokens (single-char notation)
326
+ // Use prefix logits directly to predict the single character
327
+ if (data.leafPos === -1) {
328
+ const notationTokens = this.stringToTokens(data.notation);
329
+ if (notationTokens.length === 1) {
330
+ // Single-char notation: use prefix output (logits[0]) to predict it
331
+ const token = notationTokens[0];
332
+ const probs = getSoftmax(0); // Prefix output
333
+ const prob = Math.max(probs[token], MIN_PROB);
334
+ logProb = Math.log(prob);
335
+ }
336
+ else {
337
+ console.error(`Unexpected: leafPos=-1 but notation length=${notationTokens.length}`);
338
+ logProb = Math.log(MIN_PROB);
339
+ }
340
+ scoredMoves.push({
341
+ move: data.move,
342
+ score: logProb,
343
+ notation: data.notation
344
+ });
345
+ continue; // Skip the normal path processing
346
+ }
347
  // Build path from leaf to root using parent array, then reverse
348
  const pathReverse = [];
349
  let pos = data.leafPos;
trigo-web/backend/dist/inc/trigoTreeAgent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trigoTreeAgent.js","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"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"}
 
1
+ {"version":3,"file":"trigoTreeAgent.js","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"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"}
trigo-web/backend/src/services/gameManager.ts CHANGED
@@ -16,6 +16,7 @@ export interface GameState {
16
 
17
  export interface GameRoom {
18
  id: string;
 
19
  adminId: string; // Room creator who has admin permissions
20
  players: { [playerId: string]: Player };
21
  game: TrigoGame; // The actual game instance
@@ -42,6 +43,7 @@ export class GameManager {
42
 
43
  const room: GameRoom = {
44
  id: roomId,
 
45
  adminId: playerId, // Room creator is admin
46
  players: {
47
  [playerId]: {
@@ -326,6 +328,40 @@ export class GameManager {
326
  return { success: true };
327
  }
328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  /**
330
  * Get game board state for a room
331
  */
 
16
 
17
  export interface GameRoom {
18
  id: string;
19
+ name: string; // Human-readable room name
20
  adminId: string; // Room creator who has admin permissions
21
  players: { [playerId: string]: Player };
22
  game: TrigoGame; // The actual game instance
 
43
 
44
  const room: GameRoom = {
45
  id: roomId,
46
+ name: `${nickname}'s room`, // Initialize room name with creator's nickname
47
  adminId: playerId, // Room creator is admin
48
  players: {
49
  [playerId]: {
 
328
  return { success: true };
329
  }
330
 
331
+
332
+ /**
333
+ * Rename a room
334
+ * Only admin can rename the room
335
+ */
336
+ renameRoom(
337
+ roomId: string,
338
+ playerId: string,
339
+ newName: string
340
+ ): { success: boolean; error?: string } {
341
+ const room = this.rooms.get(roomId);
342
+ if (!room) return { success: false, error: "Room not found" };
343
+
344
+ // Check admin permission
345
+ if (room.adminId !== playerId) {
346
+ return { success: false, error: "Only room admin can rename the room" };
347
+ }
348
+
349
+ // Validate room name
350
+ const trimmedName = newName.trim();
351
+ if (trimmedName.length === 0) {
352
+ return { success: false, error: "Room name cannot be empty" };
353
+ }
354
+ if (trimmedName.length > 50) {
355
+ return { success: false, error: "Room name cannot exceed 50 characters" };
356
+ }
357
+
358
+ room.name = trimmedName;
359
+ console.log(`Room ${roomId} renamed to: ${trimmedName}`);
360
+
361
+ return { success: true };
362
+ }
363
+
364
+
365
  /**
366
  * Get game board state for a room
367
  */
trigo-web/backend/src/sockets/gameSocket.ts CHANGED
@@ -6,6 +6,7 @@ function getRoomSummary(room: any) {
6
  const connectedPlayers = Object.values(room.players).filter((p: any) => p.connected);
7
  return {
8
  id: room.id,
 
9
  playerCount: connectedPlayers.length,
10
  maxPlayers: 2,
11
  status: room.gameState.gameStatus,
@@ -121,6 +122,7 @@ export function setupSocketHandlers(io: Server, socket: Socket, gameManager: Gam
121
  const response = {
122
  success: true,
123
  roomId: room.id,
 
124
  playerId: socket.id,
125
  playerColor: room.players[socket.id]?.color,
126
  isAdmin: room.adminId === socket.id,
@@ -484,6 +486,42 @@ export function setupSocketHandlers(io: Server, socket: Socket, gameManager: Gam
484
  }
485
  );
486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  // Handle disconnection
488
  socket.on("disconnect", () => {
489
  console.log(`Client disconnected: ${socket.id}`);
 
6
  const connectedPlayers = Object.values(room.players).filter((p: any) => p.connected);
7
  return {
8
  id: room.id,
9
+ name: room.name,
10
  playerCount: connectedPlayers.length,
11
  maxPlayers: 2,
12
  status: room.gameState.gameStatus,
 
122
  const response = {
123
  success: true,
124
  roomId: room.id,
125
+ roomName: room.name,
126
  playerId: socket.id,
127
  playerColor: room.players[socket.id]?.color,
128
  isAdmin: room.adminId === socket.id,
 
486
  }
487
  );
488
 
489
+
490
+ // Rename room
491
+ socket.on(
492
+ "renameRoom",
493
+ (data: { name: string }, callback?: (response: any) => void) => {
494
+ const room = gameManager.getPlayerRoom(socket.id);
495
+
496
+ if (!room) {
497
+ if (callback) callback({ success: false, error: "Not in a room", errorCode: "NOT_IN_ROOM" });
498
+ return;
499
+ }
500
+
501
+ const result = gameManager.renameRoom(room.id, socket.id, data.name);
502
+
503
+ if (result.success) {
504
+ // Broadcast to all players in room
505
+ io.to(room.id).emit("roomRenamed", {
506
+ roomId: room.id,
507
+ name: room.name
508
+ });
509
+
510
+ // Broadcast room update to all sockets (for room list)
511
+ io.emit("roomUpdated", getRoomSummary(room));
512
+
513
+ if (callback) callback({ success: true, name: room.name });
514
+ } else {
515
+ if (callback) callback({
516
+ success: false,
517
+ error: result.error,
518
+ errorCode: result.error === "Only room admin can rename the room" ? "NOT_ADMIN" : "RENAME_FAILED"
519
+ });
520
+ }
521
+ }
522
+ );
523
+
524
+
525
  // Handle disconnection
526
  socket.on("disconnect", () => {
527
  console.log(`Client disconnected: ${socket.id}`);