Об этом проекте

`encx-cli` — это Go-клиент и CLI для API движка городских квестов Encounter (`en.cx`). Проект включает библиотеку для встраивания в свой код (`encx`), консольную утилиту `encli`, mock-сервер для локальной разработки, LLM-агента на базе PicoClaw, Web UI, а также сборки для iOS (gomobile) и PHP (FFI). ## Основные возможности - **Библиотека `encx`**: логин, список игр, состояние игры, отправка кодов, статистика, профиль, подсказки, вступление в игру. Поддерживает старый (ASP.NET) и новый (REST) движки Encounter с автоматическим определением. - **CLI `encli`**: команды для авторизации, просмотра игр, уровней, бонусов, секторов, подсказок, лога пробитий, сообщений, отправки кодов, а также полный набор admin-команд (создание/удаление уровней, бонусов, секторов, подсказок, заданий, управление играми, командами, корректировками времени). - **Mock-сервер `encx-mock`**: имитирует домен Encounter локально, поддерживает загрузку сценария из HTML, эмуляцию потери сети (код PZDC), Docker-образ. - **LLM-агент**: встроенный PicoClaw с tool-calling — читает состояние игры, вызывает admin-команды, ищет в Википедии, читает локальные файлы. Работает через OpenRouter или локальную модель llama.cpp (через yzma, без cgo). - **Web UI**: локальный интерфейс с чатом с агентом, тёмной темой, настройкой LLM. - **iOS**: gomobile-обёртка `mobile/encxmobile`, сборка `Encx.xcframework` для Xcode. - **PHP**: разделяемая библиотека через FFI, клиент живёт на стороне Go. ## Установка Готовые бинарники для macOS, Linux, Windows доступны на странице Releases. Также можно установить через `go install`: ```sh go install github.com/skrashevich/encx-cli/cmd/encli@latest go install github.com/skrashevich/encx-cli/cmd/encx-mock@latest ``` Или через Docker: ```sh docker run --rm ghcr.io/skrashevich/encx-cli -v docker run --rm ghcr.io/skrashevich/encx-cli games -domain tech.en.cx ``` ## Пример использования библиотеки ```go client := encx.New("tech.en.cx", encx.WithInsecureTLS()) resp, err := client.Login(ctx, "user", "password") list, _ := client.GetGameList(ctx) model, _ := client.GetGameModel(ctx, 12345) result, _ := client.SendCode(ctx, 12345, model.Level.LevelId, model.Level.Number, "КОД123") ``` ## CLI: типичный поток ```sh encli login -domain tech.en.cx -insecure encli games encli status -game-id 12345 encli level -game-id 12345 encli send-code -game-id 12345 "КОД123" ``` ## LLM-агент ```sh export LLM_API_KEY=sk-or-v1-... export LLM_MODEL=anthropic/claude-sonnet-4 encli -game-id 12345 --llm "создай 3 уровня с бонусами и подсказками" encli -readonly -game-id 12345 --llm "покажи содержимое всех уровней" ``` Если не настроен облачный провайдер, агент запускается локально через llama.cpp (модель Qwen3-VL-2B-Instruct, ~1 ГБ). ## MCP Пакет `agentmcp` отдаёт каталог инструментов движка наружу по MCP: ```sh encli mcp -domain tech.en.cx # только чтение encli mcp -domain tech.en.cx -security approve # мутации подтверждаются клиентом ``` ## iOS и PHP Для iOS есть gomobile-обёртка и сборка `Encx.xcframework` (скрипт `./mobile/bind-ios.sh`). Для PHP — разделяемая библиотека с FFI-обёртками, генерируемыми из Go-исходника. ## Дополнительно - Опции клиента: TLS, HTTP, таймаут, User-Agent, язык, движок, API base URL. - Автоматическое определение движка (legacy/new) через запрос к API. - Сохранение настроек движка в `~/.config/encli/engine/settings.json`. - Mock-сервер поддерживает публичный demo на `encounter.exe.xyz`.