WIP: кошелек запускается, но есть ошибки

This commit is contained in:
AidarKC 2026-05-30 11:24:59 +04:00
parent b13efa92fd
commit edc94d3700
12 changed files with 135 additions and 14 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
data/ data/
logs/ logs/
logs logs
.understand-anything/
.gradle .gradle
.gradle-home/ .gradle-home/

View File

@ -103,8 +103,7 @@
"serverLastGlobalNumber": 128, "serverLastGlobalNumber": 128,
"serverLastGlobalHash": "4f...ab", "serverLastGlobalHash": "4f...ab",
"serverBlockchainSizeBytes": 45212, "serverBlockchainSizeBytes": 45212,
"serverBlockchainSizeLimitBytes": 100000, "serverBlockchainSizeLimitBytes": 100000
"serverBlocksCount": 129
} }
} }
``` ```
@ -115,7 +114,6 @@
- `serverLastGlobalHash` — hash последнего блока (hex-строка 64 символа); - `serverLastGlobalHash` — hash последнего блока (hex-строка 64 символа);
- `serverBlockchainSizeBytes` — текущий размер пользовательского блокчейна на сервере в байтах; - `serverBlockchainSizeBytes` — текущий размер пользовательского блокчейна на сервере в байтах;
- `serverBlockchainSizeLimitBytes` — текущий лимит размера блокчейна на сервере в байтах; - `serverBlockchainSizeLimitBytes` — текущий лимит размера блокчейна на сервере в байтах;
- `serverBlocksCount` — количество блоков в пользовательском блокчейне на сервере;
### Успешный ответ: пользователя нет ### Успешный ответ: пользователя нет

View File

@ -0,0 +1,24 @@
# Эксперимент Understand Anything
## Краткое описание
Добавлена изолированная лаборатория для проверки `Lum1104/Understand-Anything` без подключения к сборке, деплою и рабочему коду SHiNE.
## Что проверять
- Установить Node.js 22+ и pnpm 10+.
- Запустить `./tools/understand-anything-lab/install_codex_skills.sh`.
- Перезапустить Codex-сессию.
- Выполнить `/understand --language ru` в корне проекта.
- После генерации выполнить `/understand-dashboard` и проверить, что граф открывается и помогает ориентироваться по серверным, UI, Solana и агентским папкам.
## Ожидаемый результат
- В проекте появляется локальная папка `.understand-anything/` с графом знаний.
- Dashboard открывается и показывает интерактивный граф проекта.
- Основные процессы сборки и деплоя SHiNE не меняются.
## Статус
`pending`

View File

@ -1,2 +1,2 @@
client.version=1.2.98 client.version=1.2.99
server.version=1.2.92 server.version=1.2.93

View File

@ -6,7 +6,7 @@
<link rel="manifest" href="./manifest.webmanifest" /> <link rel="manifest" href="./manifest.webmanifest" />
<title>Shine UI Demo</title> <title>Shine UI Demo</title>
<script> <script>
window.__SHINE_BUILD_HASH__ = '20260528010500'; window.__SHINE_BUILD_HASH__ = '20260530000600';
window.__SHINE_CLIENT_VERSION__ = '1.2.8'; window.__SHINE_CLIENT_VERSION__ = '1.2.8';
</script> </script>
<script> <script>

View File

@ -47,7 +47,7 @@ import * as keyStorageView from './pages/key-storage-view.js';
import * as profileView from './pages/profile-view.js'; import * as profileView from './pages/profile-view.js';
import * as profileEditView from './pages/profile-edit-view.js'; import * as profileEditView from './pages/profile-edit-view.js';
import * as walletView from './pages/wallet-view.js?v=2026052806'; import * as walletView from './pages/wallet-view.js?v=202605300006';
import * as settingsView from './pages/settings-view.js'; import * as settingsView from './pages/settings-view.js';
import * as developerSettingsView from './pages/developer-settings-view.js'; import * as developerSettingsView from './pages/developer-settings-view.js';
import * as serverSettingsView from './pages/server-settings-view.js'; import * as serverSettingsView from './pages/server-settings-view.js';

View File

@ -199,6 +199,7 @@ export function render({ navigate }) {
const serverLastHashLabel = document.createElement('p'); const serverLastHashLabel = document.createElement('p');
serverLastHashLabel.className = 'meta-muted'; serverLastHashLabel.className = 'meta-muted';
serverLastHashLabel.style.wordBreak = 'break-all'; serverLastHashLabel.style.wordBreak = 'break-all';
serverLastHashLabel.style.fontSize = '11px';
serverLastHashLabel.textContent = 'Hash: —'; serverLastHashLabel.textContent = 'Hash: —';
const solanaTitle = document.createElement('h3'); const solanaTitle = document.createElement('h3');
@ -213,6 +214,7 @@ export function render({ navigate }) {
const solanaLastHashLabel = document.createElement('p'); const solanaLastHashLabel = document.createElement('p');
solanaLastHashLabel.className = 'meta-muted'; solanaLastHashLabel.className = 'meta-muted';
solanaLastHashLabel.style.wordBreak = 'break-all'; solanaLastHashLabel.style.wordBreak = 'break-all';
solanaLastHashLabel.style.fontSize = '11px';
solanaLastHashLabel.textContent = 'Hash: —'; solanaLastHashLabel.textContent = 'Hash: —';
card.append( card.append(
@ -250,11 +252,12 @@ export function render({ navigate }) {
const fetchServerState = async () => { const fetchServerState = async () => {
const user = await authService.getUser(String(state.session.login || '').trim()); const user = await authService.getUser(String(state.session.login || '').trim());
if (!user?.exists) throw new Error('Пользователь не найден на сервере'); if (!user?.exists) throw new Error('Пользователь не найден на сервере');
const lastNumber = Number(user.serverLastGlobalNumber ?? -1);
return { return {
blocksCount: Number(user.serverBlocksCount || 0),
sizeBytes: Number(user.serverBlockchainSizeBytes || 0), sizeBytes: Number(user.serverBlockchainSizeBytes || 0),
sizeLimitBytes: Number(user.serverBlockchainSizeLimitBytes || 0), sizeLimitBytes: Number(user.serverBlockchainSizeLimitBytes || 0),
lastNumber: Number(user.serverLastGlobalNumber ?? -1), lastNumber,
blocksCount: lastNumber >= 0 ? (lastNumber + 1) : 0,
lastHash: String(user.serverLastGlobalHash || ''), lastHash: String(user.serverLastGlobalHash || ''),
}; };
}; };
@ -410,7 +413,7 @@ export function render({ navigate }) {
} finally { } finally {
setButtonsDisabled(false); setButtonsDisabled(false);
} }
}; });
refreshBtn.addEventListener('click', () => { refreshBtn.addEventListener('click', () => {
void refreshUsage(); void refreshUsage();

View File

@ -91,7 +91,6 @@ public class Net_GetUser_Handler implements JsonMessageHandler {
resp.setServerLastGlobalHash(toHex32(lastHash)); resp.setServerLastGlobalHash(toHex32(lastHash));
resp.setServerBlockchainSizeBytes(st.getFileSizeBytes()); resp.setServerBlockchainSizeBytes(st.getFileSizeBytes());
resp.setServerBlockchainSizeLimitBytes(st.getSizeLimit()); resp.setServerBlockchainSizeLimitBytes(st.getSizeLimit());
resp.setServerBlocksCount(Math.max(0, lastNum + 1));
log.info("✅ GetUser: found login={}, blockchainName={}", u.getLogin(), u.getBlockchainName()); log.info("✅ GetUser: found login={}, blockchainName={}", u.getLogin(), u.getBlockchainName());
return resp; return resp;

View File

@ -43,7 +43,6 @@ public class Net_GetUser_Response extends Net_Response {
private String serverLastGlobalHash; private String serverLastGlobalHash;
private Long serverBlockchainSizeBytes; private Long serverBlockchainSizeBytes;
private Long serverBlockchainSizeLimitBytes; private Long serverBlockchainSizeLimitBytes;
private Integer serverBlocksCount;
public Boolean getExists() { return exists; } public Boolean getExists() { return exists; }
public void setExists(Boolean exists) { this.exists = exists; } public void setExists(Boolean exists) { this.exists = exists; }
@ -75,6 +74,4 @@ public class Net_GetUser_Response extends Net_Response {
public Long getServerBlockchainSizeLimitBytes() { return serverBlockchainSizeLimitBytes; } public Long getServerBlockchainSizeLimitBytes() { return serverBlockchainSizeLimitBytes; }
public void setServerBlockchainSizeLimitBytes(Long serverBlockchainSizeLimitBytes) { this.serverBlockchainSizeLimitBytes = serverBlockchainSizeLimitBytes; } public void setServerBlockchainSizeLimitBytes(Long serverBlockchainSizeLimitBytes) { this.serverBlockchainSizeLimitBytes = serverBlockchainSizeLimitBytes; }
public Integer getServerBlocksCount() { return serverBlocksCount; }
public void setServerBlocksCount(Integer serverBlocksCount) { this.serverBlocksCount = serverBlocksCount; }
} }

View File

@ -0,0 +1,5 @@
upstream/
work/
.understand-anything/
*.log

View File

@ -0,0 +1,65 @@
# Эксперимент Understand Anything
Эта папка нужна, чтобы безопасно проверить `Lum1104/Understand-Anything` в SHiNE без подключения к сборке, деплою и рабочему серверному коду.
## Что здесь лежит
- `upstream/` - локальный клон `https://github.com/Lum1104/Understand-Anything.git`; он игнорируется git, чтобы не тащить внешний репозиторий внутрь SHiNE.
- `install_codex_skills.sh` - локальная установка skills для Codex из уже скачанного `upstream/`, без `curl | bash`.
Проверенный upstream:
- commit: `26edf61856fa476e466bda1814819a266a293c47`
- дата commit: `2026-05-26T13:09:57+08:00`
- сообщение: `Merge pull request #235 from ZebangCheng/feat/add-trae-platform`
## Безопасный сценарий проверки
1. Подготовить окружение:
```bash
node --version
pnpm --version
```
Для полноценного запуска нужен Node.js 22 или новее и pnpm 10 или новее. На текущей машине при первичной проверке были обнаружены Node.js `v18.19.1` и отсутствие `pnpm`, поэтому полноценный `/understand` пока не запускался.
2. Установить skills для Codex из локального клона:
```bash
./tools/understand-anything-lab/install_codex_skills.sh
```
Скрипт использует локальный `tools/understand-anything-lab/upstream`, а не скачивает установщик из интернета.
3. Перезапустить Codex-сессию, чтобы появились команды/skills:
```text
/understand --language ru
/understand-dashboard
```
4. После первого запуска проверить созданный файл:
```bash
ls -la .understand-anything/
```
## Что не делать без отдельного решения
- Не включать `Understand Anything` в Gradle-сборку.
- Не добавлять его в `deployServer` или `deployUI`.
- Не переносить серверные модули в новую папку одновременно с этим экспериментом.
- Не включать auto-update hook через `/understand --auto-update`, пока не понятно, нужен ли граф в каждом commit.
## Что можно коммитить позже
Если эксперимент подтвердится, можно будет отдельно решить, нужно ли хранить `.understand-anything/knowledge-graph.json` в репозитории. По рекомендации upstream обычно коммитят содержимое `.understand-anything/`, кроме:
```gitignore
.understand-anything/intermediate/
.understand-anything/diff-overlay.json
```
До такого решения артефакты графа лучше считать локальными.

View File

@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
UPSTREAM_DIR="$SCRIPT_DIR/upstream"
if [[ ! -d "$UPSTREAM_DIR/.git" ]]; then
echo "Не найден локальный upstream-клон: $UPSTREAM_DIR" >&2
echo "Сначала выполните:" >&2
echo " git clone --depth 1 https://github.com/Lum1104/Understand-Anything.git \"$UPSTREAM_DIR\"" >&2
exit 1
fi
if ! command -v node >/dev/null 2>&1; then
echo "Не найден Node.js. Для полноценного запуска Understand Anything нужен Node.js 22+." >&2
exit 1
fi
if ! command -v pnpm >/dev/null 2>&1; then
echo "Не найден pnpm. Для полноценного запуска Understand Anything нужен pnpm 10+." >&2
echo "Skills можно установить, но команда /understand не соберёт core без pnpm." >&2
fi
UA_DIR="$UPSTREAM_DIR" "$UPSTREAM_DIR/install.sh" codex
echo
echo "Skills Understand Anything установлены для Codex из локального клона."
echo "Перезапустите Codex-сессию перед использованием /understand."