Compare commits
75 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 989ac312d9 | |||
| c96a09bb5c | |||
| e9a4ecf4ae | |||
| 87dfc6c2bc | |||
| 183ad670e3 | |||
| 649566eb3f | |||
| 6844253f4c | |||
| be0b710543 | |||
| dcebdf237e | |||
| 0f41f13ce6 | |||
| ae6d235e1d | |||
| b4920d3817 | |||
| 708ebaf6e5 | |||
| 0eb752d493 | |||
| e279c39246 | |||
| a101866bcf | |||
| 5baf6a7cdb | |||
| a10958b0d1 | |||
| dc224abe26 | |||
| 1813ea1d2d | |||
| 6e0fd9523e | |||
| 847b13202c | |||
| c08d5303eb | |||
| 33e5017f51 | |||
| de391113dc | |||
| 85b187293f | |||
| 4a145cb538 | |||
| 327c23a6aa | |||
| d522f7f6ed | |||
| 82d0b754be | |||
| 4694f516fa | |||
| fa3c6b2886 | |||
| e472fb75ad | |||
| 5f44570b35 | |||
| c16f139c8e | |||
| cabf1bca73 | |||
| 0c981517da | |||
| 18a4b1cc15 | |||
| 804a4bf179 | |||
| 3c47d2b8c9 | |||
| d346c41d98 | |||
| 2dd0501687 | |||
| e17e4e806a | |||
| 9f86cc421f | |||
| 3844456f0c | |||
| 77e498a326 | |||
| 3efebd5ed0 | |||
| 0229147f4d | |||
| 3a0cb92256 | |||
| 39c9e492ce | |||
| 2404e6164c | |||
| 6a143a462a | |||
| 5399c9bffb | |||
| 6113432a14 | |||
| 952cf00413 | |||
| 34b9933046 | |||
| e5fe7d07a5 | |||
| c987d8e258 | |||
| 3f2d2bb4c9 | |||
| 04a3ad721c | |||
| 590924254e | |||
| 67511fc649 | |||
| 093134d36c | |||
| ffeb3ce338 | |||
| 52b171c7af | |||
| a386f57c21 | |||
| 3ca2afbb4b | |||
| b5a2966ada | |||
| 74a4fce0ca | |||
| 8fc97bde02 | |||
| 2d75b2e80e | |||
| f088c4e9ff | |||
| 8a1cf909d4 | |||
| 33e785d22a | |||
| d16cec176b |
+536
-188
@@ -2,11 +2,58 @@
|
|||||||
|
|
||||||
> **Stack:** raw-http | none | unknown | scala
|
> **Stack:** raw-http | none | unknown | scala
|
||||||
|
|
||||||
> 0 routes | 0 models | 0 components | 63 lib files | 1 env vars | 1 middleware
|
> 0 routes + 40 rpc | 0 models | 0 components | 163 lib files | 1 env vars | 1 middleware
|
||||||
> **Token savings:** this file is ~0 tokens. Without it, AI exploration would cost ~0 tokens. **Saves ~0 tokens per conversation.**
|
> **Token savings:** this file is ~0 tokens. Without it, AI exploration would cost ~0 tokens. **Saves ~0 tokens per conversation.**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Routes
|
||||||
|
|
||||||
|
## gRPC
|
||||||
|
|
||||||
|
- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse
|
||||||
|
- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse
|
||||||
|
- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse
|
||||||
|
- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse
|
||||||
|
- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse
|
||||||
|
- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse
|
||||||
|
- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse
|
||||||
|
- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse
|
||||||
|
- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport
|
||||||
|
- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList
|
||||||
|
- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext
|
||||||
|
- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus
|
||||||
|
- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport
|
||||||
|
- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList
|
||||||
|
- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext
|
||||||
|
- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
|
|
||||||
- `jacoco-reporter/scoverage_coverage_gaps.py`
|
- `jacoco-reporter/scoverage_coverage_gaps.py`
|
||||||
@@ -25,6 +72,82 @@
|
|||||||
- function main: () -> None
|
- function main: () -> None
|
||||||
- class TestCase
|
- class TestCase
|
||||||
- _...2 more_
|
- _...2 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||||
|
- class Challenge
|
||||||
|
- function gameIdOpt
|
||||||
|
- function declineReasonOpt
|
||||||
|
- function timeControlLimitOpt
|
||||||
|
- function timeControlIncrementOpt
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColorConverter.scala` — class ChallengeColorConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatusConverter.scala` — class ChallengeStatusConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/DeclineReasonConverter.scala` — class DeclineReasonConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/TimeControl.scala` — class TimeControl
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/UserAccount.scala`
|
||||||
|
- class UserAccount
|
||||||
|
- function getBotAccounts
|
||||||
|
- class BotAccount
|
||||||
|
- class OfficialBotAccount
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/error/AccountError.scala` — function message
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/error/ChallengeError.scala` — function message
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/filter/AlreadyLoggedInFilter.scala` — class AlreadyLoggedInFilter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala`
|
||||||
|
- class UserAccountRepository
|
||||||
|
- function findByUsername
|
||||||
|
- function findById
|
||||||
|
- function persist
|
||||||
|
- function findByEmail
|
||||||
|
- function findAll
|
||||||
|
- _...11 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||||
|
- class ChallengeRepository
|
||||||
|
- function findActiveByChallengerId
|
||||||
|
- function findActiveByDestUserId
|
||||||
|
- function findDuplicateChallenge
|
||||||
|
- function findById
|
||||||
|
- function persist
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/AccountResource.scala`
|
||||||
|
- class AccountResource
|
||||||
|
- function register
|
||||||
|
- function login
|
||||||
|
- function me
|
||||||
|
- function publicProfile
|
||||||
|
- function banUser
|
||||||
|
- _...9 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||||
|
- class ChallengeResource
|
||||||
|
- function create
|
||||||
|
- function list
|
||||||
|
- function get
|
||||||
|
- function accept
|
||||||
|
- function decline
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/OfficialChallengeResource.scala` — class OfficialChallengeResource, function challengeWithDifficulty
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala`
|
||||||
|
- class AccountService
|
||||||
|
- function register
|
||||||
|
- function login
|
||||||
|
- function findByUsername
|
||||||
|
- function findById
|
||||||
|
- function createBotAccount
|
||||||
|
- _...10 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||||
|
- class ChallengeService
|
||||||
|
- function create
|
||||||
|
- function accept
|
||||||
|
- function decline
|
||||||
|
- function cancel
|
||||||
|
- function findById
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/EventPublisher.scala`
|
||||||
|
- class EventPublisher
|
||||||
|
- function publishGameStart
|
||||||
|
- function publishChallengeCreated
|
||||||
|
- function publishChallengeAccepted
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
|
||||||
- class Board
|
- class Board
|
||||||
- function apply
|
- function apply
|
||||||
@@ -47,149 +170,178 @@
|
|||||||
- class Square
|
- class Square
|
||||||
- function fromAlgebraic
|
- function fromAlgebraic
|
||||||
- function offset
|
- function offset
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/GameFullEventDto.scala` — class GameFullEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — function message
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`
|
||||||
|
- function activeColor
|
||||||
|
- function afterMove
|
||||||
|
- function remainingMs
|
||||||
|
- function remainingMs
|
||||||
|
- function afterMove
|
||||||
|
- function remainingMs
|
||||||
|
- _...3 more_
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
|
||||||
|
- function kingSquare
|
||||||
- function withBoard
|
- function withBoard
|
||||||
- function withTurn
|
- function withTurn
|
||||||
- function withCastlingRights
|
- function withCastlingRights
|
||||||
- function withEnPassantSquare
|
- function withEnPassantSquare
|
||||||
- function withHalfMoveClock
|
- function withHalfMoveClock
|
||||||
- function withMove
|
- _...4 more_
|
||||||
- _...2 more_
|
- `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`
|
||||||
|
- class ProtoMapperBase
|
||||||
|
- function toProtoColor
|
||||||
|
- function fromProtoColor
|
||||||
|
- function toProtoPieceType
|
||||||
|
- function fromProtoPieceType
|
||||||
|
- function toProtoMoveKind
|
||||||
|
- _...17 more_
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — class GameContextImport, function importGameContext
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
|
||||||
- class ApiResponse
|
- class ApiResponse
|
||||||
- function error
|
- function error
|
||||||
- function totalPages
|
- function totalPages
|
||||||
- `modules/bot/python/nnue.py`
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`
|
||||||
- function get_weights_dir: ()
|
- class RuleSet
|
||||||
- function get_data_dir: ()
|
- function candidateMoves
|
||||||
- function list_checkpoints: ()
|
- function legalMoves
|
||||||
- function migrate_legacy_data: ()
|
- function allLegalMoves
|
||||||
- function show_header: ()
|
- function isCheck
|
||||||
- function show_checkpoints_table: ()
|
- function isCheckmate
|
||||||
- _...10 more_
|
- _...6 more_
|
||||||
- `modules/bot/python/src/dataset.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- function get_datasets_dir: () -> Path
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function next_dataset_version: () -> int
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
- class BotRegistry
|
||||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
- function register
|
||||||
- function save_dataset_metadata: (version, metadata) -> None
|
- function unregister
|
||||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
- function dispatch
|
||||||
- _...4 more_
|
- function registeredBots
|
||||||
- `modules/bot/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||||
- `modules/bot/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
- class BotEventResource
|
||||||
- `modules/bot/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
- function streamEvents
|
||||||
- `modules/bot/python/src/tactical_positions_extractor.py`
|
- function streamGame
|
||||||
- function download_and_extract_puzzle_db: (url, output_dir)
|
- function makeMove
|
||||||
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||||
- function load_positions_from_file: (file_path) -> Set[str]
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||||
- function merge_positions: (tactical, other, output_file)
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||||
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
- class CoordinatorConfig
|
||||||
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
- function maxGamesPerCore
|
||||||
- `modules/bot/python/src/train.py`
|
- function maxDeviationPercent
|
||||||
- function fen_to_features: (fen)
|
- function rebalanceInterval
|
||||||
- function find_next_version: (base_name)
|
- function rebalanceMinInterval
|
||||||
- function save_metadata: (weights_file, metadata)
|
- function heartbeatTtl
|
||||||
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio)
|
- _...11 more_
|
||||||
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio)
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class NNUEDataset
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala`
|
||||||
|
- class CoreGrpcClient
|
||||||
|
- function shutdown
|
||||||
|
- function batchResubscribeGames
|
||||||
|
- function unsubscribeGames
|
||||||
|
- function evictGames
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala`
|
||||||
|
- class CoordinatorResource
|
||||||
|
- function listInstances
|
||||||
|
- function getMetrics
|
||||||
|
- function triggerRebalance
|
||||||
|
- function triggerFailover
|
||||||
|
- function triggerScaleUp
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala`
|
||||||
- class Bot
|
- class AutoScaler
|
||||||
- function name
|
- function checkAndScale
|
||||||
- function nextMove
|
- function scaleUp
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotController.scala`
|
- function scaleDown
|
||||||
- class BotController
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala`
|
||||||
- function getBot
|
- class CacheEvictionManager
|
||||||
- function listBots
|
- function setRedisPrefix
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
- function evictStaleGames
|
||||||
- class BotMoveRepetition
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala`
|
||||||
- function blockedMoves
|
- class FailoverService
|
||||||
- function repeatedMove
|
- function setRedisPrefix
|
||||||
- function filterAllowed
|
- function onInstanceStreamDropped
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
- class HealthMonitor
|
||||||
- class Evaluation
|
- function setRedisPrefix
|
||||||
- class CHECKMATE_SCORE
|
- function checkInstanceHealth
|
||||||
- class DRAW_SCORE
|
- function watchK8sPods
|
||||||
- function evaluate
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala`
|
||||||
- function initAccumulator
|
- class InstanceRegistry
|
||||||
- function copyAccumulator
|
- function setRedisPrefix
|
||||||
- _...2 more_
|
- function getInstance
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
- function getAllInstances
|
||||||
- class EvaluationClassic
|
- function updateInstanceFromRedis
|
||||||
- function evaluate
|
- function markInstanceDead
|
||||||
- function countRay
|
- _...1 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
- class LoadBalancer
|
||||||
- class NNUE
|
- function setRedisPrefix
|
||||||
- function initAccumulator
|
- function shouldRebalance
|
||||||
- function pushAccumulator
|
- function rebalance
|
||||||
- function copyAccumulator
|
- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala`
|
||||||
- function recomputeAccumulator
|
- class RuleSetRestAdapter
|
||||||
- function validateAccumulator
|
- function candidateMoves
|
||||||
- _...4 more_
|
- function legalMoves
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
- function allLegalMoves
|
||||||
- class NbaiLoader
|
- function isCheck
|
||||||
- function load
|
- function isCheckmate
|
||||||
- function loadDefault
|
- _...5 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
- `modules/core/src/main/scala/de/nowchess/chess/client/IoServiceClient.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
- class IoServiceClient
|
||||||
- function toJson
|
- function importFen
|
||||||
- class NbaiMetadata
|
- function importPgn
|
||||||
- function fromJson
|
- function exportFen
|
||||||
- function str
|
- function exportPgn
|
||||||
- function num
|
- function exportCombined
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
- `modules/core/src/main/scala/de/nowchess/chess/client/RuleServiceClient.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
- class RuleServiceClient
|
||||||
- function bestMove
|
- function candidateMoves
|
||||||
- function bestMove
|
- function legalMoves
|
||||||
- function bestMoveWithTime
|
- function allLegalMoves
|
||||||
- function bestMoveWithTime
|
- function isCheck
|
||||||
- function loop
|
- function isCheckmate
|
||||||
- function loop
|
- _...6 more_
|
||||||
- _...2 more_
|
- `modules/core/src/main/scala/de/nowchess/chess/client/StoreServiceClient.scala` — class StoreServiceClient, function getGame
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class MoveOrdering
|
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- class OrderingContext
|
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function addKillerMove
|
|
||||||
- function getKillerMoves
|
|
||||||
- function addHistory
|
|
||||||
- function getHistory
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
|
||||||
- function probe
|
|
||||||
- function store
|
|
||||||
- function clear
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
|
||||||
- class ZobristHash
|
|
||||||
- function hash
|
|
||||||
- function nextHash
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`
|
|
||||||
- class Command
|
|
||||||
- function execute
|
|
||||||
- function undo
|
|
||||||
- function description
|
|
||||||
- class MoveResult
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala`
|
|
||||||
- class CommandInvoker
|
|
||||||
- function execute
|
|
||||||
- function undo
|
|
||||||
- function redo
|
|
||||||
- function history
|
|
||||||
- function getCurrentIndex
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
|
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
|
||||||
- class GameEngine
|
- class GameEngine
|
||||||
- function isPendingPromotion
|
|
||||||
- function board
|
- function board
|
||||||
- function turn
|
- function turn
|
||||||
- function context
|
- function context
|
||||||
- function canUndo
|
- function pendingDrawOfferBy
|
||||||
- _...11 more_
|
- function currentClockState
|
||||||
|
- _...21 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
||||||
|
- class ApiException
|
||||||
|
- class GameNotFoundException
|
||||||
|
- class BadRequestException
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||||
|
- class IoGrpcClientWrapper
|
||||||
|
- function exportCombined
|
||||||
|
- function importFen
|
||||||
|
- function importPgn
|
||||||
|
- function exportFen
|
||||||
|
- function exportPgn
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/RuleSetGrpcAdapter.scala`
|
||||||
|
- class RuleSetGrpcAdapter
|
||||||
|
- function candidateMoves
|
||||||
|
- function legalMoves
|
||||||
|
- function allLegalMoves
|
||||||
|
- function isCheck
|
||||||
|
- function isCheckmate
|
||||||
|
- _...5 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
|
||||||
- function context
|
- function context
|
||||||
- class Observer
|
- class Observer
|
||||||
@@ -198,8 +350,55 @@
|
|||||||
- function subscribe
|
- function subscribe
|
||||||
- function unsubscribe
|
- function unsubscribe
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala`
|
||||||
|
- class GameRedisPublisher
|
||||||
|
- class GameRedisPublisher
|
||||||
|
- function onGameEvent
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala`
|
||||||
|
- class GameRedisSubscriberManager
|
||||||
|
- function subscribeGame
|
||||||
|
- function unsubscribeGame
|
||||||
|
- function batchResubscribeGames
|
||||||
|
- function unsubscribeGames
|
||||||
|
- function evictGames
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||||
|
- class GameRegistry
|
||||||
|
- function store
|
||||||
|
- function get
|
||||||
|
- function update
|
||||||
|
- function generateId
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala`
|
||||||
|
- class RedisGameRegistry
|
||||||
|
- function generateId
|
||||||
|
- function store
|
||||||
|
- function get
|
||||||
|
- function update
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala`
|
||||||
|
- class GameDtoMapper
|
||||||
|
- function statusOf
|
||||||
|
- function moveToUci
|
||||||
|
- function toPlayerDto
|
||||||
|
- function toClockDto
|
||||||
|
- function toGameStateDto
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala`
|
||||||
|
- class GameResource
|
||||||
|
- function onGameEvent
|
||||||
|
- function createGame
|
||||||
|
- function getGame
|
||||||
|
- function resignGame
|
||||||
|
- function makeMove
|
||||||
|
- _...9 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala`
|
||||||
|
- class InstanceHeartbeatService
|
||||||
|
- function onStart
|
||||||
|
- function onShutdown
|
||||||
|
- function setRedisPrefix
|
||||||
|
- function setSubscriptionCount
|
||||||
|
- function setLocalCacheSize
|
||||||
|
- _...2 more_
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala`
|
||||||
- class GameFileService
|
- class GameFileService
|
||||||
- function saveGameToFile
|
- function saveGameToFile
|
||||||
@@ -228,6 +427,8 @@
|
|||||||
- function parseBoard
|
- function parseBoard
|
||||||
- function importGameContext
|
- function importGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
||||||
@@ -240,39 +441,186 @@
|
|||||||
- function importGameContext
|
- function importGameContext
|
||||||
- function parsePgn
|
- function parsePgn
|
||||||
- function parseAlgebraicMove
|
- function parseAlgebraicMove
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/service/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class RuleSet
|
- `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/service/resource/IoResource.scala`
|
||||||
|
- class IoResource
|
||||||
|
- function importFen
|
||||||
|
- function importPgn
|
||||||
|
- function exportFen
|
||||||
|
- function exportPgn
|
||||||
|
- function exportCombined
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/ChessJacksonModule.scala` — class ChessJacksonModule
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/GameResultDeserializer.scala` — class GameResultDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/GameResultSerializer.scala` — class GameResultSerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/MoveTypeDeserializer.scala` — class MoveTypeDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/MoveTypeSerializer.scala` — class MoveTypeSerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareDeserializer.scala` — class SquareDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
||||||
|
- `modules/official-bots/python/nnue.py`
|
||||||
|
- function get_weights_dir: ()
|
||||||
|
- function get_data_dir: ()
|
||||||
|
- function list_checkpoints: ()
|
||||||
|
- function migrate_legacy_data: ()
|
||||||
|
- function show_header: ()
|
||||||
|
- function show_checkpoints_table: ()
|
||||||
|
- _...10 more_
|
||||||
|
- `modules/official-bots/python/src/dataset.py`
|
||||||
|
- function get_datasets_dir: () -> Path
|
||||||
|
- function next_dataset_version: () -> int
|
||||||
|
- function list_datasets: () -> List[Tuple[int, Dict]]
|
||||||
|
- function load_dataset_metadata: (version) -> Optional[Dict]
|
||||||
|
- function save_dataset_metadata: (version, metadata) -> None
|
||||||
|
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
||||||
|
- _...4 more_
|
||||||
|
- `modules/official-bots/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
||||||
|
- `modules/official-bots/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
||||||
|
- `modules/official-bots/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
||||||
|
- `modules/official-bots/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
||||||
|
- `modules/official-bots/python/src/tactical_positions_extractor.py`
|
||||||
|
- function download_and_extract_puzzle_db: (url, output_dir)
|
||||||
|
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
||||||
|
- function load_positions_from_file: (file_path) -> Set[str]
|
||||||
|
- function merge_positions: (tactical, other, output_file)
|
||||||
|
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
||||||
|
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
||||||
|
- `modules/official-bots/python/src/train.py`
|
||||||
|
- function fen_to_features: (fen)
|
||||||
|
- function find_next_version: (base_name)
|
||||||
|
- function save_metadata: (weights_file, metadata)
|
||||||
|
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio, hidden_sizes)
|
||||||
|
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio, hidden_sizes)
|
||||||
|
- class NNUEDataset
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotController.scala`
|
||||||
|
- class BotController
|
||||||
|
- function getBot
|
||||||
|
- function listBots
|
||||||
|
- class BotController
|
||||||
|
- function getBot
|
||||||
|
- function listBots
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
||||||
|
- class BotMoveRepetition
|
||||||
|
- function blockedMoves
|
||||||
|
- function repeatedMove
|
||||||
|
- function filterAllowed
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
||||||
|
- class Evaluation
|
||||||
|
- class CHECKMATE_SCORE
|
||||||
|
- class DRAW_SCORE
|
||||||
|
- function evaluate
|
||||||
|
- function initAccumulator
|
||||||
|
- function copyAccumulator
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — class ClassicalBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` — class HybridBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala` — class NNUEBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
||||||
|
- class EvaluationClassic
|
||||||
|
- function evaluate
|
||||||
|
- function countRay
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
||||||
|
- class NNUE
|
||||||
|
- function initAccumulator
|
||||||
|
- function pushAccumulator
|
||||||
|
- function copyAccumulator
|
||||||
|
- function recomputeAccumulator
|
||||||
|
- function validateAccumulator
|
||||||
|
- _...4 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
||||||
|
- class NbaiLoader
|
||||||
|
- function load
|
||||||
|
- function loadDefault
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
||||||
|
- function toJson
|
||||||
|
- class NbaiMetadata
|
||||||
|
- function fromJson
|
||||||
|
- function str
|
||||||
|
- function num
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
||||||
|
- function bestMove
|
||||||
|
- function bestMove
|
||||||
|
- function bestMoveWithTime
|
||||||
|
- function bestMoveWithTime
|
||||||
|
- function loop
|
||||||
|
- function loop
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
||||||
|
- class MoveOrdering
|
||||||
|
- class OrderingContext
|
||||||
|
- function addKillerMove
|
||||||
|
- function getKillerMoves
|
||||||
|
- function addHistory
|
||||||
|
- function getHistory
|
||||||
|
- _...3 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
||||||
|
- function advance
|
||||||
|
- function probe
|
||||||
|
- function store
|
||||||
|
- function clear
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/resource/OfficialBotChallengeResource.scala` — class OfficialBotChallengeResource, function challengeWithDifficulty
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/DifficultyMapper.scala` — class DifficultyMapper, function fromElo
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/OfficialBotService.scala` — class OfficialBotService, function onStart
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
||||||
|
- class ZobristHash
|
||||||
|
- function hash
|
||||||
|
- function nextHash
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||||
|
- class RuleSetResource
|
||||||
- function candidateMoves
|
- function candidateMoves
|
||||||
- function legalMoves
|
- function legalMoves
|
||||||
- function allLegalMoves
|
- function allLegalMoves
|
||||||
- function isCheck
|
- function isCheck
|
||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...4 more_
|
- _...6 more_
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
||||||
- class DefaultRules
|
- `modules/security/src/main/scala/de/nowchess/security/InternalAuthFilter.scala` — class InternalAuthFilter
|
||||||
- function loop
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcAuthInterceptor.scala` — class InternalGrpcAuthInterceptor
|
||||||
- function toMoves
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcSecretClientInterceptor.scala` — class InternalGrpcSecretClientInterceptor
|
||||||
- function loop
|
- `modules/security/src/main/scala/de/nowchess/security/InternalSecretClientFilter.scala` — class InternalSecretClientFilter
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/Main.scala` — class Main, function main
|
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- class ChessBoardView
|
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function updateBoard
|
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
||||||
- function updateUndoRedoButtons
|
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||||
- function showMessage
|
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||||
- function showPromotionDialog
|
- class GameRecordRepository
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala`
|
- function findByGameId
|
||||||
- class ChessGUIApp
|
- function persist
|
||||||
- class ChessGUILauncher
|
- function merge
|
||||||
- function getEngine
|
- function findByPlayerId
|
||||||
- function launch
|
- function findByPlayerIdRunning
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala` — class GUIObserver
|
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala`
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/PieceSprites.scala`
|
- class StoreGameResource
|
||||||
- class PieceSprites
|
- function getGame
|
||||||
- function loadPieceImage
|
- function getRunning
|
||||||
- class SquareColors
|
- function getHistory
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/terminal/TerminalUI.scala` — class TerminalUI, function start
|
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala` — function unicode
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala` — class Renderer, function render
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||||
|
- class GameWebSocketResource
|
||||||
|
- function onOpen
|
||||||
|
- function onTextMessage
|
||||||
|
- function onClose
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala`
|
||||||
|
- class UserWebSocketResource
|
||||||
|
- function onOpen
|
||||||
|
- function onClose
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -280,14 +628,14 @@
|
|||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
- `STOCKFISH_PATH` **required** — modules/bot/python/nnue.py
|
- `STOCKFISH_PATH` **required** — modules/official-bots/python/nnue.py
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Middleware
|
# Middleware
|
||||||
|
|
||||||
## custom
|
## custom
|
||||||
- generate — `modules/bot/python/src/generate.py`
|
- generate — `modules/official-bots/python/src/generate.py`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -295,39 +643,39 @@
|
|||||||
|
|
||||||
## Most Imported Files (change these carefully)
|
## Most Imported Files (change these carefully)
|
||||||
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **60** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **40** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **56** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **39** files
|
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **54** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **36** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **22** files
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **21** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **20** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **17** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **20** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **10** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **19** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **12** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **12** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotDifficulty.scala` — imported by **5** files
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — imported by **5** files
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — imported by **4** files
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala` — imported by **4** files
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
||||||
|
|
||||||
## Import Map (who imports what)
|
## Import Map (who imports what)
|
||||||
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`, `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` +55 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` +71 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +35 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala` +51 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` +34 more
|
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` +49 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala` +31 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +42 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +17 more
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineDrawOfferTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +22 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` +16 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala` +15 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +16 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` +15 more
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +12 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` +15 more
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +5 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +14 more
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` ← `modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala` +5 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala`, `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` +14 more
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
- `STOCKFISH_PATH` **required** — modules/bot/python/nnue.py
|
- `STOCKFISH_PATH` **required** — modules/official-bots/python/nnue.py
|
||||||
|
|||||||
+30
-30
@@ -2,36 +2,36 @@
|
|||||||
|
|
||||||
## Most Imported Files (change these carefully)
|
## Most Imported Files (change these carefully)
|
||||||
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **60** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **40** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **56** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **39** files
|
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **54** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **36** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **22** files
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **21** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **20** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **17** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **20** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **10** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **19** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **12** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **12** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotDifficulty.scala` — imported by **5** files
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — imported by **5** files
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — imported by **4** files
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala` — imported by **4** files
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **8** files
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **4** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
||||||
|
|
||||||
## Import Map (who imports what)
|
## Import Map (who imports what)
|
||||||
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`, `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` +55 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` +71 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +35 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala` +51 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` +34 more
|
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` +49 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala` +31 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +42 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +17 more
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineDrawOfferTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +22 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` +16 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala` +15 more
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +16 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` +15 more
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +12 more
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` ← `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` +15 more
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +5 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +14 more
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` ← `modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala` +5 more
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEnginePromotionTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineScenarioTest.scala`, `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` +14 more
|
||||||
|
|||||||
+456
-155
@@ -16,6 +16,82 @@
|
|||||||
- function main: () -> None
|
- function main: () -> None
|
||||||
- class TestCase
|
- class TestCase
|
||||||
- _...2 more_
|
- _...2 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||||
|
- class Challenge
|
||||||
|
- function gameIdOpt
|
||||||
|
- function declineReasonOpt
|
||||||
|
- function timeControlLimitOpt
|
||||||
|
- function timeControlIncrementOpt
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColorConverter.scala` — class ChallengeColorConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatusConverter.scala` — class ChallengeStatusConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/DeclineReasonConverter.scala` — class DeclineReasonConverter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/TimeControl.scala` — class TimeControl
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/domain/UserAccount.scala`
|
||||||
|
- class UserAccount
|
||||||
|
- function getBotAccounts
|
||||||
|
- class BotAccount
|
||||||
|
- class OfficialBotAccount
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/error/AccountError.scala` — function message
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/error/ChallengeError.scala` — function message
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/filter/AlreadyLoggedInFilter.scala` — class AlreadyLoggedInFilter
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala`
|
||||||
|
- class UserAccountRepository
|
||||||
|
- function findByUsername
|
||||||
|
- function findById
|
||||||
|
- function persist
|
||||||
|
- function findByEmail
|
||||||
|
- function findAll
|
||||||
|
- _...11 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||||
|
- class ChallengeRepository
|
||||||
|
- function findActiveByChallengerId
|
||||||
|
- function findActiveByDestUserId
|
||||||
|
- function findDuplicateChallenge
|
||||||
|
- function findById
|
||||||
|
- function persist
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/AccountResource.scala`
|
||||||
|
- class AccountResource
|
||||||
|
- function register
|
||||||
|
- function login
|
||||||
|
- function me
|
||||||
|
- function publicProfile
|
||||||
|
- function banUser
|
||||||
|
- _...9 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||||
|
- class ChallengeResource
|
||||||
|
- function create
|
||||||
|
- function list
|
||||||
|
- function get
|
||||||
|
- function accept
|
||||||
|
- function decline
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/resource/OfficialChallengeResource.scala` — class OfficialChallengeResource, function challengeWithDifficulty
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala`
|
||||||
|
- class AccountService
|
||||||
|
- function register
|
||||||
|
- function login
|
||||||
|
- function findByUsername
|
||||||
|
- function findById
|
||||||
|
- function createBotAccount
|
||||||
|
- _...10 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||||
|
- class ChallengeService
|
||||||
|
- function create
|
||||||
|
- function accept
|
||||||
|
- function decline
|
||||||
|
- function cancel
|
||||||
|
- function findById
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/service/EventPublisher.scala`
|
||||||
|
- class EventPublisher
|
||||||
|
- function publishGameStart
|
||||||
|
- function publishChallengeCreated
|
||||||
|
- function publishChallengeAccepted
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala`
|
||||||
- class Board
|
- class Board
|
||||||
- function apply
|
- function apply
|
||||||
@@ -38,149 +114,178 @@
|
|||||||
- class Square
|
- class Square
|
||||||
- function fromAlgebraic
|
- function fromAlgebraic
|
||||||
- function offset
|
- function offset
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/GameFullEventDto.scala` — class GameFullEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — function message
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`
|
||||||
|
- function activeColor
|
||||||
|
- function afterMove
|
||||||
|
- function remainingMs
|
||||||
|
- function remainingMs
|
||||||
|
- function afterMove
|
||||||
|
- function remainingMs
|
||||||
|
- _...3 more_
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`
|
||||||
|
- function kingSquare
|
||||||
- function withBoard
|
- function withBoard
|
||||||
- function withTurn
|
- function withTurn
|
||||||
- function withCastlingRights
|
- function withCastlingRights
|
||||||
- function withEnPassantSquare
|
- function withEnPassantSquare
|
||||||
- function withHalfMoveClock
|
- function withHalfMoveClock
|
||||||
- function withMove
|
- _...4 more_
|
||||||
- _...2 more_
|
- `modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala`
|
||||||
|
- class ProtoMapperBase
|
||||||
|
- function toProtoColor
|
||||||
|
- function fromProtoColor
|
||||||
|
- function toProtoPieceType
|
||||||
|
- function fromProtoPieceType
|
||||||
|
- function toProtoMoveKind
|
||||||
|
- _...17 more_
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — class GameContextImport, function importGameContext
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
|
- `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala`
|
||||||
- class ApiResponse
|
- class ApiResponse
|
||||||
- function error
|
- function error
|
||||||
- function totalPages
|
- function totalPages
|
||||||
- `modules/bot/python/nnue.py`
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`
|
||||||
- function get_weights_dir: ()
|
- class RuleSet
|
||||||
- function get_data_dir: ()
|
- function candidateMoves
|
||||||
- function list_checkpoints: ()
|
- function legalMoves
|
||||||
- function migrate_legacy_data: ()
|
- function allLegalMoves
|
||||||
- function show_header: ()
|
- function isCheck
|
||||||
- function show_checkpoints_table: ()
|
- function isCheckmate
|
||||||
- _...10 more_
|
- _...6 more_
|
||||||
- `modules/bot/python/src/dataset.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- function get_datasets_dir: () -> Path
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function next_dataset_version: () -> int
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
- class BotRegistry
|
||||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
- function register
|
||||||
- function save_dataset_metadata: (version, metadata) -> None
|
- function unregister
|
||||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
- function dispatch
|
||||||
- _...4 more_
|
- function registeredBots
|
||||||
- `modules/bot/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||||
- `modules/bot/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
- class BotEventResource
|
||||||
- `modules/bot/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
- function streamEvents
|
||||||
- `modules/bot/python/src/tactical_positions_extractor.py`
|
- function streamGame
|
||||||
- function download_and_extract_puzzle_db: (url, output_dir)
|
- function makeMove
|
||||||
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||||
- function load_positions_from_file: (file_path) -> Set[str]
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||||
- function merge_positions: (tactical, other, output_file)
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||||
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
- class CoordinatorConfig
|
||||||
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
- function maxGamesPerCore
|
||||||
- `modules/bot/python/src/train.py`
|
- function maxDeviationPercent
|
||||||
- function fen_to_features: (fen)
|
- function rebalanceInterval
|
||||||
- function find_next_version: (base_name)
|
- function rebalanceMinInterval
|
||||||
- function save_metadata: (weights_file, metadata)
|
- function heartbeatTtl
|
||||||
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio)
|
- _...11 more_
|
||||||
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio)
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class NNUEDataset
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala`
|
||||||
|
- class CoreGrpcClient
|
||||||
|
- function shutdown
|
||||||
|
- function batchResubscribeGames
|
||||||
|
- function unsubscribeGames
|
||||||
|
- function evictGames
|
||||||
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala`
|
||||||
|
- class CoordinatorResource
|
||||||
|
- function listInstances
|
||||||
|
- function getMetrics
|
||||||
|
- function triggerRebalance
|
||||||
|
- function triggerFailover
|
||||||
|
- function triggerScaleUp
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Bot.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala`
|
||||||
- class Bot
|
- class AutoScaler
|
||||||
- function name
|
- function checkAndScale
|
||||||
- function nextMove
|
- function scaleUp
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotController.scala`
|
- function scaleDown
|
||||||
- class BotController
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala`
|
||||||
- function getBot
|
- class CacheEvictionManager
|
||||||
- function listBots
|
- function setRedisPrefix
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
- function evictStaleGames
|
||||||
- class BotMoveRepetition
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala`
|
||||||
- function blockedMoves
|
- class FailoverService
|
||||||
- function repeatedMove
|
- function setRedisPrefix
|
||||||
- function filterAllowed
|
- function onInstanceStreamDropped
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
- class HealthMonitor
|
||||||
- class Evaluation
|
- function setRedisPrefix
|
||||||
- class CHECKMATE_SCORE
|
- function checkInstanceHealth
|
||||||
- class DRAW_SCORE
|
- function watchK8sPods
|
||||||
- function evaluate
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala`
|
||||||
- function initAccumulator
|
- class InstanceRegistry
|
||||||
- function copyAccumulator
|
- function setRedisPrefix
|
||||||
- _...2 more_
|
- function getInstance
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
- function getAllInstances
|
||||||
- class EvaluationClassic
|
- function updateInstanceFromRedis
|
||||||
- function evaluate
|
- function markInstanceDead
|
||||||
- function countRay
|
- _...1 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
- class LoadBalancer
|
||||||
- class NNUE
|
- function setRedisPrefix
|
||||||
- function initAccumulator
|
- function shouldRebalance
|
||||||
- function pushAccumulator
|
- function rebalance
|
||||||
- function copyAccumulator
|
- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala`
|
||||||
- function recomputeAccumulator
|
- class RuleSetRestAdapter
|
||||||
- function validateAccumulator
|
- function candidateMoves
|
||||||
- _...4 more_
|
- function legalMoves
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
- function allLegalMoves
|
||||||
- class NbaiLoader
|
- function isCheck
|
||||||
- function load
|
- function isCheckmate
|
||||||
- function loadDefault
|
- _...5 more_
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
- `modules/core/src/main/scala/de/nowchess/chess/client/IoServiceClient.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
- class IoServiceClient
|
||||||
- function toJson
|
- function importFen
|
||||||
- class NbaiMetadata
|
- function importPgn
|
||||||
- function fromJson
|
- function exportFen
|
||||||
- function str
|
- function exportPgn
|
||||||
- function num
|
- function exportCombined
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
- `modules/core/src/main/scala/de/nowchess/chess/client/RuleServiceClient.scala`
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
- class RuleServiceClient
|
||||||
- function bestMove
|
- function candidateMoves
|
||||||
- function bestMove
|
- function legalMoves
|
||||||
- function bestMoveWithTime
|
- function allLegalMoves
|
||||||
- function bestMoveWithTime
|
- function isCheck
|
||||||
- function loop
|
- function isCheckmate
|
||||||
- function loop
|
- _...6 more_
|
||||||
- _...2 more_
|
- `modules/core/src/main/scala/de/nowchess/chess/client/StoreServiceClient.scala` — class StoreServiceClient, function getGame
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class MoveOrdering
|
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- class OrderingContext
|
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function addKillerMove
|
|
||||||
- function getKillerMoves
|
|
||||||
- function addHistory
|
|
||||||
- function getHistory
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
|
||||||
- function probe
|
|
||||||
- function store
|
|
||||||
- function clear
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
|
||||||
- class ZobristHash
|
|
||||||
- function hash
|
|
||||||
- function nextHash
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala`
|
|
||||||
- class Command
|
|
||||||
- function execute
|
|
||||||
- function undo
|
|
||||||
- function description
|
|
||||||
- class MoveResult
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala`
|
|
||||||
- class CommandInvoker
|
|
||||||
- function execute
|
|
||||||
- function undo
|
|
||||||
- function redo
|
|
||||||
- function history
|
|
||||||
- function getCurrentIndex
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
|
- `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`
|
||||||
- class GameEngine
|
- class GameEngine
|
||||||
- function isPendingPromotion
|
|
||||||
- function board
|
- function board
|
||||||
- function turn
|
- function turn
|
||||||
- function context
|
- function context
|
||||||
- function canUndo
|
- function pendingDrawOfferBy
|
||||||
- _...11 more_
|
- function currentClockState
|
||||||
|
- _...21 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
||||||
|
- class ApiException
|
||||||
|
- class GameNotFoundException
|
||||||
|
- class BadRequestException
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||||
|
- class IoGrpcClientWrapper
|
||||||
|
- function exportCombined
|
||||||
|
- function importFen
|
||||||
|
- function importPgn
|
||||||
|
- function exportFen
|
||||||
|
- function exportPgn
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/RuleSetGrpcAdapter.scala`
|
||||||
|
- class RuleSetGrpcAdapter
|
||||||
|
- function candidateMoves
|
||||||
|
- function legalMoves
|
||||||
|
- function allLegalMoves
|
||||||
|
- function isCheck
|
||||||
|
- function isCheckmate
|
||||||
|
- _...5 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`
|
||||||
- function context
|
- function context
|
||||||
- class Observer
|
- class Observer
|
||||||
@@ -189,8 +294,55 @@
|
|||||||
- function subscribe
|
- function subscribe
|
||||||
- function unsubscribe
|
- function unsubscribe
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala`
|
||||||
|
- class GameRedisPublisher
|
||||||
|
- class GameRedisPublisher
|
||||||
|
- function onGameEvent
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala`
|
||||||
|
- class GameRedisSubscriberManager
|
||||||
|
- function subscribeGame
|
||||||
|
- function unsubscribeGame
|
||||||
|
- function batchResubscribeGames
|
||||||
|
- function unsubscribeGames
|
||||||
|
- function evictGames
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||||
|
- class GameRegistry
|
||||||
|
- function store
|
||||||
|
- function get
|
||||||
|
- function update
|
||||||
|
- function generateId
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala`
|
||||||
|
- class RedisGameRegistry
|
||||||
|
- function generateId
|
||||||
|
- function store
|
||||||
|
- function get
|
||||||
|
- function update
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala`
|
||||||
|
- class GameDtoMapper
|
||||||
|
- function statusOf
|
||||||
|
- function moveToUci
|
||||||
|
- function toPlayerDto
|
||||||
|
- function toClockDto
|
||||||
|
- function toGameStateDto
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala`
|
||||||
|
- class GameResource
|
||||||
|
- function onGameEvent
|
||||||
|
- function createGame
|
||||||
|
- function getGame
|
||||||
|
- function resignGame
|
||||||
|
- function makeMove
|
||||||
|
- _...9 more_
|
||||||
|
- `modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala`
|
||||||
|
- class InstanceHeartbeatService
|
||||||
|
- function onStart
|
||||||
|
- function onShutdown
|
||||||
|
- function setRedisPrefix
|
||||||
|
- function setSubscriptionCount
|
||||||
|
- function setLocalCacheSize
|
||||||
|
- _...2 more_
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala`
|
||||||
- class GameFileService
|
- class GameFileService
|
||||||
- function saveGameToFile
|
- function saveGameToFile
|
||||||
@@ -219,6 +371,8 @@
|
|||||||
- function parseBoard
|
- function parseBoard
|
||||||
- function importGameContext
|
- function importGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
||||||
@@ -231,36 +385,183 @@
|
|||||||
- function importGameContext
|
- function importGameContext
|
||||||
- function parsePgn
|
- function parsePgn
|
||||||
- function parseAlgebraicMove
|
- function parseAlgebraicMove
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/service/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- class RuleSet
|
- `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/io/src/main/scala/de/nowchess/io/service/resource/IoResource.scala`
|
||||||
|
- class IoResource
|
||||||
|
- function importFen
|
||||||
|
- function importPgn
|
||||||
|
- function exportFen
|
||||||
|
- function exportPgn
|
||||||
|
- function exportCombined
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/ChessJacksonModule.scala` — class ChessJacksonModule
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/GameResultDeserializer.scala` — class GameResultDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/GameResultSerializer.scala` — class GameResultSerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/MoveTypeDeserializer.scala` — class MoveTypeDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/MoveTypeSerializer.scala` — class MoveTypeSerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareDeserializer.scala` — class SquareDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||||
|
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
||||||
|
- `modules/official-bots/python/nnue.py`
|
||||||
|
- function get_weights_dir: ()
|
||||||
|
- function get_data_dir: ()
|
||||||
|
- function list_checkpoints: ()
|
||||||
|
- function migrate_legacy_data: ()
|
||||||
|
- function show_header: ()
|
||||||
|
- function show_checkpoints_table: ()
|
||||||
|
- _...10 more_
|
||||||
|
- `modules/official-bots/python/src/dataset.py`
|
||||||
|
- function get_datasets_dir: () -> Path
|
||||||
|
- function next_dataset_version: () -> int
|
||||||
|
- function list_datasets: () -> List[Tuple[int, Dict]]
|
||||||
|
- function load_dataset_metadata: (version) -> Optional[Dict]
|
||||||
|
- function save_dataset_metadata: (version, metadata) -> None
|
||||||
|
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
||||||
|
- _...4 more_
|
||||||
|
- `modules/official-bots/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
||||||
|
- `modules/official-bots/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
||||||
|
- `modules/official-bots/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
||||||
|
- `modules/official-bots/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
||||||
|
- `modules/official-bots/python/src/tactical_positions_extractor.py`
|
||||||
|
- function download_and_extract_puzzle_db: (url, output_dir)
|
||||||
|
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
||||||
|
- function load_positions_from_file: (file_path) -> Set[str]
|
||||||
|
- function merge_positions: (tactical, other, output_file)
|
||||||
|
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
||||||
|
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
||||||
|
- `modules/official-bots/python/src/train.py`
|
||||||
|
- function fen_to_features: (fen)
|
||||||
|
- function find_next_version: (base_name)
|
||||||
|
- function save_metadata: (weights_file, metadata)
|
||||||
|
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio, hidden_sizes)
|
||||||
|
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio, hidden_sizes)
|
||||||
|
- class NNUEDataset
|
||||||
|
- _...1 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotController.scala`
|
||||||
|
- class BotController
|
||||||
|
- function getBot
|
||||||
|
- function listBots
|
||||||
|
- class BotController
|
||||||
|
- function getBot
|
||||||
|
- function listBots
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
||||||
|
- class BotMoveRepetition
|
||||||
|
- function blockedMoves
|
||||||
|
- function repeatedMove
|
||||||
|
- function filterAllowed
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
||||||
|
- class Evaluation
|
||||||
|
- class CHECKMATE_SCORE
|
||||||
|
- class DRAW_SCORE
|
||||||
|
- function evaluate
|
||||||
|
- function initAccumulator
|
||||||
|
- function copyAccumulator
|
||||||
|
- _...2 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — class ClassicalBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` — class HybridBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala` — class NNUEBot, function apply
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
||||||
|
- class EvaluationClassic
|
||||||
|
- function evaluate
|
||||||
|
- function countRay
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
||||||
|
- class NNUE
|
||||||
|
- function initAccumulator
|
||||||
|
- function pushAccumulator
|
||||||
|
- function copyAccumulator
|
||||||
|
- function recomputeAccumulator
|
||||||
|
- function validateAccumulator
|
||||||
|
- _...4 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
||||||
|
- class NbaiLoader
|
||||||
|
- function load
|
||||||
|
- function loadDefault
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
||||||
|
- function toJson
|
||||||
|
- class NbaiMetadata
|
||||||
|
- function fromJson
|
||||||
|
- function str
|
||||||
|
- function num
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
||||||
|
- function bestMove
|
||||||
|
- function bestMove
|
||||||
|
- function bestMoveWithTime
|
||||||
|
- function bestMoveWithTime
|
||||||
|
- function loop
|
||||||
|
- function loop
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
||||||
|
- class MoveOrdering
|
||||||
|
- class OrderingContext
|
||||||
|
- function addKillerMove
|
||||||
|
- function getKillerMoves
|
||||||
|
- function addHistory
|
||||||
|
- function getHistory
|
||||||
|
- _...3 more_
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
||||||
|
- function advance
|
||||||
|
- function probe
|
||||||
|
- function store
|
||||||
|
- function clear
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/resource/OfficialBotChallengeResource.scala` — class OfficialBotChallengeResource, function challengeWithDifficulty
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/DifficultyMapper.scala` — class DifficultyMapper, function fromElo
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/OfficialBotService.scala` — class OfficialBotService, function onStart
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
||||||
|
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
||||||
|
- class ZobristHash
|
||||||
|
- function hash
|
||||||
|
- function nextHash
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||||
|
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||||
|
- class RuleSetResource
|
||||||
- function candidateMoves
|
- function candidateMoves
|
||||||
- function legalMoves
|
- function legalMoves
|
||||||
- function allLegalMoves
|
- function allLegalMoves
|
||||||
- function isCheck
|
- function isCheck
|
||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...4 more_
|
- _...6 more_
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
||||||
- class DefaultRules
|
- `modules/security/src/main/scala/de/nowchess/security/InternalAuthFilter.scala` — class InternalAuthFilter
|
||||||
- function loop
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcAuthInterceptor.scala` — class InternalGrpcAuthInterceptor
|
||||||
- function toMoves
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcSecretClientInterceptor.scala` — class InternalGrpcSecretClientInterceptor
|
||||||
- function loop
|
- `modules/security/src/main/scala/de/nowchess/security/InternalSecretClientFilter.scala` — class InternalSecretClientFilter
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/Main.scala` — class Main, function main
|
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- class ChessBoardView
|
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function updateBoard
|
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
||||||
- function updateUndoRedoButtons
|
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||||
- function showMessage
|
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||||
- function showPromotionDialog
|
- class GameRecordRepository
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/ChessGUI.scala`
|
- function findByGameId
|
||||||
- class ChessGUIApp
|
- function persist
|
||||||
- class ChessGUILauncher
|
- function merge
|
||||||
- function getEngine
|
- function findByPlayerId
|
||||||
- function launch
|
- function findByPlayerIdRunning
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/GUIObserver.scala` — class GUIObserver
|
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala`
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/gui/PieceSprites.scala`
|
- class StoreGameResource
|
||||||
- class PieceSprites
|
- function getGame
|
||||||
- function loadPieceImage
|
- function getRunning
|
||||||
- class SquareColors
|
- function getHistory
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/terminal/TerminalUI.scala` — class TerminalUI, function start
|
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/utils/PieceUnicode.scala` — function unicode
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ui/src/main/scala/de/nowchess/ui/utils/Renderer.scala` — class Renderer, function render
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/RedisConfig.scala` — class RedisConfig
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||||
|
- class GameWebSocketResource
|
||||||
|
- function onOpen
|
||||||
|
- function onTextMessage
|
||||||
|
- function onClose
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala`
|
||||||
|
- class UserWebSocketResource
|
||||||
|
- function onOpen
|
||||||
|
- function onClose
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Middleware
|
# Middleware
|
||||||
|
|
||||||
## custom
|
## custom
|
||||||
- generate — `modules/bot/python/src/generate.py`
|
- generate — `modules/official-bots/python/src/generate.py`
|
||||||
|
|||||||
@@ -0,0 +1,198 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>NowChessSystems — codesight report</title>
|
||||||
|
<style>
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
:root{--bg:#0a0a0f;--card:#12121a;--border:#1e1e2e;--text:#e0e0e8;--muted:#6b6b80;--accent:#6366f1;--accent2:#22d3ee;--green:#22c55e;--orange:#f59e0b;--red:#ef4444;--pink:#ec4899}
|
||||||
|
body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;padding:2rem;max-width:1400px;margin:0 auto;line-height:1.6}
|
||||||
|
h1{font-size:2.5rem;font-weight:800;background:linear-gradient(135deg,var(--accent),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:.25rem}
|
||||||
|
.subtitle{color:var(--muted);font-size:1rem;margin-bottom:2rem}
|
||||||
|
.stack-badge{display:inline-block;background:var(--card);border:1px solid var(--border);border-radius:6px;padding:2px 10px;font-size:.85rem;color:var(--accent2);margin:0 4px 4px 0}
|
||||||
|
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin:2rem 0}
|
||||||
|
.stat{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1.25rem;text-align:center}
|
||||||
|
.stat-value{font-size:2rem;font-weight:800;background:linear-gradient(135deg,var(--accent),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||||||
|
.stat-label{color:var(--muted);font-size:.85rem;margin-top:.25rem}
|
||||||
|
.token-hero{background:linear-gradient(135deg,#1a1a2e,#16213e);border:1px solid var(--accent);border-radius:16px;padding:2rem;margin:2rem 0;text-align:center}
|
||||||
|
.token-saved{font-size:3rem;font-weight:900;color:var(--green)}
|
||||||
|
.token-detail{color:var(--muted);font-size:.9rem;margin-top:.5rem}
|
||||||
|
.section{margin:2.5rem 0}
|
||||||
|
.section h2{font-size:1.4rem;font-weight:700;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--border)}
|
||||||
|
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1rem}
|
||||||
|
.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:1rem;transition:border-color .2s}
|
||||||
|
.card:hover{border-color:var(--accent)}
|
||||||
|
.card-title{font-weight:700;font-size:1rem;margin-bottom:.5rem}
|
||||||
|
.card-meta{color:var(--muted);font-size:.8rem}
|
||||||
|
.tag{display:inline-block;background:rgba(99,102,241,.15);color:var(--accent);border-radius:4px;padding:1px 6px;font-size:.75rem;margin:1px}
|
||||||
|
.tag-auth{background:rgba(239,68,68,.15);color:var(--red)}
|
||||||
|
.tag-db{background:rgba(34,211,238,.15);color:var(--accent2)}
|
||||||
|
.tag-ai{background:rgba(236,72,153,.15);color:var(--pink)}
|
||||||
|
.tag-payment{background:rgba(245,158,11,.15);color:var(--orange)}
|
||||||
|
.tag-email{background:rgba(34,197,94,.15);color:var(--green)}
|
||||||
|
.tag-queue{background:rgba(168,85,247,.15);color:#a855f7}
|
||||||
|
.tag-cache{background:rgba(245,158,11,.15);color:var(--orange)}
|
||||||
|
.method{font-weight:700;font-size:.8rem;padding:2px 6px;border-radius:4px;margin-right:6px}
|
||||||
|
.method-GET{background:rgba(34,197,94,.2);color:var(--green)}
|
||||||
|
.method-POST{background:rgba(99,102,241,.2);color:var(--accent)}
|
||||||
|
.method-PUT{background:rgba(245,158,11,.2);color:var(--orange)}
|
||||||
|
.method-PATCH{background:rgba(245,158,11,.2);color:var(--orange)}
|
||||||
|
.method-DELETE{background:rgba(239,68,68,.2);color:var(--red)}
|
||||||
|
.method-ALL{background:rgba(107,107,128,.2);color:var(--muted)}
|
||||||
|
.route-path{font-family:'Fira Code',monospace;font-size:.9rem}
|
||||||
|
.route-contract{color:var(--muted);font-size:.8rem;font-style:italic;margin-left:.5rem}
|
||||||
|
.field{display:flex;gap:.5rem;padding:3px 0;font-size:.9rem}
|
||||||
|
.field-name{font-family:monospace;color:var(--accent2)}
|
||||||
|
.field-type{color:var(--muted);font-family:monospace}
|
||||||
|
.field-flags{display:flex;gap:3px}
|
||||||
|
.flag{font-size:.7rem;padding:0 4px;border-radius:3px;background:rgba(99,102,241,.1);color:var(--accent)}
|
||||||
|
.flag-pk{background:rgba(245,158,11,.2);color:var(--orange)}
|
||||||
|
.flag-fk{background:rgba(34,211,238,.2);color:var(--accent2)}
|
||||||
|
.flag-unique{background:rgba(236,72,153,.2);color:var(--pink)}
|
||||||
|
.hot-bar{height:8px;background:linear-gradient(90deg,var(--accent),var(--accent2));border-radius:4px;margin-top:4px}
|
||||||
|
.component-props{color:var(--muted);font-size:.85rem}
|
||||||
|
.badge-client{background:rgba(34,197,94,.15);color:var(--green);font-size:.75rem;padding:1px 6px;border-radius:4px}
|
||||||
|
.badge-server{background:rgba(99,102,241,.15);color:var(--accent);font-size:.75rem;padding:1px 6px;border-radius:4px}
|
||||||
|
.env-required{color:var(--red);font-weight:600;font-size:.8rem}
|
||||||
|
.env-default{color:var(--green);font-size:.8rem}
|
||||||
|
.footer{text-align:center;color:var(--muted);margin-top:4rem;padding-top:2rem;border-top:1px solid var(--border);font-size:.85rem}
|
||||||
|
.footer a{color:var(--accent);text-decoration:none}
|
||||||
|
table{width:100%;border-collapse:collapse}
|
||||||
|
table td,table th{padding:8px 12px;text-align:left;border-bottom:1px solid var(--border);font-size:.9rem}
|
||||||
|
table th{color:var(--muted);font-size:.8rem;font-weight:600;text-transform:uppercase}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>NowChessSystems</h1>
|
||||||
|
<div class="subtitle">AI Context Map — generated by codesight</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span class="stack-badge">raw-http</span>
|
||||||
|
|
||||||
|
<span class="stack-badge">unknown</span>
|
||||||
|
<span class="stack-badge">scala</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="token-hero">
|
||||||
|
<div class="token-saved">~20,573 tokens saved</div>
|
||||||
|
<div class="token-detail">
|
||||||
|
Output: 5,297 tokens — Exploration cost without codesight: ~25,870 tokens — 149 files scanned
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stats">
|
||||||
|
<div class="stat"><div class="stat-value">0</div><div class="stat-label">Routes</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">0</div><div class="stat-label">Models</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">0</div><div class="stat-label">Components</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">63</div><div class="stat-label">Libraries</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">1</div><div class="stat-label">Env Vars</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">1</div><div class="stat-label">Middleware</div></div>
|
||||||
|
<div class="stat"><div class="stat-value">383</div><div class="stat-label">Import Links</div></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Dependency Hot Files</h2>
|
||||||
|
<div class="grid">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala</div>
|
||||||
|
<div class="card-meta">imported by 64 files</div>
|
||||||
|
<div class="hot-bar" style="width:100%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/move/Move.scala</div>
|
||||||
|
<div class="card-meta">imported by 44 files</div>
|
||||||
|
<div class="hot-bar" style="width:69%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/Square.scala</div>
|
||||||
|
<div class="card-meta">imported by 40 files</div>
|
||||||
|
<div class="hot-bar" style="width:63%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/Color.scala</div>
|
||||||
|
<div class="card-meta">imported by 35 files</div>
|
||||||
|
<div class="hot-bar" style="width:55%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/Board.scala</div>
|
||||||
|
<div class="card-meta">imported by 19 files</div>
|
||||||
|
<div class="hot-bar" style="width:30%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/Piece.scala</div>
|
||||||
|
<div class="card-meta">imported by 18 files</div>
|
||||||
|
<div class="hot-bar" style="width:28%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala</div>
|
||||||
|
<div class="card-meta">imported by 17 files</div>
|
||||||
|
<div class="hot-bar" style="width:27%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala</div>
|
||||||
|
<div class="card-meta">imported by 17 files</div>
|
||||||
|
<div class="hot-bar" style="width:27%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala</div>
|
||||||
|
<div class="card-meta">imported by 11 files</div>
|
||||||
|
<div class="hot-bar" style="width:17%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala</div>
|
||||||
|
<div class="card-meta">imported by 10 files</div>
|
||||||
|
<div class="hot-bar" style="width:16%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala</div>
|
||||||
|
<div class="card-meta">imported by 9 files</div>
|
||||||
|
<div class="hot-bar" style="width:14%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title" style="font-size:.9rem">modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala</div>
|
||||||
|
<div class="card-meta">imported by 7 files</div>
|
||||||
|
<div class="hot-bar" style="width:11%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Environment Variables</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>Variable</th><th>Status</th><th>Source</th></tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>STOCKFISH_PATH</code></td>
|
||||||
|
<td><span class="env-required">required</span></td>
|
||||||
|
<td class="card-meta">modules/bot/python/nnue.py</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Middleware</h2>
|
||||||
|
<div class="grid">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-title">generate <span class="tag tag-custom">custom</span></div>
|
||||||
|
<div class="card-meta">modules/bot/python/src/generate.py</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
Generated by <a href="https://github.com/Houseofmvps/codesight">codesight</a> — see your codebase clearly
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Routes
|
||||||
|
|
||||||
|
## gRPC
|
||||||
|
|
||||||
|
- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse
|
||||||
|
- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse
|
||||||
|
- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse
|
||||||
|
- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse
|
||||||
|
- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse
|
||||||
|
- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse
|
||||||
|
- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse
|
||||||
|
- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse
|
||||||
|
- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport
|
||||||
|
- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList
|
||||||
|
- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext
|
||||||
|
- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus
|
||||||
|
- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext
|
||||||
|
- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport
|
||||||
|
- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult
|
||||||
|
- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList
|
||||||
|
- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList
|
||||||
|
- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult
|
||||||
|
- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext
|
||||||
|
- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# NowChessSystems — Wiki
|
# NowChessSystems — Wiki
|
||||||
|
|
||||||
_Generated 2026-04-12 — re-run `npx codesight --wiki` if the codebase has changed._
|
_Generated 2026-04-23 — re-run `npx codesight --wiki` if the codebase has changed._
|
||||||
|
|
||||||
Structural map compiled from source code via AST. No LLM — deterministic, 200ms.
|
Structural map compiled from source code via AST. No LLM — deterministic, 200ms.
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ Structural map compiled from source code via AST. No LLM — deterministic, 200m
|
|||||||
- Routes: **0**
|
- Routes: **0**
|
||||||
- Models: **0**
|
- Models: **0**
|
||||||
- Components: **0**
|
- Components: **0**
|
||||||
- Env vars: **0** required, **0** with defaults
|
- Env vars: **1** required, **0** with defaults
|
||||||
|
|
||||||
## How to Use
|
## How to Use
|
||||||
|
|
||||||
@@ -41,4 +41,4 @@ These exist in your codebase but are **not** reflected in wiki articles:
|
|||||||
When in doubt, search the source. The wiki is a starting point, not a complete inventory.
|
When in doubt, search the source. The wiki is a starting point, not a complete inventory.
|
||||||
|
|
||||||
---
|
---
|
||||||
_Last compiled: 2026-04-12 · 2 articles · [codesight](https://github.com/Houseofmvps/codesight)_
|
_Last compiled: 2026-04-23 · 2 articles · [codesight](https://github.com/Houseofmvps/codesight)_
|
||||||
@@ -3,3 +3,5 @@
|
|||||||
History of `npx codesight --wiki` runs. Capped at 20 entries.
|
History of `npx codesight --wiki` runs. Capped at 20 entries.
|
||||||
|
|
||||||
## [2026-04-12 14:34:19] scan | 0 routes, 0 models, 0 components → 2 articles
|
## [2026-04-12 14:34:19] scan | 0 routes, 0 models, 0 components → 2 articles
|
||||||
|
|
||||||
|
## [2026-04-23 11:41:43] scan | 0 routes, 0 models, 0 components → 2 articles
|
||||||
|
|||||||
@@ -4,16 +4,24 @@
|
|||||||
|
|
||||||
**NowChessSystems** is a scala project built with raw-http.
|
**NowChessSystems** is a scala project built with raw-http.
|
||||||
|
|
||||||
|
## Scale
|
||||||
|
|
||||||
|
1 middleware layers · 1 environment variables
|
||||||
|
|
||||||
## High-Impact Files
|
## High-Impact Files
|
||||||
|
|
||||||
Changes to these files have the widest blast radius across the codebase:
|
Changes to these files have the widest blast radius across the codebase:
|
||||||
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **28** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **74** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **21** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **66** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **19** files
|
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **52** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **14** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **42** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **13** files
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **10** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files
|
||||||
|
|
||||||
|
## Required Environment Variables
|
||||||
|
|
||||||
|
- `STOCKFISH_PATH` — `modules/bot/python/nnue.py`
|
||||||
|
|
||||||
---
|
---
|
||||||
_Back to [index.md](./index.md) · Generated 2026-04-12_
|
_Back to [index.md](./index.md) · Generated 2026-04-23_
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
FROM mcr.microsoft.com/devcontainers/java:21-bookworm
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
postgresql-client \
|
||||||
|
redis-tools \
|
||||||
|
stockfish \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN mkdir -p /home/vscode/.gradle/wrapper/dists \
|
||||||
|
&& chown -R vscode:vscode /home/vscode/.gradle
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Devcontainer
|
||||||
|
|
||||||
|
Dieses Setup startet den NowChess-Workspace zusammen mit Redis und PostgreSQL.
|
||||||
|
|
||||||
|
## Enthaltene Services
|
||||||
|
- `workspace` – Scala/Gradle-Entwicklungscontainer
|
||||||
|
- `redis` – Redis 7.4
|
||||||
|
- `postgres` – PostgreSQL 16
|
||||||
|
|
||||||
|
## Wichtige Ports
|
||||||
|
- App-Services: `8080`, `8081`, `8082`, `8083`, `8084`, `8085`, `8086`, `9086`
|
||||||
|
- Redis auf dem Host: `16379`
|
||||||
|
- PostgreSQL auf dem Host: `15432`
|
||||||
|
|
||||||
|
## Einstieg
|
||||||
|
- VS Code: Ordner in einem Dev Container öffnen
|
||||||
|
- IntelliJ: Dev Container / Docker-Compose-Workspace öffnen und den `workspace`-Dienst nutzen
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "NowChessSystems",
|
||||||
|
"dockerComposeFile": ["docker-compose.yml"],
|
||||||
|
"service": "workspace",
|
||||||
|
"workspaceFolder": "/workspaces/NowChessSystems",
|
||||||
|
"shutdownAction": "stopCompose",
|
||||||
|
"overrideCommand": false,
|
||||||
|
"remoteUser": "vscode",
|
||||||
|
"forwardPorts": [8080, 8081, 8082, 8083, 8084, 8085, 8086, 9086],
|
||||||
|
"portsAttributes": {
|
||||||
|
"8080": {"label": "NowChess Core", "onAutoForward": "notify"},
|
||||||
|
"8081": {"label": "NowChess Io", "onAutoForward": "notify"},
|
||||||
|
"8082": {"label": "NowChess Rule", "onAutoForward": "notify"},
|
||||||
|
"8083": {"label": "NowChess Account", "onAutoForward": "notify"},
|
||||||
|
"8084": {"label": "NowChess WebSocket", "onAutoForward": "notify"},
|
||||||
|
"8085": {"label": "NowChess Store", "onAutoForward": "notify"},
|
||||||
|
"8086": {"label": "NowChess Coordinator HTTP", "onAutoForward": "notify"},
|
||||||
|
"9086": {"label": "NowChess Coordinator gRPC", "onAutoForward": "notify"}
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
|
"java.import.gradle.wrapper.enabled": true,
|
||||||
|
"files.watcherExclude": {
|
||||||
|
"**/build/**": true,
|
||||||
|
"**/.gradle/**": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"scala-lang.scala",
|
||||||
|
"redhat.java",
|
||||||
|
"vscjava.vscode-java-pack"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postCreateCommand": "bash -lc './gradlew --no-daemon help >/dev/null'"
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
services:
|
||||||
|
workspace:
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: .devcontainer/Dockerfile
|
||||||
|
command: sleep infinity
|
||||||
|
init: true
|
||||||
|
volumes:
|
||||||
|
- gradle-cache:/home/vscode/.gradle
|
||||||
|
environment:
|
||||||
|
REDIS_HOST: redis
|
||||||
|
REDIS_PORT: 6379
|
||||||
|
REDIS_PREFIX: nowchess
|
||||||
|
DB_URL: jdbc:postgresql://postgres:5432/nowchess
|
||||||
|
DB_USER: nowchess
|
||||||
|
DB_PASSWORD: nowchess
|
||||||
|
CORE_SERVICE_URL: http://localhost:8080
|
||||||
|
INTERNAL_SECRET: dev-internal-secret
|
||||||
|
STOCKFISH_PATH: /usr/games/stockfish
|
||||||
|
NOWCHESS_COORDINATOR_ENABLED: "true"
|
||||||
|
dns:
|
||||||
|
- 8.8.8.8
|
||||||
|
- 1.1.1.1
|
||||||
|
depends_on:
|
||||||
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: docker.io/redis:7.4-alpine
|
||||||
|
command: ["redis-server", "--appendonly", "yes", "--save", "60", "1"]
|
||||||
|
ports:
|
||||||
|
- "16379:6379"
|
||||||
|
volumes:
|
||||||
|
- redis-data:/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 20
|
||||||
|
start_period: 5s
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: docker.io/postgres:16-alpine
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: nowchess
|
||||||
|
POSTGRES_USER: nowchess
|
||||||
|
POSTGRES_PASSWORD: nowchess
|
||||||
|
ports:
|
||||||
|
- "15432:5432"
|
||||||
|
volumes:
|
||||||
|
- postgres-data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 20
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
gradle-cache:
|
||||||
|
redis-data:
|
||||||
|
postgres-data:
|
||||||
|
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
name: Build & Push Native Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-actor:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
allowed: ${{ steps.check.outputs.allowed }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- id: check
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||||
|
echo "Triggered manually — allowing build"
|
||||||
|
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
COMMIT_AUTHOR=$(git log -1 --format='%an')
|
||||||
|
COMMIT_SHA=$(git log -1 --format='%H')
|
||||||
|
COMMIT_MSG=$(git log -1 --format='%s')
|
||||||
|
echo "Commit: ${COMMIT_SHA}"
|
||||||
|
echo "Author: ${COMMIT_AUTHOR}"
|
||||||
|
echo "Message: ${COMMIT_MSG}"
|
||||||
|
if [[ "$COMMIT_AUTHOR" == "TeamCity" ]]; then
|
||||||
|
echo "Author is TeamCity — allowing build"
|
||||||
|
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "Author is not TeamCity — skipping build"
|
||||||
|
echo "allowed=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
build-and-push:
|
||||||
|
needs: check-actor
|
||||||
|
if: needs.check-actor.outputs.allowed == 'true'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
module:
|
||||||
|
- account
|
||||||
|
- bot-platform
|
||||||
|
- coordinator
|
||||||
|
- core
|
||||||
|
- io
|
||||||
|
- official-bots
|
||||||
|
- rule
|
||||||
|
- store
|
||||||
|
- ws
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Read version from versions.env
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
if [ -f "modules/${{ matrix.module }}/versions.env" ]; then
|
||||||
|
source modules/${{ matrix.module }}/versions.env
|
||||||
|
VERSION="${MAJOR}.${MINOR}.${PATCH}"
|
||||||
|
echo "[${{ matrix.module }}] Version: ${VERSION}"
|
||||||
|
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "[${{ matrix.module }}] No versions.env found — using 'latest'"
|
||||||
|
echo "version=latest" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Check if image exists in GHCR
|
||||||
|
id: image-check
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
PACKAGE="now-chess-systems%2F${{ matrix.module }}"
|
||||||
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
|
EXISTING_TAGS=$(gh api "orgs/now-chess/packages/container/${PACKAGE}/versions" \
|
||||||
|
--jq '.[].metadata.container.tags[]' 2>/dev/null || echo "")
|
||||||
|
echo "[${{ matrix.module }}] Existing tags: $(echo "${EXISTING_TAGS}" | tr '\n' ' ' | xargs)"
|
||||||
|
if echo "${EXISTING_TAGS}" | grep -qx "${VERSION}"; then
|
||||||
|
echo "[${{ matrix.module }}] Image ${VERSION} already exists — skipping build"
|
||||||
|
echo "exists=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "[${{ matrix.module }}] Image ${VERSION} not found — will build"
|
||||||
|
echo "exists=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Set up GraalVM
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
uses: graalvm/setup-graalvm@v1
|
||||||
|
with:
|
||||||
|
java-version: '21'
|
||||||
|
distribution: 'graalvm-community'
|
||||||
|
native-image-job-reports: 'true'
|
||||||
|
|
||||||
|
- name: Cache Gradle packages
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
|
restore-keys: gradle-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Build native binary
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
run: ./gradlew :modules:${{ matrix.module }}:build -x test -Dquarkus.native.enabled=true -Dquarkus.package.jar.enabled=false -Dquarkus.profile=deployed --no-daemon
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Log in to GitHub Container Registry
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract metadata
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ghcr.io/now-chess/now-chess-systems/${{ matrix.module }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=${{ steps.version.outputs.version }}
|
||||||
|
type=raw,value=latest
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: modules/${{ matrix.module }}/src/main/docker/Dockerfile.native
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=gha,scope=${{ matrix.module }}
|
||||||
|
cache-to: type=gha,mode=max,scope=${{ matrix.module }}
|
||||||
@@ -41,6 +41,9 @@ bin/
|
|||||||
graphify-out/
|
graphify-out/
|
||||||
.graphify_*.json
|
.graphify_*.json
|
||||||
|
|
||||||
|
### Keys ###
|
||||||
|
**/keys/private.pem
|
||||||
|
|
||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/jacoco-reporter/.venv/
|
/jacoco-reporter/.venv/
|
||||||
|
|||||||
Generated
+18
File diff suppressed because one or more lines are too long
Generated
+9
-3
@@ -5,17 +5,23 @@
|
|||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="corretto-21" />
|
<option name="gradleJvm" value="ms-21" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
<option value="$PROJECT_DIR$/modules" />
|
<option value="$PROJECT_DIR$/modules" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/account" />
|
||||||
<option value="$PROJECT_DIR$/modules/api" />
|
<option value="$PROJECT_DIR$/modules/api" />
|
||||||
<option value="$PROJECT_DIR$/modules/bot" />
|
<option value="$PROJECT_DIR$/modules/bot-platform" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/coordinator" />
|
||||||
<option value="$PROJECT_DIR$/modules/core" />
|
<option value="$PROJECT_DIR$/modules/core" />
|
||||||
<option value="$PROJECT_DIR$/modules/io" />
|
<option value="$PROJECT_DIR$/modules/io" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/json" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/official-bots" />
|
||||||
<option value="$PROJECT_DIR$/modules/rule" />
|
<option value="$PROJECT_DIR$/modules/rule" />
|
||||||
<option value="$PROJECT_DIR$/modules/ui" />
|
<option value="$PROJECT_DIR$/modules/security" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/store" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/ws" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
|
|||||||
Generated
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="corretto-21" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="ms-21" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="NowChessSystems.modules.core.main" type="QuarkusRunConfigurationType" factoryName="Quarkus" nameIsGenerated="true">
|
||||||
|
<module name="NowChessSystems.modules.core.main" />
|
||||||
|
<QsGradleRunConfiguration>
|
||||||
|
<ExternalSystemSettings>
|
||||||
|
<option name="executionName" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$/modules/core" />
|
||||||
|
<option name="externalSystemIdString" value="GRADLE" />
|
||||||
|
<option name="scriptParameters" />
|
||||||
|
<option name="taskDescriptions">
|
||||||
|
<list />
|
||||||
|
</option>
|
||||||
|
<option name="taskNames">
|
||||||
|
<list>
|
||||||
|
<option value="quarkusDev" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
<option name="vmOptions" />
|
||||||
|
</ExternalSystemSettings>
|
||||||
|
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||||
|
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||||
|
<ExternalSystemDebugDisabled>false</ExternalSystemDebugDisabled>
|
||||||
|
<DebugAllEnabled>false</DebugAllEnabled>
|
||||||
|
<RunAsTest>false</RunAsTest>
|
||||||
|
<GradleProfilingDisabled>false</GradleProfilingDisabled>
|
||||||
|
<GradleCoverageDisabled>false</GradleCoverageDisabled>
|
||||||
|
<profile>dev</profile>
|
||||||
|
</QsGradleRunConfiguration>
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
||||||
Generated
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<option name="deprecationWarnings" value="true" />
|
<option name="deprecationWarnings" value="true" />
|
||||||
<option name="uncheckedWarnings" value="true" />
|
<option name="uncheckedWarnings" value="true" />
|
||||||
</profile>
|
</profile>
|
||||||
<profile name="Gradle 2" modules="NowChessSystems.modules.bot.main,NowChessSystems.modules.bot.scoverage,NowChessSystems.modules.bot.test,NowChessSystems.modules.core.main,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.io.main,NowChessSystems.modules.io.scoverage,NowChessSystems.modules.io.test,NowChessSystems.modules.rule.main,NowChessSystems.modules.rule.scoverage,NowChessSystems.modules.rule.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test">
|
<profile name="Gradle 2" modules="NowChessSystems.modules.account.integrationTest,NowChessSystems.modules.account.main,NowChessSystems.modules.account.native-test,NowChessSystems.modules.account.quarkus-generated-sources,NowChessSystems.modules.account.quarkus-test-generated-sources,NowChessSystems.modules.account.scoverage,NowChessSystems.modules.account.test,NowChessSystems.modules.bot-platform.integrationTest,NowChessSystems.modules.bot-platform.main,NowChessSystems.modules.bot-platform.native-test,NowChessSystems.modules.bot-platform.quarkus-generated-sources,NowChessSystems.modules.bot-platform.quarkus-test-generated-sources,NowChessSystems.modules.bot-platform.scoverage,NowChessSystems.modules.bot-platform.test,NowChessSystems.modules.bot.main,NowChessSystems.modules.bot.scoverage,NowChessSystems.modules.bot.test,NowChessSystems.modules.coordinator.integrationTest,NowChessSystems.modules.coordinator.main,NowChessSystems.modules.coordinator.native-test,NowChessSystems.modules.coordinator.quarkus-generated-sources,NowChessSystems.modules.coordinator.quarkus-test-generated-sources,NowChessSystems.modules.coordinator.scoverage,NowChessSystems.modules.coordinator.test,NowChessSystems.modules.core.integrationTest,NowChessSystems.modules.core.main,NowChessSystems.modules.core.native-test,NowChessSystems.modules.core.quarkus-generated-sources,NowChessSystems.modules.core.quarkus-test-generated-sources,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.io.integrationTest,NowChessSystems.modules.io.main,NowChessSystems.modules.io.native-test,NowChessSystems.modules.io.quarkus-generated-sources,NowChessSystems.modules.io.quarkus-test-generated-sources,NowChessSystems.modules.io.scoverage,NowChessSystems.modules.io.test,NowChessSystems.modules.json.main,NowChessSystems.modules.json.scoverage,NowChessSystems.modules.json.test,NowChessSystems.modules.official-bots.integrationTest,NowChessSystems.modules.official-bots.main,NowChessSystems.modules.official-bots.native-test,NowChessSystems.modules.official-bots.quarkus-generated-sources,NowChessSystems.modules.official-bots.quarkus-test-generated-sources,NowChessSystems.modules.official-bots.scoverage,NowChessSystems.modules.official-bots.test,NowChessSystems.modules.rule.integrationTest,NowChessSystems.modules.rule.main,NowChessSystems.modules.rule.native-test,NowChessSystems.modules.rule.quarkus-generated-sources,NowChessSystems.modules.rule.quarkus-test-generated-sources,NowChessSystems.modules.rule.scoverage,NowChessSystems.modules.rule.test,NowChessSystems.modules.security.main,NowChessSystems.modules.security.scoverage,NowChessSystems.modules.security.test,NowChessSystems.modules.store.integrationTest,NowChessSystems.modules.store.main,NowChessSystems.modules.store.native-test,NowChessSystems.modules.store.quarkus-generated-sources,NowChessSystems.modules.store.quarkus-test-generated-sources,NowChessSystems.modules.store.scoverage,NowChessSystems.modules.store.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test,NowChessSystems.modules.ws.integrationTest,NowChessSystems.modules.ws.main,NowChessSystems.modules.ws.native-test,NowChessSystems.modules.ws.quarkus-generated-sources,NowChessSystems.modules.ws.quarkus-test-generated-sources,NowChessSystems.modules.ws.scoverage,NowChessSystems.modules.ws.test">
|
||||||
<option name="deprecationWarnings" value="true" />
|
<option name="deprecationWarnings" value="true" />
|
||||||
<option name="uncheckedWarnings" value="true" />
|
<option name="uncheckedWarnings" value="true" />
|
||||||
<parameters>
|
<parameters>
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ Scala 3.5.1 · Gradle 9
|
|||||||
./compile # Compile all modules — always run
|
./compile # Compile all modules — always run
|
||||||
./test # Run all tests
|
./test # Run all tests
|
||||||
./coverage # Check coverage
|
./coverage # Check coverage
|
||||||
|
./lint # Run linters
|
||||||
```
|
```
|
||||||
Try to stick to these commands for consistency.
|
Use consistently.
|
||||||
|
|
||||||
## Modules
|
## Modules
|
||||||
|
|
||||||
@@ -21,18 +22,17 @@ Try to stick to these commands for consistency.
|
|||||||
| `rule` | Game rules | api |
|
| `rule` | Game rules | api |
|
||||||
| `bot` | Bots and AI | api,rule,io |
|
| `bot` | Bots and AI | api,rule,io |
|
||||||
| `io` | Export formats | api, core |
|
| `io` | Export formats | api, core |
|
||||||
| `ui` | Entrypoint & UI | core, io |
|
|
||||||
|
|
||||||
## Style
|
## Style
|
||||||
|
|
||||||
- Use immutable data and pure functions.
|
- Immutable data, pure functions.
|
||||||
- Keep functions under 30 lines. If you need "and" to describe it, split it.
|
- Functions under 30 lines. Need "and"? Split it.
|
||||||
- Keep cyclomatic complexity under 15.
|
- Cyclomatic complexity under 15.
|
||||||
- Avoid comments. Let names carry intent; comment only non-obvious algorithms.
|
- No comments. Names carry intent. Comment non-obvious algorithms only.
|
||||||
- Scan for duplicated logic before finishing. Extract it.
|
- Scan duplicated logic. Extract.
|
||||||
- Follow default Sonar style for Scala.
|
- Follow default Sonar style for Scala.
|
||||||
- Use `Option` or `Either` for fallible operations; avoid exceptions for control flow.
|
- `Option`/`Either` for fallible ops. Skip exceptions for control flow.
|
||||||
- Naming: types are PascalCase, functions/values are camelCase.
|
- Naming: types PascalCase, functions/values camelCase.
|
||||||
|
|
||||||
## Code Quality
|
## Code Quality
|
||||||
|
|
||||||
@@ -40,23 +40,23 @@ Try to stick to these commands for consistency.
|
|||||||
|
|
||||||
### Linters
|
### Linters
|
||||||
|
|
||||||
- **scalafmt** — enforces formatting; run `./gradlew spotlessScalaCheck` to check and `./gradlew spotlessScalaApply` to refactor.
|
- **scalafmt** — Enforces formatting. Check: `./gradlew spotlessScalaCheck`. Refactor: `./gradlew spotlessScalaApply`.
|
||||||
- **scalafix** — enforces style and detects unused imports/code; run `./gradlew scalafix` to apply rules.
|
- **scalafix** — Enforces style, detects unused imports/code. Run: `./gradlew scalafix`.
|
||||||
|
|
||||||
## Architecture Decisions
|
## Architecture Decisions
|
||||||
|
|
||||||
- **Immutable state as primary model:** GameContext (api) holds board, history, player state — immutable, passed through the system. Each move creates a new GameContext, enabling undo/redo without side effects.
|
- **Immutable state as primary model:** GameContext (api) holds board, history, player state—immutable throughout. Each move → new GameContext. Enables undo/redo without side effects.
|
||||||
- **Observer pattern for UI decoupling:** GameEngine publishes move/state events; CommandInvoker queues moves; UI listens to events, not polling. GameEngine never imports UI code.
|
- **Observer pattern for UI decoupling:** GameEngine publishes move/state events; CommandInvoker queues moves; UI listens (no polling). GameEngine never imports UI.
|
||||||
- **RuleSet trait encapsulates rules:** Move generation, check, castling, en passant all in RuleSet impl. GameEngine calls rules as a black box; rules don't know about the rest of core.
|
- **RuleSet trait encapsulates rules:** Move generation, check, castling, en passant all in RuleSet impl. GameEngine calls rules as black box; rules don't know rest of core.
|
||||||
- **Polyglot hash must follow spec index layout:** piece keys use interleaved mapping `(pieceType * 2 + colorBit)` with black=0/white=1, castling keys are `768..771`, en-passant file keys are `772..779` and are XORed only if side-to-move has a pawn that can capture en passant, side-to-move key is `780` for white.
|
- **Polyglot hash must follow spec index layout:** Piece keys use interleaved mapping `(pieceType * 2 + colorBit)` (black=0, white=1). Castling keys: `768..771`. En-passant file keys: `772..779`, XORed only if side-to-move has capturable en passant. Side-to-move key: `780` (white).
|
||||||
- **Alpha-beta uses sequential PV search by default:** parallel split was disabled because fixed-window futures removed pruning effectiveness; correctness and pruning quality take priority over speculative parallelism.
|
- **Alpha-beta uses sequential PV search by default:** Parallel split disabled (fixed-window futures removed pruning effectiveness). Sequential PV default. Correctness + pruning quality > speculative parallelism.
|
||||||
- **Search hash is updated incrementally per move:** bot search now updates Zobrist keys from parent hash with move deltas instead of recomputing piece scans at every node.
|
- **Search hash is updated incrementally per move:** Bot search updates Zobrist keys from parent hash with move deltas, not recomputing piece scans per node.
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
- **Tests are the spec.** Never modify tests to pass; modify requirements or code. Update tests only if requirements change.
|
- **Tests are the spec.** Don't modify to pass. Fix requirements/code. Update only if requirements change.
|
||||||
- Never read build folders. Ask permission if needed.
|
- Never read build folders. Ask permission if needed.
|
||||||
- Keep this file up to date with any important decisions or conventions.
|
- Keep file current with decisions + conventions.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -64,11 +64,9 @@ Try to stick to these commands for consistency.
|
|||||||
|
|
||||||
### Two-Step Rule (mandatory)
|
### Two-Step Rule (mandatory)
|
||||||
**Step 1 — Orient:** Use wiki articles to find WHERE things live.
|
**Step 1 — Orient:** Use wiki articles to find WHERE things live.
|
||||||
**Step 2 — Verify:** Read the actual source files listed in the wiki article BEFORE writing any code.
|
**Step 2 — Verify:** Read source files from wiki BEFORE coding.
|
||||||
|
|
||||||
Wiki articles are structural summaries extracted by AST. They show routes, models, and file locations.
|
Wiki = structural summaries (routes, models, file locations). No function logic, middleware internals, runtime behavior. Don't code from wiki alone—read sources.
|
||||||
They do NOT show full function logic, middleware internals, or dynamic runtime behavior.
|
|
||||||
**Never write or modify code based solely on wiki content — always read source files first.**
|
|
||||||
|
|
||||||
Read in order at session start:
|
Read in order at session start:
|
||||||
1. `.codesight/wiki/index.md` — orientation map (~200 tokens)
|
1. `.codesight/wiki/index.md` — orientation map (~200 tokens)
|
||||||
@@ -76,8 +74,7 @@ Read in order at session start:
|
|||||||
3. Domain article (e.g. `.codesight/wiki/auth.md`) → check "Source Files" section → read those files
|
3. Domain article (e.g. `.codesight/wiki/auth.md`) → check "Source Files" section → read those files
|
||||||
4. `.codesight/CODESIGHT.md` — full context map for deep exploration
|
4. `.codesight/CODESIGHT.md` — full context map for deep exploration
|
||||||
|
|
||||||
Routes marked `[inferred]` in wiki articles were detected via regex — verify against source before trusting.
|
`[inferred]` routes = regex-detected. Verify sources. ⚠ in wiki? Re-run `codesight --wiki`.
|
||||||
If any source file shows ⚠ in the wiki, re-run `codesight --wiki` before proceeding.
|
|
||||||
|
|
||||||
Or use the codesight MCP server for on-demand queries:
|
Or use the codesight MCP server for on-demand queries:
|
||||||
- `codesight_get_wiki_article` — read a specific wiki article by name
|
- `codesight_get_wiki_article` — read a specific wiki article by name
|
||||||
@@ -87,13 +84,13 @@ Or use the codesight MCP server for on-demand queries:
|
|||||||
- `codesight_get_blast_radius --file src/lib/db.ts` — impact analysis before changes
|
- `codesight_get_blast_radius --file src/lib/db.ts` — impact analysis before changes
|
||||||
- `codesight_get_schema --model users` — specific model details
|
- `codesight_get_schema --model users` — specific model details
|
||||||
|
|
||||||
Only open specific files after consulting codesight context. This saves ~16.893 tokens per conversation.
|
Consult codesight context first. Saves ~16.893 tokens/conversation.
|
||||||
|
|
||||||
## graphify
|
## graphify
|
||||||
|
|
||||||
This project has a graphify knowledge graph at graphify-out/.
|
graphify knowledge graph at graphify-out/.
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
- Before answering architecture or codebase questions, read graphify-out/GRAPH_REPORT.md for god nodes and community structure
|
- Architecture/codebase questions? Read graphify-out/GRAPH_REPORT.md (god nodes, communities).
|
||||||
- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
|
- graphify-out/wiki/index.md exists? Use it (not raw files).
|
||||||
- After modifying code files in this session, run `python3 -c "from graphify.watch import _rebuild_code; from pathlib import Path; _rebuild_code(Path('.'))"` to keep the graph current
|
- Code modified? Run `python3 -c "from graphify.watch import _rebuild_code; from pathlib import Path; _rebuild_code(Path('.'))"` to sync graph.
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
# Now-Chess
|
||||||
|
|
||||||
|
Scala 3.5.1 · Gradle 9
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
```
|
||||||
|
./clean # Clear build dirs — only when necessary
|
||||||
|
./compile # Compile all modules — always run
|
||||||
|
./test # Run all tests
|
||||||
|
./coverage # Check coverage
|
||||||
|
./lint # Run linters
|
||||||
|
```
|
||||||
|
Try to stick to these commands for consistency.
|
||||||
|
|
||||||
|
## Modules
|
||||||
|
|
||||||
|
| Module | Role | Depends on |
|
||||||
|
|--------|------|-----------|
|
||||||
|
| `api` | Model / shared types | (none) |
|
||||||
|
| `core` | Primary business logic | api, rule |
|
||||||
|
| `rule` | Game rules | api |
|
||||||
|
| `bot` | Bots and AI | api,rule,io |
|
||||||
|
| `io` | Export formats | api, core |
|
||||||
|
|
||||||
|
## Style
|
||||||
|
|
||||||
|
- Use immutable data and pure functions.
|
||||||
|
- Keep functions under 30 lines. If you need "and" to describe it, split it.
|
||||||
|
- Keep cyclomatic complexity under 15.
|
||||||
|
- Avoid comments. Let names carry intent; comment only non-obvious algorithms.
|
||||||
|
- Scan for duplicated logic before finishing. Extract it.
|
||||||
|
- Follow default Sonar style for Scala.
|
||||||
|
- Use `Option` or `Either` for fallible operations; avoid exceptions for control flow.
|
||||||
|
- Naming: types are PascalCase, functions/values are camelCase.
|
||||||
|
|
||||||
|
## Code Quality
|
||||||
|
|
||||||
|
- **Coverage:** 100% condition coverage required in `api`, `core`, `rule`, `io` (mandatory); `ui` exempt.
|
||||||
|
|
||||||
|
### Linters
|
||||||
|
|
||||||
|
- **scalafmt** — enforces formatting; run `./gradlew spotlessScalaCheck` to check and `./gradlew spotlessScalaApply` to refactor.
|
||||||
|
- **scalafix** — enforces style and detects unused imports/code; run `./gradlew scalafix` to apply rules.
|
||||||
|
|
||||||
|
## Architecture Decisions
|
||||||
|
|
||||||
|
- **Immutable state as primary model:** GameContext (api) holds board, history, player state — immutable, passed through the system. Each move creates a new GameContext, enabling undo/redo without side effects.
|
||||||
|
- **Observer pattern for UI decoupling:** GameEngine publishes move/state events; CommandInvoker queues moves; UI listens to events, not polling. GameEngine never imports UI code.
|
||||||
|
- **RuleSet trait encapsulates rules:** Move generation, check, castling, en passant all in RuleSet impl. GameEngine calls rules as a black box; rules don't know about the rest of core.
|
||||||
|
- **Polyglot hash must follow spec index layout:** piece keys use interleaved mapping `(pieceType * 2 + colorBit)` with black=0/white=1, castling keys are `768..771`, en-passant file keys are `772..779` and are XORed only if side-to-move has a pawn that can capture en passant, side-to-move key is `780` for white.
|
||||||
|
- **Alpha-beta uses sequential PV search by default:** parallel split was disabled because fixed-window futures removed pruning effectiveness; correctness and pruning quality take priority over speculative parallelism.
|
||||||
|
- **Search hash is updated incrementally per move:** bot search now updates Zobrist keys from parent hash with move deltas instead of recomputing piece scans at every node.
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- **Tests are the spec.** Never modify tests to pass; modify requirements or code. Update tests only if requirements change.
|
||||||
|
- Never read build folders. Ask permission if needed.
|
||||||
|
- Keep this file up to date with any important decisions or conventions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instructions for Claude Code
|
||||||
|
|
||||||
|
### Two-Step Rule (mandatory)
|
||||||
|
**Step 1 — Orient:** Use wiki articles to find WHERE things live.
|
||||||
|
**Step 2 — Verify:** Read the actual source files listed in the wiki article BEFORE writing any code.
|
||||||
|
|
||||||
|
Wiki articles are structural summaries extracted by AST. They show routes, models, and file locations.
|
||||||
|
They do NOT show full function logic, middleware internals, or dynamic runtime behavior.
|
||||||
|
**Never write or modify code based solely on wiki content — always read source files first.**
|
||||||
|
|
||||||
|
Read in order at session start:
|
||||||
|
1. `.codesight/wiki/index.md` — orientation map (~200 tokens)
|
||||||
|
2. `.codesight/wiki/overview.md` — architecture overview (~500 tokens)
|
||||||
|
3. Domain article (e.g. `.codesight/wiki/auth.md`) → check "Source Files" section → read those files
|
||||||
|
4. `.codesight/CODESIGHT.md` — full context map for deep exploration
|
||||||
|
|
||||||
|
Routes marked `[inferred]` in wiki articles were detected via regex — verify against source before trusting.
|
||||||
|
If any source file shows ⚠ in the wiki, re-run `codesight --wiki` before proceeding.
|
||||||
|
|
||||||
|
Or use the codesight MCP server for on-demand queries:
|
||||||
|
- `codesight_get_wiki_article` — read a specific wiki article by name
|
||||||
|
- `codesight_get_wiki_index` — get the wiki index
|
||||||
|
- `codesight_get_summary` — quick project overview
|
||||||
|
- `codesight_get_routes --prefix /api/users` — filtered routes
|
||||||
|
- `codesight_get_blast_radius --file src/lib/db.ts` — impact analysis before changes
|
||||||
|
- `codesight_get_schema --model users` — specific model details
|
||||||
|
|
||||||
|
Only open specific files after consulting codesight context. This saves ~16.893 tokens per conversation.
|
||||||
|
|
||||||
|
## graphify
|
||||||
|
|
||||||
|
This project has a graphify knowledge graph at graphify-out/.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
- Before answering architecture or codebase questions, read graphify-out/GRAPH_REPORT.md for god nodes and community structure
|
||||||
|
- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
|
||||||
|
- After modifying code files in this session, run `python3 -c "from graphify.watch import _rebuild_code; from pathlib import Path; _rebuild_code(Path('.'))"` to keep the graph current
|
||||||
@@ -0,0 +1,334 @@
|
|||||||
|
# Plan: Add Coordinator Microservice
|
||||||
|
|
||||||
|
## Context
|
||||||
|
NowChess scales `core` horizontally via shared Redis but lacks:
|
||||||
|
- **Instance visibility**: no way to list running cores or their load
|
||||||
|
- **Load balancing**: games land randomly on cores; no rebalancing
|
||||||
|
- **Failover**: dead cores orphan subscriptions; bullet chess requires <1s recovery
|
||||||
|
- **Auto-scaling**: manual ops to add/remove cores
|
||||||
|
- **Cache management**: no eviction of stale games from core memory
|
||||||
|
|
||||||
|
Bullet chess games run on move timings of <3s. 30s failover = game lost on clock. Target: **<300ms failover**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture: Sub-1s Failover
|
||||||
|
|
||||||
|
### Why Not Polling/TTL
|
||||||
|
- TTL expiry: minimum 10-30s detection
|
||||||
|
- HTTP polling 3x failure: 30s minimum
|
||||||
|
- **gRPC streaming TCP drop: 50-200ms** — use this as primary
|
||||||
|
|
||||||
|
### Primary: gRPC Bidirectional Streaming
|
||||||
|
- Core opens a **persistent bidirectional stream** (`CoreHeartbeatStream`) to coordinator on startup
|
||||||
|
- Core sends heartbeat frames every **200ms**
|
||||||
|
- Core crash = TCP RST/FIN → coordinator stream error in **~50-200ms**
|
||||||
|
- Stream also carries metadata updates (subscription count changes) in real-time
|
||||||
|
|
||||||
|
### Fallback: Redis Heartbeat + K8s Watch
|
||||||
|
- Redis heartbeat key `{prefix}:instances:{instanceId}` with **5s TTL**, refreshed every **2s**
|
||||||
|
- K8s pod watch via Kubernetes Java client (event-driven; handles pod eviction/OOMKill)
|
||||||
|
- Fallback covers: network partition (TCP stays up but core is zombie), coordinator restart gap
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
### 1. Module: `modules/coordinator`
|
||||||
|
**Language**: Scala 3.5.1, Quarkus REST + gRPC
|
||||||
|
**Ports**: HTTP 8086, gRPC 9086
|
||||||
|
**Dependencies**: Redisson, Kubernetes Java client, Quarkus gRPC
|
||||||
|
**Persistence**: None (all state in Redis)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Instance Registry
|
||||||
|
|
||||||
|
**Redis schema**:
|
||||||
|
```
|
||||||
|
{prefix}:instances:{instanceId}
|
||||||
|
- TTL: 5s (refreshed by core every 2s via background task)
|
||||||
|
- Value: JSON
|
||||||
|
{
|
||||||
|
"instanceId": "core-abc123",
|
||||||
|
"hostname": "core-pod-3",
|
||||||
|
"httpPort": 8080,
|
||||||
|
"grpcPort": 9080,
|
||||||
|
"subscriptionCount": 147,
|
||||||
|
"localCacheSize": 147,
|
||||||
|
"lastHeartbeat": "2026-04-26T10:15:30.123Z"
|
||||||
|
}
|
||||||
|
|
||||||
|
{prefix}:instance:{instanceId}:games
|
||||||
|
- Type: Redis Set (no TTL — managed explicitly)
|
||||||
|
- Members: all gameIds currently subscribed on this instance
|
||||||
|
```
|
||||||
|
|
||||||
|
**Core changes** (new `InstanceHeartbeatService` bean in `modules/core`):
|
||||||
|
- `@PostConstruct`: generate stable `instanceId` (hostname + random suffix); open gRPC stream to coordinator; publish Redis heartbeat; register in `{prefix}:instances:{instanceId}`
|
||||||
|
- Every 200ms: send heartbeat frame on gRPC stream (carries `subscriptionCount`)
|
||||||
|
- Every 2s: refresh Redis heartbeat bucket TTL
|
||||||
|
- `subscribeGame(gameId)`: `SADD {prefix}:instance:{instanceId}:games gameId`
|
||||||
|
- `unsubscribeGame(gameId)` / `evictGame(gameId)`: `SREM {prefix}:instance:{instanceId}:games gameId`
|
||||||
|
- `@PreDestroy`: delete Redis key + games set; close gRPC stream (clean shutdown)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Health Monitoring (3 signals, primary fast)
|
||||||
|
|
||||||
|
| Signal | Mechanism | Detection time | Role |
|
||||||
|
|--------|-----------|---------------|------|
|
||||||
|
| **gRPC stream drop** | TCP RST/FIN on bidirectional stream | 50–200ms | Primary |
|
||||||
|
| **Redis heartbeat expiry** | `{prefix}:instances:{instanceId}` TTL=5s | 5–7s | Fallback |
|
||||||
|
| **K8s pod watch** | `CoreV1Api.listNamespacedPod` watch stream | ~instant (pod events) | Fallback |
|
||||||
|
|
||||||
|
**Dead decision**:
|
||||||
|
- gRPC stream drops → **immediate failover** (no confirmation needed; games must recover fast)
|
||||||
|
- Redis heartbeat expires (gRPC still up) → verify with single HTTP `/q/health` call → if fail: failover
|
||||||
|
- K8s pod NotReady (gRPC still up) → failover
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Failover Protocol (<300ms target)
|
||||||
|
|
||||||
|
```
|
||||||
|
T+0ms Core JVM crashes / network drops
|
||||||
|
T+50ms Coordinator: gRPC stream error received
|
||||||
|
T+52ms SMEMBERS {prefix}:instance:{instanceId}:games → list of orphaned gameIds
|
||||||
|
T+55ms Distribute gameIds across healthy cores (least-loaded first)
|
||||||
|
T+60ms BatchResubscribeGames gRPC call(s) fire to healthy core(s)
|
||||||
|
T+150ms Healthy cores resubscribed; Redis s2c topics live again
|
||||||
|
T+200ms WebSocket clients reconnect; receive GameFullEventDto on CONNECTED
|
||||||
|
```
|
||||||
|
|
||||||
|
**Failover steps** (coordinator `FailoverService`):
|
||||||
|
1. On stream drop for `instanceId`:
|
||||||
|
a. Mark instance DEAD in local map
|
||||||
|
b. `SMEMBERS {prefix}:instance:{instanceId}:games`
|
||||||
|
c. Group gameIds into batches per target core (round-robin by load)
|
||||||
|
d. For each target core: call `BatchResubscribeGames(gameIds)`
|
||||||
|
e. Each target core: calls `subscribeGame(gameId)` for each (loads from Redis if not in local cache)
|
||||||
|
f. `DEL {prefix}:instance:{instanceId}:games` (cleanup)
|
||||||
|
2. Log failover event with count of games migrated + latency
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Load Rebalancing
|
||||||
|
|
||||||
|
**Thresholds** (both must be evaluated):
|
||||||
|
1. **Absolute**: any core > 500 games → rebalance
|
||||||
|
2. **Relative**: max load > mean × 1.2 AND max - min > 50 games → rebalance
|
||||||
|
|
||||||
|
**Algorithm** (runs every 30s, min 60s between actual rebalances):
|
||||||
|
1. Read all `{prefix}:instances:*` keys → load map
|
||||||
|
2. Identify overloaded cores (exceed either threshold)
|
||||||
|
3. For each overloaded core: pick `excess = load - targetLoad` games
|
||||||
|
4. Assign excess games to underloaded cores
|
||||||
|
5. Call `UnsubscribeGames(gameIds)` on overloaded core
|
||||||
|
6. Call `BatchResubscribeGames(gameIds)` on target core
|
||||||
|
7. Overloaded core: `SREM` each game from its set
|
||||||
|
8. Target core: `SADD` each game to its set on subscribe
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. Auto-Scaling
|
||||||
|
|
||||||
|
**Metric**: avg `subscriptionCount` across all cores
|
||||||
|
|
||||||
|
**Actions**:
|
||||||
|
- avg > `scale-up-threshold` (80% of max): patch `nowchess-core` Argo Rollout `spec.replicas += 1`
|
||||||
|
- avg < `scale-down-threshold` (30% of max) AND `replicas > min-replicas`: drain one core then scale down
|
||||||
|
- Backoff: min 2-minute interval between scale events
|
||||||
|
|
||||||
|
**Argo Rollouts API**:
|
||||||
|
- CRD: `argoproj.io/v1alpha1`, Kind: `Rollout`, resource: `rollouts`
|
||||||
|
- Scale via Fabric8 `GenericKubernetesResource` patch on `spec.replicas`
|
||||||
|
- No StatefulSet — Argo Rollout owns pod lifecycle (canary/blue-green strategies respected)
|
||||||
|
- Pod watch filter: label selector `app=nowchess-core` (Rollout sets this; `rollouts-pod-template-hash` is Argo's equivalent of `pod-template-hash`)
|
||||||
|
|
||||||
|
**Drain before scale-down**:
|
||||||
|
1. Pick least-loaded core
|
||||||
|
2. Migrate all its games to other cores via `BatchResubscribeGames`
|
||||||
|
3. Call `DrainInstance(instanceId)` on that core (sets it to reject new subscriptions)
|
||||||
|
4. After drain confirmed: patch Rollout `spec.replicas -= 1`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. Cache Eviction
|
||||||
|
|
||||||
|
**Trigger**: coordinator scans `{prefix}:game:entry:*` every 10 minutes
|
||||||
|
**Policy**: if `now - lastUpdated > 45min` AND `gameId` in any instance's games set → call `EvictGame`
|
||||||
|
**Effect**: core removes game from `localEngines` and `unsubscribeGame`, `SREM` from instance set
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 8. Proto: `coordinator_service.proto`
|
||||||
|
|
||||||
|
```proto
|
||||||
|
syntax = "proto3";
|
||||||
|
package de.nowchess.coordinator;
|
||||||
|
|
||||||
|
service CoordinatorService {
|
||||||
|
// Core → Coordinator: bidirectional stream for liveness
|
||||||
|
rpc HeartbeatStream(stream HeartbeatFrame) returns (stream CoordinatorCommand);
|
||||||
|
|
||||||
|
// Coordinator → Core: batch resubscribe after failover or rebalance
|
||||||
|
rpc BatchResubscribeGames(BatchResubscribeRequest) returns (BatchResubscribeResponse);
|
||||||
|
|
||||||
|
// Coordinator → Core: unsubscribe games (rebalance source)
|
||||||
|
rpc UnsubscribeGames(UnsubscribeGamesRequest) returns (UnsubscribeGamesResponse);
|
||||||
|
|
||||||
|
// Coordinator → Core: evict idle games from local cache
|
||||||
|
rpc EvictGames(EvictGamesRequest) returns (EvictGamesResponse);
|
||||||
|
|
||||||
|
// Coordinator → Core: drain instance before scale-down
|
||||||
|
rpc DrainInstance(DrainInstanceRequest) returns (DrainInstanceResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
message HeartbeatFrame {
|
||||||
|
string instanceId = 1;
|
||||||
|
string hostname = 2;
|
||||||
|
int32 httpPort = 3;
|
||||||
|
int32 grpcPort = 4;
|
||||||
|
int32 subscriptionCount = 5;
|
||||||
|
int32 localCacheSize = 6;
|
||||||
|
int64 timestampMillis = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
message CoordinatorCommand {
|
||||||
|
// Future: coordinator can push commands back (e.g., "start draining")
|
||||||
|
string type = 1;
|
||||||
|
string payload = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BatchResubscribeRequest {
|
||||||
|
repeated string gameIds = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BatchResubscribeResponse {
|
||||||
|
int32 subscribedCount = 1;
|
||||||
|
repeated string failedGameIds = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UnsubscribeGamesRequest {
|
||||||
|
repeated string gameIds = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UnsubscribeGamesResponse {
|
||||||
|
int32 unsubscribedCount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EvictGamesRequest {
|
||||||
|
repeated string gameIds = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EvictGamesResponse {
|
||||||
|
int32 evictedCount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DrainInstanceRequest {}
|
||||||
|
|
||||||
|
message DrainInstanceResponse {
|
||||||
|
int32 gamesMigrated = 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 9. Coordinator REST API (internal)
|
||||||
|
|
||||||
|
- `GET /api/coordinator/instances` — all cores with load, health state
|
||||||
|
- `GET /api/coordinator/metrics` — load distribution, rebalance history
|
||||||
|
- `POST /api/coordinator/rebalance` — manual rebalance trigger
|
||||||
|
- `POST /api/coordinator/failover/{instanceId}` — manual failover
|
||||||
|
- `POST /api/coordinator/scale-up` / `scale-down` — manual scaling
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 10. Configuration
|
||||||
|
|
||||||
|
**`modules/coordinator/src/main/resources/application.yml`**:
|
||||||
|
```yaml
|
||||||
|
quarkus.application.name: nowchess-coordinator
|
||||||
|
quarkus.http.port: 8086
|
||||||
|
quarkus.grpc.server.port: 9086
|
||||||
|
|
||||||
|
nowchess.coordinator.max-games-per-core: 500
|
||||||
|
nowchess.coordinator.max-deviation-percent: 20
|
||||||
|
nowchess.coordinator.rebalance-interval: 30s
|
||||||
|
nowchess.coordinator.rebalance-min-interval: 60s
|
||||||
|
nowchess.coordinator.heartbeat-ttl: 5s
|
||||||
|
nowchess.coordinator.stream-heartbeat-interval: 200ms
|
||||||
|
nowchess.coordinator.cache-eviction-interval: 10m
|
||||||
|
nowchess.coordinator.game-idle-threshold: 45m
|
||||||
|
nowchess.coordinator.auto-scale-enabled: false
|
||||||
|
nowchess.coordinator.scale-up-threshold: 0.8
|
||||||
|
nowchess.coordinator.scale-down-threshold: 0.3
|
||||||
|
nowchess.coordinator.scale-min-replicas: 2
|
||||||
|
nowchess.coordinator.scale-max-replicas: 10
|
||||||
|
nowchess.coordinator.k8s-namespace: default
|
||||||
|
nowchess.coordinator.k8s-rollout-name: nowchess-core
|
||||||
|
nowchess.coordinator.k8s-rollout-label-selector: app=nowchess-core
|
||||||
|
|
||||||
|
quarkus.kubernetes-client.trust-certs: true
|
||||||
|
```
|
||||||
|
|
||||||
|
**Core `application.yml` additions**:
|
||||||
|
```yaml
|
||||||
|
nowchess.coordinator.host: localhost
|
||||||
|
nowchess.coordinator.grpc-port: 9086
|
||||||
|
nowchess.coordinator.stream-heartbeat-interval: 200ms
|
||||||
|
nowchess.coordinator.redis-heartbeat-interval: 2s
|
||||||
|
nowchess.coordinator.instance-id: ${HOSTNAME:local}-${quarkus.uuid}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 11. Files to Create / Modify
|
||||||
|
|
||||||
|
**New — `modules/coordinator/`**:
|
||||||
|
```
|
||||||
|
build.gradle.kts
|
||||||
|
src/main/proto/coordinator_service.proto
|
||||||
|
src/main/resources/application.yml
|
||||||
|
src/main/scala/de/nowchess/coordinator/
|
||||||
|
resource/CoordinatorResource.scala # REST endpoints
|
||||||
|
service/InstanceRegistry.scala # Redis instance list + in-memory map
|
||||||
|
service/HealthMonitor.scala # gRPC stream watcher + Redis TTL + k8s watch
|
||||||
|
service/FailoverService.scala # dead core → BatchResubscribe
|
||||||
|
service/LoadBalancer.scala # rebalance logic
|
||||||
|
service/AutoScaler.scala # k8s StatefulSet scaling
|
||||||
|
service/CacheEvictionManager.scala # idle game eviction
|
||||||
|
grpc/CoordinatorGrpcServer.scala # CoordinatorService gRPC impl (for HeartbeatStream)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Modify — `modules/core/`**:
|
||||||
|
- `build.gradle.kts` — add `coordinator_service.proto` stub, keep grpc dep
|
||||||
|
- `src/main/proto/coordinator_service.proto` — copy (or symlink) proto for stub generation
|
||||||
|
- `src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala` — `SADD`/`SREM` on subscribe/unsubscribe + implement `BatchResubscribeGames`, `UnsubscribeGames`, `EvictGames`, `DrainInstance` gRPC handlers
|
||||||
|
- `src/main/scala/de/nowchess/chess/` — new `InstanceHeartbeatService.scala` (startup, gRPC stream, Redis TTL refresh)
|
||||||
|
- `src/main/resources/application.yml` — coordinator connection config
|
||||||
|
|
||||||
|
**Modify — root**:
|
||||||
|
- `settings.gradle.kts` — add `include("modules/coordinator")`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
1. `./compile` — coordinator and core compile cleanly
|
||||||
|
2. **Stream detection**: start core + coordinator; kill core JVM (`kill -9`); coordinator logs failover within 300ms
|
||||||
|
3. **Game continuity**: active game on killed core; WebSocket client reconnects and receives game state
|
||||||
|
4. **Rebalance**: create 600 games on core-1 (2-core setup); coordinator rebalances ~100 to core-2
|
||||||
|
5. **Fallback**: disconnect gRPC stream manually but keep core alive; Redis TTL fallback triggers within 7s
|
||||||
|
6. **Cache eviction**: create idle game; coordinator calls `EvictGames` after 45min idle
|
||||||
|
7. **REST metrics**: `curl localhost:8086/api/coordinator/metrics` returns per-core load + health
|
||||||
|
8. **Restart recovery**: restart coordinator; gRPC streams re-establish from cores; state rebuilt from Redis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependencies (new)
|
||||||
|
|
||||||
|
- `io.fabric8:kubernetes-client:6.13.0` (Fabric8 k8s client — handles Argo `Rollout` CRD via `GenericKubernetesResource`; no Argo Java SDK needed)
|
||||||
|
- Redisson — already in core, reuse via shared config
|
||||||
|
- Quarkus gRPC — already in core, reuse
|
||||||
+149
@@ -0,0 +1,149 @@
|
|||||||
|
# NowChess Bruno API Collection
|
||||||
|
|
||||||
|
Complete API collection for all NowChess microservices.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
bruno/
|
||||||
|
├── collection.bru # Collection metadata
|
||||||
|
├── environments/ # Environment configurations
|
||||||
|
│ ├── local.bru # Local development (http://localhost)
|
||||||
|
│ ├── staging.bru # Staging (https://st.nowchess.janis-eccarius.de)
|
||||||
|
│ └── prod.bru # Production (https://nowchess.janis-eccarius.de)
|
||||||
|
├── core/ # Core service endpoints (port 8080)
|
||||||
|
│ ├── game.bru # Game management
|
||||||
|
│ ├── rules.bru # Rule validation (@InternalOnly)
|
||||||
|
│ ├── io.bru # Import/Export (@InternalOnly)
|
||||||
|
│ └── coordinator.bru # Orchestration
|
||||||
|
├── account/ # Account service (port 8083)
|
||||||
|
│ ├── account.bru # User & bot accounts
|
||||||
|
│ ├── challenge.bru # Player challenges
|
||||||
|
│ └── official-challenge.bru # Official bot challenges
|
||||||
|
├── store/ # Store service (port 8085)
|
||||||
|
│ └── game.bru # Game persistence
|
||||||
|
├── ws/ # WebSocket (port 8084)
|
||||||
|
│ ├── game-ws.bru # Game real-time updates
|
||||||
|
│ └── user-ws.bru # User notifications
|
||||||
|
└── bot/ # Bot integration
|
||||||
|
└── events.bru # Bot event streaming
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ingress Routing
|
||||||
|
|
||||||
|
Based on `ingress-nginx` configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
/api/account → nowchess-account-active:8083
|
||||||
|
/ws → nowchess-ws-active:8084
|
||||||
|
/api/store → nowchess-store-active:8085
|
||||||
|
/api → nowchess-core-active:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environments
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
```
|
||||||
|
baseUrl: http://localhost:8080
|
||||||
|
accountBaseUrl: http://localhost:8083
|
||||||
|
storeBaseUrl: http://localhost:8085
|
||||||
|
wsBaseUrl: ws://localhost:8084
|
||||||
|
```
|
||||||
|
|
||||||
|
### Staging
|
||||||
|
```
|
||||||
|
baseUrl: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
wsBaseUrl: wss://st.nowchess.janis-eccarius.de/ws
|
||||||
|
```
|
||||||
|
|
||||||
|
### Production
|
||||||
|
```
|
||||||
|
baseUrl: https://nowchess.janis-eccarius.de/api
|
||||||
|
wsBaseUrl: wss://nowchess.janis-eccarius.de/ws
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
Set these in your Bruno environment for authentication:
|
||||||
|
- `token`: JWT token for regular user operations
|
||||||
|
- `adminToken`: JWT token with Admin role
|
||||||
|
- `botToken`: Bot account JWT token
|
||||||
|
- `internalToken`: Internal service-to-service token
|
||||||
|
- `gameId`: Game identifier for game endpoints
|
||||||
|
- `username`: User username for profile/challenge operations
|
||||||
|
- `playerId`: Player ID for store operations
|
||||||
|
- `botId`: Bot ID for bot endpoints
|
||||||
|
- `botName`: Official bot name for challenges
|
||||||
|
- `difficulty`: Bot difficulty 1000-2800 (ELO)
|
||||||
|
- `color`: white/black/random for bot challenges
|
||||||
|
|
||||||
|
## Security Notes
|
||||||
|
|
||||||
|
From `@modules/security/src`:
|
||||||
|
- **InternalOnly** endpoints require internal service authentication
|
||||||
|
- `/api/rules/*`
|
||||||
|
- `/io/*`
|
||||||
|
- **@RolesAllowed** endpoints require JWT with specific roles
|
||||||
|
- Admin operations
|
||||||
|
- Authenticated user operations
|
||||||
|
- Internal filters validate service-to-service calls
|
||||||
|
|
||||||
|
## API Endpoints Summary
|
||||||
|
|
||||||
|
### Public Endpoints (No Auth Required)
|
||||||
|
- `GET /api/account/{username}` - Public profile
|
||||||
|
- `GET /api/account/official-bots` - List official bots
|
||||||
|
- `GET /game/{gameId}` - Game record
|
||||||
|
- `GET /api/board/game/{gameId}` - Game state
|
||||||
|
- `GET /api/board/game/{gameId}/moves` - Legal moves
|
||||||
|
|
||||||
|
### Authenticated Endpoints (JWT Required)
|
||||||
|
- `POST /api/account` - Register
|
||||||
|
- `POST /api/account/login` - Login
|
||||||
|
- `GET /api/account/me` - Current user profile
|
||||||
|
- `POST /api/challenge/*` - Challenge operations
|
||||||
|
- `POST /api/challenge/official/{botName}` - Challenge official bot
|
||||||
|
- `POST /api/account/bots` - Create bot account
|
||||||
|
- `GET /api/bot/stream/events` - Bot event stream
|
||||||
|
- `WS /api/board/game/{gameId}/ws` - Game WebSocket
|
||||||
|
- `WS /api/user/ws` - User notifications
|
||||||
|
|
||||||
|
### Internal Endpoints (@InternalOnly)
|
||||||
|
- `POST /api/rules/*` - Rule validation
|
||||||
|
- `POST /io/*` - Format conversion
|
||||||
|
- `POST /api/board/game` - Create game
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. **Select Environment**: Click the environment dropdown and choose local/staging/prod
|
||||||
|
2. **Set Variables**: Update `token`, `gameId`, `username`, etc. as needed
|
||||||
|
3. **Send Request**: Click Send on any endpoint
|
||||||
|
4. **WebSocket**: Use Bruno's WebSocket support or connect manually with:
|
||||||
|
```bash
|
||||||
|
websocat wss://nowchess.janis-eccarius.de/ws/api/board/game/GAMEID/ws
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example Workflows
|
||||||
|
|
||||||
|
### Play a Game
|
||||||
|
1. `POST /api/account` - Create user
|
||||||
|
2. `POST /api/account/login` - Get JWT token
|
||||||
|
3. `POST /api/challenge/official/Stockfish` - Challenge a bot
|
||||||
|
4. Use returned `gameId` for subsequent moves
|
||||||
|
5. `WS /api/board/game/{gameId}/ws` - Connect for real-time updates
|
||||||
|
6. `POST /api/board/game/{gameId}/move/{uci}` - Make moves
|
||||||
|
|
||||||
|
### Manage Bot Account
|
||||||
|
1. `POST /api/account` - Create main account
|
||||||
|
2. `POST /api/account/login` - Get token
|
||||||
|
3. `POST /api/account/bots` - Create bot account
|
||||||
|
4. Copy bot token from response
|
||||||
|
5. `GET /api/bot/stream/events?botId={botId}` - Listen for game invites
|
||||||
|
6. `POST /api/bot/game/{gameId}/move/{uci}` - Submit moves
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- All timestamps are ISO 8601 format
|
||||||
|
- Move notation uses UCI (e.g., "e2e4")
|
||||||
|
- Game IDs are auto-generated UUIDs
|
||||||
|
- WebSocket connections auto-close on inactivity (check your server timeout)
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
meta {
|
||||||
|
name: Register
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"username": "player1",
|
||||||
|
"email": "player1@example.com",
|
||||||
|
"password": "securepassword"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Login
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/login
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"username": "player1",
|
||||||
|
"password": "securepassword"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Current User
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/account/me
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Public Profile
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/account/{{username}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Create Bot
|
||||||
|
type: http
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/bots
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"name": "ChessBot-1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: List Bots
|
||||||
|
type: http
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/account/bots
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Update Bot Name
|
||||||
|
type: http
|
||||||
|
seq: 7
|
||||||
|
}
|
||||||
|
|
||||||
|
put {
|
||||||
|
url: {{accountBaseUrl}}/account/bots/{{botId}}
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"name": "ChessBot-Updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Rotate Bot Token
|
||||||
|
type: http
|
||||||
|
seq: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/bots/{{botId}}/rotate-token
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Delete Bot
|
||||||
|
type: http
|
||||||
|
seq: 9
|
||||||
|
}
|
||||||
|
|
||||||
|
delete {
|
||||||
|
url: {{accountBaseUrl}}/account/bots/{{botId}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Official Bots
|
||||||
|
type: http
|
||||||
|
seq: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/account/official-bots
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Ban User
|
||||||
|
type: http
|
||||||
|
seq: 11
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/{{userId}}/ban
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{adminToken}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Unban User
|
||||||
|
type: http
|
||||||
|
seq: 12
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/{{userId}}/unban
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{adminToken}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: account
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
meta {
|
||||||
|
name: Send Challenge
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/challenge/{{username}}
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"timeControl": {
|
||||||
|
"limitSeconds": 600,
|
||||||
|
"incrementSeconds": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: List Challenges
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/challenge
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Challenge
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{accountBaseUrl}}/challenge/{{challengeId}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Accept Challenge
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/challenge/{{challengeId}}/accept
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Decline Challenge
|
||||||
|
type: http
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/challenge/{{challengeId}}/decline
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"reason": "Not interested"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Cancel Challenge
|
||||||
|
type: http
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/challenge/{{challengeId}}/cancel
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: challenge
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Challenge Official Bot
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/challenge/official/{{botName}}?difficulty={{difficulty}}&color={{color}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Query Parameters:
|
||||||
|
- difficulty: 1000-2800 (ELO)
|
||||||
|
- color: white | black | random
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
meta {
|
||||||
|
name: Create Official Bot
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{accountBaseUrl}}/account/official-bots
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{adminToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"name": "Stockfish-1000"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Delete Official Bot
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
delete {
|
||||||
|
url: {{accountBaseUrl}}/account/official-bots/{{botId}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{adminToken}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: official
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Offer Draw
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/offer
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Accept Draw
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/accept
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Decline Draw
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/decline
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Claim Draw
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/claim
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: draw
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Export FEN
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/export/fen
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Export PGN
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/export/pgn
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: export
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
meta {
|
||||||
|
name: Create Game
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"white": {"id": "p1", "displayName": "Alice"},
|
||||||
|
"black": {"id": "p2", "displayName": "Bob"},
|
||||||
|
"timeControl": {
|
||||||
|
"limitSeconds": 300,
|
||||||
|
"incrementSeconds": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Game
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
vars:pre-request {
|
||||||
|
gameId: j0nPtcjl
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
meta {
|
||||||
|
name: Stream Game
|
||||||
|
type: ws
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
ws {
|
||||||
|
url: {{wsBaseUrl}}/api/board/game/{{gameId}}/ws
|
||||||
|
body: ws
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
body:ws {
|
||||||
|
name: move
|
||||||
|
content: '''
|
||||||
|
{
|
||||||
|
"type": "MOVE",
|
||||||
|
"uci": "b1c3"
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
|
||||||
|
body:ws {
|
||||||
|
name: ping
|
||||||
|
content: '''
|
||||||
|
{
|
||||||
|
"type": "PING"
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
|
||||||
|
vars:pre-request {
|
||||||
|
gameId: j0nPtcjl
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: Resign
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/resign
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: game
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
meta {
|
||||||
|
name: Import FEN
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/import/fen
|
||||||
|
body: json
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
|
||||||
|
"white": {"id": "p1", "displayName": "Alice"},
|
||||||
|
"black": {"id": "p2", "displayName": "Bob"},
|
||||||
|
"timeControl": {
|
||||||
|
"limitSeconds": 300,
|
||||||
|
"incrementSeconds": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
meta {
|
||||||
|
name: Import PGN
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/api/board/game/import/pgn
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"pgn": "1. e4 e5 2. Nf3 Nc6 *"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: import
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Make Move
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/move/b1c3
|
||||||
|
body: none
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
vars:pre-request {
|
||||||
|
gameId: Yg200tOF
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Legal Moves
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/moves
|
||||||
|
body: none
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
params:query {
|
||||||
|
square: e2
|
||||||
|
}
|
||||||
|
|
||||||
|
vars:pre-request {
|
||||||
|
gameId: COy3oigz
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
meta {
|
||||||
|
name: Undo Move
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/undo
|
||||||
|
body: none
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
meta {
|
||||||
|
name: Redo Move
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/api/board/game/{{gameId}}/redo
|
||||||
|
body: none
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
meta {
|
||||||
|
name: move
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
meta {
|
||||||
|
name: Stream Bot Events
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/bot/stream/events?botId={{botId}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{botToken}}
|
||||||
|
Accept: text/event-stream
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Server-Sent Events stream.
|
||||||
|
Bot must match token subject (botId).
|
||||||
|
|
||||||
|
Events:
|
||||||
|
- Game start notification
|
||||||
|
- Move requests
|
||||||
|
- Game end notification
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
meta {
|
||||||
|
name: Stream Game Events
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/bot/game/stream/{{gameId}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: text/event-stream
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Server-Sent Events stream of game updates.
|
||||||
|
No authentication required - broadcasts all state changes.
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
meta {
|
||||||
|
name: Make Bot Move
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/bot/game/{{gameId}}/move/{{uci}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{botToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Submit move from bot.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- gameId: Game identifier
|
||||||
|
- uci: Move notation (e.g., e2e4)
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"version": "1",
|
||||||
|
"name": "NowChess API",
|
||||||
|
"type": "collection",
|
||||||
|
"ignore": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
meta {
|
||||||
|
name: NowChess API
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
title: NowChess Microservices API Collection
|
||||||
|
content: |
|
||||||
|
# NowChess API Collection
|
||||||
|
|
||||||
|
Complete API collection for all NowChess microservices.
|
||||||
|
|
||||||
|
## Services Architecture
|
||||||
|
- **Core** (8080): Game engine, rules validation, format import/export
|
||||||
|
- **Account** (8083): User management, bot accounts, challenges
|
||||||
|
- **Store** (8085): Game persistence and history
|
||||||
|
- **WebSocket** (8084): Real-time game updates
|
||||||
|
|
||||||
|
## Ingress Routing
|
||||||
|
- /api/account → nowchess-account-active:8083
|
||||||
|
- /ws → nowchess-ws-active:8084
|
||||||
|
- /api/store → nowchess-store-active:8085
|
||||||
|
- /api → nowchess-core-active:8080
|
||||||
|
|
||||||
|
## Environments
|
||||||
|
- **local**: http://localhost (direct service ports)
|
||||||
|
- **staging**: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
- **prod**: https://nowchess.janis-eccarius.de/api
|
||||||
|
|
||||||
|
## Security
|
||||||
|
@modules/security/src contains:
|
||||||
|
- InternalAuthFilter: Validates internal service tokens
|
||||||
|
- InternalOnly: Annotation for internal endpoints (rules, io)
|
||||||
|
- JWT validation for authenticated endpoints
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
meta {
|
||||||
|
name: List Instances
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/instances
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Returns all known core instances from the in-memory registry.
|
||||||
|
Registry is populated via gRPC heartbeats from core instances.
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Response: InstanceMetadata[]
|
||||||
|
instanceId: string — unique instance ID
|
||||||
|
hostname: string
|
||||||
|
httpPort: int
|
||||||
|
grpcPort: int
|
||||||
|
subscriptionCount: int — active game subscriptions
|
||||||
|
localCacheSize: int
|
||||||
|
lastHeartbeat: string — ISO-8601 timestamp
|
||||||
|
state: string — "HEALTHY" | "DEAD"
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
meta {
|
||||||
|
name: List Instances
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/instances
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Returns all known core instances from the in-memory registry.
|
||||||
|
Registry is populated via gRPC heartbeats from core instances.
|
||||||
|
|
||||||
|
Response: InstanceMetadata[]
|
||||||
|
instanceId: string — unique instance ID
|
||||||
|
hostname: string
|
||||||
|
httpPort: int
|
||||||
|
grpcPort: int
|
||||||
|
subscriptionCount: int — number of active game subscriptions
|
||||||
|
localCacheSize: int
|
||||||
|
lastHeartbeat: string — ISO-8601 timestamp
|
||||||
|
state: string — "HEALTHY" | "DEAD"
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Metrics
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/metrics
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Aggregate load metrics computed from the instance registry.
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Response: MetricsDto
|
||||||
|
totalInstances: int
|
||||||
|
healthyInstances: int
|
||||||
|
deadInstances: int
|
||||||
|
totalGames: int — sum of subscriptionCount across all instances
|
||||||
|
avgGamesPerCore: double
|
||||||
|
maxGamesPerCore: int
|
||||||
|
minGamesPerCore: int
|
||||||
|
instances: InstanceMetadata[]
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
meta {
|
||||||
|
name: Rebalance
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/rebalance
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Triggers a manual rebalance of game subscriptions across core instances.
|
||||||
|
Runs asynchronously — response does not wait for completion.
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Auto-rebalance runs every 30s (rebalance-interval), min 60s between runs
|
||||||
|
(rebalance-min-interval). Triggers when load deviation exceeds 20%
|
||||||
|
(max-deviation-percent).
|
||||||
|
|
||||||
|
Response: {"status": "rebalance_started"}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
meta {
|
||||||
|
name: Failover
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/failover/{{instanceId}}
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
vars:pre-request {
|
||||||
|
instanceId: core-instance-1
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Triggers manual failover for a specific core instance.
|
||||||
|
Marks it DEAD and migrates its game subscriptions to healthy instances.
|
||||||
|
Runs asynchronously — response does not wait for completion.
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Path param: instanceId — from /instances response (instanceId field)
|
||||||
|
|
||||||
|
Response: {"status": "failover_started", "instanceId": "<id>"}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
meta {
|
||||||
|
name: Scale Up
|
||||||
|
type: http
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/scale-up
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Triggers manual scale-up of core replicas via Kubernetes rollout.
|
||||||
|
Requires auto-scale-enabled=true and a reachable k8s API.
|
||||||
|
Respects scale-max-replicas (default: 10).
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Auto-scale triggers when avg load exceeds scale-up-threshold (default: 0.8).
|
||||||
|
|
||||||
|
Response: {"status": "scale_up_started"}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
meta {
|
||||||
|
name: Scale Down
|
||||||
|
type: http
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/scale-down
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Triggers manual scale-down of core replicas via Kubernetes rollout.
|
||||||
|
Requires auto-scale-enabled=true and a reachable k8s API.
|
||||||
|
Respects scale-min-replicas (default: 2).
|
||||||
|
|
||||||
|
Requires port-forward: kubectl port-forward svc/nowchess-coordinator 8086:8086 -n <namespace>
|
||||||
|
|
||||||
|
Auto-scale triggers when avg load drops below scale-down-threshold (default: 0.3).
|
||||||
|
|
||||||
|
Response: {"status": "scale_down_started"}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
meta {
|
||||||
|
name: List Instances
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{coordinatorBaseUrl}}/api/coordinator/instances
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
docs {
|
||||||
|
Returns all known core instances from the in-memory registry.
|
||||||
|
Registry is populated via gRPC heartbeats from core instances.
|
||||||
|
|
||||||
|
Response: InstanceMetadata[]
|
||||||
|
instanceId: string — unique instance ID
|
||||||
|
hostname: string
|
||||||
|
httpPort: int
|
||||||
|
grpcPort: int
|
||||||
|
subscriptionCount: int — number of active game subscriptions
|
||||||
|
localCacheSize: int
|
||||||
|
lastHeartbeat: string — ISO-8601 timestamp
|
||||||
|
state: string — "HEALTHY" | "DEAD"
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: coordinator
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
meta {
|
||||||
|
name: Create Game
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"white": {"id": "p1", "displayName": "Player 1"},
|
||||||
|
"black": {"id": "p2", "displayName": "Player 2"},
|
||||||
|
"timeControl": {"limitSeconds": 600, "incrementSeconds": 5},
|
||||||
|
"mode": "Open"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Game
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Make Move
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/move/{{uci}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Legal Moves
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/moves?square={{square}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Undo Move
|
||||||
|
type: http
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/undo
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Redo Move
|
||||||
|
type: http
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/redo
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Resign Game
|
||||||
|
type: http
|
||||||
|
seq: 7
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/resign
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
meta {
|
||||||
|
name: Import FEN
|
||||||
|
type: http
|
||||||
|
seq: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/import/fen
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
|
||||||
|
"white": {"id": "p1", "displayName": "Player 1"},
|
||||||
|
"black": {"id": "p2", "displayName": "Player 2"}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
meta {
|
||||||
|
name: Import PGN
|
||||||
|
type: http
|
||||||
|
seq: 9
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/import/pgn
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"pgn": "[Event \"Test Game\"]\n[Site \"NowChess\"]\n1. e4 e5 2. Nf3 Nc6"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Export FEN
|
||||||
|
type: http
|
||||||
|
seq: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/export/fen
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: text/plain
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Export PGN
|
||||||
|
type: http
|
||||||
|
seq: 11
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/export/pgn
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/x-chess-pgn
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Offer Draw
|
||||||
|
type: http
|
||||||
|
seq: 12
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/draw/offer
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Accept Draw
|
||||||
|
type: http
|
||||||
|
seq: 13
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/draw/accept
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Decline Draw
|
||||||
|
type: http
|
||||||
|
seq: 14
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/draw/decline
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Claim Draw
|
||||||
|
type: http
|
||||||
|
seq: 15
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/draw/claim
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Request Takeback
|
||||||
|
type: http
|
||||||
|
seq: 16
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/takeback/request
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user