Skip to content

Типы событий: когда отправляются уведомления OpenCode

На этой странице перечислены типы событий OpenCode, отслеживаемые плагином opencode-notify, и условия их возникновения. Плагин отслеживает четыре события: session.idle, session.error, permission.updated и tool.execute.before. Понимание моментов возникновения и правил фильтрации этих событий поможет лучше настроить поведение уведомлений.

Обзор типов событий

Тип событияМомент возникновенияЗаголовок уведомленияЗвук по умолчаниюПроверка родительской сессииПроверка фокуса терминала
session.idleСессия AI переходит в состояние простоя"Ready for review"Glass
session.errorОшибка при выполнении сессии AI"Something went wrong"Basso
permission.updatedAI требует авторизации пользователя"Waiting for you"Submarine
tool.execute.beforeAI задаёт вопрос (инструмент question)"Question for you"Submarine*

*Примечание: по умолчанию для события question используется звук permission, можно настроить через конфигурацию

Подробное описание событий

session.idle

Условия возникновения: сессия AI завершает задачу и переходит в состояние простоя

Содержимое уведомления:

  • Заголовок: Ready for review
  • Сообщение: название сессии (до 50 символов)

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

  1. Проверка, является ли родительской сессией (при notifyChildSessions=false)
  2. Проверка, находится ли в тихие часы
  3. Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
  4. Отправка нативного уведомления

Положение в исходном коде: src/notify.ts:249-284


session.error

Условия возникновения: ошибка при выполнении сессии AI

Содержимое уведомления:

  • Заголовок: Something went wrong
  • Сообщение: краткое описание ошибки (до 100 символов)

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

  1. Проверка, является ли родительской сессией (при notifyChildSessions=false)
  2. Проверка, находится ли в тихие часы
  3. Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
  4. Отправка нативного уведомления

Положение в исходном коде: src/notify.ts:286-313


permission.updated

Условия возникновения: AI требует авторизации пользователя для выполнения действия

Содержимое уведомления:

  • Заголовок: Waiting for you
  • Сообщение: OpenCode needs your input

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

  1. Не проверяет родительскую сессию (запросы на разрешение всегда требуют ручной обработки)
  2. Проверка, находится ли в тихие часы
  3. Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
  4. Отправка нативного уведомления

Положение в исходном коде: src/notify.ts:315-334


tool.execute.before

Условия возникновения: перед выполнением инструмента AI, если имя инструмента - question

Содержимое уведомления:

  • Заголовок: Question for you
  • Сообщение: OpenCode needs your input

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

  1. Не проверяет родительскую сессию
  2. Не проверяет фокус терминала (поддержка рабочего процесса tmux)
  3. Проверка, находится ли в тихие часы
  4. Отправка нативного уведомления

Особые примечания: это событие не проверяет фокус, чтобы уведомления поступали нормально в многооконном рабочем процессе tmux.

Положение в исходном коде: src/notify.ts:336-351

Условия возникновения и правила фильтрации

Проверка родительской сессии

По умолчанию плагин уведомляет только о родительских сессиях (корневых сессиях), избегая большого количества уведомлений от подзадач.

Логика проверки:

  • Получает информацию о сессии через client.session.get()
  • Если у сессии есть parentID, пропускает уведомление

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

  • notifyChildSessions: false (по умолчанию) - уведомлять только о родительских сессиях
  • notifyChildSessions: true - уведомлять о всех сессиях

Применимые события:

  • session.idle
  • session.error
  • permission.updated ❌ (не проверяется)
  • tool.execute.before ❌ (не проверяется)

Проверка тихих часов

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

Логика проверки:

  • Читает quietHours.enabled, quietHours.start, quietHours.end
  • Поддерживает периоды, пересекающие полночь (например, 22:00-08:00)

Применимые события:

  • Все события ✅

Проверка фокуса терминала

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

Логика проверки:

  • macOS: получает имя приложения переднего плана через osascript
  • Сравнивает frontmostApp с processName терминала

Применимые события:

  • session.idle
  • session.error
  • permission.updated
  • tool.execute.before ❌ (не проверяется, поддержка tmux)

Различия по платформам

ФункцияmacOSWindowsLinux
Нативные уведомления
Определение фокуса терминала
При нажатии на уведомление фокус на терминал
Кастомные звуки

Влияние конфигурации

Поведение уведомлений можно настроить через конфигурационный файл:

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

Связанные руководства:


Предпросмотр следующего урока

В следующем уроке мы изучим Пример конфигурационного файла.

Вы узнаете:

  • Полный шаблон конфигурационного файла
  • Подробные комментарии для всех полей конфигурации
  • Объяснение значений по умолчанию в конфигурационном файле

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

Нажмите для просмотра позиций в исходном коде

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

Тип событияПуть к файлуСтрокиОбработчик функции
session.idlesrc/notify.ts249-284handleSessionIdle
session.errorsrc/notify.ts286-313handleSessionError
permission.updatedsrc/notify.ts315-334handlePermissionUpdated
tool.execute.beforesrc/notify.ts336-351handleQuestionAsked
Настройка слушателей событийsrc/notify.ts367-402NotifyPlugin

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

  • DEFAULT_CONFIG (L56-68): конфигурация по умолчанию, включающая настройки звуков и тихих часов
  • TERMINAL_PROCESS_NAMES (L71-84): соответствие названий терминалов к именам процессов в macOS

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

  • sendNotification() (L227-243): отправка нативных уведомлений, обработка фокусировки на macOS
  • isParentSession() (L205-214): проверка, является ли родительской сессией
  • isQuietHours() (L181-199): проверка, находится ли в тихие часы
  • isTerminalFocused() (L166-175): проверка, сфокусирован ли терминал (только для macOS)