Настройка, расширение, параметры платформы и справочник API для Pi.

Темы

pi может создавать темы. Попросите его создать его для вашей установки.

Темы — это файлы JSON, определяющие цвета для TUI.

Оглавление

Локации

Pi загружает темы из:

  • Встроенные: dark, light
  • Глобально: ~/.pi/agent/themes/*.json
  • Проект: .pi/themes/*.json (только после того, как проекту доверяют)
  • Пакеты: themes/ каталогов или pi.themes записей в package.json.
  • Настройки: themes массив с файлами или каталогами.
  • CLI: --theme <path> (повторяемый)

Отключите обнаружение с помощью --no-themes.

Выбор темы

Выберите тему с помощью /settings или settings.json:

{
  "theme": "my-theme"
}

При первом запуске pi определяет фон вашего терминала и по умолчанию устанавливает значение dark или light.

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

  1. Создайте файл темы:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. Определите тему со всеми необходимыми цветами (см. Color Tokens):
{
  "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
  "name": "my-theme",
  "vars": {
    "primary": "#00aaff",
    "secondary": 242
  },
  "colors": {
    "accent": "primary",
    "border": "primary",
    "borderAccent": "#00ffff",
    "borderMuted": "secondary",
    "success": "#00ff00",
    "error": "#ff0000",
    "warning": "#ffff00",
    "muted": "secondary",
    "dim": 240,
    "text": "",
    "thinkingText": "secondary",
    "selectedBg": "#2d2d30",
    "scrollbarThumb": "#555566",
    "userMessageBg": "#2d2d30",
    "userMessageText": "",
    "customMessageBg": "#2d2d30",
    "customMessageText": "",
    "customMessageLabel": "primary",
    "toolPendingBg": "#1e1e2e",
    "toolSuccessBg": "#1e2e1e",
    "toolErrorBg": "#2e1e1e",
    "toolTitle": "primary",
    "toolOutput": "",
    "mdHeading": "#ffaa00",
    "mdLink": "primary",
    "mdLinkUrl": "secondary",
    "mdCode": "#00ffff",
    "mdCodeBlock": "",
    "mdCodeBlockBorder": "secondary",
    "mdQuote": "secondary",
    "mdQuoteBorder": "secondary",
    "mdHr": "secondary",
    "mdListBullet": "#00ffff",
    "toolDiffAdded": "#00ff00",
    "toolDiffRemoved": "#ff0000",
    "toolDiffContext": "secondary",
    "syntaxComment": "secondary",
    "syntaxKeyword": "primary",
    "syntaxFunction": "#00aaff",
    "syntaxVariable": "#ffaa00",
    "syntaxString": "#00ff00",
    "syntaxNumber": "#ff00ff",
    "syntaxType": "#00aaff",
    "syntaxOperator": "primary",
    "syntaxPunctuation": "secondary",
    "thinkingOff": "secondary",
    "thinkingMinimal": "primary",
    "thinkingLow": "#00aaff",
    "thinkingMedium": "#00ffff",
    "thinkingHigh": "#ff00ff",
    "thinkingXhigh": "#ff0000",
    "thinkingMax": "#ff0088",
    "bashMode": "#ffaa00"
  }
}
  1. Выберите тему с помощью /settings.

Горячая перезагрузка. Когда вы редактируете активный в данный момент файл пользовательской темы, pi автоматически перезагружает его для немедленной визуальной обратной связи.

Формат темы

{
  "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
  "name": "my-theme",
  "vars": {
    "blue": "#0066cc",
    "gray": 242
  },
  "colors": {
    "accent": "blue",
    "muted": "gray",
    "text": "",
    ...
  }
}
  • name обязателен, должен быть уникальным и не должен содержать /.
  • vars не является обязательным. Определите здесь повторно используемые цвета, а затем укажите их в colors.
  • colors должен определять все 51 требуемый токен. thinkingMax не является обязательным и возвращается к thinkingXhigh; scrollbarThumb не является обязательным и возвращается к selectedBg.

Поле $schema включает автозаполнение и проверку редактора.

Цветные жетоны

Каждая тема должна определять все 51 требуемый жетон цвета. thinkingMax и scrollbarThumb являются необязательными для совместимости с существующими темами; если они опущены, они используют thinkingXhigh и selectedBg соответственно.

Базовый пользовательский интерфейс (11 цветов)

Токен Цель
accent Основной акцент (логотип, выбранные элементы, курсор)
border Нормальные границы
borderAccent Выделенные границы
borderMuted Тонкие границы (редактор)
success Состояние успеха
error Состояния ошибок
warning Предупреждающие состояния
muted Вторичный текст
dim Третичный текст
text Текст по умолчанию (обычно "")
thinkingText Текст блока мышления

Фоны и контент (11 обязательны, 1 по желанию)

Токен Цель
selectedBg Фон выбранной линии
scrollbarThumb Полноэкранный фон большого пальца полосы прокрутки; необязательно, возвращается к selectedBg
userMessageBg Фон сообщения пользователя
userMessageText Текст сообщения пользователя
customMessageBg Фон сообщения расширения
customMessageText Текст сообщения расширения
customMessageLabel Метка сообщения расширения
toolPendingBg Ящик для инструментов (на рассмотрении)
toolSuccessBg Ящик для инструментов (успех)
toolErrorBg Ящик для инструментов (ошибка)
toolTitle Название инструмента
toolOutput Текст вывода инструмента

Markdown (10 цветов)

Токен Цель
mdHeading Заголовки
mdLink Текст ссылки
mdLinkUrl URL-адрес ссылки
mdCode Встроенный код
mdCodeBlock Содержимое блока кода
mdCodeBlockBorder Заборы из кодовых блоков
mdQuote Текст цитаты
mdQuoteBorder Граница цитаты
mdHr Горизонтальное правило
mdListBullet Список маркеров

Различия инструментов (3 цвета)

Токен Цель
toolDiffAdded Добавлены строки
toolDiffRemoved Удалены строки
toolDiffContext Контекстные строки

Подсветка синтаксиса (9 цветов)

Токен Цель
syntaxComment Комментарии
syntaxKeyword Ключевые слова
syntaxFunction Имена функций
syntaxVariable Переменные
syntaxString Струны
syntaxNumber Числа
syntaxType Типы
syntaxOperator Операторы
syntaxPunctuation Пунктуация

Границы уровня мышления (6 обязательны, 1 по желанию)

Цвета границ редактора обозначают уровень мышления (визуальная иерархия от незаметного до заметного):

Токен Цель
thinkingOff Размышляя
thinkingMinimal Минимальное мышление
thinkingLow Низкое мышление
thinkingMedium Среднее мышление
thinkingHigh Высокое мышление
thinkingXhigh Очень высокое мышление
thinkingMax Максимальное мышление; необязательно, возвращается к thinkingXhigh

Режим Bash (1 цвет)

Токен Цель
bashMode Граница редактора в режиме bash (префикс !)

Экспорт HTML (необязательно)

Раздел export управляет цветами для вывода HTML /export. Если этот параметр опущен, цвета получаются из userMessageBg.

{
  "export": {
    "pageBg": "#18181e",
    "cardBg": "#1e1e24",
    "infoBg": "#3c3728"
  }
}

Цветовые значения

Поддерживаются четыре формата:

Формат Пример Описание
Шестигранник "#ff0000" 6-значный шестнадцатеричный RGB
256 цветов 39 xterm 256-индекс цветовой палитры (0-255)
Переменная "primary" Ссылка на запись vars
По умолчанию "" Цвет терминала по умолчанию

256-цветовая палитра

  • 0-15: базовые цвета ANSI (зависят от терминала).
  • 16-231: RGB-куб 6×6×6 (16 + 36×R + 6×G + B, где R,G,B равны 0–5)
  • 232-255: шкала оттенков серого.

Совместимость терминалов

Pi использует 24-битные цвета RGB. Большинство современных терминалов поддерживают это (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Для старых терминалов, поддерживающих только 256 цветов, число pi возвращается к ближайшему приближению.

Проверьте поддержку truecolor:

echo $COLORTERM  # Should output "truecolor" or "24bit"

Советы

Тёмные терминалы. Используйте яркие, насыщенные цвета с более высокой контрастностью.

Светлые терминалы. Используйте более темные, приглушенные цвета с меньшей контрастностью.

Цветовая гармония. Начните с базовой палитры (Nord, Gruvbox, Tokyo Night), определите ее в vars и последовательно используйте ссылки.

Тестирование. Проверьте свою тему с различными типами сообщений, состояниями инструментов, содержимым уценки и длинным текстом.

Код VS: Установите от terminal.integrated.minimumContrastRatio до 1 для получения точных цветов.

Примеры

Посмотрите встроенные темы: