SOBAAgent Docs

Темы

Цветовые режимы TUI, семантические токены и создание пользовательских тем.

Темы определяют цветовую палитру TUI через семантические токены. Вместо того чтобы задавать конкретные ANSI-цвета для каждого элемента, вы конфигурируете высокоуровневые смысловые токены (accent, text, error, border, и т.д.). SOBA сама применяет их к соответствующим элементам интерфейса.


1. Концепция семантических токенов

В отличие от классического подхода («задай 10 конкретных цветов»), SOBA использует семантические токены. Это означает, что вы не думаете о том, «какой цвет у рамки» или «какой цвет у подсказки». Вместо этого вы определяете смысловые роли:

accent   → основной акцентный цвет (заголовки, выделение)
text     → основной текст
muted    → второстепенный текст
dim      → третичный текст / плейсхолдеры
success  → успешные операции
error    → ошибки
warning  → предупреждения
info     → информационные сообщения
border   → рамки и разделители

Каждый токен — это HEX-цвет (например, #7ee787), который преобразуется в TrueColor ANSI.

Преимущества:

  • Не нужно помнить, какой цвет за что отвечает — имена говорят сами за себя
  • Одна тема работает во всех элементах TUI консистентно
  • Легко создавать новые темы — просто скопируйте набор токенов и измените цвета
  • Тёмный и светлый режимы используют одни и те же имена токенов

2. Встроенные темы

SOBA поставляется с тремя цветовыми режимами:

ИмяРежимОписание
GraphitedarkТёмная тема в стиле GitHub Dark. Зелёный акцент (#7ee787), мягкий текст. Тема по умолчанию
PaperlightСветлая тема для хорошо освещённых помещений. Синий акцент (#2e6edf), чёткий контраст
Forestforest«Тёмная в лесу» — глубокие природные цвета. Мохово-зелёный акцент (#6AAC7D), тёплый текст (#C2CBB8). Низкая нагрузка на глаза в темноте

Дополнительные имена тем из конфигурации (ember, aurora, synthwave, highContrast, clay, operator, ink) зарезервированы для будущих встроенных тем. Сейчас они отображаются как алиасы базовых режимов:

Имя темыМаппится на режим
graphitedark
emberdark
auroradark
synthwavedark
paperlight
highContrastlight
claylight
operatordark
inkdark
forestforest

3. Список токенов

3.1. Основные токены

ТокенDark (Graphite)Light (Paper)ForestНазначение
accent#7ee787#2e6edf#6AAC7DАкцентный цвет: заголовки, кнопки, выделение
text#c9d1d9#1a1a2e#C2CBB8Основной текст
muted#8b949e#6b7280#6C7B66Второстепенный текст
dim#6e7681#9ca3af#41503EТретичный текст, плейсхолдеры
success#3fb950#16a34a#5A9E60Успешные операции
error#f85149#dc2626#C5615AОшибки
warning#e3b341#d97706#C3A14EПредупреждения
info#58a6ff#0284c7#6E9EB8Информационные сообщения

3.2. Фоновые токены

ТокенDark (Graphite)Light (Paper)ForestНазначение
userBg#161b22#f3f4f6#121A14Фон сообщений пользователя
agentBg#0d1117#ffffff#0D130FОсновной фон (сообщения агента)
toolBg#161b22#f9fafb#121A14Фон блоков инструментов
toolPending#30363d#e5e7eb#1A261DФон ожидающих инструментов
thinkingBg#161b22#e5e7eb#121A14Фон thinking-блоков
panelBg#161b22#f6f8fa#121A14Фон панелей
sidebarBg#0d1117#ffffff#0D130FФон боковой панели
headerBg#0d1117#ffffff#0D130FФон заголовка
inputBg#0d1117#f6f8fa#0D130FФон строки ввода

3.3. Специальные токены

ТокенDark (Graphite)Light (Paper)ForestНазначение
thinkingFg#a371f7#8250df#8BA877Цвет текста thinking
thinkingTitle#a371f7#8250df#8BA877Цвет заголовка THINKING
toolsTitle#e3b341#9a6700#C3A14EЦвет заголовка TOOLS
summaryTitle#7ee787#1a7f37#6AAC7DЦвет заголовка SUMMARY
sectionTitle#58a6ff#0969da#6AAC7DЦвет заголовков секций
diffAdded#3fb950#16a34a#5A9E60Цвет добавленных строк в диффе
diffRemoved#f85149#dc2626#C5615AЦвет удалённых строк в диффе
border#30363d#d1d5db#1A261DРамки и разделители
statusBarBg#0d1117#1f2937#0D130FФон статус-бара
statusBarFg#8b949e#f9fafb#6C7B66Текст статус-бара
inputBorder#30363d#d1d5db#1A261DРамка строки ввода
keyHint#6e7681#8c959f#4A5A45Подсказки клавиш
activeDot#3fb950#1a7f37#6AAC7DИндикатор активности
idleDot#3fb950#1a7f37#5A9E60Индикатор ожидания

4. Выбор и переключение тем

4.1. В конфигурации

{
  "theme": "graphite"
}

4.2. Через CLI

soba --theme forest

4.3. В TUI (на лету)

/theme forest
/theme graphite
/theme paper

4.4. Просмотр текущей темы

/theme

# Вывод:
# Current theme: Graphite (dark)
# Available themes: graphite, ember, aurora, synthwave, paper,
#                   forest, highContrast, clay, operator, ink
# Use /theme <name> to switch

5. Создание пользовательской темы

На данный момент создание пользовательских тем через конфигурационные файлы находится в разработке. В будущем будет поддерживаться следующий формат:

{
  "customThemes": {
    "ocean": {
      "mode": "dark",
      "tokens": {
        "accent": "#00bcd4",
        "text": "#e0f7fa",
        "muted": "#80deea",
        "dim": "#4dd0e1",
        "success": "#69f0ae",
        "error": "#ff5252",
        "warning": "#ffd740",
        "info": "#40c4ff",
        "userBg": "#001f3f",
        "agentBg": "#001a33",
        "toolBg": "#001f3f",
        "border": "#004d66",
        "statusBarBg": "#001a33",
        "statusBarFg": "#80deea",
        "thinkingBg": "#001f3f",
        "thinkingFg": "#00bcd4",
        "diffAdded": "#69f0ae",
        "diffRemoved": "#ff5252",
        "panelBg": "#001f3f",
        "sidebarBg": "#001a33",
        "headerBg": "#001a33",
        "sectionTitle": "#00bcd4",
        "thinkingTitle": "#00bcd4",
        "toolsTitle": "#ffd740",
        "summaryTitle": "#00bcd4",
        "inputBg": "#001a33",
        "inputBorder": "#004d66",
        "keyHint": "#4dd0e1",
        "activeDot": "#69f0ae",
        "idleDot": "#69f0ae"
      }
    }
  }
}

6. Тёмный и светлый режимы

6.1. Как определяется режим

Тема содержит поле mode, которое может быть:

  • "dark" — тёмный режим (по умолчанию: graphite)
  • "light" — светлый режим (paper)
  • "forest" — специальный тёмный режим с природными цветами (forest)

Режим влияет на то, как ThemeManager инициализирует цвета. При переключении тем все элементы TUI немедленно обновляются.

6.2. Отключение цветов

# Полное отключение цветов (plain text mode)
soba --no-color

# Или в TUI
# (отключение цветов делает вывод совместимым с любой консолью)

7. Лучшие практики

7.1. Выбор темы под условия

УсловияРекомендуемая тема
Тёмное помещение, ночьforest — минимальная нагрузка на глаза
Обычное освещение, деньgraphite — хороший тёмный контраст
Яркое освещение, улицаpaper — высокий контраст на светлом фоне
Презентация / скриншотpaper — лучше выглядит на проекторе
Проблемы со зрениемpaper — максимальная читаемость

7.2. Создание своей темы

  • Контраст текста: убедитесь что text хорошо читается на agentBg
  • Не перебарщивайте с яркостью: accent должен выделяться, но не резать глаз
  • Согласованность: success, error, warning должны быть интуитивно понятны
  • Тестируйте оба режима: тёмный и светлый по-разному воспринимаются

On this page