Compare commits
162 Commits
json-0.1.0
...
api-0.15.0
| Author | SHA1 | Date | |
|---|---|---|---|
| e18b1df744 | |||
| 595c172900 | |||
| cf225826c0 | |||
| 25c05bc2d8 | |||
| 4ec6295d1d | |||
| 2d18478110 | |||
| 8b95f10c65 | |||
| f3d96fd700 | |||
| 4762f6c0c3 | |||
| 7117a93376 | |||
| 085e34f062 | |||
| 32c388760b | |||
| 98b0bba398 | |||
| 9836e87392 | |||
| 2579539084 | |||
| bc500e3e94 | |||
| 2dbb1d0b67 | |||
| 252851de1c | |||
| a253fa78df | |||
| ae3ef766e8 | |||
| 487711628f | |||
| 008d72d826 | |||
| 576e3fea9b | |||
| 1f66b7bde7 | |||
| 381161f003 | |||
| d0150fdfa4 | |||
| 29072efbfb | |||
| dcc5ce1195 | |||
| 354db11972 | |||
| 9296db88b7 | |||
| ec22a9585e | |||
| 411eed2453 | |||
| af6b0ed8b7 | |||
| bcd8257db2 | |||
| d61fe97b4c | |||
| 959bb53335 | |||
| b610678005 | |||
| d0552b08b5 | |||
| 87f29a7204 | |||
| cb44f491bd | |||
| f5614c3582 | |||
| 9d960d3ee5 | |||
| a9f4606b40 | |||
| 32a12737e3 | |||
| b4c75e2a0f | |||
| 9bf995f47d | |||
| 8df418627c | |||
| 6dbe1e62ac | |||
| 6311d8fd00 | |||
| 5205468534 | |||
| 4ec5b931de | |||
| ebba729af3 | |||
| 5619c8223a | |||
| 2d76c001fe | |||
| b58bbbc782 | |||
| 1a02f9e186 | |||
| 255f43ddda | |||
| f109fe3860 | |||
| a07bf89fae | |||
| b47ad7ef89 | |||
| 2e4ba43597 | |||
| b0d27d2de2 | |||
| 8f9eb12f66 | |||
| 5d5fffa812 | |||
| 73239088d9 | |||
| 4ad92ab236 | |||
| c65a1393b9 | |||
| 4a36096a55 | |||
| 960a419792 | |||
| 68d6c1d36f | |||
| b991878214 | |||
| 43525d41a3 | |||
| 6bf1013710 | |||
| 255e2da33c | |||
| 4b3b5e7c4e | |||
| 1d121c727c | |||
| 56f0030a83 | |||
| d0c71693bb | |||
| 3f12f695f1 | |||
| 0a3c494fa8 | |||
| f7ce4df595 | |||
| d41c03700c | |||
| 10937e756a | |||
| 380a2cceeb | |||
| 43184d296d | |||
| 67802ee1b8 | |||
| 3ed3e59ee4 | |||
| 0060229ee9 | |||
| d5c8da20f8 | |||
| ad9495afa3 | |||
| 2b04d7fa71 | |||
| 81b045d01b | |||
| 118acff0e5 | |||
| a49f9be146 | |||
| 2a5cfeee39 | |||
| 72ce262bc4 | |||
| a298417b9e | |||
| 3870566349 | |||
| 5f177e1415 | |||
| 760859d066 | |||
| 04edd4d6fd | |||
| e81c3844ad | |||
| 3904d5ad8a | |||
| 58e08f3807 | |||
| 8ded402a0e | |||
| d438e97f32 | |||
| fcc251f777 | |||
| 7efdd69948 | |||
| 9459203e0d | |||
| d57c488661 | |||
| 989ac312d9 | |||
| c96a09bb5c | |||
| e9a4ecf4ae | |||
| 87dfc6c2bc | |||
| 183ad670e3 | |||
| 649566eb3f | |||
| 6844253f4c | |||
| be0b710543 | |||
| dcebdf237e | |||
| 0f41f13ce6 | |||
| ae6d235e1d | |||
| b4920d3817 | |||
| 708ebaf6e5 | |||
| 0eb752d493 | |||
| e279c39246 | |||
| a101866bcf | |||
| 5baf6a7cdb | |||
| a10958b0d1 | |||
| dc224abe26 | |||
| 1813ea1d2d | |||
| 6e0fd9523e | |||
| 847b13202c | |||
| c08d5303eb | |||
| 33e5017f51 | |||
| de391113dc | |||
| 85b187293f | |||
| 4a145cb538 | |||
| 327c23a6aa | |||
| d522f7f6ed | |||
| 82d0b754be | |||
| 4694f516fa | |||
| fa3c6b2886 | |||
| e472fb75ad | |||
| 5f44570b35 | |||
| c16f139c8e | |||
| cabf1bca73 | |||
| 0c981517da | |||
| 18a4b1cc15 | |||
| 804a4bf179 | |||
| 3c47d2b8c9 | |||
| d346c41d98 | |||
| 2dd0501687 | |||
| e17e4e806a | |||
| 9f86cc421f | |||
| 3844456f0c | |||
| 77e498a326 | |||
| 3efebd5ed0 | |||
| 0229147f4d | |||
| 3a0cb92256 | |||
| 39c9e492ce | |||
| 2404e6164c | |||
| 6a143a462a |
@@ -0,0 +1,112 @@
|
||||
# Create User Story in YouTrack
|
||||
|
||||
Automated user-story creation workflow. Topic/hint: `$ARGUMENTS`
|
||||
|
||||
## Step 1 — Gather Context
|
||||
|
||||
Use `AskUserQuestion` tool to ask the user (max 4 questions at once):
|
||||
|
||||
1. **Domain** — Is this frontend (UI/UX) or backend/coordinator/systems work?
|
||||
2. **User type** — Who is the actor? (e.g. player, admin, bot, system)
|
||||
3. **Action** — What should the user be able to do?
|
||||
4. **Goal/value** — Why? What outcome does it enable?
|
||||
|
||||
If `$ARGUMENTS` already answers some of these, skip those questions.
|
||||
|
||||
## Step 2 — Research (if needed)
|
||||
|
||||
If the topic involves unfamiliar domain logic, game rules, or technical constraints:
|
||||
- Search the repo for relevant code (use `Grep`/`Bash` to find related files).
|
||||
- Use `WebSearch` if the topic involves external standards or protocols.
|
||||
- Do NOT guess. Surface findings before drafting.
|
||||
|
||||
## Step 3 — Draft Story
|
||||
|
||||
Compose the full story using this template:
|
||||
|
||||
```
|
||||
As a [type of user]
|
||||
I want to [perform an action]
|
||||
So that [achieve a goal or value]
|
||||
|
||||
|
||||
Description
|
||||
|
||||
[Additional context or business logic for this story.]
|
||||
|
||||
|
||||
Acceptance Criteria
|
||||
|
||||
[List the specific, measurable criteria that define when this story is done:]
|
||||
|
||||
- Criterion 1
|
||||
- Criterion 2
|
||||
- Criterion 3
|
||||
|
||||
|
||||
Implementation Notes
|
||||
|
||||
[Technical notes, design references, or constraints.]
|
||||
```
|
||||
|
||||
Rules:
|
||||
- User story line: plain English, present tense, from user's perspective.
|
||||
- Acceptance criteria: testable, unambiguous, one condition each.
|
||||
- Implementation notes: optional — only include if there are known constraints, related tickets, or design refs.
|
||||
|
||||
## Step 4 — Clarify Acceptance Criteria
|
||||
|
||||
Show the draft to the user.
|
||||
**Use `AskUserQuestion` tool to ask:**
|
||||
- Are the acceptance criteria complete and correct?
|
||||
- Any implementation constraints to add?
|
||||
- Priority (if known)?
|
||||
|
||||
Incorporate feedback. Repeat until user approves.
|
||||
|
||||
## Step 5 — Determine Project
|
||||
|
||||
> **Project routing rules (always apply these):**
|
||||
> - Backend code (game engine, bots, API, services, coordinator) → `NCS`
|
||||
> - Frontend code (UI, UX, web app) → `NCWF`
|
||||
> - Infrastructure (Kubernetes, pipelines, CI/CD, DB setup, cloud infra) → `NCI`
|
||||
> - If ambiguous, ask the user.
|
||||
|
||||
- Frontend / UI / UX → project: `NCWF`
|
||||
- Backend / coordinator / systems / bot / engine → project: `NCS`
|
||||
- Kubernetes, pipelines, CI/CD, DB setup, infrastructure → project: `NCI`
|
||||
|
||||
If still ambiguous, ask the user.
|
||||
|
||||
## Step 6 — Create Issue
|
||||
|
||||
Call `mcp__youtrack__create_issue` with:
|
||||
- `project`: determined in Step 5
|
||||
- `summary`: concise title derived from the "I want to" clause (≤72 chars, sentence case)
|
||||
- `description`: full formatted story from Step 3 (Markdown)
|
||||
- `type`: `Feature` (or `Task` if purely technical with no user-facing value)
|
||||
|
||||
## Step 7 — Link Issues
|
||||
|
||||
After creation, **automatically** ask the user (use `AskUserQuestion` if interactive, otherwise infer from context):
|
||||
|
||||
> Are there related issues to link? (skip if none)
|
||||
|
||||
Collect any issue IDs the user mentions. For each, determine the correct relation and call `mcp__youtrack__link_issues`:
|
||||
|
||||
| Situation | Relation to use |
|
||||
|-----------|----------------|
|
||||
| This story must be done before another | `blocks` |
|
||||
| Another story must be done before this | `is blocked by` |
|
||||
| Stories share domain or are related | `relates to` |
|
||||
| This is a child of an epic/story | `subtask of` |
|
||||
| This is a parent grouping subtasks | `parent for` |
|
||||
| This depends on another ticket's output | `depends on` |
|
||||
|
||||
If the user mentions an issue in the story description or implementation notes (e.g. "see NCS-42", "after NCS-12 is done"), auto-detect and suggest linking it — confirm before creating the link.
|
||||
|
||||
## Step 8 — Report
|
||||
|
||||
Display the created issue ID and URL.
|
||||
List any links created (relation type + linked issue ID).
|
||||
Ask if a linked sub-task or implementation ticket is needed.
|
||||
@@ -0,0 +1,90 @@
|
||||
# Estimate Issue Time in YouTrack
|
||||
|
||||
Sprint planning time estimator. Issue ID or empty for full current sprint: `$ARGUMENTS`
|
||||
|
||||
## Step 1 — Determine Scope
|
||||
|
||||
**Single-issue mode** (`$ARGUMENTS` set):
|
||||
- Call `mcp__youtrack__get_issue` on `$ARGUMENTS`.
|
||||
- Proceed with that issue only.
|
||||
|
||||
**Sprint mode** (`$ARGUMENTS` empty):
|
||||
- Call `mcp__youtrack__search_issues` with query `project: NCS Sprints: {current sprint} #Unresolved`.
|
||||
- If query returns 0 results, use `AskUserQuestion` to ask for the sprint name, then retry with `project: NCS Sprints: {name}`.
|
||||
- Collect all returned issues.
|
||||
|
||||
## Step 2 — Build Issue Tree
|
||||
|
||||
For each top-level issue from Step 1:
|
||||
1. Fetch full details via `mcp__youtrack__get_issue`: summary, description, acceptance criteria, Type, existing `Zeitschätzung`, linked issues.
|
||||
2. Identify subtasks from links with relation `subtask of` (i.e. issues where the fetched issue is the parent).
|
||||
3. Recursively fetch subtasks until all leaves are known.
|
||||
4. Group into tree: Epic → Story → Task/Subtask.
|
||||
|
||||
**Leaf node** = issue with no subtask children.
|
||||
**Parent node** = issue that has at least one subtask child.
|
||||
|
||||
## Step 3 — Estimate Leaf Nodes
|
||||
|
||||
For each leaf node:
|
||||
1. Read: summary, description, acceptance criteria, implementation notes.
|
||||
2. If scope is unclear, search codebase (`Grep`/`Bash`) for related files to gauge complexity.
|
||||
3. Assign estimate using this scale:
|
||||
|
||||
| Size | Criteria | Estimate |
|
||||
|------|----------|----------|
|
||||
| Trivial | Config change, rename, 1-file tweak | 30m |
|
||||
| Small | 1–3 files, clear scope, no unknowns | 1h–2h |
|
||||
| Medium | 3–6 files, some design needed | 3h–5h |
|
||||
| Large | 6+ files, cross-module, non-trivial design | 1d–2d |
|
||||
| XL | New subsystem, research spike, major refactor | 3d–5d |
|
||||
|
||||
4. Record: estimate + one-line reasoning.
|
||||
5. Skip leaf if it already has `Zeitschätzung` set — note it as pre-estimated.
|
||||
|
||||
## Step 4 — Roll Up for Display
|
||||
|
||||
YouTrack auto-sums `Zeitschätzung` from subtasks up to parents — **do not write estimates to parent nodes**.
|
||||
|
||||
Compute display-only rolled-up totals:
|
||||
- Parent total = sum of all descendant leaf estimates (including pre-estimated ones).
|
||||
- Flag any branch where some leaves are missing estimates (partial roll-up).
|
||||
|
||||
## Step 5 — Show Summary + Confirm
|
||||
|
||||
Display full tree with estimates. Format:
|
||||
|
||||
```
|
||||
Epic NCS-10: Castling overhaul [4h 30m] ← rolled up
|
||||
Story NCS-11: Validate castling rights [2h 30m] ← rolled up
|
||||
Task NCS-12: Fix RuleSet check 1h 30m ← leaf (new)
|
||||
Task NCS-13: Add regression tests 1h ← leaf (new)
|
||||
Story NCS-14: UI feedback for castling [2h] ← rolled up
|
||||
Task NCS-15: Highlight invalid squares 2h ← leaf (pre-set, skipped)
|
||||
```
|
||||
|
||||
Legend: `[X]` = display-only roll-up (not written). Plain = will be written to YouTrack.
|
||||
|
||||
If sprint mode, show grand total at bottom:
|
||||
```
|
||||
Sprint total: Xd Yh Zm (N issues, M leaves to update)
|
||||
```
|
||||
|
||||
**Use `AskUserQuestion` tool:**
|
||||
- Does the breakdown look right?
|
||||
- Any estimates to adjust before writing to YouTrack?
|
||||
|
||||
Incorporate all feedback before proceeding.
|
||||
|
||||
## Step 6 — Write Estimates
|
||||
|
||||
On user approval, write estimates **only to leaf nodes** (bottom-up order):
|
||||
- For each leaf with a new estimate, call `mcp__youtrack__update_issue` with field `Zeitschätzung` = approved estimate.
|
||||
- YouTrack period format: `"30m"`, `"1h 30m"`, `"1d"`, `"2d 4h"`.
|
||||
- Skip leaves already pre-estimated.
|
||||
|
||||
## Step 7 — Report
|
||||
|
||||
List all updated issues with set estimates.
|
||||
Show final rolled-up totals per Epic/Story (read back from YouTrack via `mcp__youtrack__get_issue` if needed).
|
||||
In sprint mode, show total sprint estimate.
|
||||
@@ -0,0 +1,140 @@
|
||||
# Fix Defect from YouTrack
|
||||
|
||||
Automated defect-fix workflow. Ticket ID: `$ARGUMENTS`
|
||||
|
||||
## Step 1 — Fetch Ticket
|
||||
|
||||
Call `mcp__youtrack__get_issue` with ID `$ARGUMENTS`.
|
||||
Extract and display: summary, description, steps to reproduce, Priority, Subsystem.
|
||||
|
||||
## Step 2 — Create Worktree
|
||||
|
||||
Derive branch name from ticket:
|
||||
- `type` from YouTrack issue type: `bug` → `fix`, `feature`/`task` → `feat`, `refactor` → `refactor`, else `chore`
|
||||
- `scope` from affected module/component (kebab-case, omit if unclear)
|
||||
- `description` from ticket summary: lowercase, kebab-case, max 40 chars, drop articles
|
||||
|
||||
Branch format: `<type>/<ticket-id>-<description>`
|
||||
Example: `fix/NOW-123-castling-validation-failure`
|
||||
|
||||
Call `EnterWorktree` with that branch name.
|
||||
All subsequent file work happens inside this worktree.
|
||||
|
||||
## Step 3 — Identify Root Cause (read-only)
|
||||
|
||||
1. Run `./compile` — capture all errors and warnings.
|
||||
2. Run `./test` — capture all failures.
|
||||
3. Spawn `cavecrew-investigator` with: ticket description + compile/test output → locate root cause (files, line numbers, what's wrong).
|
||||
4. **If anything is ambiguous (reproduction unclear, scope uncertain, conflicting signals), use `AskUserQuestion` tool to ask — max 4 questions at once.**
|
||||
5. **Report findings to user. No file writes yet. Wait for acknowledgement before continuing.**
|
||||
|
||||
## Step 3b — Complexity Assessment + Subtasks
|
||||
|
||||
After root cause confirmed, assess scope:
|
||||
|
||||
**Simple** (1–2 files, single concern, < 1 hour estimated): proceed directly to Step 4.
|
||||
|
||||
**Complex** (3+ files, multiple concerns, or estimated > 1 hour): create subtasks before coding.
|
||||
|
||||
To create subtasks:
|
||||
1. Break fix into discrete, independently-completable tasks (e.g. "Fix validation in RuleSet", "Add regression test for castling edge case", "Update FenParser to handle X").
|
||||
2. For each subtask call `mcp__youtrack__create_issue` with:
|
||||
- `project`: based on subtask content — do **not** inherit from parent. Backend code → `NCS`; frontend/UI → `NCWF`; Kubernetes/pipelines/CI-CD/DB setup/infrastructure → `NCI`. If ambiguous, ask user.
|
||||
- `summary`: concise action-oriented title
|
||||
- `type`: `Task`
|
||||
- `description`: what to do and why
|
||||
3. Call `mcp__youtrack__link_issues` to link each subtask to `$ARGUMENTS` with relation `subtask of`.
|
||||
4. Check if the ticket description or comments mention other issue IDs. For each mentioned ID, suggest a link and confirm with user:
|
||||
- Fix depends on another fix finishing first → `is blocked by`
|
||||
- This fix blocks another ticket → `blocks`
|
||||
- Logically related but independent → `relates to`
|
||||
5. List created subtask IDs and any additional links to user.
|
||||
|
||||
Then proceed to Step 4, implementing subtasks in order.
|
||||
|
||||
## Step 4 — Fix
|
||||
|
||||
1. Implement fix (use `scala-implementer` agent for non-trivial changes; inline edits for small ones).
|
||||
2. Run `./compile` — must be green.
|
||||
3. Run `./test` — must be green.
|
||||
4. Run `./gradlew spotlessScalaApply` — **blocking, foreground only**. Wait for completion before continuing.
|
||||
5. Run `./lint` — **blocking, foreground only** (never `run_in_background`). Wait for exit code 0. Must be green.
|
||||
- If lint fails, fix all issues and re-run until exit code 0.
|
||||
- **Do NOT proceed to Step 5 until `./lint` has completed and returned exit code 0.**
|
||||
If any step fails, iterate until all pass.
|
||||
|
||||
## Step 5 — Review
|
||||
|
||||
Spawn `cavecrew-reviewer` on the full diff.
|
||||
Display findings grouped by severity.
|
||||
|
||||
## Step 5b — Apply Review Findings
|
||||
|
||||
If the review produced any findings (any severity):
|
||||
1. Implement all agreed fixes.
|
||||
2. Run `./compile` — must be green.
|
||||
3. Run `./test` — must be green.
|
||||
4. Run `./gradlew spotlessScalaApply` — **blocking, foreground only**. Wait for completion.
|
||||
5. Run `./lint` — **blocking, foreground only**. Wait for exit code 0.
|
||||
- If lint fails, fix all issues and re-run until exit code 0.
|
||||
6. Re-spawn `cavecrew-reviewer` on the updated diff to confirm all findings are resolved.
|
||||
|
||||
Repeat until review is clean or user explicitly accepts remaining findings.
|
||||
|
||||
## Step 6 — Confirm + Push
|
||||
|
||||
Show summary: ticket, branch, files changed, review findings.
|
||||
**Use `AskUserQuestion` tool to ask for explicit approval before pushing.** Include any open questions about commit message scope or body if unclear.
|
||||
|
||||
On approval, commit following Conventional Commits:
|
||||
|
||||
```
|
||||
<type>(<scope>): <short description, imperative, ≤50 chars>
|
||||
|
||||
<optional body: what changed and why, wrap at 72 chars>
|
||||
|
||||
Closes $ARGUMENTS
|
||||
https://knockoutwhist.youtrack.cloud/issue/$ARGUMENTS
|
||||
```
|
||||
|
||||
- `type`: same as branch type (`fix`, `feat`, `refactor`, `chore`, etc.)
|
||||
- `scope`: affected module (`core`, `rule`, `api`, `bot`, `io`)
|
||||
- Subject: imperative mood, no period, lowercase
|
||||
- Footer `Closes $ARGUMENTS` and ticket URL always present
|
||||
|
||||
Push branch to remote.
|
||||
|
||||
## Step 7 — Comment on Ticket
|
||||
|
||||
After successful push, call `mcp__youtrack__add_issue_comment` on `$ARGUMENTS` with:
|
||||
|
||||
```
|
||||
Branch `<branch-name>` pushed.
|
||||
|
||||
<one-sentence summary of what was changed and why>
|
||||
|
||||
Files changed:
|
||||
- <file1>
|
||||
- <file2>
|
||||
```
|
||||
|
||||
## Step 7b — Additional Links
|
||||
|
||||
After commenting, ask the user if `$ARGUMENTS` should be linked to any other issues not already linked:
|
||||
|
||||
| Situation | Relation |
|
||||
|-----------|---------|
|
||||
| This fix blocks another open ticket | `blocks` |
|
||||
| Another ticket must ship first | `is blocked by` |
|
||||
| Related defect or story | `relates to` |
|
||||
| Duplicate of another defect | `duplicates` |
|
||||
|
||||
Scan the ticket description and comments for any issue IDs that were mentioned but not yet linked. Suggest those automatically.
|
||||
|
||||
Call `mcp__youtrack__link_issues` for each confirmed link.
|
||||
|
||||
## Step 8 — Cleanup
|
||||
|
||||
Call `ExitWorktree` with `discard_changes: true` to delete the worktree.
|
||||
(Branch was pushed in step 6 — commits are safe on remote; `discard_changes: true` bypasses the local-ahead guard.)
|
||||
Report: branch pushed, ticket commented, links created, worktree deleted, done.
|
||||
@@ -0,0 +1,101 @@
|
||||
# Implement Feature from YouTrack
|
||||
|
||||
Automated feature-implementation workflow. Ticket ID: `$ARGUMENTS`
|
||||
|
||||
## Step 1 — Fetch Ticket
|
||||
|
||||
Call `mcp__youtrack__get_issue` with ID `$ARGUMENTS`.
|
||||
Extract and display: summary, description, acceptance criteria, Priority, Subsystem.
|
||||
|
||||
## Step 2 — Create Worktree
|
||||
|
||||
Derive branch name from ticket:
|
||||
- `type` from YouTrack issue type: `feature`/`task` → `feat`, `refactor` → `refactor`, `bug` → `fix`, else `chore`
|
||||
- `scope` from affected module/component (kebab-case, omit if unclear)
|
||||
- `description` from ticket summary: lowercase, kebab-case, max 40 chars, drop articles
|
||||
|
||||
Branch format: `<type>/<ticket-id>-<description>`
|
||||
Example: `feat/NOW-456-add-bot-difficulty-slider`
|
||||
|
||||
Call `EnterWorktree` with that branch name.
|
||||
All subsequent file work happens inside this worktree.
|
||||
|
||||
## Step 3 — Understand Requirements (read-only)
|
||||
|
||||
1. Run `./compile` — confirm baseline is green.
|
||||
2. Run `./test` — confirm baseline is green.
|
||||
3. Spawn `cavecrew-investigator` with: ticket description + acceptance criteria → locate affected files, relevant types/interfaces, entry points, integration touch-points.
|
||||
4. **If anything is ambiguous (scope unclear, acceptance criteria missing, design decisions needed), use `AskUserQuestion` tool to ask — max 4 questions at once.**
|
||||
5. **Report plan to user: what will be added/changed, which files, which modules. No file writes yet. Wait for acknowledgement before continuing.**
|
||||
|
||||
## Step 4 — Implement
|
||||
|
||||
1. Implement feature (use `scala-implementer` agent for non-trivial changes; inline edits for small ones).
|
||||
2. Run `./compile` — must be green.
|
||||
3. Run `./test` — must be green (add new tests for new behaviour; do not modify existing tests unless requirements changed).
|
||||
4. Run `./gradlew spotlessScalaApply` — **blocking, foreground only**. Wait for completion before continuing.
|
||||
5. Run `./lint` — **blocking, foreground only** (never `run_in_background`). Wait for exit code 0. Must be green.
|
||||
- If lint fails, fix all issues and re-run until exit code 0.
|
||||
- **Do NOT proceed to Step 5 until `./lint` has completed and returned exit code 0.**
|
||||
If any step fails, iterate until all pass.
|
||||
|
||||
## Step 5 — Review
|
||||
|
||||
Spawn `cavecrew-reviewer` on the full diff.
|
||||
Display findings grouped by severity.
|
||||
|
||||
## Step 5b — Apply Review Findings
|
||||
|
||||
If the review produced any findings (any severity):
|
||||
1. Implement all agreed fixes.
|
||||
2. Run `./compile` — must be green.
|
||||
3. Run `./test` — must be green.
|
||||
4. Run `./gradlew spotlessScalaApply` — **blocking, foreground only**. Wait for completion.
|
||||
5. Run `./lint` — **blocking, foreground only**. Wait for exit code 0.
|
||||
- If lint fails, fix all issues and re-run until exit code 0.
|
||||
6. Re-spawn `cavecrew-reviewer` on the updated diff to confirm all findings are resolved.
|
||||
|
||||
Repeat until review is clean or user explicitly accepts remaining findings.
|
||||
|
||||
## Step 6 — Confirm + Push
|
||||
|
||||
Show summary: ticket, branch, files changed, review findings.
|
||||
**Use `AskUserQuestion` tool to ask for explicit approval before pushing.** Include any open questions about commit message scope or body if unclear.
|
||||
|
||||
On approval, commit following Conventional Commits:
|
||||
|
||||
```
|
||||
<type>(<scope>): <short description, imperative, ≤50 chars>
|
||||
|
||||
<optional body: what changed and why, wrap at 72 chars>
|
||||
|
||||
Closes $ARGUMENTS
|
||||
https://knockoutwhist.youtrack.cloud/issue/$ARGUMENTS
|
||||
```
|
||||
|
||||
- `type`: same as branch type (`feat`, `refactor`, `chore`, etc.)
|
||||
- `scope`: affected module (`core`, `rule`, `api`, `bot`, `io`)
|
||||
- Subject: imperative mood, no period, lowercase
|
||||
- Footer `Closes $ARGUMENTS` and ticket URL always present
|
||||
|
||||
Push branch to remote.
|
||||
|
||||
## Step 7 — Comment on Ticket
|
||||
|
||||
After successful push, call `mcp__youtrack__add_issue_comment` on `$ARGUMENTS` with:
|
||||
|
||||
```
|
||||
Branch `<branch-name>` pushed.
|
||||
|
||||
<one-sentence summary of what was added and why>
|
||||
|
||||
Files changed:
|
||||
- <file1>
|
||||
- <file2>
|
||||
```
|
||||
|
||||
## Step 8 — Cleanup
|
||||
|
||||
Call `ExitWorktree` with `discard_changes: true` to delete the worktree.
|
||||
(Branch was pushed in step 6 — commits are safe on remote; `discard_changes: true` bypasses the local-ahead guard.)
|
||||
Report: branch pushed, ticket commented, worktree deleted, done.
|
||||
@@ -0,0 +1,109 @@
|
||||
# Split Story into Subtasks in YouTrack
|
||||
|
||||
Split a user story into smaller, implementable subtasks. Story ID: `$ARGUMENTS`
|
||||
|
||||
## Step 1 — Fetch Story
|
||||
|
||||
Call `mcp__youtrack__get_issue` with ID `$ARGUMENTS`.
|
||||
Extract and display: summary, description, acceptance criteria, implementation notes.
|
||||
|
||||
## Step 2 — Research (if needed)
|
||||
|
||||
If the story involves unfamiliar domain logic or technical constraints:
|
||||
- Search repo for relevant code (`Grep`/`Bash`).
|
||||
- Use `WebSearch` for external standards or protocols.
|
||||
- Do NOT guess. Surface findings before proposing splits.
|
||||
|
||||
## Step 3 — Propose Split
|
||||
|
||||
Analyse the story and propose a set of subtasks. Rules:
|
||||
- Each subtask = one unit of work, completable independently or in sequence.
|
||||
- No subtask should exceed ~2 days of work.
|
||||
- Name subtasks in imperative mood (e.g. "Implement move validation endpoint").
|
||||
- Cover the full scope of the parent story — no gaps.
|
||||
|
||||
Show proposed subtask list to user (titles only) and ask:
|
||||
**Use `AskUserQuestion` tool:**
|
||||
- Does the split look right?
|
||||
- Any subtasks to add, remove, or merge?
|
||||
- Should any subtask be assigned to a specific person?
|
||||
|
||||
Incorporate feedback. Repeat until user approves the list.
|
||||
|
||||
## Step 4 — Draft Each Subtask
|
||||
|
||||
For each approved subtask, compose description using this template:
|
||||
|
||||
```
|
||||
[Brief description of what needs to be done for this subtask.]
|
||||
|
||||
|
||||
Steps / Tasks
|
||||
|
||||
- Task 1
|
||||
- Task 2
|
||||
- Task 3
|
||||
|
||||
|
||||
Definition of Done
|
||||
|
||||
What must be true for this subtask to be considered complete:
|
||||
|
||||
- Code implemented
|
||||
- Tests passed
|
||||
- Reviewed and merged
|
||||
```
|
||||
|
||||
Rules:
|
||||
- Steps/Tasks: concrete, ordered where order matters.
|
||||
- Definition of Done: adjust per subtask — not all subtasks need the same criteria (e.g. a research spike has different DoD than an implementation task).
|
||||
- Keep description short — one paragraph max.
|
||||
|
||||
## Step 5 — Determine Project per Subtask
|
||||
|
||||
Assign each subtask's project based on its content — do **not** inherit blindly from parent:
|
||||
|
||||
- Backend code (game engine, bots, API, services, coordinator) → `NCS`
|
||||
- Frontend code (UI, UX, web app) → `NCWF`
|
||||
- Kubernetes, pipelines, CI/CD, DB setup, infrastructure → `NCI`
|
||||
|
||||
If a subtask's project is ambiguous, ask the user before creating it.
|
||||
|
||||
## Step 6 — Create Subtasks
|
||||
|
||||
For each subtask call `mcp__youtrack__create_issue` with:
|
||||
- `project`: from Step 5
|
||||
- `summary`: subtask title (≤72 chars, sentence case)
|
||||
- `description`: full formatted description from Step 4 (Markdown)
|
||||
- `type`: `Task`
|
||||
|
||||
Then call `mcp__youtrack__link_issues` to link each created subtask to `$ARGUMENTS` with relation `subtask of`.
|
||||
|
||||
## Step 6b — Inter-Subtask Links
|
||||
|
||||
If subtasks must be done in sequence (one depends on output of another), add ordering links:
|
||||
- For each dependency pair call `mcp__youtrack__link_issues` with relation `is blocked by` (subtask B is blocked by subtask A).
|
||||
|
||||
Ask the user to confirm sequencing before adding these links:
|
||||
|
||||
> Do any subtasks have ordering dependencies? (e.g. "Implement X must come before Add tests for X")
|
||||
|
||||
## Step 6c — External Links
|
||||
|
||||
Scan `$ARGUMENTS` description and implementation notes for any referenced issue IDs not already linked. For each:
|
||||
|
||||
| Situation | Relation |
|
||||
|-----------|---------|
|
||||
| Parent story blocks another epic/story | `blocks` |
|
||||
| Story depends on another epic completing | `is blocked by` |
|
||||
| Related story in same domain | `relates to` |
|
||||
| This story duplicates or supersedes | `duplicates` |
|
||||
|
||||
Suggest links to the user and call `mcp__youtrack__link_issues` on confirmation.
|
||||
|
||||
## Step 7 — Report
|
||||
|
||||
List all created subtask IDs and summaries.
|
||||
List all links created (subtask-of, blocking chains, external).
|
||||
Display parent story link.
|
||||
Ask if any subtask needs further splitting.
|
||||
+223
-194
@@ -2,7 +2,7 @@
|
||||
|
||||
> **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 | 164 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.**
|
||||
|
||||
---
|
||||
@@ -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/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||
- class Challenge
|
||||
- function gameIdOpt
|
||||
@@ -100,7 +101,7 @@
|
||||
- function persist
|
||||
- function findByEmail
|
||||
- function findAll
|
||||
- _...12 more_
|
||||
- _...11 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||
- class ChallengeRepository
|
||||
- function findActiveByChallengerId
|
||||
@@ -116,30 +117,37 @@
|
||||
- function me
|
||||
- function publicProfile
|
||||
- function banUser
|
||||
- _...10 more_
|
||||
- _...9 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||
- class ChallengeResource
|
||||
- function create
|
||||
- function list
|
||||
- function get
|
||||
- function accept
|
||||
- function decline
|
||||
- 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`
|
||||
- class AccountService
|
||||
- function initializeMetrics
|
||||
- function register
|
||||
- function login
|
||||
- function findByUsername
|
||||
- function findById
|
||||
- function createBotAccount
|
||||
- _...11 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||
- class ChallengeService
|
||||
- function initializeMetrics
|
||||
- function create
|
||||
- function accept
|
||||
- function decline
|
||||
- function cancel
|
||||
- function listForUser
|
||||
- _...1 more_
|
||||
- _...3 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`
|
||||
- class Board
|
||||
- function apply
|
||||
@@ -162,10 +170,6 @@
|
||||
- class Square
|
||||
- function fromAlgebraic
|
||||
- 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/GameFullEventDto.scala` — class GameFullEventDto, function apply
|
||||
- `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||
@@ -186,6 +190,14 @@
|
||||
- function withEnPassantSquare
|
||||
- function withHalfMoveClock
|
||||
- _...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/GameContextImport.scala` — class GameContextImport, function importGameContext
|
||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
||||
@@ -201,115 +213,21 @@
|
||||
- function isCheck
|
||||
- function isCheckmate
|
||||
- _...6 more_
|
||||
- `modules/bot/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/bot/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/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/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||
- class BotRegistry
|
||||
- function register
|
||||
- function unregister
|
||||
- function dispatch
|
||||
- function registeredBots
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||
- class BotEventResource
|
||||
- function streamEvents
|
||||
- function streamGame
|
||||
- function makeMove
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala`
|
||||
- class BeansProducer
|
||||
- function redissonClient
|
||||
- function kubernetesClient
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||
- class CoordinatorConfig
|
||||
- function maxGamesPerCore
|
||||
@@ -317,10 +235,10 @@
|
||||
- function rebalanceInterval
|
||||
- function rebalanceMinInterval
|
||||
- function heartbeatTtl
|
||||
- _...11 more_
|
||||
- _...14 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer, function hasActiveStream
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala`
|
||||
- class CoreGrpcClient
|
||||
- function shutdown
|
||||
@@ -337,12 +255,16 @@
|
||||
- _...1 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala`
|
||||
- class AutoScaler
|
||||
- function initMetrics
|
||||
- function periodicScaleCheck
|
||||
- function checkAndScale
|
||||
- function scaleUp
|
||||
- function scaleDown
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala`
|
||||
- class CacheEvictionManager
|
||||
- function setRedisPrefix
|
||||
- function initializeMetrics
|
||||
- function periodicCacheEviction
|
||||
- function evictStaleGames
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala`
|
||||
- class FailoverService
|
||||
@@ -351,21 +273,24 @@
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala`
|
||||
- class HealthMonitor
|
||||
- function setRedisPrefix
|
||||
- function initializeMetrics
|
||||
- function onStartup
|
||||
- function periodicHealthCheck
|
||||
- function checkInstanceHealth
|
||||
- function watchK8sPods
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala`
|
||||
- class InstanceRegistry
|
||||
- function initMetrics
|
||||
- function setRedisPrefix
|
||||
- function loadAllFromRedis
|
||||
- function getInstance
|
||||
- function getAllInstances
|
||||
- function updateInstanceFromRedis
|
||||
- function markInstanceDead
|
||||
- _...1 more_
|
||||
- _...4 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala`
|
||||
- class LoadBalancer
|
||||
- function setRedisPrefix
|
||||
- function shouldRebalance
|
||||
- function rebalance
|
||||
- function periodicRebalanceCheck
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala`
|
||||
- class RuleSetRestAdapter
|
||||
- function candidateMoves
|
||||
@@ -393,10 +318,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/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/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/engine/GameEngine.scala`
|
||||
- class GameEngine
|
||||
@@ -412,14 +333,7 @@
|
||||
- class BadRequestException
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala`
|
||||
- class CoreProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||
- class IoGrpcClientWrapper
|
||||
- function exportCombined
|
||||
@@ -444,15 +358,18 @@
|
||||
- function unsubscribe
|
||||
- _...1 more_
|
||||
- `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`
|
||||
- class GameRedisSubscriberManager
|
||||
- function subscribeGame
|
||||
- function onMessage
|
||||
- function unsubscribeGame
|
||||
- function batchResubscribeGames
|
||||
- function unsubscribeGames
|
||||
- _...3 more_
|
||||
- function evictGames
|
||||
- _...2 more_
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||
- class GameRegistry
|
||||
- function store
|
||||
@@ -461,6 +378,7 @@
|
||||
- function generateId
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala`
|
||||
- class RedisGameRegistry
|
||||
- function initMetrics
|
||||
- function generateId
|
||||
- function store
|
||||
- function get
|
||||
@@ -518,14 +436,7 @@
|
||||
- function importGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala`
|
||||
- class IoProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
||||
@@ -556,16 +467,127 @@
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
||||
- `modules/official-bots/python/nnue.py`
|
||||
- function get_weights_dir: ()
|
||||
- function get_data_dir: ()
|
||||
- function list_checkpoints: ()
|
||||
- function migrate_legacy_data: ()
|
||||
- function show_header: ()
|
||||
- function show_checkpoints_table: ()
|
||||
- _...10 more_
|
||||
- `modules/official-bots/python/src/dataset.py`
|
||||
- function get_datasets_dir: () -> Path
|
||||
- function next_dataset_version: () -> int
|
||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
||||
- function save_dataset_metadata: (version, metadata) -> None
|
||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
||||
- _...4 more_
|
||||
- `modules/official-bots/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
||||
- `modules/official-bots/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
||||
- `modules/official-bots/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
||||
- `modules/official-bots/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
||||
- `modules/official-bots/python/src/tactical_positions_extractor.py`
|
||||
- function download_and_extract_puzzle_db: (url, output_dir)
|
||||
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
||||
- function load_positions_from_file: (file_path) -> Set[str]
|
||||
- function merge_positions: (tactical, other, output_file)
|
||||
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
||||
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
||||
- `modules/official-bots/python/src/train.py`
|
||||
- function fen_to_features: (fen)
|
||||
- function find_next_version: (base_name)
|
||||
- function save_metadata: (weights_file, metadata)
|
||||
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio, hidden_sizes)
|
||||
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio, hidden_sizes)
|
||||
- class NNUEDataset
|
||||
- _...1 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotController.scala`
|
||||
- class BotController
|
||||
- function getBot
|
||||
- function listBots
|
||||
- class BotController
|
||||
- function getBot
|
||||
- function listBots
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
||||
- class BotMoveRepetition
|
||||
- function blockedMoves
|
||||
- function repeatedMove
|
||||
- function filterAllowed
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
||||
- class Evaluation
|
||||
- class CHECKMATE_SCORE
|
||||
- class DRAW_SCORE
|
||||
- function evaluate
|
||||
- function initAccumulator
|
||||
- function copyAccumulator
|
||||
- _...2 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — class ClassicalBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` — class HybridBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala` — class NNUEBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
||||
- class EvaluationClassic
|
||||
- function evaluate
|
||||
- function countRay
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
||||
- class NNUE
|
||||
- function initAccumulator
|
||||
- function pushAccumulator
|
||||
- function copyAccumulator
|
||||
- function recomputeAccumulator
|
||||
- function validateAccumulator
|
||||
- _...4 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
||||
- class NbaiLoader
|
||||
- function load
|
||||
- function loadDefault
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
||||
- function toJson
|
||||
- class NbaiMetadata
|
||||
- function fromJson
|
||||
- function str
|
||||
- function num
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
||||
- function bestMove
|
||||
- function bestMove
|
||||
- function bestMoveWithTime
|
||||
- function bestMoveWithTime
|
||||
- function loop
|
||||
- function loop
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
||||
- class MoveOrdering
|
||||
- class OrderingContext
|
||||
- function addKillerMove
|
||||
- function getKillerMoves
|
||||
- function addHistory
|
||||
- function getHistory
|
||||
- _...3 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
||||
- function advance
|
||||
- function probe
|
||||
- function store
|
||||
- function clear
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/resource/OfficialBotChallengeResource.scala` — class OfficialBotChallengeResource, function challengeWithDifficulty
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/DifficultyMapper.scala` — class DifficultyMapper, function fromElo
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/OfficialBotService.scala`
|
||||
- class OfficialBotService
|
||||
- function initializeMetrics
|
||||
- function onStart
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
||||
- class ZobristHash
|
||||
- function hash
|
||||
- function nextHash
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala`
|
||||
- class ProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||
- class RuleSetResource
|
||||
@@ -576,38 +598,45 @@
|
||||
- function isCheckmate
|
||||
- _...6 more_
|
||||
- `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/InternalClientHeadersFactory.scala` — class InternalClientHeadersFactory
|
||||
- `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/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/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/redis/GameWritebackStreamListener.scala`
|
||||
- class GameWritebackStreamListener
|
||||
- function startListening
|
||||
- function onMessage
|
||||
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||
- class GameRecordRepository
|
||||
- function findByGameId
|
||||
- function persist
|
||||
- function merge
|
||||
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame
|
||||
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||
- 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 initializeMetrics
|
||||
- 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/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/RedissonProducer.scala`
|
||||
- class RedissonProducer
|
||||
- function produceRedissonClient
|
||||
- function shutdown
|
||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||
- class GameWebSocketResource
|
||||
- function initializeMetrics
|
||||
- function onOpen
|
||||
- function onMessage
|
||||
- function onTextMessage
|
||||
- function onClose
|
||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala`
|
||||
- class UserWebSocketResource
|
||||
- function onOpen
|
||||
- function onClose
|
||||
|
||||
---
|
||||
|
||||
@@ -615,14 +644,14 @@
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- `STOCKFISH_PATH` **required** — modules/bot/python/nnue.py
|
||||
- `STOCKFISH_PATH` **required** — modules/official-bots/python/nnue.py
|
||||
|
||||
---
|
||||
|
||||
# Middleware
|
||||
|
||||
## custom
|
||||
- generate — `modules/bot/python/src/generate.py`
|
||||
- generate — `modules/official-bots/python/src/generate.py`
|
||||
|
||||
---
|
||||
|
||||
@@ -631,38 +660,38 @@
|
||||
## 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/board/Square.scala` — imported by **57** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **55** 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 **54** 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/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **20** files
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **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 **18** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** 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/GameResult.scala` — imported by **20** 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/board/CastlingRights.scala` — imported by **13** files
|
||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** 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 **12** 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/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/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/bot/Bot.scala` — imported by **6** files
|
||||
|
||||
## 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/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/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/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` +51 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/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/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/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/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/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/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/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineDrawOfferTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +22 more
|
||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/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/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/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/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/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
|
||||
|
||||
- `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)
|
||||
|
||||
- `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/move/Move.scala` — imported by **55** 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 **54** 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/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **20** files
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **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 **18** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** 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/GameResult.scala` — imported by **20** 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/board/CastlingRights.scala` — imported by **13** files
|
||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files
|
||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** 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 **12** 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/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/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/bot/Bot.scala` — imported by **6** files
|
||||
|
||||
## 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/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/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/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` +51 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/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/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/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/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/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/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/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineDrawOfferTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineGameEndingTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala` +22 more
|
||||
- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/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/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/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/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/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
|
||||
|
||||
+199
-170
@@ -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/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala`
|
||||
- class Challenge
|
||||
- function gameIdOpt
|
||||
@@ -44,7 +45,7 @@
|
||||
- function persist
|
||||
- function findByEmail
|
||||
- function findAll
|
||||
- _...12 more_
|
||||
- _...11 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala`
|
||||
- class ChallengeRepository
|
||||
- function findActiveByChallengerId
|
||||
@@ -60,30 +61,37 @@
|
||||
- function me
|
||||
- function publicProfile
|
||||
- function banUser
|
||||
- _...10 more_
|
||||
- _...9 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala`
|
||||
- class ChallengeResource
|
||||
- function create
|
||||
- function list
|
||||
- function get
|
||||
- function accept
|
||||
- function decline
|
||||
- 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`
|
||||
- class AccountService
|
||||
- function initializeMetrics
|
||||
- function register
|
||||
- function login
|
||||
- function findByUsername
|
||||
- function findById
|
||||
- function createBotAccount
|
||||
- _...11 more_
|
||||
- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala`
|
||||
- class ChallengeService
|
||||
- function initializeMetrics
|
||||
- function create
|
||||
- function accept
|
||||
- function decline
|
||||
- function cancel
|
||||
- function listForUser
|
||||
- _...1 more_
|
||||
- _...3 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`
|
||||
- class Board
|
||||
- function apply
|
||||
@@ -106,10 +114,6 @@
|
||||
- class Square
|
||||
- function fromAlgebraic
|
||||
- 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/GameFullEventDto.scala` — class GameFullEventDto, function apply
|
||||
- `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply
|
||||
@@ -130,6 +134,14 @@
|
||||
- function withEnPassantSquare
|
||||
- function withHalfMoveClock
|
||||
- _...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/GameContextImport.scala` — class GameContextImport, function importGameContext
|
||||
- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply
|
||||
@@ -145,115 +157,21 @@
|
||||
- function isCheck
|
||||
- function isCheckmate
|
||||
- _...6 more_
|
||||
- `modules/bot/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/bot/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/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/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala`
|
||||
- class BotRegistry
|
||||
- function register
|
||||
- function unregister
|
||||
- function dispatch
|
||||
- function registeredBots
|
||||
- `modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala`
|
||||
- class BotEventResource
|
||||
- function streamEvents
|
||||
- function streamGame
|
||||
- function makeMove
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala`
|
||||
- class BeansProducer
|
||||
- function redissonClient
|
||||
- function kubernetesClient
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` — class BeansProducer, function kubernetesClient
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala`
|
||||
- class CoordinatorConfig
|
||||
- function maxGamesPerCore
|
||||
@@ -261,10 +179,10 @@
|
||||
- function rebalanceInterval
|
||||
- function rebalanceMinInterval
|
||||
- function heartbeatTtl
|
||||
- _...11 more_
|
||||
- _...14 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer, function hasActiveStream
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala`
|
||||
- class CoreGrpcClient
|
||||
- function shutdown
|
||||
@@ -281,12 +199,16 @@
|
||||
- _...1 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala`
|
||||
- class AutoScaler
|
||||
- function initMetrics
|
||||
- function periodicScaleCheck
|
||||
- function checkAndScale
|
||||
- function scaleUp
|
||||
- function scaleDown
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala`
|
||||
- class CacheEvictionManager
|
||||
- function setRedisPrefix
|
||||
- function initializeMetrics
|
||||
- function periodicCacheEviction
|
||||
- function evictStaleGames
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala`
|
||||
- class FailoverService
|
||||
@@ -295,21 +217,24 @@
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala`
|
||||
- class HealthMonitor
|
||||
- function setRedisPrefix
|
||||
- function initializeMetrics
|
||||
- function onStartup
|
||||
- function periodicHealthCheck
|
||||
- function checkInstanceHealth
|
||||
- function watchK8sPods
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala`
|
||||
- class InstanceRegistry
|
||||
- function initMetrics
|
||||
- function setRedisPrefix
|
||||
- function loadAllFromRedis
|
||||
- function getInstance
|
||||
- function getAllInstances
|
||||
- function updateInstanceFromRedis
|
||||
- function markInstanceDead
|
||||
- _...1 more_
|
||||
- _...4 more_
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala`
|
||||
- class LoadBalancer
|
||||
- function setRedisPrefix
|
||||
- function shouldRebalance
|
||||
- function rebalance
|
||||
- function periodicRebalanceCheck
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala`
|
||||
- class RuleSetRestAdapter
|
||||
- function candidateMoves
|
||||
@@ -337,10 +262,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/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/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/engine/GameEngine.scala`
|
||||
- class GameEngine
|
||||
@@ -356,14 +277,7 @@
|
||||
- class BadRequestException
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala`
|
||||
- class CoreProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` — class CoreProtoMapper
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala`
|
||||
- class IoGrpcClientWrapper
|
||||
- function exportCombined
|
||||
@@ -388,15 +302,18 @@
|
||||
- function unsubscribe
|
||||
- _...1 more_
|
||||
- `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`
|
||||
- class GameRedisSubscriberManager
|
||||
- function subscribeGame
|
||||
- function onMessage
|
||||
- function unsubscribeGame
|
||||
- function batchResubscribeGames
|
||||
- function unsubscribeGames
|
||||
- _...3 more_
|
||||
- function evictGames
|
||||
- _...2 more_
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala`
|
||||
- class GameRegistry
|
||||
- function store
|
||||
@@ -405,6 +322,7 @@
|
||||
- function generateId
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala`
|
||||
- class RedisGameRegistry
|
||||
- function initMetrics
|
||||
- function generateId
|
||||
- function store
|
||||
- function get
|
||||
@@ -462,14 +380,7 @@
|
||||
- function importGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala`
|
||||
- class IoProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` — class IoProtoMapper
|
||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext
|
||||
- `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala`
|
||||
@@ -500,16 +411,127 @@
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer
|
||||
- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer
|
||||
- `modules/official-bots/python/nnue.py`
|
||||
- function get_weights_dir: ()
|
||||
- function get_data_dir: ()
|
||||
- function list_checkpoints: ()
|
||||
- function migrate_legacy_data: ()
|
||||
- function show_header: ()
|
||||
- function show_checkpoints_table: ()
|
||||
- _...10 more_
|
||||
- `modules/official-bots/python/src/dataset.py`
|
||||
- function get_datasets_dir: () -> Path
|
||||
- function next_dataset_version: () -> int
|
||||
- function list_datasets: () -> List[Tuple[int, Dict]]
|
||||
- function load_dataset_metadata: (version) -> Optional[Dict]
|
||||
- function save_dataset_metadata: (version, metadata) -> None
|
||||
- function create_dataset: (version, labeled_jsonl_path, sources, stockfish_depth) -> Path
|
||||
- _...4 more_
|
||||
- `modules/official-bots/python/src/export.py` — function export_to_nbai: (weights_file, output_file, trained_by, train_loss)
|
||||
- `modules/official-bots/python/src/generate.py` — function play_random_game_and_collect_positions: (output_file, total_positions, samples_per_game, min_move, max_move, num_workers)
|
||||
- `modules/official-bots/python/src/label.py` — function normalize_evaluation: (cp_value, method, scale), function label_positions_with_stockfish: (positions_file, output_file, stockfish_path, batch_size, depth, verbose, normalize, num_workers)
|
||||
- `modules/official-bots/python/src/lichess_importer.py` — function import_lichess_evals: (input_path, output_file, max_positions, min_depth, verbose) -> int
|
||||
- `modules/official-bots/python/src/tactical_positions_extractor.py`
|
||||
- function download_and_extract_puzzle_db: (url, output_dir)
|
||||
- function extract_puzzle_positions: (puzzle_csv, max_puzzles) -> Set[str]
|
||||
- function load_positions_from_file: (file_path) -> Set[str]
|
||||
- function merge_positions: (tactical, other, output_file)
|
||||
- function extract_tactical_only: (puzzle_csv, output_file, max_puzzles) -> int
|
||||
- function interactive_merge_positions: (puzzle_csv, output_file, max_puzzles)
|
||||
- `modules/official-bots/python/src/train.py`
|
||||
- function fen_to_features: (fen)
|
||||
- function find_next_version: (base_name)
|
||||
- function save_metadata: (weights_file, metadata)
|
||||
- function train_nnue: (data_file, output_file, epochs, batch_size, lr, checkpoint, stockfish_depth, use_versioning, early_stopping_patience, weight_decay, subsample_ratio, hidden_sizes)
|
||||
- function burst_train: (data_file, output_file, duration_minutes, epochs_per_season, early_stopping_patience, batch_size, lr, initial_checkpoint, stockfish_depth, use_versioning, weight_decay, subsample_ratio, hidden_sizes)
|
||||
- class NNUEDataset
|
||||
- _...1 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotController.scala`
|
||||
- class BotController
|
||||
- function getBot
|
||||
- function listBots
|
||||
- class BotController
|
||||
- function getBot
|
||||
- function listBots
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`
|
||||
- class BotMoveRepetition
|
||||
- function blockedMoves
|
||||
- function repeatedMove
|
||||
- function filterAllowed
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/Config.scala` — class Config
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`
|
||||
- class Evaluation
|
||||
- class CHECKMATE_SCORE
|
||||
- class DRAW_SCORE
|
||||
- function evaluate
|
||||
- function initAccumulator
|
||||
- function copyAccumulator
|
||||
- _...2 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — class ClassicalBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` — class HybridBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala` — class NNUEBot, function apply
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`
|
||||
- class EvaluationClassic
|
||||
- function evaluate
|
||||
- function countRay
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala` — class EvaluationNNUE, function evaluate
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`
|
||||
- class NNUE
|
||||
- function initAccumulator
|
||||
- function pushAccumulator
|
||||
- function copyAccumulator
|
||||
- function recomputeAccumulator
|
||||
- function validateAccumulator
|
||||
- _...4 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala`
|
||||
- class NbaiLoader
|
||||
- function load
|
||||
- function loadDefault
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala` — class NbaiMigrator, function migrateFromBin
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala`
|
||||
- function toJson
|
||||
- class NbaiMetadata
|
||||
- function fromJson
|
||||
- function str
|
||||
- function num
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala` — class NbaiWriter, function write
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/config/RedisConfig.scala` — class RedisConfig
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`
|
||||
- function bestMove
|
||||
- function bestMove
|
||||
- function bestMoveWithTime
|
||||
- function bestMoveWithTime
|
||||
- function loop
|
||||
- function loop
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`
|
||||
- class MoveOrdering
|
||||
- class OrderingContext
|
||||
- function addKillerMove
|
||||
- function getKillerMoves
|
||||
- function addHistory
|
||||
- function getHistory
|
||||
- _...3 more_
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala`
|
||||
- function advance
|
||||
- function probe
|
||||
- function store
|
||||
- function clear
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/resource/OfficialBotChallengeResource.scala` — class OfficialBotChallengeResource, function challengeWithDifficulty
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/DifficultyMapper.scala` — class DifficultyMapper, function fromElo
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/service/OfficialBotService.scala`
|
||||
- class OfficialBotService
|
||||
- function initializeMetrics
|
||||
- function onStart
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — function probe, function select
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala` — class PolyglotHash, function hash
|
||||
- `modules/official-bots/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`
|
||||
- class ZobristHash
|
||||
- function hash
|
||||
- function nextHash
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala`
|
||||
- class ProtoMapper
|
||||
- function toProtoColor
|
||||
- function fromProtoColor
|
||||
- function toProtoPieceType
|
||||
- function fromProtoPieceType
|
||||
- function toProtoMoveKind
|
||||
- _...9 more_
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` — class ProtoMapper
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala`
|
||||
- class RuleSetResource
|
||||
@@ -520,35 +542,42 @@
|
||||
- function isCheckmate
|
||||
- _...6 more_
|
||||
- `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/InternalClientHeadersFactory.scala` — class InternalClientHeadersFactory
|
||||
- `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/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/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/redis/GameWritebackStreamListener.scala`
|
||||
- class GameWritebackStreamListener
|
||||
- function startListening
|
||||
- function onMessage
|
||||
- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` — class GameWritebackStreamListener, function startListening
|
||||
- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala`
|
||||
- class GameRecordRepository
|
||||
- function findByGameId
|
||||
- function persist
|
||||
- function merge
|
||||
- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame
|
||||
- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack
|
||||
- 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 initializeMetrics
|
||||
- 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/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/RedissonProducer.scala`
|
||||
- class RedissonProducer
|
||||
- function produceRedissonClient
|
||||
- function shutdown
|
||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala`
|
||||
- class GameWebSocketResource
|
||||
- function initializeMetrics
|
||||
- function onOpen
|
||||
- function onMessage
|
||||
- function onTextMessage
|
||||
- function onClose
|
||||
- `modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala`
|
||||
- class UserWebSocketResource
|
||||
- function onOpen
|
||||
- function onClose
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Middleware
|
||||
|
||||
## custom
|
||||
- generate — `modules/bot/python/src/generate.py`
|
||||
- generate — `modules/official-bots/python/src/generate.py`
|
||||
|
||||
@@ -19,12 +19,20 @@ jobs:
|
||||
- id: check
|
||||
run: |
|
||||
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||
echo "Triggered manually — allowing build"
|
||||
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
COMMIT_AUTHOR=$(git log -1 --format='%an')
|
||||
COMMIT_SHA=$(git log -1 --format='%H')
|
||||
COMMIT_MSG=$(git log -1 --format='%s')
|
||||
echo "Commit: ${COMMIT_SHA}"
|
||||
echo "Author: ${COMMIT_AUTHOR}"
|
||||
echo "Message: ${COMMIT_MSG}"
|
||||
if [[ "$COMMIT_AUTHOR" == "TeamCity" ]]; then
|
||||
echo "Author is TeamCity — allowing build"
|
||||
echo "allowed=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "Author is not TeamCity — skipping build"
|
||||
echo "allowed=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
fi
|
||||
@@ -49,11 +57,50 @@ jobs:
|
||||
- rule
|
||||
- store
|
||||
- ws
|
||||
arch:
|
||||
- name: default
|
||||
march_flag: ""
|
||||
tag_suffix: ""
|
||||
- name: x86_v2
|
||||
march_flag: "-march=x86-64-v2"
|
||||
tag_suffix: "-x86_v2"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Read version from versions.env
|
||||
id: version
|
||||
run: |
|
||||
if [ -f "modules/${{ matrix.module }}/versions.env" ]; then
|
||||
source modules/${{ matrix.module }}/versions.env
|
||||
VERSION="${MAJOR}.${MINOR}.${PATCH}${{ matrix.arch.tag_suffix }}"
|
||||
echo "[${{ matrix.module }}/${{ matrix.arch.name }}] Version: ${VERSION}"
|
||||
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "[${{ matrix.module }}/${{ matrix.arch.name }}] No versions.env found — using 'latest${{ matrix.arch.tag_suffix }}'"
|
||||
echo "version=latest${{ matrix.arch.tag_suffix }}" >> "$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 }}/${{ matrix.arch.name }}] Existing tags: $(echo "${EXISTING_TAGS}" | tr '\n' ' ' | xargs)"
|
||||
if echo "${EXISTING_TAGS}" | grep -qx "${VERSION}"; then
|
||||
echo "[${{ matrix.module }}/${{ matrix.arch.name }}] Image ${VERSION} already exists — skipping build"
|
||||
echo "exists=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "[${{ matrix.module }}/${{ matrix.arch.name }}] Image ${VERSION} not found — will build"
|
||||
echo "exists=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Set up GraalVM
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
uses: graalvm/setup-graalvm@v1
|
||||
with:
|
||||
java-version: '21'
|
||||
@@ -61,6 +108,7 @@ jobs:
|
||||
native-image-job-reports: 'true'
|
||||
|
||||
- name: Cache Gradle packages
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
@@ -69,24 +117,22 @@ jobs:
|
||||
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
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
|
||||
run: ./gradlew :modules:${{ matrix.module }}:build -Dquarkus.native.enabled=true -Dquarkus.package.jar.enabled=false --no-daemon
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
run: |
|
||||
MARCH="${{ matrix.arch.march_flag }}"
|
||||
MARCH_ARG=""
|
||||
if [ -n "$MARCH" ]; then
|
||||
MARCH_ARG="-Dquarkus.native.additional-build-args=$MARCH"
|
||||
fi
|
||||
./gradlew :modules:${{ matrix.module }}:build -x test -Dquarkus.native.enabled=true -Dquarkus.package.jar.enabled=false -Dquarkus.profile=deployed $MARCH_ARG --no-daemon
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to GitHub Container Registry
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -94,15 +140,17 @@ jobs:
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Extract metadata
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/now-chess/now-chess-systems/${{ matrix.module }}
|
||||
tags: |
|
||||
type=raw,value=${{ steps.version.outputs.version }}
|
||||
type=raw,value=latest
|
||||
type=raw,value=latest${{ matrix.arch.tag_suffix }}
|
||||
|
||||
- name: Build and push
|
||||
if: steps.image-check.outputs.exists == 'false'
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
@@ -110,5 +158,5 @@ jobs:
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha,scope=${{ matrix.module }}
|
||||
cache-to: type=gha,mode=max,scope=${{ matrix.module }}
|
||||
cache-from: type=gha,scope=${{ matrix.module }}-${{ matrix.arch.name }}
|
||||
cache-to: type=gha,mode=max,scope=${{ matrix.module }}-${{ matrix.arch.name }}
|
||||
|
||||
@@ -48,3 +48,4 @@ graphify-out/
|
||||
.DS_Store
|
||||
/jacoco-reporter/.venv/
|
||||
/.claude/settings.local.json
|
||||
/.claude/worktrees/
|
||||
|
||||
Generated
-19
@@ -5,25 +5,6 @@
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleJvm" value="ms-21" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/modules" />
|
||||
<option value="$PROJECT_DIR$/modules/account" />
|
||||
<option value="$PROJECT_DIR$/modules/api" />
|
||||
<option value="$PROJECT_DIR$/modules/bot-platform" />
|
||||
<option value="$PROJECT_DIR$/modules/coordinator" />
|
||||
<option value="$PROJECT_DIR$/modules/core" />
|
||||
<option value="$PROJECT_DIR$/modules/io" />
|
||||
<option value="$PROJECT_DIR$/modules/json" />
|
||||
<option value="$PROJECT_DIR$/modules/official-bots" />
|
||||
<option value="$PROJECT_DIR$/modules/rule" />
|
||||
<option value="$PROJECT_DIR$/modules/security" />
|
||||
<option value="$PROJECT_DIR$/modules/store" />
|
||||
<option value="$PROJECT_DIR$/modules/ws" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
Generated
-1
@@ -1,4 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="FrameworkDetectionExcludesConfiguration">
|
||||
|
||||
Generated
-6
@@ -1,11 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CommitMessageInspectionProfile">
|
||||
<profile version="1.0">
|
||||
<inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
<component name="IssueNavigationConfiguration">
|
||||
<option name="links">
|
||||
<list>
|
||||
|
||||
@@ -57,6 +57,14 @@ Use consistently.
|
||||
- **Tests are the spec.** Don't modify to pass. Fix requirements/code. Update only if requirements change.
|
||||
- Never read build folders. Ask permission if needed.
|
||||
- Keep file current with decisions + conventions.
|
||||
- **NativeReflectionConfig (mandatory):** Every new type (class, case class, enum, sealed trait — anything serialized) must be registered in the `NativeReflectionConfig` of **every module that interacts with it**. Configs live at:
|
||||
- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala`
|
||||
- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala`
|
||||
- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`
|
||||
- `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala`
|
||||
- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala`
|
||||
- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala`
|
||||
- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala`
|
||||
|
||||
---
|
||||
|
||||
|
||||
+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,36 @@
|
||||
meta {
|
||||
name: Send Challenge
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{accountBaseUrl}}/challenge/{{username}}
|
||||
body: json
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
headers {
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {{token}}
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"color": "random",
|
||||
"timeControl": {
|
||||
"limitSeconds": 600,
|
||||
"incrementSeconds": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
username: bdc
|
||||
token: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJub3djaGVzcyIsInN1YiI6ImY3MGQxNDIwLTdhZmEtNGVjMy05Mzg1LWViYWU0N2U3NGY4OCIsInVzZXJuYW1lIjoicGxheWVyMSIsImlhdCI6MTc3OTE5MjkwOCwiZXhwIjoxNzc5MTkzMjA4LCJqdGkiOiJkMDhlZmRhMi01ZjliLTQyNjgtOGM3MC1iNDA2OTViNDhiMTUifQ.q68R2bUdRQ5QwEIfcP0d2g_Wac94qd4K6BzP-PC94x-tDpT3leUY8ZpqY6YzoNv-ywp5sm47-WC539DyUqdzDgPVLLSmOMjRxG-HpaNdXwsXlp8_C7KGlgkK_XSMa3Gq6S4AfUbaXbRhPg5NZz2MRosu0BY2ed0ISvmEfX5XEdBRlKgD14BIKAsEFv3tHtarFS1RGpcSoHV2oeIk_m-VHUC78N-ciNHmBH6mZna_fVHgMocOIrEsTZuUms0Zacmebvh2tAcf36xux1Bm2awJff19zReD-A2o9jucrKcM3Im5BJ6JtuWAsHEae9KLmuol6S2pldvNOmUn3egFUYz0yQ
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/offer
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 2
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/accept
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 3
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/decline
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 4
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/claim
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 1
|
||||
}
|
||||
|
||||
http {
|
||||
method: GET
|
||||
get {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/export/fen
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 2
|
||||
}
|
||||
|
||||
http {
|
||||
method: GET
|
||||
get {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/export/pgn
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,11 +4,15 @@ meta {
|
||||
seq: 1
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game
|
||||
body: json
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
headers {
|
||||
|
||||
@@ -7,7 +7,12 @@ meta {
|
||||
get {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
|
||||
@@ -4,9 +4,13 @@ meta {
|
||||
seq: 4
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/{{gameId}}/resign
|
||||
body: none
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
@@ -4,11 +4,15 @@ meta {
|
||||
seq: 1
|
||||
}
|
||||
|
||||
http {
|
||||
method: POST
|
||||
post {
|
||||
url: {{baseUrl}}/api/board/game/import/fen
|
||||
body: json
|
||||
auth: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
settings {
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
}
|
||||
|
||||
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 {
|
||||
baseUrl: http://localhost:8080
|
||||
baseUrl: http://localhost:8080/api
|
||||
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)
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user