| -rw-r--r-- | .gitignore | 24L |
| -rw-r--r-- | AGENTS.md | 79L |
| -rw-r--r-- | LICENSE | 15L |
| -rw-r--r-- | README.md | 71L |
| -rw-r--r-- | docs/games.md | 87L |
| -rw-r--r-- | docs/llama-backend.md | 82L |
| -rw-r--r-- | docs/usage.md | 75L |
| -rw-r--r-- | examples/examples-shared.jsonl | 4L |
| -rw-r--r-- | examples/game-fixtures.cjs | 23L |
| -rw-r--r-- | examples/reference-direct.jsonl | 4L |
| -rw-r--r-- | examples/reference-shared.jsonl | 4L |
| -rw-r--r-- | flake.lock | 45L |
| -rw-r--r-- | flake.nix | 202L |
| -rw-r--r-- | scripts/compare.py | 36L |
| -rwxr-xr-x | scripts/validate.sh | 55L |
| -rw-r--r-- | semif-api/README.md | 98L |
| -rw-r--r-- | semif-api/pyproject.toml | 36L |
| -rw-r--r-- | semif-api/src/semif_api/__init__.py | 1L |
| -rw-r--r-- | semif-api/src/semif_api/app.py | 281L |
| -rw-r--r-- | semif-api/src/semif_api/llama.py | 403L |
| -rw-r--r-- | semif-api/src/semif_api/web/app.js | 786L |
| -rw-r--r-- | semif-api/src/semif_api/web/game-rules.js | 221L |
| -rw-r--r-- | semif-api/src/semif_api/web/game.js | 259L |
| -rw-r--r-- | semif-api/src/semif_api/web/index.html | 300L |
| -rw-r--r-- | semif-api/src/semif_api/web/planner.js | 73L |
| -rw-r--r-- | semif-api/src/semif_api/web/room-rules.js | 450L |
| -rw-r--r-- | semif-api/src/semif_api/web/room-self-game.js | 562L |
| -rw-r--r-- | semif-api/src/semif_api/web/room-self-rules.js | 97L |
| -rw-r--r-- | semif-api/src/semif_api/web/room.js | 297L |
| -rw-r--r-- | semif-api/src/semif_api/web/self-game.js | 502L |
| -rw-r--r-- | semif-api/src/semif_api/web/self-rules.js | 112L |
| -rw-r--r-- | semif-api/src/semif_api/web/style.css | 346L |
| -rw-r--r-- | tests/test_api.py | 145L |
| -rw-r--r-- | tests/test_game.cjs | 228L |
| -rw-r--r-- | tests/test_llama.py | 237L |
| -rw-r--r-- | tests/test_llama_api.py | 132L |
| -rw-r--r-- | tests/test_roomself.cjs | 317L |
| -rw-r--r-- | tests/test_self.cjs | 179L |