app/engine_interface.h

frontend-agnostic chess-engine abstraction.

GameSession drives the engine through IEngine so the orchestration loop does not care whether moves come from the in-process engine (LinkedEngine) or, in the future, a pinned UCI subprocess (a personality that wants a specific historical engine build). See docs/gui-docs/PLAN.md §3.2.

namespace kirin

Typedefs

using ThinkingCallback = std::function<void(const ThinkingInfo&)>

Enums

enum class GameResult

Values:

enumerator Ongoing
enumerator WhiteWins
enumerator BlackWins
enumerator Draw
struct AnalysisLine
#include <engine_interface.h>

Public Members

int scoreCp = 0
std::optional<int> mateIn
std::string bestUci
std::string pvUci
int depth = 0
long nodes = 0
struct EngineOptions
#include <engine_interface.h>

Public Members

int skillLevel = 2
int hashMb = -1
std::optional<bool> usePVS
std::optional<bool> useNullMove
std::optional<bool> useLMR
std::optional<bool> useFutility
std::optional<bool> useSingular
std::optional<bool> useProbCut
std::optional<bool> useIID
std::optional<bool> useAspiration
std::optional<bool> useHistory
std::optional<bool> useSEE
std::optional<bool> useSEEOrdering
std::optional<bool> useSEEPruning
std::optional<bool> useNNUE
std::string evalFile
class IEngine
#include <engine_interface.h>

Subclassed by kirin::LinkedEngine, kirin::NetworkOpponent

Public Functions

virtual ~IEngine() = default
virtual void applyOptions(const EngineOptions &opts) = 0
virtual void newGame(const std::string &fen = "") = 0
virtual bool playMove(const std::string &uci) = 0
virtual bool playMove(int encodedMove) = 0
virtual int parseMove(const std::string &uci) = 0
virtual std::string go(const SearchLimits &limits, const ThinkingCallback &onInfo = nullptr) = 0
virtual AnalysisLine analyze(const SearchLimits &limits) = 0
virtual void stop() = 0
virtual std::string fen() const = 0
virtual char sideToMove() const = 0
virtual GameResult result() const = 0
virtual bool isGameOver() const = 0
virtual std::string resultReason() const = 0
struct SearchLimits
#include <engine_interface.h>

Public Functions

inline bool hasClock() const

Public Members

int depth = 6
int movetimeMs = -1
long nodes = -1
int wtimeMs = -1
int btimeMs = -1
int wincMs = 0
int bincMs = 0
struct ThinkingInfo
#include <engine_interface.h>

Public Members

int depth = 0
int scoreCp = 0
std::string pvUci
long nodes = 0