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.
- package/ARCHITECTURE.md +148 -0
- package/README.md +109 -0
- package/dist/chessEngine.d.ts +36 -0
- package/dist/chessEngine.d.ts.map +1 -0
- package/dist/chessEngine.js +173 -0
- package/dist/chessEngine.js.map +1 -0
- package/dist/classicMatches.d.ts +50 -0
- package/dist/classicMatches.d.ts.map +1 -0
- package/dist/classicMatches.js +223 -0
- package/dist/classicMatches.js.map +1 -0
- package/dist/demo.d.ts +2 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +142 -0
- package/dist/demo.js.map +1 -0
- package/dist/gameReviewer.d.ts +11 -0
- package/dist/gameReviewer.d.ts.map +1 -0
- package/dist/gameReviewer.js +89 -0
- package/dist/gameReviewer.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/moveEvaluator.d.ts +11 -0
- package/dist/moveEvaluator.d.ts.map +1 -0
- package/dist/moveEvaluator.js +103 -0
- package/dist/moveEvaluator.js.map +1 -0
- package/dist/moveResolver.d.ts +15 -0
- package/dist/moveResolver.d.ts.map +1 -0
- package/dist/moveResolver.js +97 -0
- package/dist/moveResolver.js.map +1 -0
- package/dist/personaEngine.d.ts +15 -0
- package/dist/personaEngine.d.ts.map +1 -0
- package/dist/personaEngine.js +151 -0
- package/dist/personaEngine.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1490 -0
- package/dist/server.js.map +1 -0
- package/dist/typeSafeClient.d.ts +13 -0
- package/dist/typeSafeClient.d.ts.map +1 -0
- package/dist/typeSafeClient.js +336 -0
- package/dist/typeSafeClient.js.map +1 -0
- package/dist/types.d.ts +100 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/web/main.d.ts +2 -0
- package/dist/web/main.d.ts.map +1 -0
- package/dist/web/main.js +620 -0
- package/dist/web/main.js.map +1 -0
- package/package.json +35 -0
- package/public/app.js +45 -0
- package/public/index.html +790 -0
- package/src/chessEngine.ts +191 -0
- package/src/classicMatches.ts +291 -0
- package/src/demo.ts +160 -0
- package/src/gameReviewer.ts +113 -0
- package/src/index.ts +8 -0
- package/src/moveEvaluator.ts +122 -0
- package/src/moveResolver.ts +120 -0
- package/src/personaEngine.ts +193 -0
- package/src/server.ts +1509 -0
- package/src/typeSafeClient.ts +321 -0
- package/src/types.ts +118 -0
- package/src/web/main.ts +615 -0
- package/tests/chess.test.ts +206 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { choice, getTypeSafeClient, noul, score } from "./typeSafeClient.js";
|
|
2
|
+
export const CLASSIC_MATCHES = [
|
|
3
|
+
{
|
|
4
|
+
id: "immortal-game",
|
|
5
|
+
title: "The Immortal Game",
|
|
6
|
+
white: "Adolf Anderssen",
|
|
7
|
+
black: "Lionel Kieseritzky",
|
|
8
|
+
year: 1851,
|
|
9
|
+
event: "London (Casual match during 1st International Tournament)",
|
|
10
|
+
result: "1-0",
|
|
11
|
+
eco: "C33",
|
|
12
|
+
opening: "King's Gambit Accepted",
|
|
13
|
+
description: "Anderssen gave up both rooks and a bishop, followed by his queen, delivering checkmate with his three remaining minor pieces.",
|
|
14
|
+
keyMoveIndex: 38, // 20. Ke2! or 22. Qf6+!
|
|
15
|
+
moves: [
|
|
16
|
+
"e4", "e5", "f4", "exf4", "Bc4", "Qh4+", "Kf1", "b5", "Bxb5", "Nf6",
|
|
17
|
+
"Nf3", "Qh6", "d3", "Nh5", "Nh4", "Qg5", "Nf5", "c6", "g4", "Nf6",
|
|
18
|
+
"Rg1", "cxb5", "h4", "Qg6", "h5", "Qg5", "Qf3", "Ng8", "Bxf4", "Qf6",
|
|
19
|
+
"Nc3", "Bc5", "Nd5", "Qxb2", "Bd6", "Bxg1", "e5", "Qxa1+", "Ke2", "Na6",
|
|
20
|
+
"Nxg7+", "Kd8", "Qf6+", "Nxf6", "Be7#"
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "opera-game",
|
|
25
|
+
title: "The Opera Game",
|
|
26
|
+
white: "Paul Morphy",
|
|
27
|
+
black: "Duke of Brunswick & Count Isouard",
|
|
28
|
+
year: 1858,
|
|
29
|
+
event: "Paris Opera House (Norma intermission)",
|
|
30
|
+
result: "1-0",
|
|
31
|
+
eco: "C41",
|
|
32
|
+
opening: "Philidor Defense",
|
|
33
|
+
description: "Morphy's quintessential demonstration of rapid development, open lines, and deflection queen sacrifice ending in checkmate with rook and bishop.",
|
|
34
|
+
keyMoveIndex: 30, // 16. Qb8+!
|
|
35
|
+
moves: [
|
|
36
|
+
"e4", "e5", "Nf3", "d6", "d4", "Bg4", "dxe5", "Bxf3", "Qxf3", "dxe5",
|
|
37
|
+
"Bc4", "Nf6", "Qb3", "Qe7", "Nc3", "c6", "Bg5", "b5", "Nxb5", "cxb5",
|
|
38
|
+
"Bxb5+", "Nbd7", "O-O-O", "Rd8", "Rxd7", "Rxd7", "Rd1", "Qe6", "Bxd7+", "Nxd7",
|
|
39
|
+
"Qb8+", "Nxb8", "Rd8#"
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "game-of-the-century",
|
|
44
|
+
title: "Game of the Century",
|
|
45
|
+
white: "Donald Byrne",
|
|
46
|
+
black: "Bobby Fischer (age 13)",
|
|
47
|
+
year: 1956,
|
|
48
|
+
event: "Rosenwald Memorial Tournament, New York",
|
|
49
|
+
result: "0-1",
|
|
50
|
+
eco: "D92",
|
|
51
|
+
opening: "Grünfeld Defence, 5.Bf4",
|
|
52
|
+
description: "A 13-year-old Bobby Fischer sacrifices his queen on move 17 (Be6!!) to unleash an unstoppable windmill attack with bishop and knight.",
|
|
53
|
+
keyMoveIndex: 33, // 17... Be6!!
|
|
54
|
+
moves: [
|
|
55
|
+
"Nf3", "Nf6", "c4", "g6", "Nc3", "Bg7", "d4", "O-O", "Bf4", "d5",
|
|
56
|
+
"Qb3", "dxc4", "Qxc4", "c6", "e4", "Nbd7", "Rd1", "Nb6", "Qc5", "Bg4",
|
|
57
|
+
"Bg5", "Na4", "Qa3", "Nxc3", "bxc3", "Nxe4", "Bxe7", "Qb6", "Bc4", "Nxc3",
|
|
58
|
+
"Bc5", "Rfe8+", "Kf1", "Be6", "Bxb6", "Bxc4+", "Kg1", "Ne2+", "Kf1", "Nxd4+",
|
|
59
|
+
"Kg1", "Ne2+", "Kf1", "Nc3+", "Kg1", "axb6", "Qb4", "Ra4", "Qxb6", "Nxd1",
|
|
60
|
+
"h3", "Rxa2", "Kh2", "Nxf2", "Re1", "Rxe1", "Qd8+", "Bf8", "Nxe1", "Bd5",
|
|
61
|
+
"Nf3", "Ne4", "Qb8", "b5", "h4", "h5", "Ne5", "Kg7", "Kg1", "Bc5+",
|
|
62
|
+
"Kf1", "Ng3+", "Ke1", "Bb4+", "Kd1", "Bb3+", "Kc1", "Ne2+", "Kb1", "Nc3+",
|
|
63
|
+
"Kc1", "Rc2#"
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "kasparov-immortal",
|
|
68
|
+
title: "Kasparov's Immortal",
|
|
69
|
+
white: "Garry Kasparov",
|
|
70
|
+
black: "Veselin Topalov",
|
|
71
|
+
year: 1999,
|
|
72
|
+
event: "Hoogovens Group A, Wijk aan Zee",
|
|
73
|
+
result: "1-0",
|
|
74
|
+
eco: "B07",
|
|
75
|
+
opening: "Pirc Defense",
|
|
76
|
+
description: "Kasparov sacrifices his rook on d4 (24. Rxd4!!) initiating a spectacular 15-move king hunt that drove the black king across the entire board.",
|
|
77
|
+
keyMoveIndex: 46, // 24. Rxd4!!
|
|
78
|
+
moves: [
|
|
79
|
+
"e4", "d6", "d4", "Nf6", "Nc3", "g6", "Be3", "Bg7", "Qd2", "c6",
|
|
80
|
+
"f3", "b5", "Nge2", "Nbd7", "Bh6", "Bxh6", "Qxh6", "Bb7", "a3", "e5",
|
|
81
|
+
"O-O-O", "Qe7", "Kb1", "a6", "Nc1", "O-O-O", "Nb3", "exd4", "Rxd4", "c5",
|
|
82
|
+
"Rd1", "Nb6", "g3", "Kb8", "Na5", "Ba8", "Bh3", "d5", "Qf4+", "Ka7",
|
|
83
|
+
"Rhe1", "d4", "Nd5", "Nbxd5", "exd5", "Qd6", "Rxd4", "cxd4", "Re7+", "Kb6",
|
|
84
|
+
"Qxd4+", "Kxa5", "b4+", "Ka4", "Qc3", "Qxd5", "Ra7", "Bb7", "Rxb7", "Qc4",
|
|
85
|
+
"Qxf6", "Kxa3", "Qxa6+", "Kxb4", "c3+", "Kxc3", "Qa1+", "Kd2", "Qb2+", "Kd1",
|
|
86
|
+
"Bf1", "Rd2", "Rd7+", "Rxd7", "Bxc4", "bxc4", "Qxh8", "Rd3", "Qa8", "c3",
|
|
87
|
+
"Qa4+", "Ke1", "f4", "f5", "Kc1", "Rd2", "Qa7"
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "tal-larsen-1965",
|
|
92
|
+
title: "Tal's Wild Central Sacrifice",
|
|
93
|
+
white: "Mikhail Tal",
|
|
94
|
+
black: "Bent Larsen",
|
|
95
|
+
year: 1965,
|
|
96
|
+
event: "Candidates Semifinal, Bled, Match Game 10",
|
|
97
|
+
result: "1-0",
|
|
98
|
+
eco: "B57",
|
|
99
|
+
opening: "Sicilian Defense, Richter-Rauzer",
|
|
100
|
+
description: "Tal's famous intuitive piece sacrifice 16. Nxd5!! blowing open the center against Larsen's uncastled king to clinch the match.",
|
|
101
|
+
keyMoveIndex: 30, // 16. Nxd5!!
|
|
102
|
+
moves: [
|
|
103
|
+
"e4", "c5", "Nf3", "Nc6", "d4", "cxd4", "Nxd4", "e6", "Nc3", "d6",
|
|
104
|
+
"Be3", "Nf6", "f4", "Be7", "Qf3", "O-O", "O-O-O", "Qc7", "Ndb5", "Qb8",
|
|
105
|
+
"g4", "a6", "Nd4", "Nxd4", "Bxd4", "b5", "g5", "Nd7", "Bd3", "b4",
|
|
106
|
+
"Nd5", "exd5", "exd5", "f5", "Rde1", "Rf7", "h4", "Bb7", "Bxf5", "Rxf5",
|
|
107
|
+
"Rxe7", "Ne5", "Qe4", "Qf8", "fxe5", "Rf4", "Qe3", "Rf3", "Qe2", "Qxe7",
|
|
108
|
+
"Qxf3", "dxe5", "Re1", "Rd8", "Rxe5", "Qd6", "Qf4", "Rf8", "Qe4", "Bc8",
|
|
109
|
+
"b3", "a5", "h5", "Bd7", "h6"
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
const MATCH_ARCHETYPES = {
|
|
114
|
+
romantic_swashbuckler: "Cascading material sacrifices culminating in a forced mating net",
|
|
115
|
+
dynamic_initiative: "Relentless piece tempo and coordinated piece pressure dominating passive defenders",
|
|
116
|
+
positional_squeeze: "Prophylactic clamp, suffocating opponent counterplay before technical breakthrough",
|
|
117
|
+
tactical_firestorm: "Sharp double-edged complications with king chases and critical calculate-or-die tactics",
|
|
118
|
+
};
|
|
119
|
+
const BRILLIANCE_RUBRIC = [
|
|
120
|
+
"Standard technical victory with routine exchanges",
|
|
121
|
+
"Well-played competitive game with solid tactical execution",
|
|
122
|
+
"Brilliant game featuring deep calculation and attractive piece play",
|
|
123
|
+
"Immortal artistic masterpiece that redefined chess literature",
|
|
124
|
+
];
|
|
125
|
+
const MATCH_SHARPNESS_RUBRIC = [
|
|
126
|
+
"Solid and quiet; long positional maneuvering behind closed pawns",
|
|
127
|
+
"Balanced fighting contest with strategic tension",
|
|
128
|
+
"Very sharp; frequent piece contact, king exposure, and tactical threats",
|
|
129
|
+
"Wild tactical hurricane; mutual piece sacrifices and all-out monarch assault",
|
|
130
|
+
];
|
|
131
|
+
export class ClassicMatchStudio {
|
|
132
|
+
get client() {
|
|
133
|
+
return getTypeSafeClient();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Classifies a classic chess match using TypeSafe System One.
|
|
137
|
+
*/
|
|
138
|
+
async classifyMatch(match) {
|
|
139
|
+
const turningMove = match.moves[match.keyMoveIndex] ?? match.moves[match.moves.length - 1] ?? "e4";
|
|
140
|
+
const moveNum = Math.floor((match.keyMoveIndex) / 2) + 1;
|
|
141
|
+
const state = {
|
|
142
|
+
match_meta: {
|
|
143
|
+
id: match.id,
|
|
144
|
+
title: match.title,
|
|
145
|
+
white: match.white,
|
|
146
|
+
black: match.black,
|
|
147
|
+
year: match.year,
|
|
148
|
+
eco: match.eco,
|
|
149
|
+
opening: match.opening,
|
|
150
|
+
result: match.result,
|
|
151
|
+
total_moves: match.moves.length,
|
|
152
|
+
},
|
|
153
|
+
turning_point: {
|
|
154
|
+
move_number: moveNum,
|
|
155
|
+
san: turningMove,
|
|
156
|
+
description: match.description,
|
|
157
|
+
},
|
|
158
|
+
moves_sample: match.moves.slice(0, 30),
|
|
159
|
+
};
|
|
160
|
+
const response = await this.client.systemOne({
|
|
161
|
+
state,
|
|
162
|
+
questions: {
|
|
163
|
+
archetype: choice("Which historical chess archetype best classifies `match_meta.title`?", MATCH_ARCHETYPES),
|
|
164
|
+
brilliance: score("Rate the aesthetic and instructive brilliance of this classic match:", BRILLIANCE_RUBRIC),
|
|
165
|
+
sharpness: score("Rate the overall tactical sharpness and volatility of this game:", MATCH_SHARPNESS_RUBRIC),
|
|
166
|
+
decisive_sacrifice: noul("Does this match feature a sound, decisive piece or queen sacrifice for the initiative?"),
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
const archetype = response.answers.archetype.choice;
|
|
170
|
+
const brillianceScore = response.answers.brilliance.score;
|
|
171
|
+
const sharpnessScore = response.answers.sharpness.score;
|
|
172
|
+
const hasSac = response.answers.decisive_sacrifice.noul >= 0.6;
|
|
173
|
+
// Deterministically count tactical themes from move properties
|
|
174
|
+
let checksAndCaptures = 0;
|
|
175
|
+
let pawnMoves = 0;
|
|
176
|
+
for (const m of match.moves) {
|
|
177
|
+
if (m.includes("+") || m.includes("x") || m.includes("#"))
|
|
178
|
+
checksAndCaptures++;
|
|
179
|
+
else if (m.toLowerCase()[0] >= "a" && m.toLowerCase()[0] <= "h" && !m.includes("O"))
|
|
180
|
+
pawnMoves++;
|
|
181
|
+
}
|
|
182
|
+
const total = Math.max(1, match.moves.length);
|
|
183
|
+
const tacticalPct = Math.round((checksAndCaptures / total) * 100);
|
|
184
|
+
const pawnPct = Math.round((pawnMoves / total) * 100);
|
|
185
|
+
const piecePct = Math.max(10, 100 - tacticalPct - pawnPct);
|
|
186
|
+
const prophylPct = Math.round(piecePct * 0.35);
|
|
187
|
+
let verdict = `${match.title} (${match.year}) is a classic ${archetype.replace(/_/g, " ")}. `;
|
|
188
|
+
if (brillianceScore >= 2.3) {
|
|
189
|
+
verdict += "Widely celebrated as one of the finest artistic achievements in the history of the game.";
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
verdict += "A deeply instructive showcase of classical principles and aggressive tactical conversion.";
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
matchId: match.id,
|
|
196
|
+
title: match.title,
|
|
197
|
+
archetype: archetype.replace(/_/g, " ").toUpperCase(),
|
|
198
|
+
aestheticBrilliance: {
|
|
199
|
+
score: brillianceScore,
|
|
200
|
+
level: BRILLIANCE_RUBRIC[Math.min(BRILLIANCE_RUBRIC.length - 1, Math.round(brillianceScore))] ?? "Masterpiece",
|
|
201
|
+
confidence: response.answers.brilliance.confidence,
|
|
202
|
+
},
|
|
203
|
+
overallSharpness: {
|
|
204
|
+
score: sharpnessScore,
|
|
205
|
+
level: MATCH_SHARPNESS_RUBRIC[Math.min(MATCH_SHARPNESS_RUBRIC.length - 1, Math.round(sharpnessScore))] ?? "Sharp",
|
|
206
|
+
},
|
|
207
|
+
hasDecisiveSacrifice: hasSac,
|
|
208
|
+
turningPoint: {
|
|
209
|
+
moveNumber: moveNum,
|
|
210
|
+
san: turningMove,
|
|
211
|
+
annotation: match.description,
|
|
212
|
+
},
|
|
213
|
+
strategicBreakdown: {
|
|
214
|
+
tacticalStrikesPct: tacticalPct,
|
|
215
|
+
pawnBreaksPct: pawnPct,
|
|
216
|
+
prophylaxisPct: prophylPct,
|
|
217
|
+
pieceActivationPct: piecePct,
|
|
218
|
+
},
|
|
219
|
+
verdict,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=classicMatches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classicMatches.js","sourceRoot":"","sources":["../src/classicMatches.ts"],"names":[],"mappings":"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"}
|
package/dist/demo.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":""}
|
package/dist/demo.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
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 { GameReviewer } from "./gameReviewer.js";
|
|
6
|
+
import { getTypeSafeClient } from "./typeSafeClient.js";
|
|
7
|
+
async function runDemo() {
|
|
8
|
+
const client = getTypeSafeClient();
|
|
9
|
+
console.log("================================================================================");
|
|
10
|
+
console.log(" ♟️ JEV-CHESS: DESIGNING CHESS MOVES & GAMES WITH TYPESAFE AI ♟️");
|
|
11
|
+
console.log("================================================================================");
|
|
12
|
+
console.log(`Backend Mode: ${client.isLive ? "🟢 LIVE (TypeSafe API - jev-latest)" : "🟡 SIMULATED (Calibrated offline fallback)"}`);
|
|
13
|
+
console.log("Principle: Code enforces board physics & rules; TypeSafe System One provides fast semantic judgment.\n");
|
|
14
|
+
const engine = new ChessEngine();
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// SECTION 1: MOVE DESIGN - NATURAL LANGUAGE INTENT RESOLUTION
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
19
|
+
console.log("1. MOVE RESOLUTION: 'Select Instead of Generate' Pattern (TypeSafe Choice)");
|
|
20
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
21
|
+
// Play standard 1. e4 e5
|
|
22
|
+
engine.makeMove("e4");
|
|
23
|
+
engine.makeMove("e5");
|
|
24
|
+
console.log(`Current Board FEN: ${engine.fen()}`);
|
|
25
|
+
console.log(`Turn: ${engine.turn()} | Move: 2\n`);
|
|
26
|
+
const resolver = new MoveResolver();
|
|
27
|
+
const queries = [
|
|
28
|
+
"Develop my knight towards the center and attack their pawn",
|
|
29
|
+
"Push the queen's pawn two squares forward to contest the center",
|
|
30
|
+
"Teleport my rook directly to the other side", // Intent with no legal match
|
|
31
|
+
];
|
|
32
|
+
for (const q of queries) {
|
|
33
|
+
console.log(`> Human command: "${q}"`);
|
|
34
|
+
const result = await resolver.resolveIntent(engine, q);
|
|
35
|
+
if (result.matchedMove) {
|
|
36
|
+
console.log(` ✅ Matched Legal Move: ${result.matchedMove.san} (${result.matchedMove.description})`);
|
|
37
|
+
console.log(` Confidence: ${(result.confidence * 100).toFixed(1)}%`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(` ⚠️ Ambiguous or Illegal Command!`);
|
|
41
|
+
console.log(` Confidence: ${(result.confidence * 100).toFixed(1)}% (Clarification Required)`);
|
|
42
|
+
if (result.alternativeCandidates.length > 0) {
|
|
43
|
+
console.log(` Did you mean: ${result.alternativeCandidates.join(", ")}?`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
// Play White 2. Nf3, Black 2. Nc6, White 3. Bc4, Black 3. Bc5
|
|
49
|
+
engine.makeMove("Nf3");
|
|
50
|
+
engine.makeMove("Nc6");
|
|
51
|
+
engine.makeMove("Bc4");
|
|
52
|
+
engine.makeMove("Bc5");
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// SECTION 2: MOVE DESIGN - MULTI-DIMENSIONAL QUALITATIVE EVALUATION
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
57
|
+
console.log("2. MOVE EVALUATION: Parallel Atomic Judgments (Score, Choice, Noul)");
|
|
58
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
59
|
+
const evaluator = new MoveEvaluator();
|
|
60
|
+
const testMoves = ["c3", "O-O", "Bxf7+"];
|
|
61
|
+
for (const san of testMoves) {
|
|
62
|
+
// Check if legal in current or alternate position
|
|
63
|
+
const candidates = engine.getAnnotatedMoves();
|
|
64
|
+
let moveObj = candidates.find((m) => m.san === san);
|
|
65
|
+
if (!moveObj) {
|
|
66
|
+
// Create synthetic candidate for demonstration if not currently legal
|
|
67
|
+
moveObj = {
|
|
68
|
+
san,
|
|
69
|
+
from: "c2",
|
|
70
|
+
to: "c3",
|
|
71
|
+
piece: "pawn",
|
|
72
|
+
color: "white",
|
|
73
|
+
isCapture: san.includes("x"),
|
|
74
|
+
isCheck: san.includes("+"),
|
|
75
|
+
isCastling: san === "O-O",
|
|
76
|
+
description: san === "O-O" ? "Kingside castle" : `Move ${san}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const evalResult = await evaluator.evaluateMove(engine, moveObj);
|
|
80
|
+
console.log(`Move: ${evalResult.san}`);
|
|
81
|
+
console.log(` Badge: ${evalResult.commentaryBadge}`);
|
|
82
|
+
console.log(` Tactical Sharpness: ${evalResult.tacticalSharpness.score.toFixed(1)} / 3.0 (${evalResult.tacticalSharpness.level})`);
|
|
83
|
+
console.log(` Strategic Theme: ${evalResult.strategicTheme.theme} (Confidence: ${(evalResult.strategicTheme.confidence * 100).toFixed(0)}%)`);
|
|
84
|
+
console.log(` King Attack Threat: ${(evalResult.kingAttackRisk.probability * 100).toFixed(0)}%`);
|
|
85
|
+
console.log(` Psychological Pressure: ${(evalResult.psychologicalPressure.probability * 100).toFixed(0)}%`);
|
|
86
|
+
console.log();
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// SECTION 3: GAME DESIGN - PERSONA AI OPPONENTS VIA COMPOSITE SCORING
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
92
|
+
console.log("3. GAME DESIGN: Persona AI Opponents via Composite Scoring");
|
|
93
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
94
|
+
console.log("Demonstrating how atomic scores are re-weighted in code to produce distinct personalities without rerunning inference:\n");
|
|
95
|
+
const personaEngine = new PersonaEngine();
|
|
96
|
+
const personas = ["tal", "petrosian", "capablanca", "coffeehouse"];
|
|
97
|
+
for (const pId of personas) {
|
|
98
|
+
const decision = await personaEngine.selectMove(engine, pId, 4);
|
|
99
|
+
const p = decision.persona;
|
|
100
|
+
console.log(`👤 ${p.name} - "${p.title}"`);
|
|
101
|
+
console.log(` Weights: Aggression=${p.weights.aggression}, Prophylaxis=${p.weights.prophylaxis}, Complexity=${p.weights.complexity}, Greed=${p.weights.materialGreed}`);
|
|
102
|
+
console.log(` Decision: Plays ${decision.selectedMove.san} (${decision.selectedMove.description})`);
|
|
103
|
+
console.log(` Top 3 Ranked Moves:`);
|
|
104
|
+
for (let i = 0; i < Math.min(3, decision.rankedCandidates.length); i++) {
|
|
105
|
+
const c = decision.rankedCandidates[i];
|
|
106
|
+
console.log(` #${i + 1} ${c.move.san.padEnd(5)} | Composite Score: ${c.compositeScore.toFixed(3)} (Agg:${c.dimensionScores.aggression.toFixed(1)}, Pro:${c.dimensionScores.prophylaxis.toFixed(1)}, Comp:${c.dimensionScores.complexity.toFixed(1)}, Greed:${c.dimensionScores.materialGreed.toFixed(2)})`);
|
|
107
|
+
}
|
|
108
|
+
console.log();
|
|
109
|
+
}
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
// SECTION 4: GAME REVIEW - POST-GAME BLUNDER TAXONOMY & DIAGNOSTICS
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
114
|
+
console.log("4. GAME REVIEW: Structured Mistake Diagnostics (The Cascade Pattern)");
|
|
115
|
+
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
116
|
+
const reviewer = new GameReviewer();
|
|
117
|
+
const sampleBlunder = {
|
|
118
|
+
san: "Qxh7??",
|
|
119
|
+
from: "d3",
|
|
120
|
+
to: "h7",
|
|
121
|
+
piece: "queen",
|
|
122
|
+
color: "white",
|
|
123
|
+
isCapture: true,
|
|
124
|
+
isCheck: false,
|
|
125
|
+
isCastling: false,
|
|
126
|
+
description: "Queen captures h7 pawn without checking king safety",
|
|
127
|
+
};
|
|
128
|
+
const diagnosis = await reviewer.diagnoseMove(engine, sampleBlunder, 14);
|
|
129
|
+
console.log(`Reviewed Move: Move ${diagnosis.moveNumber} White played ${diagnosis.playedMove}`);
|
|
130
|
+
console.log(` Mistake Taxonomy: ${diagnosis.mistakeArchetype.toUpperCase()}`);
|
|
131
|
+
console.log(` Defensive Difficulty: ${diagnosis.defensiveDifficulty.toFixed(1)} / 3.0`);
|
|
132
|
+
console.log(` Game Tension Level: ${diagnosis.tacticalTension.toFixed(1)} / 3.0`);
|
|
133
|
+
console.log(` Coach Feedback: "${diagnosis.coachAdvice}"\n`);
|
|
134
|
+
console.log("================================================================================");
|
|
135
|
+
console.log(" ✅ TypeSafe Chess Moves and Games Architecture demonstrated successfully! ");
|
|
136
|
+
console.log("================================================================================");
|
|
137
|
+
}
|
|
138
|
+
runDemo().catch((err) => {
|
|
139
|
+
console.error("Demo failed:", err);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=demo.js.map
|
package/dist/demo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAkB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,UAAU,OAAO;IACpB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,4CAA4C,EAAE,CAAC,CAAC;IACrI,OAAO,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC;IAEtH,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,8EAA8E;IAC9E,8DAA8D;IAC9D,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAEhG,yBAAyB;IACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG;QACd,4DAA4D;QAC5D,iEAAiE;QACjE,6CAA6C,EAAE,6BAA6B;KAC7E,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,MAAM,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;YACrG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;YAClG,IAAI,MAAM,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvB,8EAA8E;IAC9E,oEAAoE;IACpE,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAEhG,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,kDAAkD;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9C,IAAI,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,sEAAsE;YACtE,OAAO,GAAG;gBACR,GAAG;gBACH,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC5B,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,UAAU,EAAE,GAAG,KAAK,KAAK;gBACzB,WAAW,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC;QACxI,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,CAAC,cAAc,CAAC,KAAK,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtJ,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,UAAU,CAAC,qBAAqB,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7G,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,sEAAsE;IACtE,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,0HAA0H,CAAC,CAAC;IAExI,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAuC,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAEvG,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,UAAU,iBAAiB,CAAC,CAAC,OAAO,CAAC,WAAW,gBAAgB,CAAC,CAAC,OAAO,CAAC,UAAU,WAAW,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1K,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,QAAQ,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvE,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClT,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,oEAAoE;IACpE,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAEhG,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG;QACpB,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,OAAgB;QACvB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,qDAAqD;KACnE,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,UAAU,iBAAiB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,4BAA4B,SAAS,CAAC,WAAW,KAAK,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;AAClG,CAAC;AAED,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChessEngine } from "./chessEngine.js";
|
|
2
|
+
import type { AnnotatedMove, BlunderDiagnosis } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Diagnostic Game Reviewer that classifies chess moves and blunders into actionable semantic concepts.
|
|
5
|
+
* Pattern: Verification & Escalation / Structured Diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
export declare class GameReviewer {
|
|
8
|
+
private get client();
|
|
9
|
+
diagnoseMove(engine: ChessEngine, move: AnnotatedMove, moveNumber: number): Promise<BlunderDiagnosis>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=gameReviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gameReviewer.d.ts","sourceRoot":"","sources":["../src/gameReviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAyBpF;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,KAAK,MAAM,GAEjB;IAEY,YAAY,CACvB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAuE3B;CACF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { choice, getTypeSafeClient, score } from "./typeSafeClient.js";
|
|
2
|
+
const MISTAKE_ARCHETYPES = {
|
|
3
|
+
sound_move: "A solid, principled move with no critical defect",
|
|
4
|
+
tactical_blindness: "Overlooked an immediate tactical blow, fork, pin, skewer, or check",
|
|
5
|
+
poisoned_pawn_greed: "Grabbed material at the fatal expense of development or king safety",
|
|
6
|
+
over_extension: "Pushed pawns or pieces too far forward, creating irreparable structural holes",
|
|
7
|
+
passive_concession: "Retreated timidly, yielding tempo and spatial dominance to the opponent",
|
|
8
|
+
king_safety_negligence: "Compromised the pawn shield or exposed the monarch to a deadly storm",
|
|
9
|
+
};
|
|
10
|
+
const DEFENSIVE_DIFFICULTY_RUBRIC = [
|
|
11
|
+
"Comfortable defense; natural and straightforward moves maintain balance",
|
|
12
|
+
"Tense defense; requires disciplined calculation and piece coordination",
|
|
13
|
+
"Precise tightrope; requires narrow, counter-intuitive only-moves to survive",
|
|
14
|
+
"Hopeless or practically impossible for a human player to defend under pressure",
|
|
15
|
+
];
|
|
16
|
+
const TENSION_RUBRIC = [
|
|
17
|
+
"Peaceful and quiet; strategic maneuvering behind closed lines",
|
|
18
|
+
"Building central friction and contested outposts",
|
|
19
|
+
"Sharp tactical skirmish; pieces in contact and multiple captures pending",
|
|
20
|
+
"Decisive boiling point; mutual king attacks and explosive complications",
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Diagnostic Game Reviewer that classifies chess moves and blunders into actionable semantic concepts.
|
|
24
|
+
* Pattern: Verification & Escalation / Structured Diagnostics.
|
|
25
|
+
*/
|
|
26
|
+
export class GameReviewer {
|
|
27
|
+
get client() {
|
|
28
|
+
return getTypeSafeClient();
|
|
29
|
+
}
|
|
30
|
+
async diagnoseMove(engine, move, moveNumber) {
|
|
31
|
+
const boardContext = engine.getBoardContext();
|
|
32
|
+
const state = {
|
|
33
|
+
game_state: {
|
|
34
|
+
fen: boardContext.fen,
|
|
35
|
+
turn: boardContext.turn,
|
|
36
|
+
phase: boardContext.gamePhase,
|
|
37
|
+
material: boardContext.materialBalance.description,
|
|
38
|
+
recent_moves: boardContext.recentHistory,
|
|
39
|
+
},
|
|
40
|
+
played_move: {
|
|
41
|
+
san: move.san,
|
|
42
|
+
description: move.description,
|
|
43
|
+
is_capture: move.isCapture,
|
|
44
|
+
is_check: move.isCheck,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const response = await this.client.systemOne({
|
|
48
|
+
state,
|
|
49
|
+
questions: {
|
|
50
|
+
archetype: choice("Which mistake or positional category best describes `played_move.san`?", MISTAKE_ARCHETYPES),
|
|
51
|
+
defensive_difficulty: score("How difficult is it to defend or recover from this position after `played_move.san`?", DEFENSIVE_DIFFICULTY_RUBRIC),
|
|
52
|
+
tension: score("What is the overall tactical and psychological tension level on the board?", TENSION_RUBRIC),
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
const archetypeChoice = response.answers.archetype.choice;
|
|
56
|
+
const diffScore = response.answers.defensive_difficulty.score;
|
|
57
|
+
const tensionScore = response.answers.tension.score;
|
|
58
|
+
let coachAdvice = "Keep developing actively and control the center.";
|
|
59
|
+
switch (archetypeChoice) {
|
|
60
|
+
case "tactical_blindness":
|
|
61
|
+
coachAdvice = "Always scan for opponent checks, captures, and threats before finalizing your move.";
|
|
62
|
+
break;
|
|
63
|
+
case "poisoned_pawn_greed":
|
|
64
|
+
coachAdvice = "Do not go pawn hunting with an uncastled king or uncoordinated pieces!";
|
|
65
|
+
break;
|
|
66
|
+
case "over_extension":
|
|
67
|
+
coachAdvice = "Pawns cannot move backwards; every advance creates irreversible weaknesses.";
|
|
68
|
+
break;
|
|
69
|
+
case "passive_concession":
|
|
70
|
+
coachAdvice = "When pushed, look for counter-attacking resources rather than passive retreats.";
|
|
71
|
+
break;
|
|
72
|
+
case "king_safety_negligence":
|
|
73
|
+
coachAdvice = "Castling and securing your king should take priority over peripheral adventures.";
|
|
74
|
+
break;
|
|
75
|
+
case "sound_move":
|
|
76
|
+
coachAdvice = "Excellent, harmonious play. Continue executing your strategic plan.";
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
moveNumber,
|
|
81
|
+
playedMove: move.san,
|
|
82
|
+
mistakeArchetype: archetypeChoice,
|
|
83
|
+
defensiveDifficulty: diffScore,
|
|
84
|
+
tacticalTension: tensionScore,
|
|
85
|
+
coachAdvice,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=gameReviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gameReviewer.js","sourceRoot":"","sources":["../src/gameReviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGvE,MAAM,kBAAkB,GAAqC;IAC3D,UAAU,EAAE,kDAAkD;IAC9D,kBAAkB,EAAE,oEAAoE;IACxF,mBAAmB,EAAE,qEAAqE;IAC1F,cAAc,EAAE,+EAA+E;IAC/F,kBAAkB,EAAE,yEAAyE;IAC7F,sBAAsB,EAAE,sEAAsE;CAC/F,CAAC;AAEF,MAAM,2BAA2B,GAAG;IAClC,yEAAyE;IACzE,wEAAwE;IACxE,6EAA6E;IAC7E,gFAAgF;CACxE,CAAC;AAEX,MAAM,cAAc,GAAG;IACrB,+DAA+D;IAC/D,kDAAkD;IAClD,0EAA0E;IAC1E,yEAAyE;CACjE,CAAC;AAEX;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB,IAAY,MAAM;QAChB,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,MAAmB,EACnB,IAAmB,EACnB,UAAkB;QAElB,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE9C,MAAM,KAAK,GAAG;YACZ,UAAU,EAAE;gBACV,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,KAAK,EAAE,YAAY,CAAC,SAAS;gBAC7B,QAAQ,EAAE,YAAY,CAAC,eAAe,CAAC,WAAW;gBAClD,YAAY,EAAE,YAAY,CAAC,aAAa;aACzC;YACD,WAAW,EAAE;gBACX,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,QAAQ,EAAE,IAAI,CAAC,OAAO;aACvB;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,KAAK;YACL,SAAS,EAAE;gBACT,SAAS,EAAE,MAAM,CACf,wEAAwE,EACxE,kBAAkB,CACnB;gBACD,oBAAoB,EAAE,KAAK,CACzB,sFAAsF,EACtF,2BAA2B,CAC5B;gBACD,OAAO,EAAE,KAAK,CACZ,4EAA4E,EAC5E,cAAc,CACf;aACF;SACF,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAA0B,CAAC;QAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAC9D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAEpD,IAAI,WAAW,GAAG,kDAAkD,CAAC;QACrE,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,oBAAoB;gBACvB,WAAW,GAAG,qFAAqF,CAAC;gBACpG,MAAM;YACR,KAAK,qBAAqB;gBACxB,WAAW,GAAG,wEAAwE,CAAC;gBACvF,MAAM;YACR,KAAK,gBAAgB;gBACnB,WAAW,GAAG,6EAA6E,CAAC;gBAC5F,MAAM;YACR,KAAK,oBAAoB;gBACvB,WAAW,GAAG,iFAAiF,CAAC;gBAChG,MAAM;YACR,KAAK,wBAAwB;gBAC3B,WAAW,GAAG,kFAAkF,CAAC;gBACjG,MAAM;YACR,KAAK,YAAY;gBACf,WAAW,GAAG,qEAAqE,CAAC;gBACpF,MAAM;QACV,CAAC;QAED,OAAO;YACL,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,GAAG;YACpB,gBAAgB,EAAE,eAAe;YACjC,mBAAmB,EAAE,SAAS;YAC9B,eAAe,EAAE,YAAY;YAC7B,WAAW;SACZ,CAAC;IACJ,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./chessEngine.js";
|
|
3
|
+
export * from "./typeSafeClient.js";
|
|
4
|
+
export * from "./moveResolver.js";
|
|
5
|
+
export * from "./moveEvaluator.js";
|
|
6
|
+
export * from "./personaEngine.js";
|
|
7
|
+
export * from "./gameReviewer.js";
|
|
8
|
+
export * from "./classicMatches.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./chessEngine.js";
|
|
3
|
+
export * from "./typeSafeClient.js";
|
|
4
|
+
export * from "./moveResolver.js";
|
|
5
|
+
export * from "./moveEvaluator.js";
|
|
6
|
+
export * from "./personaEngine.js";
|
|
7
|
+
export * from "./gameReviewer.js";
|
|
8
|
+
export * from "./classicMatches.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChessEngine } from "./chessEngine.js";
|
|
2
|
+
import type { AnnotatedMove, MoveEvaluation } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Multi-dimensional qualitative evaluator for chess moves using TypeSafe AI.
|
|
5
|
+
* Pattern: Parallel Atomic Judgments + Code-Controlled Badge Synthesis.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MoveEvaluator {
|
|
8
|
+
private get client();
|
|
9
|
+
evaluateMove(engine: ChessEngine, move: AnnotatedMove): Promise<MoveEvaluation>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=moveEvaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moveEvaluator.d.ts","sourceRoot":"","sources":["../src/moveEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBhE;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,KAAK,MAAM,GAEjB;IAEY,YAAY,CACvB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,cAAc,CAAC,CAwFzB;CACF"}
|