Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d2cd3254b3 | |||
| 763a2b8c39 | |||
| 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 |
+201
-188
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> **Stack:** raw-http | none | unknown | scala
|
> **Stack:** raw-http | none | unknown | scala
|
||||||
|
|
||||||
> 0 routes + 40 rpc | 0 models | 0 components | 146 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.**
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -75,6 +75,7 @@
|
|||||||
- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame
|
- `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/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/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`
|
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||||
- class Challenge
|
- class Challenge
|
||||||
- function gameIdOpt
|
- function gameIdOpt
|
||||||
@@ -100,7 +101,7 @@
|
|||||||
- function persist
|
- function persist
|
||||||
- function findByEmail
|
- function findByEmail
|
||||||
- function findAll
|
- function findAll
|
||||||
- _...12 more_
|
- _...11 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||||
- class ChallengeRepository
|
- class ChallengeRepository
|
||||||
- function findActiveByChallengerId
|
- function findActiveByChallengerId
|
||||||
@@ -116,14 +117,16 @@
|
|||||||
- function me
|
- function me
|
||||||
- function publicProfile
|
- function publicProfile
|
||||||
- function banUser
|
- function banUser
|
||||||
- _...10 more_
|
- _...9 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||||
- class ChallengeResource
|
- class ChallengeResource
|
||||||
- function create
|
- function create
|
||||||
- function list
|
- function list
|
||||||
|
- function get
|
||||||
- function accept
|
- function accept
|
||||||
- function decline
|
- function decline
|
||||||
- function cancel
|
- _...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`
|
- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala`
|
||||||
- class AccountService
|
- class AccountService
|
||||||
- function register
|
- function register
|
||||||
@@ -131,15 +134,20 @@
|
|||||||
- function findByUsername
|
- function findByUsername
|
||||||
- function findById
|
- function findById
|
||||||
- function createBotAccount
|
- function createBotAccount
|
||||||
- _...11 more_
|
- _...10 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||||
- class ChallengeService
|
- class ChallengeService
|
||||||
- function create
|
- function create
|
||||||
- function accept
|
- function accept
|
||||||
- function decline
|
- function decline
|
||||||
- function cancel
|
- function cancel
|
||||||
- function listForUser
|
- function findById
|
||||||
- _...1 more_
|
- _...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
|
||||||
@@ -162,10 +170,6 @@
|
|||||||
- class Square
|
- class Square
|
||||||
- function fromAlgebraic
|
- function fromAlgebraic
|
||||||
- function offset
|
- function offset
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`
|
|
||||||
- class Bot
|
|
||||||
- function name
|
|
||||||
- function nextMove
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply
|
- `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/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/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||||
@@ -186,6 +190,14 @@
|
|||||||
- function withEnPassantSquare
|
- function withEnPassantSquare
|
||||||
- function withHalfMoveClock
|
- function withHalfMoveClock
|
||||||
- _...4 more_
|
- _...4 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/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/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
|
||||||
@@ -201,115 +213,21 @@
|
|||||||
- function isCheck
|
- function isCheck
|
||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...6 more_
|
- _...6 more_
|
||||||
- `modules/bot/python/nnue.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- function get_weights_dir: ()
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function get_data_dir: ()
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||||
- function list_checkpoints: ()
|
- class BotRegistry
|
||||||
- function migrate_legacy_data: ()
|
- function register
|
||||||
- function show_header: ()
|
- function unregister
|
||||||
- function show_checkpoints_table: ()
|
- function dispatch
|
||||||
- _...10 more_
|
- function registeredBots
|
||||||
- `modules/bot/python/src/dataset.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||||
- function get_datasets_dir: () -> Path
|
- class BotEventResource
|
||||||
- function next_dataset_version: () -> int
|
- function streamEvents
|
||||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
- function streamGame
|
||||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
- function makeMove
|
||||||
- function save_dataset_metadata: (version, metadata) -> None
|
|
||||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
|
||||||
- _...4 more_
|
|
||||||
- `modules/bot/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
|
||||||
- `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)
|
|
||||||
- `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)
|
|
||||||
- `modules/bot/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
|
||||||
- `modules/bot/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/bot/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/bot/src/main/scala/de/nowchess/bot/BotController.scala`
|
|
||||||
- class BotController
|
|
||||||
- function getBot
|
|
||||||
- function listBots
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
|
||||||
- class BotMoveRepetition
|
|
||||||
- function blockedMoves
|
|
||||||
- function repeatedMove
|
|
||||||
- function filterAllowed
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
|
||||||
- `modules/bot/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/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
|
||||||
- class EvaluationClassic
|
|
||||||
- function evaluate
|
|
||||||
- function countRay
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
|
||||||
- `modules/bot/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/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
|
||||||
- class NbaiLoader
|
|
||||||
- function load
|
|
||||||
- function loadDefault
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
|
||||||
- function toJson
|
|
||||||
- class NbaiMetadata
|
|
||||||
- function fromJson
|
|
||||||
- function str
|
|
||||||
- function num
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
|
||||||
- function bestMove
|
|
||||||
- function bestMove
|
|
||||||
- function bestMoveWithTime
|
|
||||||
- function bestMoveWithTime
|
|
||||||
- function loop
|
|
||||||
- function loop
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
|
||||||
- class MoveOrdering
|
|
||||||
- class OrderingContext
|
|
||||||
- function addKillerMove
|
|
||||||
- function getKillerMoves
|
|
||||||
- function addHistory
|
|
||||||
- function getHistory
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
|
||||||
- function advance
|
|
||||||
- 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/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||||
- class BeansProducer
|
|
||||||
- function redissonClient
|
|
||||||
- function kubernetesClient
|
|
||||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||||
- class CoordinatorConfig
|
- class CoordinatorConfig
|
||||||
- function maxGamesPerCore
|
- function maxGamesPerCore
|
||||||
@@ -393,10 +311,6 @@
|
|||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function produceRedissonClient
|
|
||||||
- function shutdown
|
|
||||||
- `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
|
||||||
@@ -405,21 +319,14 @@
|
|||||||
- function context
|
- function context
|
||||||
- function pendingDrawOfferBy
|
- function pendingDrawOfferBy
|
||||||
- function currentClockState
|
- function currentClockState
|
||||||
- _...22 more_
|
- _...21 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
||||||
- class ApiException
|
- class ApiException
|
||||||
- class GameNotFoundException
|
- class GameNotFoundException
|
||||||
- class BadRequestException
|
- 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/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/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||||
- class CoreProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||||
- class IoGrpcClientWrapper
|
- class IoGrpcClientWrapper
|
||||||
- function exportCombined
|
- function exportCombined
|
||||||
@@ -444,15 +351,18 @@
|
|||||||
- function unsubscribe
|
- function unsubscribe
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala` — class GameRedisPublisher, function onGameEvent
|
- `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`
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala`
|
||||||
- class GameRedisSubscriberManager
|
- class GameRedisSubscriberManager
|
||||||
- function subscribeGame
|
- function subscribeGame
|
||||||
- function onMessage
|
|
||||||
- function unsubscribeGame
|
- function unsubscribeGame
|
||||||
- function batchResubscribeGames
|
- function batchResubscribeGames
|
||||||
- function unsubscribeGames
|
- function unsubscribeGames
|
||||||
- _...3 more_
|
- function evictGames
|
||||||
|
- _...2 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||||
- class GameRegistry
|
- class GameRegistry
|
||||||
- function store
|
- function store
|
||||||
@@ -518,14 +428,7 @@
|
|||||||
- 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/IoGrpcService.scala` — class IoGrpcService
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||||
- class IoProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `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`
|
||||||
@@ -556,16 +459,124 @@
|
|||||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
- `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/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||||
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
- `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/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/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||||
- class ProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||||
- class RuleSetResource
|
- class RuleSetResource
|
||||||
@@ -576,38 +587,40 @@
|
|||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...6 more_
|
- _...6 more_
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalAuthFilter.scala` — class InternalAuthFilter
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcAuthInterceptor.scala` — class InternalGrpcAuthInterceptor
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcSecretClientInterceptor.scala` — class InternalGrpcSecretClientInterceptor
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalSecretClientFilter.scala` — class InternalSecretClientFilter
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function redissonClient
|
|
||||||
- function close
|
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||||
- class GameWritebackStreamListener
|
|
||||||
- function startListening
|
|
||||||
- function onMessage
|
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||||
- class GameRecordRepository
|
- class GameRecordRepository
|
||||||
- function findByGameId
|
- function findByGameId
|
||||||
- function persist
|
- function persist
|
||||||
- function merge
|
- function merge
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame
|
- function findByPlayerId
|
||||||
|
- function findByPlayerIdRunning
|
||||||
|
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala`
|
||||||
|
- class StoreGameResource
|
||||||
|
- function getGame
|
||||||
|
- function getRunning
|
||||||
|
- function getHistory
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `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/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function produceRedissonClient
|
|
||||||
- function shutdown
|
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||||
- class GameWebSocketResource
|
- class GameWebSocketResource
|
||||||
- function onOpen
|
- function onOpen
|
||||||
- function onMessage
|
|
||||||
- function onTextMessage
|
- function onTextMessage
|
||||||
- function onClose
|
- function onClose
|
||||||
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala`
|
||||||
|
- class UserWebSocketResource
|
||||||
|
- function onOpen
|
||||||
|
- function onClose
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -615,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`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -631,38 +644,38 @@
|
|||||||
## 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 **76** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **57** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **56** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **55** 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 **47** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **28** 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/Board.scala` — imported by **20** 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/PieceType.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **20** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **18** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **19** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **12** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **12** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** files
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — imported by **8** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **7** files
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **8** files
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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/api/src/main/scala/de/nowchess/api/bot/Bot.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/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +71 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/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` +52 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/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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` +50 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/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/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/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` +23 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/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` +15 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/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.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` +15 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/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` +15 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/api/src/main/scala/de/nowchess/api/game/DrawReason.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`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` +13 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/api/src/main/scala/de/nowchess/api/game/GameResult.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`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` +13 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
|
||||||
|
|||||||
+21
-21
@@ -3,35 +3,35 @@
|
|||||||
## 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 **76** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **57** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **56** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **55** 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 **47** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **28** 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/Board.scala` — imported by **20** 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/PieceType.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **20** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **18** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **20** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **19** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files
|
- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **12** files
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files
|
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **12** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** files
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files
|
||||||
|
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — imported by **8** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **7** files
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **8** files
|
||||||
|
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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/api/src/main/scala/de/nowchess/api/bot/Bot.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/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +71 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/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` +52 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/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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` +50 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/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/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/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` +23 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/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` +15 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/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.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` +15 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/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` +15 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/api/src/main/scala/de/nowchess/api/game/DrawReason.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`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` +13 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/api/src/main/scala/de/nowchess/api/game/GameResult.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`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` +13 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
|
||||||
|
|||||||
+177
-164
@@ -19,6 +19,7 @@
|
|||||||
- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame
|
- `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/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/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`
|
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||||
- class Challenge
|
- class Challenge
|
||||||
- function gameIdOpt
|
- function gameIdOpt
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
- function persist
|
- function persist
|
||||||
- function findByEmail
|
- function findByEmail
|
||||||
- function findAll
|
- function findAll
|
||||||
- _...12 more_
|
- _...11 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||||
- class ChallengeRepository
|
- class ChallengeRepository
|
||||||
- function findActiveByChallengerId
|
- function findActiveByChallengerId
|
||||||
@@ -60,14 +61,16 @@
|
|||||||
- function me
|
- function me
|
||||||
- function publicProfile
|
- function publicProfile
|
||||||
- function banUser
|
- function banUser
|
||||||
- _...10 more_
|
- _...9 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||||
- class ChallengeResource
|
- class ChallengeResource
|
||||||
- function create
|
- function create
|
||||||
- function list
|
- function list
|
||||||
|
- function get
|
||||||
- function accept
|
- function accept
|
||||||
- function decline
|
- function decline
|
||||||
- function cancel
|
- _...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`
|
- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala`
|
||||||
- class AccountService
|
- class AccountService
|
||||||
- function register
|
- function register
|
||||||
@@ -75,15 +78,20 @@
|
|||||||
- function findByUsername
|
- function findByUsername
|
||||||
- function findById
|
- function findById
|
||||||
- function createBotAccount
|
- function createBotAccount
|
||||||
- _...11 more_
|
- _...10 more_
|
||||||
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||||
- class ChallengeService
|
- class ChallengeService
|
||||||
- function create
|
- function create
|
||||||
- function accept
|
- function accept
|
||||||
- function decline
|
- function decline
|
||||||
- function cancel
|
- function cancel
|
||||||
- function listForUser
|
- function findById
|
||||||
- _...1 more_
|
- _...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
|
||||||
@@ -106,10 +114,6 @@
|
|||||||
- class Square
|
- class Square
|
||||||
- function fromAlgebraic
|
- function fromAlgebraic
|
||||||
- function offset
|
- function offset
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`
|
|
||||||
- class Bot
|
|
||||||
- function name
|
|
||||||
- function nextMove
|
|
||||||
- `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply
|
- `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/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/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||||
@@ -130,6 +134,14 @@
|
|||||||
- function withEnPassantSquare
|
- function withEnPassantSquare
|
||||||
- function withHalfMoveClock
|
- function withHalfMoveClock
|
||||||
- _...4 more_
|
- _...4 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/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/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
|
||||||
@@ -145,115 +157,21 @@
|
|||||||
- function isCheck
|
- function isCheck
|
||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...6 more_
|
- _...6 more_
|
||||||
- `modules/bot/python/nnue.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- function get_weights_dir: ()
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||||
- function get_data_dir: ()
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||||
- function list_checkpoints: ()
|
- class BotRegistry
|
||||||
- function migrate_legacy_data: ()
|
- function register
|
||||||
- function show_header: ()
|
- function unregister
|
||||||
- function show_checkpoints_table: ()
|
- function dispatch
|
||||||
- _...10 more_
|
- function registeredBots
|
||||||
- `modules/bot/python/src/dataset.py`
|
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||||
- function get_datasets_dir: () -> Path
|
- class BotEventResource
|
||||||
- function next_dataset_version: () -> int
|
- function streamEvents
|
||||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
- function streamGame
|
||||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
- function makeMove
|
||||||
- function save_dataset_metadata: (version, metadata) -> None
|
|
||||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
|
||||||
- _...4 more_
|
|
||||||
- `modules/bot/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
|
||||||
- `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)
|
|
||||||
- `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)
|
|
||||||
- `modules/bot/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
|
||||||
- `modules/bot/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/bot/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/bot/src/main/scala/de/nowchess/bot/BotController.scala`
|
|
||||||
- class BotController
|
|
||||||
- function getBot
|
|
||||||
- function listBots
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
|
||||||
- class BotMoveRepetition
|
|
||||||
- function blockedMoves
|
|
||||||
- function repeatedMove
|
|
||||||
- function filterAllowed
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
|
||||||
- `modules/bot/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/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
|
||||||
- class EvaluationClassic
|
|
||||||
- function evaluate
|
|
||||||
- function countRay
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
|
||||||
- `modules/bot/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/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
|
||||||
- class NbaiLoader
|
|
||||||
- function load
|
|
||||||
- function loadDefault
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
|
||||||
- function toJson
|
|
||||||
- class NbaiMetadata
|
|
||||||
- function fromJson
|
|
||||||
- function str
|
|
||||||
- function num
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
|
||||||
- function bestMove
|
|
||||||
- function bestMove
|
|
||||||
- function bestMoveWithTime
|
|
||||||
- function bestMoveWithTime
|
|
||||||
- function loop
|
|
||||||
- function loop
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
|
||||||
- class MoveOrdering
|
|
||||||
- class OrderingContext
|
|
||||||
- function addKillerMove
|
|
||||||
- function getKillerMoves
|
|
||||||
- function addHistory
|
|
||||||
- function getHistory
|
|
||||||
- _...3 more_
|
|
||||||
- `modules/bot/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
|
||||||
- function advance
|
|
||||||
- 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/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||||
- class BeansProducer
|
|
||||||
- function redissonClient
|
|
||||||
- function kubernetesClient
|
|
||||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||||
- class CoordinatorConfig
|
- class CoordinatorConfig
|
||||||
- function maxGamesPerCore
|
- function maxGamesPerCore
|
||||||
@@ -337,10 +255,6 @@
|
|||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function produceRedissonClient
|
|
||||||
- function shutdown
|
|
||||||
- `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
|
||||||
@@ -349,21 +263,14 @@
|
|||||||
- function context
|
- function context
|
||||||
- function pendingDrawOfferBy
|
- function pendingDrawOfferBy
|
||||||
- function currentClockState
|
- function currentClockState
|
||||||
- _...22 more_
|
- _...21 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala`
|
||||||
- class ApiException
|
- class ApiException
|
||||||
- class GameNotFoundException
|
- class GameNotFoundException
|
||||||
- class BadRequestException
|
- 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/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/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||||
- class CoreProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||||
- class IoGrpcClientWrapper
|
- class IoGrpcClientWrapper
|
||||||
- function exportCombined
|
- function exportCombined
|
||||||
@@ -388,15 +295,18 @@
|
|||||||
- function unsubscribe
|
- function unsubscribe
|
||||||
- _...1 more_
|
- _...1 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala` — class GameRedisPublisher, function onGameEvent
|
- `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`
|
- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala`
|
||||||
- class GameRedisSubscriberManager
|
- class GameRedisSubscriberManager
|
||||||
- function subscribeGame
|
- function subscribeGame
|
||||||
- function onMessage
|
|
||||||
- function unsubscribeGame
|
- function unsubscribeGame
|
||||||
- function batchResubscribeGames
|
- function batchResubscribeGames
|
||||||
- function unsubscribeGames
|
- function unsubscribeGames
|
||||||
- _...3 more_
|
- function evictGames
|
||||||
|
- _...2 more_
|
||||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||||
- class GameRegistry
|
- class GameRegistry
|
||||||
- function store
|
- function store
|
||||||
@@ -462,14 +372,7 @@
|
|||||||
- 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/IoGrpcService.scala` — class IoGrpcService
|
||||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala`
|
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||||
- class IoProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `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`
|
||||||
@@ -500,16 +403,124 @@
|
|||||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
- `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/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||||
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
- `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/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/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||||
- class ProtoMapper
|
|
||||||
- function toProtoColor
|
|
||||||
- function fromProtoColor
|
|
||||||
- function toProtoPieceType
|
|
||||||
- function fromProtoPieceType
|
|
||||||
- function toProtoMoveKind
|
|
||||||
- _...9 more_
|
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||||
- class RuleSetResource
|
- class RuleSetResource
|
||||||
@@ -520,35 +531,37 @@
|
|||||||
- function isCheckmate
|
- function isCheckmate
|
||||||
- _...6 more_
|
- _...6 more_
|
||||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalAuthFilter.scala` — class InternalAuthFilter
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcAuthInterceptor.scala` — class InternalGrpcAuthInterceptor
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalGrpcSecretClientInterceptor.scala` — class InternalGrpcSecretClientInterceptor
|
||||||
|
- `modules/security/src/main/scala/de/nowchess/security/InternalSecretClientFilter.scala` — class InternalSecretClientFilter
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function redissonClient
|
|
||||||
- function close
|
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||||
- class GameWritebackStreamListener
|
|
||||||
- function startListening
|
|
||||||
- function onMessage
|
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||||
- class GameRecordRepository
|
- class GameRecordRepository
|
||||||
- function findByGameId
|
- function findByGameId
|
||||||
- function persist
|
- function persist
|
||||||
- function merge
|
- function merge
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame
|
- function findByPlayerId
|
||||||
|
- function findByPlayerIdRunning
|
||||||
|
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala`
|
||||||
|
- class StoreGameResource
|
||||||
|
- function getGame
|
||||||
|
- function getRunning
|
||||||
|
- function getHistory
|
||||||
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
- `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/config/RedisConfig.scala` — class RedisConfig
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/RedissonProducer.scala`
|
|
||||||
- class RedissonProducer
|
|
||||||
- function produceRedissonClient
|
|
||||||
- function shutdown
|
|
||||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||||
- class GameWebSocketResource
|
- class GameWebSocketResource
|
||||||
- function onOpen
|
- function onOpen
|
||||||
- function onMessage
|
|
||||||
- function onTextMessage
|
- function onTextMessage
|
||||||
- function onClose
|
- 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`
|
||||||
|
|||||||
@@ -19,12 +19,20 @@ jobs:
|
|||||||
- id: check
|
- id: check
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||||
|
echo "Triggered manually — allowing build"
|
||||||
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
COMMIT_AUTHOR=$(git log -1 --format='%an')
|
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
|
if [[ "$COMMIT_AUTHOR" == "TeamCity" ]]; then
|
||||||
|
echo "Author is TeamCity — allowing build"
|
||||||
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
|
echo "Author is not TeamCity — skipping build"
|
||||||
echo "allowed=false" >> "$GITHUB_OUTPUT"
|
echo "allowed=false" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -53,7 +61,39 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- 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
|
- name: Set up GraalVM
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
uses: graalvm/setup-graalvm@v1
|
uses: graalvm/setup-graalvm@v1
|
||||||
with:
|
with:
|
||||||
java-version: '21'
|
java-version: '21'
|
||||||
@@ -61,6 +101,7 @@ jobs:
|
|||||||
native-image-job-reports: 'true'
|
native-image-job-reports: 'true'
|
||||||
|
|
||||||
- name: Cache Gradle packages
|
- name: Cache Gradle packages
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
@@ -69,24 +110,16 @@ jobs:
|
|||||||
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
restore-keys: gradle-${{ runner.os }}-
|
restore-keys: gradle-${{ runner.os }}-
|
||||||
|
|
||||||
- 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 "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
|
||||||
echo "version=latest" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build native binary
|
- 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
|
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
|
- name: Set up Docker Buildx
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Log in to GitHub Container Registry
|
- name: Log in to GitHub Container Registry
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
@@ -94,6 +127,7 @@ jobs:
|
|||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract metadata
|
- name: Extract metadata
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
@@ -103,6 +137,7 @@ jobs:
|
|||||||
type=raw,value=latest
|
type=raw,value=latest
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
|
if: steps.image-check.outputs.exists == 'false'
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
|
|||||||
+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
|
||||||
|
}
|
||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 1
|
seq: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/offer
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/offer
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 2
|
seq: 2
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/accept
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/accept
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 3
|
seq: 3
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/decline
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/decline
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 4
|
seq: 4
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/claim
|
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/claim
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 1
|
seq: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
get {
|
||||||
method: GET
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/export/fen
|
url: {{baseUrl}}/api/board/game/{{gameId}}/export/fen
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 2
|
seq: 2
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
get {
|
||||||
method: GET
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/export/pgn
|
url: {{baseUrl}}/api/board/game/{{gameId}}/export/pgn
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,15 @@ meta {
|
|||||||
seq: 1
|
seq: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game
|
url: {{baseUrl}}/api/board/game
|
||||||
body: json
|
body: json
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
headers {
|
headers {
|
||||||
|
|||||||
@@ -7,7 +7,12 @@ meta {
|
|||||||
get {
|
get {
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}
|
url: {{baseUrl}}/api/board/game/{{gameId}}
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
vars:pre-request {
|
vars:pre-request {
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ meta {
|
|||||||
seq: 4
|
seq: 4
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/{{gameId}}/resign
|
url: {{baseUrl}}/api/board/game/{{gameId}}/resign
|
||||||
body: none
|
body: none
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,15 @@ meta {
|
|||||||
seq: 1
|
seq: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
post {
|
||||||
method: POST
|
|
||||||
url: {{baseUrl}}/api/board/game/import/fen
|
url: {{baseUrl}}/api/board/game/import/fen
|
||||||
body: json
|
body: json
|
||||||
auth: none
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
headers {
|
headers {
|
||||||
|
|||||||
@@ -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,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}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Accept Takeback
|
||||||
|
type: http
|
||||||
|
seq: 17
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/takeback/accept
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Decline Takeback
|
||||||
|
type: http
|
||||||
|
seq: 18
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/board/game/{{gameId}}/takeback/decline
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: game
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
meta {
|
||||||
|
name: Import FEN
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{ioBaseUrl}}/io/import/fen
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
meta {
|
||||||
|
name: Import PGN
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{ioBaseUrl}}/io/import/pgn
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"pgn": "[Event \"Test\"]\n1. e4 e5"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Export FEN
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{ioBaseUrl}}/io/export/fen
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Export PGN
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{ioBaseUrl}}/io/export/pgn
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: io
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
meta {
|
||||||
|
name: Candidate Moves
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
url: {{baseUrl}}/rules/candidate-moves
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"context": {},
|
||||||
|
"square": "e2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
meta {
|
||||||
|
name: Legal Moves
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/rules/legal-moves
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"context": {},
|
||||||
|
"square": "e2"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: All Legal Moves
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/rules/all-legal-moves
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Is Check
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/rules/is-check
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Is Checkmate
|
||||||
|
type: http
|
||||||
|
seq: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: POST
|
||||||
|
url: {{baseUrl}}/rules/is-checkmate
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{internalToken}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: rules
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
@@ -1,5 +1,12 @@
|
|||||||
vars {
|
vars {
|
||||||
baseUrl: http://localhost:8080
|
baseUrl: http://localhost:8080/api
|
||||||
wsBaseUrl: ws://localhost:8084
|
wsBaseUrl: ws://localhost:8084
|
||||||
ioBaseUrl: http://localhost:8081
|
ioBaseUrl: http://localhost:8080/api
|
||||||
|
accountBaseUrl: http://localhost:8083/api
|
||||||
|
storeBaseUrl: http://localhost:8085
|
||||||
|
coordinatorBaseUrl: http://localhost:8086
|
||||||
|
token: your_jwt_token_here
|
||||||
|
adminToken: your_admin_jwt_token_here
|
||||||
|
botToken: your_bot_jwt_token_here
|
||||||
|
internalToken: your_internal_service_token_here
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
vars {
|
||||||
|
baseUrl: https://nowchess.janis-eccarius.de/api
|
||||||
|
wsBaseUrl: wss://nowchess.janis-eccarius.de/ws
|
||||||
|
ioBaseUrl: https://nowchess.janis-eccarius.de/api
|
||||||
|
accountBaseUrl: https://nowchess.janis-eccarius.de/api
|
||||||
|
storeBaseUrl: https://nowchess.janis-eccarius.de/api
|
||||||
|
coordinatorBaseUrl: http://localhost:8086
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
vars {
|
||||||
|
baseUrl: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
wsBaseUrl: wss://st.nowchess.janis-eccarius.de/ws
|
||||||
|
ioBaseUrl: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
accountBaseUrl: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
storeBaseUrl: https://st.nowchess.janis-eccarius.de/api
|
||||||
|
coordinatorBaseUrl: http://localhost:8086
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Game Record
|
||||||
|
type: http
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{storeBaseUrl}}/game/{{gameId}}
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Running Games
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{storeBaseUrl}}/game/running/{{playerId}}?offset=0&limit=20
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Optional query parameters:
|
||||||
|
- offset: Skip N records (default 0)
|
||||||
|
- limit: Return N records (default 20)
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: Get Game History
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
method: GET
|
||||||
|
url: {{storeBaseUrl}}/game/history/{{playerId}}?offset=0&limit=20
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Accept: application/json
|
||||||
|
}
|
||||||
|
|
||||||
|
notes {
|
||||||
|
Optional query parameters:
|
||||||
|
- offset: Skip N records (default 0)
|
||||||
|
- limit: Return N records (default 20)
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
meta {
|
||||||
|
name: Game WebSocket
|
||||||
|
type: ws
|
||||||
|
seq: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
ws {
|
||||||
|
url: {{wsBaseUrl}}/api/board/game/{{gameId}}/ws
|
||||||
|
body: ws
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:ws {
|
||||||
|
name: message 1
|
||||||
|
type: json
|
||||||
|
content: '''
|
||||||
|
{}
|
||||||
|
'''
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
meta {
|
||||||
|
name: User WebSocket
|
||||||
|
type: ws
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
ws {
|
||||||
|
url: {{wsBaseUrl}}/api/user/ws
|
||||||
|
body: ws
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
headers {
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:ws {
|
||||||
|
name: message 1
|
||||||
|
type: json
|
||||||
|
content: '''
|
||||||
|
{}
|
||||||
|
'''
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
meta {
|
||||||
|
name: ws
|
||||||
|
seq: 7
|
||||||
|
}
|
||||||
+3
-1
@@ -3,6 +3,7 @@ plugins {
|
|||||||
id("org.scoverage") version "8.1" apply false
|
id("org.scoverage") version "8.1" apply false
|
||||||
id("com.diffplug.spotless") version "8.4.0" apply false
|
id("com.diffplug.spotless") version "8.4.0" apply false
|
||||||
id("io.github.cosmicsilence.scalafix") version "0.2.6" apply false
|
id("io.github.cosmicsilence.scalafix") version "0.2.6" apply false
|
||||||
|
id("me.champeau.jmh") version "0.7.2" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "de.nowchess"
|
group = "de.nowchess"
|
||||||
@@ -99,7 +100,8 @@ val versions = mapOf(
|
|||||||
"SCALA_PARSER_COMBINATORS" to "2.4.0",
|
"SCALA_PARSER_COMBINATORS" to "2.4.0",
|
||||||
"FASTPARSE" to "3.0.2",
|
"FASTPARSE" to "3.0.2",
|
||||||
"JACKSON" to "2.17.2",
|
"JACKSON" to "2.17.2",
|
||||||
"JACKSON_SCALA" to "2.17.2"
|
"JACKSON_SCALA" to "2.17.2",
|
||||||
|
"JMH" to "1.37"
|
||||||
)
|
)
|
||||||
extra["VERSIONS"] = versions
|
extra["VERSIONS"] = versions
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
# NowChess Load Testing with k6
|
||||||
|
|
||||||
|
Performance testing suite for NowChess services using k6.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install k6 (macOS)
|
||||||
|
brew install k6
|
||||||
|
|
||||||
|
# Or download from https://k6.io/docs/getting-started/installation/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test Scenarios
|
||||||
|
|
||||||
|
### 1. Ramp-Up Test
|
||||||
|
Gradually increases load from 10 to 100 concurrent users.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
k6 run ramp-up.js
|
||||||
|
```
|
||||||
|
|
||||||
|
Target: Identify system behavior under gradual load increase.
|
||||||
|
|
||||||
|
### 2. Stress Test
|
||||||
|
Incremental load increase up to 500 concurrent users to find breaking point.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
k6 run stress-test.js
|
||||||
|
```
|
||||||
|
|
||||||
|
Target: Determine system capacity and failure point.
|
||||||
|
|
||||||
|
### 3. Spike Test
|
||||||
|
Sudden traffic surge (baseline 50 → 500 users instantly).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
k6 run spike-test.js
|
||||||
|
```
|
||||||
|
|
||||||
|
Target: Test recovery and resilience to sudden spikes.
|
||||||
|
|
||||||
|
### 4. Constant Load Test
|
||||||
|
Maintains 50 VUs for 10 minutes.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
k6 run constant-load.js
|
||||||
|
```
|
||||||
|
|
||||||
|
Target: Check stability under sustained load.
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Override service endpoints
|
||||||
|
export BASE_URL=http://localhost:8080
|
||||||
|
export ACCOUNT_HOST=http://localhost:8083
|
||||||
|
export STORE_HOST=http://localhost:8085
|
||||||
|
|
||||||
|
k6 run ramp-up.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Ensure services are running:
|
||||||
|
- Core: `localhost:8080`
|
||||||
|
- Account: `localhost:8083`
|
||||||
|
- Store: `localhost:8085`
|
||||||
|
- Redis: `localhost:6379` (with increased pool size)
|
||||||
|
|
||||||
|
## Metrics Interpretation
|
||||||
|
|
||||||
|
- `http_req_duration`: Response time (p95, p99 percentiles matter most)
|
||||||
|
- `http_req_failed`: Failed requests (connection errors, errors, non-2xx responses)
|
||||||
|
- `vus`: Virtual Users (concurrent connections)
|
||||||
|
- `iterations`: Completed test cycles per VU
|
||||||
|
|
||||||
|
## Results
|
||||||
|
|
||||||
|
k6 generates HTML report output. Use with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
k6 run --out=csv=results.csv ramp-up.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If you see:
|
||||||
|
- **"max pool wait timeout"** → Redis pool still too small or maxWaitTime too short
|
||||||
|
- **"connection refused"** → Service not running
|
||||||
|
- **"high p99 latency"** → System approaching capacity
|
||||||
|
|
||||||
|
Increase Redis pool settings in `modules/*/src/main/resources/application.yml`:
|
||||||
|
```yaml
|
||||||
|
quarkus:
|
||||||
|
redis:
|
||||||
|
pool:
|
||||||
|
max-size: 128 # Increase if still hitting limits
|
||||||
|
max-waiting: 256
|
||||||
|
```
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
export const BASE_URL = __ENV.BASE_URL || 'http://localhost:8080';
|
||||||
|
export const ACCOUNT_HOST = __ENV.ACCOUNT_HOST || 'http://localhost:8083';
|
||||||
|
export const STORE_HOST = __ENV.STORE_HOST || 'http://localhost:8085';
|
||||||
|
export const CORE_HOST = BASE_URL;
|
||||||
|
|
||||||
|
export const ENDPOINTS = {
|
||||||
|
// Account endpoints
|
||||||
|
accountCreateUser: `${ACCOUNT_HOST}/api/account`,
|
||||||
|
accountLogin: `${ACCOUNT_HOST}/api/account/login`,
|
||||||
|
accountProfile: `${ACCOUNT_HOST}/api/account/me`,
|
||||||
|
accountPublicProfile: (username) => `${ACCOUNT_HOST}/api/account/${username}`,
|
||||||
|
|
||||||
|
// Store endpoints
|
||||||
|
storeGame: `${STORE_HOST}/api/games`,
|
||||||
|
storeGameById: (gameId) => `${STORE_HOST}/api/games/${gameId}`,
|
||||||
|
|
||||||
|
// Core endpoints (game operations)
|
||||||
|
gameWebSocket: (gameId) => `ws://localhost:8080/api/games/${gameId}/ws`,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const TEST_USERS = [
|
||||||
|
{ username: 'load-test-user-1', email: 'load1@example.com' },
|
||||||
|
{ username: 'load-test-user-2', email: 'load2@example.com' },
|
||||||
|
{ username: 'load-test-user-3', email: 'load3@example.com' },
|
||||||
|
];
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import http from 'k6/http';
|
||||||
|
import { check, sleep } from 'k6';
|
||||||
|
import { ENDPOINTS } from './config.js';
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
vus: 50,
|
||||||
|
duration: '10m',
|
||||||
|
thresholds: {
|
||||||
|
http_req_duration: ['p(95)<500', 'p(99)<1000'],
|
||||||
|
http_req_failed: ['rate<0.1'],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
// Simulate consistent user traffic
|
||||||
|
|
||||||
|
// 1. Get account profile
|
||||||
|
const profileRes = http.get(ENDPOINTS.accountProfile);
|
||||||
|
check(profileRes, {
|
||||||
|
'profile status is 200 or 401': (r) => r.status === 200 || r.status === 401,
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(0.5);
|
||||||
|
|
||||||
|
// 2. Get public profile
|
||||||
|
const publicRes = http.get(ENDPOINTS.accountPublicProfile('testuser'));
|
||||||
|
check(publicRes, {
|
||||||
|
'public profile status ok': (r) => r.status > 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(0.5);
|
||||||
|
|
||||||
|
// 3. List store games
|
||||||
|
const gamesRes = http.get(ENDPOINTS.storeGame);
|
||||||
|
check(gamesRes, {
|
||||||
|
'store games status ok': (r) => r.status > 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import http from 'k6/http';
|
||||||
|
import { check, sleep } from 'k6';
|
||||||
|
import { ENDPOINTS, ACCOUNT_HOST } from './config.js';
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
stages: [
|
||||||
|
{ duration: '1m', target: 10 },
|
||||||
|
{ duration: '3m', target: 50 },
|
||||||
|
{ duration: '5m', target: 100 },
|
||||||
|
{ duration: '3m', target: 50 },
|
||||||
|
{ duration: '1m', target: 0 },
|
||||||
|
],
|
||||||
|
thresholds: {
|
||||||
|
http_req_duration: ['p(95)<500', 'p(99)<1000'],
|
||||||
|
http_req_failed: ['rate<0.1'],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
// Test account endpoints
|
||||||
|
const accountRes = http.get(ENDPOINTS.accountPublicProfile('testuser'));
|
||||||
|
check(accountRes, {
|
||||||
|
'account endpoint status is 200': (r) => r.status === 200,
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
// Test store endpoints
|
||||||
|
const storeRes = http.get(ENDPOINTS.storeGame);
|
||||||
|
check(storeRes, {
|
||||||
|
'store endpoint status is 200': (r) => r.status === 200 || r.status === 401,
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
TEST_TYPE="${1:-ramp-up}"
|
||||||
|
BASE_URL="${BASE_URL:-http://localhost:8080}"
|
||||||
|
OUTPUT_FILE="${2:-results-$(date +%s).csv}"
|
||||||
|
|
||||||
|
echo -e "${BLUE}NowChess Load Test Runner${NC}"
|
||||||
|
echo "Test Type: $TEST_TYPE"
|
||||||
|
echo "Base URL: $BASE_URL"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if k6 is installed
|
||||||
|
if ! command -v k6 &> /dev/null; then
|
||||||
|
echo -e "${RED}Error: k6 not found. Install from https://k6.io/docs/getting-started/installation/${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$TEST_TYPE" in
|
||||||
|
ramp-up)
|
||||||
|
echo -e "${GREEN}Running Ramp-Up Test (10->100 VUs over 13 minutes)${NC}"
|
||||||
|
k6 run --out=csv=$OUTPUT_FILE ramp-up.js
|
||||||
|
;;
|
||||||
|
stress)
|
||||||
|
echo -e "${GREEN}Running Stress Test (up to 500 VUs)${NC}"
|
||||||
|
k6 run --out=csv=$OUTPUT_FILE stress-test.js
|
||||||
|
;;
|
||||||
|
spike)
|
||||||
|
echo -e "${GREEN}Running Spike Test (sudden 50->500 spike)${NC}"
|
||||||
|
k6 run --out=csv=$OUTPUT_FILE spike-test.js
|
||||||
|
;;
|
||||||
|
constant)
|
||||||
|
echo -e "${GREEN}Running Constant Load Test (50 VUs for 10m)${NC}"
|
||||||
|
k6 run --out=csv=$OUTPUT_FILE constant-load.js
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
echo -e "${GREEN}Running All Tests${NC}"
|
||||||
|
for test in ramp-up stress spike constant; do
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}Starting $test test...${NC}"
|
||||||
|
$0 $test
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${RED}Usage: $0 {ramp-up|stress|spike|constant|all} [output-file]${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 ramp-up"
|
||||||
|
echo " $0 stress results.csv"
|
||||||
|
echo " $0 all"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo -e "${GREEN}Test complete. Results saved to $OUTPUT_FILE${NC}"
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import http from 'k6/http';
|
||||||
|
import { check, sleep } from 'k6';
|
||||||
|
import { ENDPOINTS } from './config.js';
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
stages: [
|
||||||
|
{ duration: '1m', target: 50 },
|
||||||
|
{ duration: '30s', target: 500, ramp: 'fast' },
|
||||||
|
{ duration: '2m', target: 500 },
|
||||||
|
{ duration: '30s', target: 50, ramp: 'fast' },
|
||||||
|
{ duration: '1m', target: 0 },
|
||||||
|
],
|
||||||
|
thresholds: {
|
||||||
|
http_req_duration: ['p(95)<2000', 'p(99)<5000'],
|
||||||
|
http_req_failed: ['rate<0.3'],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
// Rapid account checks
|
||||||
|
const urls = [
|
||||||
|
ENDPOINTS.accountPublicProfile('testuser'),
|
||||||
|
ENDPOINTS.storeGame,
|
||||||
|
ENDPOINTS.accountProfile,
|
||||||
|
];
|
||||||
|
|
||||||
|
urls.forEach((url) => {
|
||||||
|
const res = http.get(url);
|
||||||
|
check(res, {
|
||||||
|
'response received': (r) => r.status > 0,
|
||||||
|
'response time under 3s': (r) => r.timings.duration < 3000,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep(0.1);
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user