Типы событий: когда отправляются уведомления 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.updated | AI требует авторизации пользователя | "Waiting for you" | Submarine | ❌ | ✅ |
tool.execute.before | AI задаёт вопрос (инструмент question) | "Question for you" | Submarine* | ❌ | ❌ |
*Примечание: по умолчанию для события question используется звук permission, можно настроить через конфигурацию
Подробное описание событий
session.idle
Условия возникновения: сессия AI завершает задачу и переходит в состояние простоя
Содержимое уведомления:
- Заголовок:
Ready for review - Сообщение: название сессии (до 50 символов)
Логика обработки:
- Проверка, является ли родительской сессией (при
notifyChildSessions=false) - Проверка, находится ли в тихие часы
- Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
- Отправка нативного уведомления
Положение в исходном коде: src/notify.ts:249-284
session.error
Условия возникновения: ошибка при выполнении сессии AI
Содержимое уведомления:
- Заголовок:
Something went wrong - Сообщение: краткое описание ошибки (до 100 символов)
Логика обработки:
- Проверка, является ли родительской сессией (при
notifyChildSessions=false) - Проверка, находится ли в тихие часы
- Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
- Отправка нативного уведомления
Положение в исходном коде: src/notify.ts:286-313
permission.updated
Условия возникновения: AI требует авторизации пользователя для выполнения действия
Содержимое уведомления:
- Заголовок:
Waiting for you - Сообщение:
OpenCode needs your input
Логика обработки:
- Не проверяет родительскую сессию (запросы на разрешение всегда требуют ручной обработки)
- Проверка, находится ли в тихие часы
- Проверка, сфокусирован ли терминал (при фокусе уведомление подавляется)
- Отправка нативного уведомления
Положение в исходном коде: src/notify.ts:315-334
tool.execute.before
Условия возникновения: перед выполнением инструмента AI, если имя инструмента - question
Содержимое уведомления:
- Заголовок:
Question for you - Сообщение:
OpenCode needs your input
Логика обработки:
- Не проверяет родительскую сессию
- Не проверяет фокус терминала (поддержка рабочего процесса tmux)
- Проверка, находится ли в тихие часы
- Отправка нативного уведомления
Особые примечания: это событие не проверяет фокус, чтобы уведомления поступали нормально в многооконном рабочем процессе 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)
Различия по платформам
| Функция | macOS | Windows | Linux |
|---|---|---|---|
| Нативные уведомления | ✅ | ✅ | ✅ |
| Определение фокуса терминала | ✅ | ❌ | ❌ |
| При нажатии на уведомление фокус на терминал | ✅ | ❌ | ❌ |
| Кастомные звуки | ✅ | ❌ | ❌ |
Влияние конфигурации
Поведение уведомлений можно настроить через конфигурационный файл:
{
"notifyChildSessions": false,
"sounds": {
"idle": "Glass",
"error": "Basso",
"permission": "Submarine",
"question": "Submarine"
},
"quietHours": {
"enabled": false,
"start": "22:00",
"end": "08:00"
}
}Связанные руководства:
Предпросмотр следующего урока
В следующем уроке мы изучим Пример конфигурационного файла.
Вы узнаете:
- Полный шаблон конфигурационного файла
- Подробные комментарии для всех полей конфигурации
- Объяснение значений по умолчанию в конфигурационном файле
Приложение: ссылки на исходный код
Нажмите для просмотра позиций в исходном коде
Время обновления: 2026-01-27
| Тип события | Путь к файлу | Строки | Обработчик функции |
|---|---|---|---|
| session.idle | src/notify.ts | 249-284 | handleSessionIdle |
| session.error | src/notify.ts | 286-313 | handleSessionError |
| permission.updated | src/notify.ts | 315-334 | handlePermissionUpdated |
| tool.execute.before | src/notify.ts | 336-351 | handleQuestionAsked |
| Настройка слушателей событий | src/notify.ts | 367-402 | NotifyPlugin |
Ключевые константы:
DEFAULT_CONFIG(L56-68): конфигурация по умолчанию, включающая настройки звуков и тихих часовTERMINAL_PROCESS_NAMES(L71-84): соответствие названий терминалов к именам процессов в macOS
Ключевые функции:
sendNotification()(L227-243): отправка нативных уведомлений, обработка фокусировки на macOSisParentSession()(L205-214): проверка, является ли родительской сессиейisQuietHours()(L181-199): проверка, находится ли в тихие часыisTerminalFocused()(L166-175): проверка, сфокусирован ли терминал (только для macOS)