Добавить кошелек блокчейна и озвучивание агента

This commit is contained in:
AidarKC
2026-05-29 23:48:44 +04:00
parent 775b655aac
commit 3a5856c7f0
19 changed files with 1301 additions and 28 deletions
+14 -1
View File
@@ -99,11 +99,24 @@
"blockchainName": "anya-001",
"solanaKey": "BASE64_32_PUBLIC_KEY",
"blockchainKey": "BASE64_32_PUBLIC_KEY",
"deviceKey": "BASE64_32_PUBLIC_KEY"
"deviceKey": "BASE64_32_PUBLIC_KEY",
"serverLastGlobalNumber": 128,
"serverLastGlobalHash": "4f...ab",
"serverBlockchainSizeBytes": 45212,
"serverBlockchainSizeLimitBytes": 100000,
"serverBlocksCount": 129
}
}
```
Дополнительные серверные поля в `GetUser`:
- `serverLastGlobalNumber` — номер последнего блока в пользовательском блокчейне на сервере;
- `serverLastGlobalHash` — hash последнего блока (hex-строка 64 символа);
- `serverBlockchainSizeBytes` — текущий размер пользовательского блокчейна на сервере в байтах;
- `serverBlockchainSizeLimitBytes` — текущий лимит размера блокчейна на сервере в байтах;
- `serverBlocksCount` — количество блоков в пользовательском блокчейне на сервере;
### Успешный ответ: пользователя нет
```json
+1 -1
View File
@@ -13,7 +13,7 @@
| Операция | Раздел документации | Кратко |
| --- | --- | --- |
| `AddUser` | `01_User_Registration_API.md` | отключено (`410 / ADD_USER_DISABLED`) |
| `GetUser` | `01_User_Registration_API.md` | чтение/проверка пользователя |
| `GetUser` | `01_User_Registration_API.md` | чтение/проверка пользователя + server-состояние его блокчейна |
| `SearchUsers` | `01_User_Registration_API.md` | поиск логинов по префиксу |
| `AuthChallenge` | `02_Authentication_API.md` | challenge для создания новой сессии |
| `CreateAuthSession` | `02_Authentication_API.md` | создание новой авторизованной сессии |
@@ -0,0 +1,43 @@
# Кошелёк: лимит/закрепление блокчейна Сияния
- статус: `pending`
## Кратко что сделано
- На экране `Кошелёк -> Блокчейн Сияния` добавлены 2 слоя данных:
- фактическое состояние цепочки на сервере (`кол-во блоков`, `размер`, `крайний блок`, `hash`, `размер крайнего блока`);
- закреплённое состояние в Solana PDA (`лимит`, `использовано`, `остаток`, `крайний блок`, `hash`).
- Добавлены действия:
- `Закрепить в Solana` — обновляет PDA до текущего состояния серверной цепочки;
- `Увеличить лимит` — увеличивает `paid_limit_bytes` в PDA с учётом цены из economy PDA.
- Если `rootKey`/`blockchainKey` не сохранены локально, экран запрашивает пароль, восстанавливает ключи через стандартную derivation-логику и предлагает сохранить их в зашифрованный контейнер.
## Что проверять вручную
1. Открыть `Кошелёк -> Блокчейн Сияния` под авторизованным пользователем.
2. Проверить, что в блоке "Фактическое состояние на сервере" отображаются:
- число блоков;
- размер цепочки;
- номер/хэш крайнего блока;
- размер крайнего блока.
3. Проверить, что в блоке "Закреплено в Solana" отображаются:
- лимит;
- израсходовано;
- остаток;
- номер/хэш крайнего закреплённого блока.
4. Нажать `Закрепить в Solana` и убедиться, что:
- приходит успешная транзакция;
- после обновления Solana-показатели подтягиваются до серверных (или максимально близко по актуальному состоянию).
5. Нажать `Увеличить лимит`, ввести значение кратное шагу, подтвердить списание и проверить:
- лимит увеличился;
- отображение цены/списания соответствует economy PDA.
6. Повторить пункты 4-5 в сценарии, когда `rootKey`/`blockchainKey` не сохранены, и проверить:
- появляется запрос пароля;
- после ввода пароля операции выполняются;
- предложение сохранить ключи показывается.
## Ожидаемый результат
- Экран корректно разделяет "фактическое состояние на сервере" и "закреплённое в Solana".
- Обе операции (`Закрепить в Solana`, `Увеличить лимит`) выполняются без ошибок при валидных данных.
- Восстановление ключей через пароль работает, а без нужных ключей операция не выполняется молча.
@@ -0,0 +1,29 @@
# Озвучивание ответов агента
## Что сделано
В локальный Telegram-бот-сервис агента-кодера добавлены персональные настройки озвучивания финальных ответов:
- `/voice_on` включает озвучивание для текущего Telegram-пользователя;
- `/voice_off` выключает озвучивание для текущего Telegram-пользователя;
- `/voice_status` показывает текущее состояние;
- если озвучивание включено, после текстового финального ответа сервис генерирует voice-файл через OpenAI TTS и отправляет его в Telegram;
- длинные ответы делятся на несколько фрагментов озвучки.
## Что проверять
1. Перезапустить `shine-agent-bot-coder`.
2. Отправить `/voice_status` и убедиться, что по умолчанию озвучивание выключено.
3. Отправить `/voice_on`.
4. Дать простую задачу агенту и проверить, что пришёл полный текстовый ответ и voice-файл с тем же ответом.
5. Отправить `/voice_off`.
6. Дать ещё одну простую задачу и проверить, что приходит только текст.
7. При возможности проверить второго whitelist-пользователя: его настройка должна быть независимой.
## Ожидаемый результат
Настройка хранится персонально по username и сохраняется после перезапуска сервиса. При включённой настройке Telegram получает текстовый ответ и дополнительное voice-сообщение с озвучкой. При выключенной настройке поведение остаётся прежним.
## Статус
pending