y83 code / инструмент

База данных

SQLite-браузер: список баз (встроенные, базы приложения, добавленные пользователем), просмотр таблиц и строк, правка данных, SQL-консоль и экспорт. Работает и с базами backend/агентов, и с базами самого приложения.

раздел реестра
Инструменты
код
3 302 строк в 13 файлах
документ
08-database.md

Снимок: 2026-10-11. Секция хаба Tools, тайл «Данные» / «Data», подпись «Просмотр и правка таблиц SQLite, строк и экспорта». Доступен всегда.

Экраны и навигация

  • Screen.Databases → DatabasesScreen (375 строк) — список баз.
  • Screen.SqliteDb(dbPath, displayName, kind, builtin) → SQLiteBrowserScreen (729 строк) — браузер базы.
  • AddDatabaseDialog (281) — добавить свою базу (путь или быстрый выбор).

Какие базы видны

ИсточникБазаОписаниеread-only по умолчанию
Встроенная~/.y83-ws/ws-backend.dbY83 Backend — webai-аккаунты, промпты, провайдерыда (builtin)
Встроенная~/.local/share/opencode/opencode.dbOpenCode — сессиида
Приложениеy83-ws.dbAgents & Projects — агенты, проекты, политикинет (SqliteKind.APP)
Приложениеy83-chat.dbChat Cache — треды и события Codexнет
Пользовательлюбая .dbчерез AddDatabaseDialogзависит от DbPrefs

Встроенные ссылки правятся только осознанно — по умолчанию read-only (комментарий в SqliteRef). Режим переключается в самой базе (setReadOnly, sqlite_read_only/sqlite_read_only_1).

Возможности (подробно)

Список баз (DatabasesScreen)

  • Метрики по каждой базе (DbMetric): размер, число таблиц, ошибка — loadMetrics.
  • Поиск по имени/пути (setQuery, sqlite_search_by_name_or_path).
  • Добавление (addDb + AddDatabaseDialog с быстрым выбором из файлов Termux, dbPickEntries) и удаление из списка (removeDb — файл не трогается, sqlite_will_disappear_from_the_list_the_database_fi).
  • Обновление (refresh), понятные ошибки (sqlite_no_access, sqlite_can_t_open).

Просмотр данных (SQLiteBrowserScreen)

Две вкладки:

  • Data (DataTab) — таблицы и строки:
    • список таблиц (sqlite_pick_table_data), обновление (refreshTables),
    • постраничная загрузка строк (loadFirstPage/loadMore, sqlite_shown_rows/sqlite_load_more),
    • поиск по таблице: по всем колонкам или по конкретной (setFilterText/setFilterColumn/scheduleFilter),
    • раскрытие ячейки (toggleExpand, rowKeyLabel).
  • Schema (SqlTab) — схема таблицы, SQL-запросы.

Правка данных

  • Редактирование ячеек: startEdit/updateEditValue/navigateEdit (переход по Tab/стрелкам)/cancelEdit/saveEdit, parseEditValue — приведение типа.
  • Ограничения: sqlite_no_key_hint (без PK правка недоступна), sqlite_this_cell_can_t_be_changed (read-only колонка).
  • Добавление строки (insertRow), удаление (deleteRow) — с подтверждением (sqlite_delete_row_title).
  • Конфликты: sqlite_row_has_already_changed_list_updated — список обновляется, а не падает.

SQL-консоль

  • runSql — выполнить запрос, updateSql — редактор, isQuerySql — отличить SELECT от DDL/DML, isDestructiveSql — предупреждение (sqlite_dangerous_query), hasMultipleStatements — запрет (sqlite_single_statement).
  • История SQL: DbPrefs.sqlHistory/pushSqlHistory.

Экспорт (SqliteExport.kt)

Форматы по выбору: CSV, JSON, SQL-INSERT (csv/json/sqlInsert), cellText/sqlLiteral/csvCell — корректная экранировка, clean — имя файла, rowsOf — данные.

Где в коде

ФайлСтрокРоль
ui/sqlite/SQLiteBrowserScreen.kt729Браузер: Data/Schema, строки, SQL
ui/sqlite/SqliteBrowserViewModel.kt535Состояние, загрузка, правка, экспорт
ui/sqlite/SqliteSource.kt427Источники данных: file/app/remote, openRo
ui/sqlite/DatabasesScreen.kt375Список баз, встроенные, метрики
ui/sqlite/AddDatabaseDialog.kt281Диалог добавления базы
ui/sqlite/DatabasesViewModel.kt164Список, метрики, add/remove
ui/sqlite/SqliteExport.kt94Экспорт CSV/JSON/SQL
ui/sqlite/DbPrefs.kt47Read-only, история SQL
ui/sqlite/DbFileBrowserFilter.kt9Быстрый выбор файлов
ui/sqlite/components/—Мелкие компоненты

Репозиторий: data/repo/SqliteRepository.kt.

Данные и API

ЭндпоинтНазначение
POST /api/v1/sqlite/metaМетаданные базы (таблицы, размер)
POST /api/v1/sqlite/schemaСхема
POST /api/v1/sqlite/rowsЧтение строк (постранично)
POST /api/v1/sqlite/queryВыполнить SELECT
POST /api/v1/sqlite/executeВыполнить произвольный SQL
POST /api/v1/sqlite/updateОбновить строку
POST /api/v1/sqlite/insertВставить строку
POST /api/v1/sqlite/deleteУдалить строку

Локальные базы приложения читаются напрямую (SqliteSource.localCount, openRo — read-only-подключение), без backend.

Агент

Команды моста (sqlite_* — 8 штук)

КомандаДействие
sqlite_dbsСписок доступных баз
sqlite_dbОткрыть базу (мета/схема)
sqlite_db_addДобавить путь базы
sqlite_db_removeУбрать из списка
sqlite_tablesСписок таблиц
sqlite_queryВыполнить запрос
sqlite_executeВыполнить SQL (запись)
sqlite_browserОткрыть экран браузера базы

MCP-тулы

Отдельных SQLite-тулов в MCP-инвентаре нет. Агент ходит через мост (sqlite_query/sqlite_execute) либо читает БД как файл через file_read (только /mcp).

Подводные камни

  • Read-only по умолчанию для встроенных баз. Правка ws-backend.db из приложения требует явного переключения режима — это защита от порчи данных backend.
  • Только один SQL-оператор за раз (sqlite_single_statement).
  • Опасные запросы помечаются (isDestructiveSql) и требуют подтверждения.
  • Нет PK — правка невозможна (sqlite_table_has_no_key_editing_unavailable).
  • Конкурентные изменения. Список не перезагружается сам: при конфликте показывается подсказка и список обновляется.
  • Секретные колонки мост не отдаёт. В ответах sqlite_query и SELECT-ветки sqlite_execute значения колонок вида password, authRef, obfsPassword, …token, secret, api_key приходят заглушкой <redacted>. Имена колонок и счётчики строк сохраняются, поэтому отлаживать запросы можно.
  • removeDb убирает только из списка, файл на диске остаётся.
  • Локальные базы — read-only-подключение (openRo), даже если режим разрешает запись: правка идёт через backend-эндпоинты.

Как обновлять

  • Каталог: data/InstrumentCatalog.kt (id db).
  • Маршрут: ui/navigation/Screen.kt (Screen.Databases, Screen.SqliteDb).
  • Код: ui/sqlite/*.
  • Репозиторий: data/repo/SqliteRepository.kt.
  • API: data/api/BackendApiSqlite.kt, роуты — backend/internal/api/v1/routes.go.
  • Мост: bridge/BridgeSqliteHandlers.kt, реестр — BridgeCommands.kt.

Источник: docs/project/hub/08-database.md · Инструменты · 3 302 строк в 13 файлах. Страница собирается из документации проекта при сборке сайта.