Skip to content

Частые вопросы: производительность, конфиденциальность и совместимость

Что вы сможете после изучения

  • Понять влияние плагина на производительность и использование ресурсов
  • Уточнить гарантии конфиденциальности и безопасности
  • Освоить стратегии уведомлений и методы настройки
  • Понять различия между платформами и совместимость

Производительность

Увеличивает ли плагин контекст AI?

Нет. Плагин использует событийную модель и не добавляет никаких инструментов или подсказок в диалог AI.

С точки зрения реализации исходного кода:

КомпонентТипРеализацияВлияние на контекст
Слушатель событийСобытиеПрослушивает события session.idle, session.error, permission.updated✅ Без влияния
Хук инструментаХукПрослушивает инструмент question через tool.execute.before✅ Без влияния
Содержание диалога-Не читает, не изменяет и не внедряет никакого содержания диалога✅ Без влияния

В исходном коде плагин отвечает только за прослушивание и уведомления, контекст диалога AI полностью не затрагивается.

Сколько системных ресурсов будет занято?

Минимально. Плагин использует дизайн "кэширование при запуске + триггер событий":

  1. Загрузка конфигурации: при запуске плагин считывает файл конфигурации один раз (~/.config/opencode/kdco-notify.json), затем больше не считывает
  2. Определение терминала: при запуске определяется тип терминала и кэшируется информация (название, Bundle ID, имя процесса), для последующих событий используется кэш
  3. Событийная модель: уведомление выполняется только тогда, когда AI вызывает определённое событие

Характеристики использования ресурсов:

Тип ресурсаИспользованиеОписание
CPUПочти 0Работает кратковременно только при срабатывании событий
Память< 5 МБПосле запуска переходит в режим ожидания
Диск< 100 КБФайл конфигурации и сам код
Сеть0Не выполняет никаких сетевых запросов

Конфиденциальность и безопасность

Загружаются ли данные на сервер?

Нет. Плагин работает полностью локально и не выполняет никакой отправки данных.

Гарантии конфиденциальности:

Тип данныхОбработкаЗагружается ли
Содержание диалога AIНе читается, не сохраняется❌ Нет
Информация о сессии (заголовок)Используется только для текста уведомления❌ Нет
Информация об ошибкеИспользуется только для текста уведомления (максимум 100 символов)❌ Нет
Информация о терминалеОпределяется и кэшируется локально❌ Нет
Информация о конфигурацииЛокальный файл (~/.config/opencode/)❌ Нет
Содержание уведомленияОтправляется через системный API нативных уведомлений❌ Нет

Техническая реализация:

Плагин использует системные нативные уведомления:

  • macOS: через node-notifier вызывает NSUserNotificationCenter
  • Windows: через node-notifier вызывает SnoreToast
  • Linux: через node-notifier вызывает notify-send

Все уведомления вызываются локально и не проходят через облачную службу OpenCode.

Будет ли плагин красть содержание моих сессий?

Нет. Плагин считывает только необходимые метаданные:

Считываемые данныеИспользованиеОграничения
Заголовок сессии (title)Текст уведомленияБерётся только первые 50 символов
Информация об ошибке (error)Текст уведомленияБерётся только первые 100 символов
Информация о терминалеОпределение фокуса и клик для фокусировкиНе читает содержание терминала
Файл конфигурацииНастройки пользователяЛокальный файл

В исходном коде нет никакой логики для чтения сообщений диалога (messages) или пользовательского ввода (user input).


Стратегия уведомлений

Будет ли мне "бомбить" уведомлениями?

Нет. Плагин имеет встроенный механизм многократной интеллектуальной фильтрации для избежания "бомбардировки" уведомлениями.

Стратегия уведомлений по умолчанию:

ТипСобытие/инструментУведомлятьПричина
СобытиеЗавершение родительской сессии (session.idle)✅ ДаЗавершение основной задачи
СобытиеЗавершение дочерней сессии (session.idle)❌ НетРодительская сессия уведомляет едино
СобытиеОшибка сессии (session.error)✅ ДаТребует немедленного реагирования
СобытиеЗапрос разрешения (permission.updated)✅ ДаAI ожидает блокировки
Хук инструментаВопрос (tool.execute.before - question)✅ ДаAI требует ввод

Механизм интеллектуальной фильтрации:

  1. Уведомлять только родительские сессии

    • Исходный код: notify.ts:256-259
    • Конфигурация по умолчанию: notifyChildSessions: false
    • Избегает уведомлений для каждой подзадачи при разложении AI задачи
  2. Подавление при фокусе терминала (macOS)

    • Исходный код: notify.ts:265
    • Логика: когда терминал является окном переднего плана, уведомление не отправляется (встроенное поведение, настройка не требуется)
    • Избегает повторных напоминаний "ещё уведомить, когда смотришь на терминал"
    • Примечание: эта функция доступна только на macOS (требуется информация о терминале для определения)
  3. Тихие часы

    • Исходный код: notify.ts:262, notify.ts:181-199
    • Конфигурация по умолчанию: quietHours: { enabled: false, start: "22:00", end: "08:00" }
    • Настраивается, избегает ночных помех
  4. Запрос разрешения всегда уведомляется

    • Исходный код: notify.ts:319
    • Причина: AI ожидает блокировки авторизации пользователя, необходимо своевременно уведомить
    • Не проверяет родительскую сессию

Можно ли получать только определённые типы уведомлений?

Да. Хотя у плагина нет отдельных переключателей уведомлений, но можно реализовать через тихие часы и определение фокуса терминала:

  • Только экстренные уведомления: определение фокуса терминала является встроенным поведением, когда вы в терминале, уведомления не приходят (macOS)
  • Только ночные уведомления: включите тихие часы (например, 09:00-18:00), используйте в обратном порядке

Если требуется более детальное управление, можно подать Feature Request.


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

Конфликтует ли с другими плагинами OpenCode?

Нет. Плагин интегрируется через стандартный OpenCode Plugin API, не изменяет поведение AI и не мешает другим плагинам.

Метод интеграции:

КомпонентМетод интеграцииРиск конфликта
Слушатель событийХук event OpenCode SDK❌ Без конфликта
Хук инструментаХук tool.execute.before OpenCode Plugin API❌ Без конфликта (прослушивает только инструмент question)
Запрос сессииclient.session.get() OpenCode SDK❌ Без конфликта (только чтение без записи)
Отправка уведомленийnode-notifier отдельный процесс❌ Без конфликта

Другие плагины, которые могут сосуществовать:

  • Официальные плагины OpenCode (например, opencode-coder)
  • Сторонние плагины (например, opencode-db, opencode-browser)
  • Пользовательские плагины

Все плагины работают параллельно через стандартный Plugin API, не мешая друг другу.

Какие платформы поддерживаются? Есть ли различия в функционале?

Поддерживаются три платформы: macOS, Windows, Linux, но есть различия в функционале.

ФункцияmacOSWindowsLinux
Нативные уведомления✅ Поддерживается✅ Поддерживается✅ Поддерживается
Пользовательские звуки✅ Поддерживается❌ Не поддерживается❌ Не поддерживается
Определение фокуса терминала✅ Поддерживается❌ Не поддерживается❌ Не поддерживается
Клик по уведомлению для фокусировки✅ Поддерживается❌ Не поддерживается❌ Не поддерживается
Автоопределение терминала✅ Поддерживается✅ Поддерживается✅ Поддерживается
Тихие часы✅ Поддерживается✅ Поддерживается✅ Поддерживается

Причины различий платформ:

ПлатформаОписание различий
macOSСистема предоставляет богатый API уведомлений и интерфейс управления приложениями (например, osascript), поддерживает звуки, определение фокуса, клик по уведомлению для фокусировки
WindowsAPI системных уведомлений имеет ограниченный функционал, не поддерживает определение переднего плана приложения и пользовательские звуки
LinuxЗависит от стандарта notify-send, функционал аналогичен Windows

Кроссплатформенные основные функции:

Независимо от платформы, следующие основные функции доступны:

  • Уведомления о завершении задачи (session.idle)
  • Уведомления об ошибках (session.error)
  • Уведомления о запросе разрешения (permission.updated)
  • Уведомления о вопросах (tool.execute.before)
  • Настройка тихих часов

Терминал и система

Какие терминалы поддерживаются? Как происходит определение?

Поддерживается 37+ эмуляторов терминалов.

Плагин использует библиотеку detect-terminal для автоматического распознавания терминала, поддерживаемые терминалы включают:

Терминалы macOS:

  • Ghostty, Kitty, iTerm2, WezTerm, Alacritty
  • macOS Terminal, Hyper, Warp
  • Интегрированный терминал VS Code (Code / Code - Insiders)

Терминалы Windows:

  • Windows Terminal, Git Bash, ConEmu, Cmder
  • PowerShell, CMD (через определение по умолчанию)

Терминалы Linux:

  • gnome-terminal, konsole, xterm, lxterminal
  • terminator, tilix, alacritty, kitty

Механизм определения:

  1. Автоопределение: при запуске плагина вызывается библиотека detectTerminal()
  2. Ручное переопределение: пользователь может указать поле terminal в файле конфигурации для переопределения автоопределения
  3. Отображение macOS: название терминала отображается на имя процесса (например, ghosttyGhostty), используется для определения фокуса

Пример конфигурации:

json
{
  "terminal": "ghostty"
}

Что будет, если определение терминала не удастся?

Плагин будет нормально работать, только функция определения фокуса будет недоступна.

Логика обработки ошибок:

Сценарий ошибкиПроявлениеВлияние
detectTerminal() возвращает nullИнформация о терминале: { name: null, bundleId: null, processName: null }Нет определения фокуса, но уведомления отправляются нормально
Ошибка выполнения osascript на macOSНе удалось получить Bundle IDФункция клика по уведомлению для фокусировки на macOS недоступна, но уведомления работают нормально
Недопустимое значение terminal в файле конфигурацииИспользуются результаты автоопределенияЕсли автоопределение также не удаётся, то нет определения фокуса

Соответствующая логика в исходном коде (notify.ts:149-150):

typescript
if (!terminalName) {
  return { name: null, bundleId: null, processName: null }
}

Метод решения:

Если определение терминала не удаётся, можно вручную указать тип терминала:

json
{
  "terminal": "iterm2"
}

Конфигурация и устранение неполадок

Где находится файл конфигурации? Как изменить?

Путь к файлу конфигурации: ~/.config/opencode/kdco-notify.json

Полный пример конфигурации:

json
 {
   "notifyChildSessions": false,
   "sounds": {
     "idle": "Glass",
     "error": "Basso",
     "permission": "Submarine",
     "question": "Submarine"
   },
   "quietHours": {
     "enabled": true,
     "start": "22:00",
     "end": "08:00"
   },
   "terminal": "ghostty"
 }

Шаги изменения конфигурации:

  1. Откройте терминал и отредактируйте файл конфигурации:

    bash
    # macOS/Linux
    nano ~/.config/opencode/kdco-notify.json
    
    # Windows
    notepad %USERPROFILE%\.config\opencode\kdco-notify.json
  2. Измените параметры конфигурации (см. пример выше)

  3. Сохраните файл, конфигурация автоматически вступит в силу (перезапуск не требуется)

Что будет, если файл конфигурации повреждён?

Плагин использует конфигурацию по умолчанию и молча обрабатывает ошибку.

Логика обработки ошибок (notify.ts:110-113):

typescript
} catch {
  // Config doesn't exist or is invalid, use defaults
  return DEFAULT_CONFIG
}

Метод решения:

Если файл конфигурации повреждён (ошибка формата JSON), плагин вернётся к конфигурации по умолчанию. Шаги исправления:

  1. Удалите повреждённый файл конфигурации:

    bash
    rm ~/.config/opencode/kdco-notify.json
  2. Плагин продолжит работу с конфигурацией по умолчанию

  3. Если требуется пользовательская конфигурация, пересоздайте файл конфигурации


Итоги урока

В этом уроке мы ответили на наиболее часто задаваемые вопросы:

  • Влияние на производительность: плагин не увеличивает контекст AI, использование ресурсов минимально (CPU почти 0, память < 5 МБ)
  • Конфиденциальность и безопасность: полностью локальная работа, не отправляет никаких данных, считывает только необходимые метаданные
  • Стратегия уведомлений: механизм интеллектуальной фильтрации (уведомлять только родительские сессии, подавление при фокусе терминала на macOS, тихие часы)
  • Совместимость плагина: не конфликтует с другими плагинами, поддерживает три платформы, но есть различия в функционале
  • Поддержка терминалов: поддерживает 37+ терминалов, при неудачном автоопределении продолжает нормально работать

Предварительный обзор следующего урока

В следующем уроке мы изучим Типы событий.

Вы узнаете:

  • Четыре типа событий OpenCode, которые прослушивает плагин
  • Время срабатывания и содержание уведомлений для каждого события
  • Правила фильтрации событий (проверка родительской сессии, тихие часы, фокус терминала)
  • Различия в обработке событий на разных платформах

Приложение: ссылки на исходный код

Нажмите, чтобы раскрыть расположение исходного кода

Время обновления: 2026-01-27

ФункцияПуть к файлуНомер строки
Запуск плагина и загрузка конфигурацииsrc/notify.ts357-364
Логика прослушивания событийsrc/notify.ts372-400
Проверка родительской сессииsrc/notify.ts256-259
Проверка тихих часовsrc/notify.ts262
Определение фокуса терминалаsrc/notify.ts265
Загрузка файла конфигурацииsrc/notify.ts90-114
Определение информации о терминалеsrc/notify.ts145-176
Определение конфигурации по умолчаниюsrc/notify.ts56-68

Ключевые константы:

  • DEFAULT_CONFIG: конфигурация по умолчанию (уведомлять только родительские сессии, звуки Glass/Basso/Submarine, тихие часы по умолчанию отключены)

Ключевые функции:

  • loadConfig(): загружает пользовательскую конфигурацию и объединяет со значениями по умолчанию
  • detectTerminalInfo(): определяет информацию о терминале и кэширует
  • isQuietHours(): проверяет, находится ли текущее время в тихих часах
  • isTerminalFocused(): проверяет, является ли терминал окном переднего плана (macOS)
  • isParentSession(): проверяет, является ли сессия родительской