- version 1.0.0 во всех package.json monorepo
- версия в GET /health и в меню пользователя (vite define)
- Docker: тег vX.Y.Z собирает образ :X.Y.Z и :X.Y, latest остаётся за main
- README: как закрепить версию образа
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- шкала по часовым точкам измерений: капсулы с долей проблемных прогонов,
пресеты «Сейчас / −1 ч / −6 ч / −24 ч / −7 д», кнопки и клавиши ← →
- статусы блокировок — цветные IconTile, короткие подписи сервисов
с иконками брендов, колонка «Доступно X из Y» с полосой
- GeoIP: флаги стран в ячейках, расхождение с большинством подсвечено,
колонка «Страна · совпадает N/M»; расхождения считаются по сервисам
- флаг страны VPS в первой колонке, фильтры и вид в шапке матрицы
- демо-данные: неделя истории прогонов по полному списку сервисов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- README: главные возможности, галерея, быстрый старт, ссылки на документы
- docs/features.md: гид по всем разделам с новыми скриншотами
- docs/configuration.md: переменные окружения, права, роли, планировщик
- 26 скриншотов нового дизайна на демо-данных (в т.ч. мобильные)
- scripts/seed-demo.ts и scripts/docs-screenshots.mjs для пересъёмки
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SQLite LOWER() и LIKE понижают только ASCII, поэтому «Сайт и API» не
находился и каждый новый VPS с таким проектом создавал дубль; подсказки
по «сай» тоже были пустыми. Сравнение перенесено в JS.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- «Истекает оплата» строится только по VPS текущего space
- ключ notification_state разделён по space: второй space больше не
падает на PRIMARY KEY и не получает дубль каждый тик
- таймаут 10 с для Telegram и webhook
- текст от хостеров экранируется для parse_mode=HTML
- сообщения длиннее 4096 символов обрезаются по строке
- повторное падение того же VPS снова уведомляет
- ошибки по отдельным чатам пишутся в журнал при частичной доставке
- удалён неиспользуемый sendWebhook/notifyWebhook
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- раз в сутки удаляются notification_log и sync_log старше 90 дней и
vps_health_checks старше 30 дней; синки, зависшие в running дольше
часа, помечаются ошибкой
- dashboard stats не грузит тарифы, домены и проекты
- запросы характеристик VPS в BILLmanager идут по 4 параллельно
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Скачивание и восстановление файла БД, JSON-бэкап и legacy-импорт
затрагивают все spaces и содержат учётные данные API, поэтому прав
vps:settings:admin в одном space для них недостаточно.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- rates-proxy запрашивает только сохранённый settings.ratesUrl
- viewer в space не может писать в платежи, баланс, провайдеров,
аккаунты, проекты и запускать синк
- /api/sync/status показывает журнал только текущего space
- повторный синк аккаунта во время текущего отвечает 409
- тики планировщика не накладываются, каждый space идёт по своему интервалу
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ошибка запроса тарифов превращалась в пустой список: active_tariffs
удалялись, а следующий успешный синк объявлял все тарифы новыми.
Пустой ответ теперь оставляет старый список, замена идёт в транзакции.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Вставки VPS, платежей, тарифов и uptime-проверок не задавали spaceId и
уходили в space-main. Поиск существующего VPS матчил bm-1 с bm-12 и
сервера с пустым IP между собой; теперь сначала по id, затем по точному
токену в заметке, затем по непустому IP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Пустая строка в vpsId/providerAccountId/providerId давала 500
SQLITE_CONSTRAINT_FOREIGNKEY при создании платежа, записи баланса и VPS
без провайдера. Старые БД падали с «no such column apiType»: добавлены
колонки providers.apiType/apiBaseUrl и перенос URL BILLmanager с аккаунтов.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RouterOS serialize превращает results в объект с ключами 0,1 — API отвечал 400. ros-6 собирает массив, ingest принимает оба формата.
Co-authored-by: Cursor <cursoragent@cursor.com>
RouterOS скрывает HTTP 4xx как fetch error. ros-5 печатает код и тело ответа, затем повторяет POST без src-address.
Co-authored-by: Cursor <cursoragent@cursor.com>
src-address недостаточно при нескольких default route: добавляем policy routing и снимаем правила после прогона.
Co-authored-by: Cursor <cursoragent@cursor.com>
Пробы выполняются на роутере через /tool fetch и уходят в те же ingest API. Ежедневный запуск ставит scheduler, который каждый день заново качает .rsc со свежим токеном.
Co-authored-by: Cursor <cursoragent@cursor.com>
Флаг --daily ставит cron, который раз в сутки заново качает launcher со свежим токеном. Снять: --remove-daily.
Co-authored-by: Cursor <cursoragent@cursor.com>
CDN-значения вида SE (ARN) больше не помечаются как ошибка. У каждого GeoIP-сервиса — бренд-иконка, как в разделе блокировок.
Co-authored-by: Cursor <cursoragent@cursor.com>
Сломанный here-doc съел is_installed; launcher определяет дистрибутив и ставит jq/dig/column без prompt, скрипты отдаются с LF.
Co-authored-by: Cursor <cursoragent@cursor.com>
Прогон с VPS через HMAC-токен матчится к существующим серверам; UI /blocking показывает текущие проверки и историю.
Co-authored-by: Cursor <cursoragent@cursor.com>
Монитор больше не ставит «Внимание» по скрытому счётчику. Telegram можно слать через локальный telegram-bot-api.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Expanded the ReUI skill description to include 20 free building blocks.
- Updated references in various documentation files to reflect the new count of components.
- Enhanced the data-grid documentation to specify the use of TanStack Table v9.
- Added new component details, including the icon-tile, and clarified usage instructions across multiple files.
This update improves clarity and ensures that all references are consistent with the latest component offerings.
Updated fetch mocks in settings and audit test files to improve type safety by specifying the fetch type. Adjusted handling of mock call parameters to ensure proper access to request options. This enhances test reliability and clarity in error handling scenarios.
Убран fallback на локальный App Switcher (192.168.x). URL из portal подставляется в форму для сохранения; кнопка sync требует URL в БД.
Co-authored-by: Cursor <cursoragent@cursor.com>
Устраняет fetch failed при ручном sync, когда CFDM не может достучаться до VPS Tracker. Ошибки показывают URL; UI подсказывает URL из App Switcher.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduced a new test to verify the persistence of the CFDM API URL via the settings endpoint. Updated the integration form to reflect saved credentials more clearly, enhancing user feedback for the API URL and integration token. Improved sync button behavior to prevent actions without saved credentials. Updated settings schema to include CFDM API URL validation.
Renamed test cases for clarity and added new tests for handling missing CFDM URL and token scenarios. Removed unnecessary checks in the sync request function to streamline the process. Updated integration form to ensure proper boolean handling for settings. Enhanced sync button behavior based on saved credentials.
Для daily FirstByte считать dailyRate из cost/30 и общий paidUntil по балансу аккаунта; для 4VPS парсить страну/город из dc_name+flag.
Co-authored-by: Cursor <cursoragent@cursor.com>
Парсинг страны/города и paidUntil из list vds; CPU/RAM/диск из vds.order по pricelist_id, иначе vds.edit.
Co-authored-by: Cursor <cursoragent@cursor.com>
Центрирование заглушек в графиках/Frame; лимит тела backup 100 MiB;
WAL checkpoint при экспорте и очистка -wal/-shm при импорте.
Co-authored-by: Cursor <cursoragent@cursor.com>
Пустой volume больше не отдаёт 500 на /api/data из-за отсутствующих таблиц. В compose добавлены json-file логи с ротацией и LOG_LEVEL для Fastify.
Co-authored-by: Cursor <cursoragent@cursor.com>