jev-chess 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/ARCHITECTURE.md +148 -0
  2. package/README.md +109 -0
  3. package/dist/chessEngine.d.ts +36 -0
  4. package/dist/chessEngine.d.ts.map +1 -0
  5. package/dist/chessEngine.js +173 -0
  6. package/dist/chessEngine.js.map +1 -0
  7. package/dist/classicMatches.d.ts +50 -0
  8. package/dist/classicMatches.d.ts.map +1 -0
  9. package/dist/classicMatches.js +223 -0
  10. package/dist/classicMatches.js.map +1 -0
  11. package/dist/demo.d.ts +2 -0
  12. package/dist/demo.d.ts.map +1 -0
  13. package/dist/demo.js +142 -0
  14. package/dist/demo.js.map +1 -0
  15. package/dist/gameReviewer.d.ts +11 -0
  16. package/dist/gameReviewer.d.ts.map +1 -0
  17. package/dist/gameReviewer.js +89 -0
  18. package/dist/gameReviewer.js.map +1 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/moveEvaluator.d.ts +11 -0
  24. package/dist/moveEvaluator.d.ts.map +1 -0
  25. package/dist/moveEvaluator.js +103 -0
  26. package/dist/moveEvaluator.js.map +1 -0
  27. package/dist/moveResolver.d.ts +15 -0
  28. package/dist/moveResolver.d.ts.map +1 -0
  29. package/dist/moveResolver.js +97 -0
  30. package/dist/moveResolver.js.map +1 -0
  31. package/dist/personaEngine.d.ts +15 -0
  32. package/dist/personaEngine.d.ts.map +1 -0
  33. package/dist/personaEngine.js +151 -0
  34. package/dist/personaEngine.js.map +1 -0
  35. package/dist/server.d.ts +2 -0
  36. package/dist/server.d.ts.map +1 -0
  37. package/dist/server.js +1490 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/typeSafeClient.d.ts +13 -0
  40. package/dist/typeSafeClient.d.ts.map +1 -0
  41. package/dist/typeSafeClient.js +336 -0
  42. package/dist/typeSafeClient.js.map +1 -0
  43. package/dist/types.d.ts +100 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +5 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/web/main.d.ts +2 -0
  48. package/dist/web/main.d.ts.map +1 -0
  49. package/dist/web/main.js +620 -0
  50. package/dist/web/main.js.map +1 -0
  51. package/package.json +35 -0
  52. package/public/app.js +45 -0
  53. package/public/index.html +790 -0
  54. package/src/chessEngine.ts +191 -0
  55. package/src/classicMatches.ts +291 -0
  56. package/src/demo.ts +160 -0
  57. package/src/gameReviewer.ts +113 -0
  58. package/src/index.ts +8 -0
  59. package/src/moveEvaluator.ts +122 -0
  60. package/src/moveResolver.ts +120 -0
  61. package/src/personaEngine.ts +193 -0
  62. package/src/server.ts +1509 -0
  63. package/src/typeSafeClient.ts +321 -0
  64. package/src/types.ts +118 -0
  65. package/src/web/main.ts +615 -0
  66. package/tests/chess.test.ts +206 -0
  67. package/tsconfig.json +21 -0
@@ -0,0 +1,620 @@
1
+ import { ChessEngine } from "../chessEngine.js";
2
+ import { MoveResolver } from "../moveResolver.js";
3
+ import { MoveEvaluator } from "../moveEvaluator.js";
4
+ import { PersonaEngine } from "../personaEngine.js";
5
+ import { ClassicMatchStudio, CLASSIC_MATCHES } from "../classicMatches.js";
6
+ import { setApiKey, getApiKeyStatus } from "../typeSafeClient.js";
7
+ const PIECE_UNICODE = {
8
+ p: "♟", n: "♞", b: "♝", r: "♜", q: "♛", k: "♚",
9
+ P: "♙", N: "♘", B: "♗", R: "♖", Q: "♕", K: "♔",
10
+ };
11
+ const engine = new ChessEngine();
12
+ const resolver = new MoveResolver();
13
+ const evaluator = new MoveEvaluator();
14
+ const personaEngine = new PersonaEngine();
15
+ const matchStudio = new ClassicMatchStudio();
16
+ let selectedSquare = null;
17
+ let legalMoves = [];
18
+ let currentFen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
19
+ let activePersona = "tal";
20
+ let lastFrom = null;
21
+ let lastTo = null;
22
+ let activeMatch = null;
23
+ let matchMoveIndex = 0;
24
+ let autoPlayTimer = null;
25
+ function renderBoard(fen) {
26
+ const boardEl = document.getElementById("board");
27
+ if (!boardEl)
28
+ return;
29
+ boardEl.innerHTML = "";
30
+ const [placement, turn] = fen.split(" ");
31
+ const turnDot = document.getElementById("turnDot");
32
+ const turnLabel = document.getElementById("turnLabel");
33
+ if (turnDot && turnLabel) {
34
+ if (turn === "w") {
35
+ turnDot.className = "turn-dot white";
36
+ turnLabel.innerText = "White to move";
37
+ }
38
+ else {
39
+ turnDot.className = "turn-dot black";
40
+ turnLabel.innerText = "Black to move";
41
+ }
42
+ }
43
+ const rows = (placement ?? "").split("/");
44
+ for (let r = 0; r < 8; r++) {
45
+ let col = 0;
46
+ const rowStr = rows[r] ?? "";
47
+ for (const ch of rowStr) {
48
+ if (!isNaN(Number(ch))) {
49
+ for (let empty = 0; empty < parseInt(ch, 10); empty++) {
50
+ createSquare(r, col, null);
51
+ col++;
52
+ }
53
+ }
54
+ else {
55
+ createSquare(r, col, ch);
56
+ col++;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ function createSquare(r, c, piece) {
62
+ const files = ["a", "b", "c", "d", "e", "f", "g", "h"];
63
+ const ranks = ["8", "7", "6", "5", "4", "3", "2", "1"];
64
+ const sqName = files[c] + ranks[r];
65
+ const isLight = (r + c) % 2 === 0;
66
+ const div = document.createElement("div");
67
+ div.className = "square " + (isLight ? "light" : "dark");
68
+ div.dataset.sq = sqName;
69
+ if (sqName === selectedSquare)
70
+ div.classList.add("selected");
71
+ if (sqName === lastFrom)
72
+ div.classList.add("last-from");
73
+ if (sqName === lastTo)
74
+ div.classList.add("last-to");
75
+ if (selectedSquare) {
76
+ const canMove = legalMoves.some((m) => m.from === selectedSquare && m.to === sqName);
77
+ if (canMove)
78
+ div.classList.add("target");
79
+ }
80
+ if (c === 0) {
81
+ const rankLabel = document.createElement("span");
82
+ rankLabel.className = "coord-label coord-rank";
83
+ rankLabel.innerText = ranks[r] ?? "";
84
+ div.appendChild(rankLabel);
85
+ }
86
+ if (r === 7) {
87
+ const fileLabel = document.createElement("span");
88
+ fileLabel.className = "coord-label coord-file";
89
+ fileLabel.innerText = files[c] ?? "";
90
+ div.appendChild(fileLabel);
91
+ }
92
+ if (piece) {
93
+ const span = document.createElement("span");
94
+ span.innerText = PIECE_UNICODE[piece] || piece;
95
+ div.appendChild(span);
96
+ }
97
+ div.onclick = () => onSquareClick(sqName);
98
+ document.getElementById("board")?.appendChild(div);
99
+ }
100
+ function updateLegalMoves() {
101
+ legalMoves = engine.getAnnotatedMoves();
102
+ const mat = engine.getMaterialBalance();
103
+ const matEl = document.getElementById("materialBalance");
104
+ if (matEl)
105
+ matEl.innerText = mat.description || "Equal";
106
+ updateHistory(engine.history());
107
+ }
108
+ function updateHistory(history) {
109
+ const el = document.getElementById("historyList");
110
+ if (!el)
111
+ return;
112
+ if (!history || history.length === 0) {
113
+ el.innerHTML = '<span style="color: #666;">No moves played yet</span>';
114
+ return;
115
+ }
116
+ el.innerHTML = history
117
+ .map((m, i) => `<span class="history-item">${i % 2 === 0 ? Math.floor(i / 2 + 1) + ". " : ""}${m}</span>`)
118
+ .join(" ");
119
+ el.scrollTop = el.scrollHeight;
120
+ }
121
+ async function onSquareClick(sq) {
122
+ if (selectedSquare) {
123
+ const move = legalMoves.find((m) => m.from === selectedSquare && m.to === sq);
124
+ if (move) {
125
+ await playMove(move.san);
126
+ selectedSquare = null;
127
+ return;
128
+ }
129
+ }
130
+ const hasMoves = legalMoves.some((m) => m.from === sq);
131
+ selectedSquare = hasMoves ? sq : null;
132
+ renderBoard(currentFen);
133
+ }
134
+ async function playMove(san) {
135
+ const move = engine.makeMove(san);
136
+ if (move) {
137
+ lastFrom = move.from;
138
+ lastTo = move.to;
139
+ currentFen = engine.fen();
140
+ renderBoard(currentFen);
141
+ updateLegalMoves();
142
+ const evaluation = await evaluator.evaluateMove(engine, move);
143
+ updateIntelligence(evaluation);
144
+ }
145
+ }
146
+ function formatTheme(theme) {
147
+ if (!theme)
148
+ return "--";
149
+ return theme
150
+ .split("_")
151
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
152
+ .join(" ");
153
+ }
154
+ function updateIntelligence(ev) {
155
+ if (!ev)
156
+ return;
157
+ const badge = document.getElementById("lastMoveBadge");
158
+ if (badge)
159
+ badge.innerText = ev.commentaryBadge || "Move Evaluated";
160
+ const mSharp = document.getElementById("mSharp");
161
+ if (mSharp)
162
+ mSharp.innerText = ev.tacticalSharpness.score.toFixed(1);
163
+ const mSharpBar = document.getElementById("mSharpBar");
164
+ if (mSharpBar) {
165
+ mSharpBar.style.width = Math.min(100, (ev.tacticalSharpness.score / 3.0) * 100) + "%";
166
+ }
167
+ const mTheme = document.getElementById("mTheme");
168
+ if (mTheme)
169
+ mTheme.innerText = formatTheme(ev.strategicTheme.theme);
170
+ const mThemeConf = document.getElementById("mThemeConf");
171
+ if (mThemeConf) {
172
+ mThemeConf.innerText = "Confidence: " + (ev.strategicTheme.confidence * 100).toFixed(0) + "%";
173
+ }
174
+ const mKing = document.getElementById("mKing");
175
+ if (mKing)
176
+ mKing.innerText = (ev.kingAttackRisk.probability * 100).toFixed(0) + "%";
177
+ const mKingBar = document.getElementById("mKingBar");
178
+ if (mKingBar)
179
+ mKingBar.style.width = ev.kingAttackRisk.probability * 100 + "%";
180
+ const mPressure = document.getElementById("mPressure");
181
+ if (mPressure)
182
+ mPressure.innerText = (ev.psychologicalPressure.probability * 100).toFixed(0) + "%";
183
+ const mPressureBar = document.getElementById("mPressureBar");
184
+ if (mPressureBar)
185
+ mPressureBar.style.width = ev.psychologicalPressure.probability * 100 + "%";
186
+ }
187
+ function resetIntelligence() {
188
+ const badge = document.getElementById("lastMoveBadge");
189
+ if (badge)
190
+ badge.innerText = "Waiting for move...";
191
+ const mSharp = document.getElementById("mSharp");
192
+ if (mSharp)
193
+ mSharp.innerText = "--";
194
+ const mSharpBar = document.getElementById("mSharpBar");
195
+ if (mSharpBar)
196
+ mSharpBar.style.width = "0%";
197
+ const mTheme = document.getElementById("mTheme");
198
+ if (mTheme)
199
+ mTheme.innerText = "--";
200
+ const mThemeConf = document.getElementById("mThemeConf");
201
+ if (mThemeConf)
202
+ mThemeConf.innerText = "Confidence: --";
203
+ const mKing = document.getElementById("mKing");
204
+ if (mKing)
205
+ mKing.innerText = "--";
206
+ const mKingBar = document.getElementById("mKingBar");
207
+ if (mKingBar)
208
+ mKingBar.style.width = "0%";
209
+ const mPressure = document.getElementById("mPressure");
210
+ if (mPressure)
211
+ mPressure.innerText = "--";
212
+ const mPressureBar = document.getElementById("mPressureBar");
213
+ if (mPressureBar)
214
+ mPressureBar.style.width = "0%";
215
+ }
216
+ async function resolveAndPlayMove() {
217
+ const input = document.getElementById("nlInput");
218
+ if (!input)
219
+ return;
220
+ const q = input.value.trim();
221
+ if (!q)
222
+ return;
223
+ const banner = document.getElementById("resolutionResult");
224
+ const resText = document.getElementById("resText");
225
+ const resConf = document.getElementById("resConf");
226
+ if (banner)
227
+ banner.style.display = "flex";
228
+ if (resText)
229
+ resText.innerText = "Resolving intent via TypeSafe Choice...";
230
+ if (resConf)
231
+ resConf.innerText = "";
232
+ const data = await resolver.resolveIntent(engine, q);
233
+ if (data.matchedMove) {
234
+ if (resText)
235
+ resText.innerText = "Matched: " + data.matchedMove.san + " (" + data.matchedMove.description + ")";
236
+ if (resConf)
237
+ resConf.innerText = (data.confidence * 100).toFixed(1) + "% confidence";
238
+ input.value = "";
239
+ await playMove(data.matchedMove.san);
240
+ }
241
+ else {
242
+ if (resText)
243
+ resText.innerText = "Ambiguous: " + (data.alternativeCandidates?.join(", ") || "No legal match");
244
+ if (resConf)
245
+ resConf.innerText = "Low confidence (" + (data.confidence * 100).toFixed(1) + "%)";
246
+ }
247
+ }
248
+ function setChip(txt) {
249
+ const input = document.getElementById("nlInput");
250
+ if (input) {
251
+ input.value = txt;
252
+ resolveAndPlayMove();
253
+ }
254
+ }
255
+ function selectPersona(id, el) {
256
+ activePersona = id;
257
+ document.querySelectorAll(".persona-card").forEach((c) => c.classList.remove("active"));
258
+ el.classList.add("active");
259
+ }
260
+ async function makePersonaMove() {
261
+ const rationaleEl = document.getElementById("personaRationale");
262
+ if (rationaleEl)
263
+ rationaleEl.innerText = "Evaluating candidates with TypeSafe Composite Scoring...";
264
+ try {
265
+ const decision = await personaEngine.selectMove(engine, activePersona);
266
+ if (rationaleEl)
267
+ rationaleEl.innerText = decision.rationale;
268
+ await playMove(decision.selectedMove.san);
269
+ }
270
+ catch (err) {
271
+ if (rationaleEl)
272
+ rationaleEl.innerText = err?.message || "Unable to make persona move.";
273
+ }
274
+ }
275
+ function resetGame() {
276
+ stopAutoPlay();
277
+ engine.reset();
278
+ currentFen = engine.fen();
279
+ lastFrom = null;
280
+ lastTo = null;
281
+ selectedSquare = null;
282
+ const resResult = document.getElementById("resolutionResult");
283
+ if (resResult)
284
+ resResult.style.display = "none";
285
+ renderBoard(currentFen);
286
+ updateLegalMoves();
287
+ resetIntelligence();
288
+ }
289
+ function undoMove() {
290
+ stopAutoPlay();
291
+ engine.chess.undo();
292
+ currentFen = engine.fen();
293
+ renderBoard(currentFen);
294
+ updateLegalMoves();
295
+ }
296
+ /* Classic Matches Functions */
297
+ function initClassicMatches() {
298
+ const select = document.getElementById("matchSelect");
299
+ if (!select)
300
+ return;
301
+ select.innerHTML = CLASSIC_MATCHES.map((m) => `<option value="${m.id}">${m.title} (${m.year}) — ${m.white} vs ${m.black}</option>`).join("");
302
+ if (CLASSIC_MATCHES.length > 0) {
303
+ selectMatch(CLASSIC_MATCHES[0].id);
304
+ }
305
+ }
306
+ function onMatchSelectChange(matchId) {
307
+ if (matchId)
308
+ selectMatch(matchId);
309
+ }
310
+ function selectMatch(matchId) {
311
+ stopAutoPlay();
312
+ activeMatch = CLASSIC_MATCHES.find((m) => m.id === matchId) || null;
313
+ if (!activeMatch)
314
+ return;
315
+ const metaBox = document.getElementById("matchMetaBox");
316
+ if (metaBox)
317
+ metaBox.style.display = "block";
318
+ const pEl = document.getElementById("matchPlayers");
319
+ if (pEl)
320
+ pEl.innerText = `${activeMatch.white} vs ${activeMatch.black}`;
321
+ const yEl = document.getElementById("matchYearEvent");
322
+ if (yEl)
323
+ yEl.innerText = `${activeMatch.year} · ${activeMatch.event}`;
324
+ const dEl = document.getElementById("matchDesc");
325
+ if (dEl)
326
+ dEl.innerText = activeMatch.description;
327
+ const ecoEl = document.getElementById("matchEco");
328
+ if (ecoEl)
329
+ ecoEl.innerText = activeMatch.eco;
330
+ const openEl = document.getElementById("matchOpening");
331
+ if (openEl)
332
+ openEl.innerText = activeMatch.opening;
333
+ const resEl = document.getElementById("matchResult");
334
+ if (resEl)
335
+ resEl.innerText = activeMatch.result;
336
+ goToReplayMove(0);
337
+ const card = document.getElementById("classificationCard");
338
+ if (card)
339
+ card.style.display = "none";
340
+ }
341
+ async function goToReplayMove(index) {
342
+ if (!activeMatch)
343
+ return;
344
+ const target = Math.max(0, Math.min(activeMatch.moves.length, index));
345
+ matchMoveIndex = target;
346
+ const moveLabel = document.getElementById("replayMoveLabel");
347
+ if (moveLabel)
348
+ moveLabel.innerText = `Move ${matchMoveIndex} / ${activeMatch.moves.length}`;
349
+ const pct = (matchMoveIndex / Math.max(1, activeMatch.moves.length)) * 100;
350
+ const bar = document.getElementById("replayProgressBar");
351
+ if (bar)
352
+ bar.style.width = pct + "%";
353
+ const turnLabel = document.getElementById("replayTurnLabel");
354
+ if (turnLabel) {
355
+ if (matchMoveIndex === 0) {
356
+ turnLabel.innerText = "Starting Position";
357
+ }
358
+ else {
359
+ const lastSan = activeMatch.moves[matchMoveIndex - 1];
360
+ const moveNum = Math.floor((matchMoveIndex - 1) / 2) + 1;
361
+ const color = (matchMoveIndex - 1) % 2 === 0 ? "White" : "Black";
362
+ turnLabel.innerText = `${moveNum}${color === "White" ? "." : "..."} ${lastSan}`;
363
+ }
364
+ }
365
+ engine.reset();
366
+ let lastEvaluatedMove = null;
367
+ for (let i = 0; i < target; i++) {
368
+ const mv = engine.makeMove(activeMatch.moves[i]);
369
+ if (i === target - 1) {
370
+ lastEvaluatedMove = mv;
371
+ }
372
+ }
373
+ currentFen = engine.fen();
374
+ if (lastEvaluatedMove) {
375
+ lastFrom = lastEvaluatedMove.from;
376
+ lastTo = lastEvaluatedMove.to;
377
+ }
378
+ else {
379
+ lastFrom = null;
380
+ lastTo = null;
381
+ }
382
+ updateLegalMoves();
383
+ renderBoard(currentFen);
384
+ if (lastEvaluatedMove) {
385
+ const evaluation = await evaluator.evaluateMove(engine, lastEvaluatedMove);
386
+ updateIntelligence(evaluation);
387
+ }
388
+ else {
389
+ resetIntelligence();
390
+ }
391
+ }
392
+ function stepFirst() {
393
+ stopAutoPlay();
394
+ goToReplayMove(0);
395
+ }
396
+ function stepPrev() {
397
+ stopAutoPlay();
398
+ if (matchMoveIndex > 0)
399
+ goToReplayMove(matchMoveIndex - 1);
400
+ }
401
+ function stepNext() {
402
+ if (activeMatch && matchMoveIndex < activeMatch.moves.length) {
403
+ goToReplayMove(matchMoveIndex + 1);
404
+ }
405
+ }
406
+ function stepLast() {
407
+ stopAutoPlay();
408
+ if (activeMatch)
409
+ goToReplayMove(activeMatch.moves.length);
410
+ }
411
+ function jumpToTurningPoint() {
412
+ stopAutoPlay();
413
+ if (activeMatch)
414
+ goToReplayMove(activeMatch.keyMoveIndex);
415
+ }
416
+ function toggleAutoPlay() {
417
+ if (autoPlayTimer) {
418
+ stopAutoPlay();
419
+ }
420
+ else {
421
+ if (!activeMatch)
422
+ return;
423
+ if (matchMoveIndex >= activeMatch.moves.length) {
424
+ goToReplayMove(0);
425
+ }
426
+ const btn = document.getElementById("autoPlayBtn");
427
+ if (btn)
428
+ btn.innerText = "Pause";
429
+ autoPlayTimer = setInterval(() => {
430
+ if (activeMatch && matchMoveIndex < activeMatch.moves.length) {
431
+ stepNext();
432
+ }
433
+ else {
434
+ stopAutoPlay();
435
+ }
436
+ }, 1200);
437
+ }
438
+ }
439
+ function stopAutoPlay() {
440
+ if (autoPlayTimer) {
441
+ clearInterval(autoPlayTimer);
442
+ autoPlayTimer = null;
443
+ const btn = document.getElementById("autoPlayBtn");
444
+ if (btn)
445
+ btn.innerText = "Auto Play";
446
+ }
447
+ }
448
+ async function classifyCurrentMatch() {
449
+ if (!activeMatch)
450
+ return;
451
+ const btn = document.getElementById("classifyBtn");
452
+ if (btn) {
453
+ btn.innerText = "Classifying with System One...";
454
+ btn.disabled = true;
455
+ }
456
+ try {
457
+ const cl = await matchStudio.classifyMatch(activeMatch);
458
+ const card = document.getElementById("classificationCard");
459
+ if (card)
460
+ card.style.display = "flex";
461
+ const aEl = document.getElementById("classArchetype");
462
+ if (aEl)
463
+ aEl.innerText = cl.archetype;
464
+ const sEl = document.getElementById("classSacrifice");
465
+ if (sEl)
466
+ sEl.innerText = cl.hasDecisiveSacrifice ? "Decisive Sacrifice Confirmed" : "No Decisive Sacrifice";
467
+ const bScore = document.getElementById("classBrillianceScore");
468
+ if (bScore)
469
+ bScore.innerText = cl.aestheticBrilliance.score.toFixed(1) + " / 3.0";
470
+ const bLevel = document.getElementById("classBrillianceLevel");
471
+ if (bLevel)
472
+ bLevel.innerText = cl.aestheticBrilliance.level;
473
+ const shScore = document.getElementById("classSharpnessScore");
474
+ if (shScore)
475
+ shScore.innerText = cl.overallSharpness.score.toFixed(1) + " / 3.0";
476
+ const shLevel = document.getElementById("classSharpnessLevel");
477
+ if (shLevel)
478
+ shLevel.innerText = cl.overallSharpness.level;
479
+ const tMove = document.getElementById("classTurningMove");
480
+ if (tMove)
481
+ tMove.innerText = cl.turningPoint.san;
482
+ const tNum = document.getElementById("classTurningNum");
483
+ if (tNum)
484
+ tNum.innerText = `Move ${cl.turningPoint.moveNumber}`;
485
+ const bdT = document.getElementById("bdTactical");
486
+ if (bdT)
487
+ bdT.innerText = cl.strategicBreakdown.tacticalStrikesPct + "%";
488
+ const bdPw = document.getElementById("bdPawn");
489
+ if (bdPw)
490
+ bdPw.innerText = cl.strategicBreakdown.pawnBreaksPct + "%";
491
+ const bdPc = document.getElementById("bdPiece");
492
+ if (bdPc)
493
+ bdPc.innerText = cl.strategicBreakdown.pieceActivationPct + "%";
494
+ const bdPr = document.getElementById("bdProphyl");
495
+ if (bdPr)
496
+ bdPr.innerText = cl.strategicBreakdown.prophylaxisPct + "%";
497
+ const verd = document.getElementById("classVerdict");
498
+ if (verd)
499
+ verd.innerText = cl.verdict;
500
+ }
501
+ catch (e) {
502
+ console.error("Failed to classify match", e);
503
+ }
504
+ finally {
505
+ if (btn) {
506
+ btn.innerText = "Classify Match with System One";
507
+ btn.disabled = false;
508
+ }
509
+ }
510
+ }
511
+ /* API Key Configuration */
512
+ function checkKeyStatus() {
513
+ const status = getApiKeyStatus();
514
+ const badge = document.getElementById("backendBadge");
515
+ const dot = document.getElementById("backendStatusDot");
516
+ const text = document.getElementById("backendStatusText");
517
+ const btnLabel = document.getElementById("keyBtnLabel");
518
+ if (status.isLive) {
519
+ if (badge)
520
+ badge.className = "badge-status";
521
+ if (dot)
522
+ dot.className = "status-dot live";
523
+ if (text)
524
+ text.innerText = "Live API (jev-latest)";
525
+ if (btnLabel)
526
+ btnLabel.innerText = status.maskedKey || "Live Key";
527
+ }
528
+ else {
529
+ if (badge)
530
+ badge.className = "badge-status badge-sim";
531
+ if (dot)
532
+ dot.className = "status-dot sim";
533
+ if (text)
534
+ text.innerText = "Simulation Mode (jev-latest calibrated)";
535
+ if (btnLabel)
536
+ btnLabel.innerText = "API Key";
537
+ }
538
+ }
539
+ function openKeyModal() {
540
+ const modal = document.getElementById("keyModal");
541
+ if (modal)
542
+ modal.style.display = "flex";
543
+ const st = document.getElementById("modalStatus");
544
+ if (st)
545
+ st.innerText = "";
546
+ }
547
+ function closeKeyModal() {
548
+ const modal = document.getElementById("keyModal");
549
+ if (modal)
550
+ modal.style.display = "none";
551
+ }
552
+ function toggleKeyVisibility() {
553
+ const input = document.getElementById("keyInput");
554
+ const btn = document.getElementById("toggleVisibilityBtn");
555
+ if (!input || !btn)
556
+ return;
557
+ const isPass = input.type === "password";
558
+ input.type = isPass ? "text" : "password";
559
+ btn.innerText = isPass ? "Hide" : "Show";
560
+ }
561
+ function saveApiKey() {
562
+ const input = document.getElementById("keyInput");
563
+ if (!input)
564
+ return;
565
+ const key = input.value.trim();
566
+ const statusEl = document.getElementById("modalStatus");
567
+ if (!key) {
568
+ if (statusEl)
569
+ statusEl.innerHTML = '<span style="color: var(--danger)">Please enter a valid API key.</span>';
570
+ return;
571
+ }
572
+ setApiKey(key);
573
+ if (statusEl) {
574
+ statusEl.innerHTML = '<span style="color: var(--success)">Successfully connected to live jev-latest model.</span>';
575
+ }
576
+ input.value = "";
577
+ checkKeyStatus();
578
+ setTimeout(closeKeyModal, 1000);
579
+ }
580
+ function clearApiKey() {
581
+ setApiKey(null);
582
+ const statusEl = document.getElementById("modalStatus");
583
+ if (statusEl) {
584
+ statusEl.innerHTML = '<span style="color: var(--warning)">Switched back to calibrated simulation mode.</span>';
585
+ }
586
+ checkKeyStatus();
587
+ setTimeout(closeKeyModal, 800);
588
+ }
589
+ // Bind to window for HTML click handlers
590
+ const w = window;
591
+ w.renderBoard = renderBoard;
592
+ w.playMove = playMove;
593
+ w.resolveAndPlayMove = resolveAndPlayMove;
594
+ w.setChip = setChip;
595
+ w.selectPersona = selectPersona;
596
+ w.makePersonaMove = makePersonaMove;
597
+ w.resetGame = resetGame;
598
+ w.undoMove = undoMove;
599
+ w.onMatchSelectChange = onMatchSelectChange;
600
+ w.goToReplayMove = goToReplayMove;
601
+ w.stepFirst = stepFirst;
602
+ w.stepPrev = stepPrev;
603
+ w.stepNext = stepNext;
604
+ w.stepLast = stepLast;
605
+ w.jumpToTurningPoint = jumpToTurningPoint;
606
+ w.toggleAutoPlay = toggleAutoPlay;
607
+ w.classifyCurrentMatch = classifyCurrentMatch;
608
+ w.openKeyModal = openKeyModal;
609
+ w.closeKeyModal = closeKeyModal;
610
+ w.toggleKeyVisibility = toggleKeyVisibility;
611
+ w.saveApiKey = saveApiKey;
612
+ w.clearApiKey = clearApiKey;
613
+ // DOM Ready
614
+ window.addEventListener("DOMContentLoaded", () => {
615
+ renderBoard(currentFen);
616
+ updateLegalMoves();
617
+ checkKeyStatus();
618
+ initClassicMatches();
619
+ });
620
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/web/main.ts"],"names":[],"mappings":"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"}