Releases: JosunLP/checkai
Releases · JosunLP/checkai
CheckAI v0.5.2
Fixed
- Web analysis UI contract drift — Fixed the TypeScript analysis client so it now submits jobs to
/api/analysis/game/{game_id}and polls/api/analysis/jobs/{job_id}instead of outdated/api/games/*paths- Reworked the analysis panel to render the actual job-based backend payload (status, progress, completed summary, failure state) instead of assuming live search telemetry fields that were never returned by the API
- Reset analysis polling cleanly when switching games so stale background polling does not leak across views
- Frontend API typing alignment — Synced the web UI's TypeScript models with the Rust API contract
- Added
position_historyto the webGameStatetype - Expanded move/action response typing to match the real server payloads
- Replaced stale analysis result typing with explicit job/result summary types
- Added
- Documentation and version metadata — Updated OpenAPI metadata, README installation snippets, changelog entries, and analysis/tablebase docs so published docs match current behavior
- Clarified that the analysis API is job-based game review, not a live score/nodes stream
- Clarified current Syzygy support as analytical / heuristic scaffolding rather than full binary probing
Added
- Regression coverage — Added tests for move-quality threshold boundaries and
GameStateJsonposition-history export consistency
CheckAI v0.5.1
Fixed
- Bun/WASM package contents — Fixed the published
@josunlp/checkaipackage so the compiled WebAssembly binary is included in release tarballs instead of only the generated glue JavaScript- Added a
prepackpackaging guard so Bun packaging and publishing always verify the generatedpkg/artifacts before release - Removed the generated
pkg/.gitignoreduring packaging, which previously caused package tarballs to omitpkg/checkai.jsandpkg/checkai_bg.wasm - Added explicit npm subpath exports for the raw generated artifacts (
@josunlp/checkai/rawand@josunlp/checkai/wasm)
- Added a
CheckAI v0.5.0
Added
- WebAssembly (WASM) build — The core chess engine is now compiled to WebAssembly via
wasm-pack, enabling use from JavaScript/Node.js environments- New
wasm/crate with#[path]re-exports of core engine modules (types, movegen, eval, search, zobrist) — zero code duplication - WASM-compatible search using
web-timecrate instead ofstd::time::Instant js-sysintegration for timestamps and random ID generation
- New
- npm package (
@josunlp/checkai) published to GitHub Packages- Node.js CLI tool (
checkai) installable vianpm install -g @josunlp/checkai - JavaScript/ESM library API (
import { engine } from "@josunlp/checkai")
- Node.js CLI tool (
- Full feature parity in WASM — All major features available in the npm package:
- Position analysis:
legalMoves,evaluate,bestMove,isCheckmate,isStalemate,isCheck,isInsufficientMaterial,makeMove - Game management:
createGame,createGameFromFen,gameState,gameSubmitMove,gameProcessAction,gameMoveHistory,gameFen,deleteGame,listGames - Export:
gameToPgn,gameToJson,gameToText - Board display:
boardToAscii
- Position analysis:
- Node.js CLI commands —
fen,moves,eval,search,move,board,play,game new/state/move/action/list/delete,export,version - Release workflow — New
wasmjob inrelease.ymlbuilds the WASM package, creates a tarball release asset, and publishes to GitHub Packages usingGITHUB_TOKEN
CheckAI v0.4.0
Added
- Modern TypeScript Web UI — Complete modular rewrite of the browser frontend
- Built with @bquery/bquery v1.4 (TypeScript-first DOM library with signals)
- Tailwind CSS v4 with custom
@themetokens for consistent design - Vite v7 build system with HMR, path aliases, and production bundling
- 12 modular TypeScript source files:
types,store,api,ws,i18n,ui,board,game,archive,analysis,main,styles - Reactive signal-driven architecture with unidirectional data flow
- SVG chess board with click selection, legal move indicators, check highlight, and board flip
- Analysis panel with start/stop, real-time polling, score formatting (including mate detection)
- Promotion dialog with piece picker
- FEN copy, PGN copy, and FEN import directly from the toolbar
- WebSocket connection indicator with auto-reconnect
- Vite-built SPA embedded into the Rust binary via
rust-embed(dualDistAssets+WebAssetswith priority fallback)
- FEN/PGN API endpoints — Three new REST endpoints for position interchange
GET /api/games/{id}/fen— Export full 6-field FEN notationPOST /api/games/fen— Create a new game from a FEN string with full validationGET /api/games/{id}/pgn— Export PGN with Seven Tag Roster headers- Complete
parse_fen()parser andgame_to_pgn()generator - OpenAPI/Swagger annotations for all new endpoints
- King safety evaluation — Pawn shield analysis, open file penalties near the king, enemy piece tropism within Chebyshev distance 2
- Piece mobility evaluation — Pseudo-legal square counts for knights, bishops, rooks, and queens with separate midgame/endgame scoring
- Static Exchange Evaluation (SEE) — Filters bad captures at low depth (≤ 3) to reduce search explosion
- Futility pruning — Skips quiet moves when static evaluation plus margin is far below alpha at depth ≤ 3
- Bun as the frontend package manager and script runner (replaces Node.js/npm)
- Build script (
build.rs) — Ensuresweb/dist/exists at compile time sorust-embedcompiles without a prior web build (fixes CI for clippy/test jobs)
Changed
rust-embednow usesinclude-excludefeature to exclude TypeScript source,node_modules, and build config from the legacyWebAssetsembed- Evaluation module description updated from "PeSTO position evaluation" to "PeSTO evaluation + king safety + mobility"
- Search module description updated to include SEE and futility pruning
- VitePress documentation updated for all new features: architecture, analysis engine, web UI, REST API, landing page
Fixed
- Promotion dialog: piece symbols were not displayed because
dataset.piecewas read instead ofdataset.promote— now correctly reads thedata-promoteattribute from the HTML buttons - CI build:
#[derive(RustEmbed)]failed whenweb/dist/did not exist; addedbuild.rsto auto-create the directory socargo clippyandcargo testwork without a prior web build - Collapsed nested
ifstatements in king tropism evaluation (clippycollapsible_if) - Replaced manual range check with
RangeInclusive::containsin futility pruning (clippymanual_range_contains)
CheckAI v0.3.1
Added
- VitePress documentation site — Complete project documentation built with VitePress and deployed to GitHub Pages
- Guide section: Getting Started, CLI Commands, Docker, Configuration, Web UI, Analysis Engine, Opening Book, Tablebases, Architecture, Internationalization
- API Reference: REST API, WebSocket API, Analysis API with full endpoint docs, request/response examples, and code samples (JavaScript, Python)
- Agent Protocol: Overview, Game State schema, Move Output schema, Chess Rules (FIDE 2023), Special Actions, worked examples
- Changelog page mirroring CHANGELOG.md
- Local search, edit-on-GitHub links, dark mode support
- GitHub Actions workflow (
docs.yml) — Automatically builds and deploys documentation to GitHub Pages on every release (release: published) with manual trigger support
CheckAI v0.2.2
Fixed
- Draw offer logic: offers now persist correctly after the offerer makes a move, allowing the opponent to accept or decline; previously, offers were cleared immediately on any move
- AGENT.md example 15 (Sicilian Defense): corrected
en_passantfield fromnullto"e3"after1. e4
Added
- 37 comprehensive unit tests in
game.rscovering all critical chess engine edge cases:- Draw offer lifecycle (persist, decline-by-moving, accept, self-accept rejection)
- Resignation (both sides)
- Checkmate patterns (Scholar's mate, Fool's mate)
- Stalemate detection
- Castling (kingside, blocked by check, blocked by attacked transit square)
- En passant (capture, discovered check blocking, expiration after one move)
- Pawn promotion (requirement enforcement, queen promotion)
- Pinned pieces (rook along pin line, knight with no moves)
- Halfmove clock (reset on pawn move, reset on capture)
- Fullmove number increment after Black's move
- Position history tracking and threefold repetition claim
- 50-move rule claim (valid and premature)
- Insufficient material (K vs K, K+N vs K, K+N+N vs K, K+B vs K+B same/different color)
- Castling rights updates (king move, rook move, rook capture)
- Game flow validation (move after game over, illegal move, opponent piece)
CheckAI v0.2.1
Fixed
- Web UI now embedded into the binary via
rust-embed, eliminating the need for an externalweb/directory- Fixes
Specified path is not a directory: "web"error when running after installation - Frontend is always in sync with the binary version — no separate copy/update step needed
- Fixes
- Removed
actix-filesdependency in favor ofrust-embedfor self-contained static asset serving - Cleaned up broken web-directory copy logic from
update.rs - Reverted unnecessary web-copy additions in
install.ps1(no longer needed)
CheckAI v0.2.0
Added
- Full internationalization (i18n) for all user-facing strings (backend + frontend)
- Supported languages: English, German, French, Spanish, Chinese (Simplified), Japanese, Portuguese, Russian
- English as default with automatic fallback
- Backend:
rust-i18ncrate with YAML locale files andt!()macro - CLI:
--langflag for explicit locale override, auto-detection viaCHECKAI_LANGenv var and system locale - REST API: per-request locale via
?lang=query parameter andAccept-Languageheader - Web UI: browser-based locale detection with language selector dropdown and localStorage persistence
i18n.rshelper module for locale detection and HTTP request extraction- Web UI language selector in header with live locale switching
web/js/i18n.jsfrontend translation module with 8 languages (~120 keys each)- CI/CD pipelines for GitHub Actions (build, test, release)
- Cross-platform install and uninstall scripts (Linux, macOS, Windows)
- Automatic update check on startup (notifies when a new version is available)
checkai updatecommand for in-place self-updating on all platforms- CHANGELOG.md following Keep a Changelog format
- Semantic versioning (SemVer) for all releases
Changed
- All source code comments translated to English
- All hardcoded user-facing strings in 10 Rust source modules replaced with
t!()i18n calls - Web UI default language changed from German to English with
data-i18nattribute system PIECE_NAMESconstant replaced withpieceName()function using i18n lookups
Fixed
- Resolved 24 Clippy warnings (collapsible if-let, redundant closures,
&PathBuf→&Path,io_other_error, unnecessary.to_string()ont!()results)