Особенности платформы macOS
Что вы сможете делать после этого урока
- ✅ Настроить интеллектуальное обнаружение фокуса, чтобы плагин знал, когда вы смотрите на терминал
- ✅ Автоматически фокусировать окно терминала при клике на уведомление
- ✅ Настраивать звуковые эффекты уведомлений для различных событий
- ✅ Понимать уникальные преимущества и ограничения платформы macOS
Ваша текущая ситуация
При использовании OpenCode вы часто переключаетесь между окнами: AI выполняет задачи в фоновом режиме, вы переключаетесь на браузер для поиска информации, и каждые несколько десятков секунд вам приходится возвращаться, чтобы проверить: задача завершена? Произошла ошибка? Или ожидается ваш ввод?
Было бы здорово иметь нативное уведомление на рабочем столе, как при получении сообщения в мессенджере, чтобы AI напоминал вам, когда задача завершена или требуется ваше внимание.
Когда использовать этот подход
- Вы используете OpenCode на macOS - содержание этого урока применимо только к macOS
- Вы хотите оптимизировать рабочий процесс - избегайте частых переключений окон для проверки статуса AI
- Вы хотите лучший опыт уведомлений - используйте преимущества нативных уведомлений macOS
Почему macOS мощнее?
Платформа macOS предоставляет полные возможности уведомлений: обнаружение фокуса, клик для фокусировки, пользовательские звуковые эффекты. Windows и Linux в настоящее время поддерживают только базовые функции нативных уведомлений.
🎒 Подготовка перед началом
Перед началом убедитесь, что вы выполнили:
Предварительная проверка
- [ ] Завершен урок Быстрый старт
- [ ] Плагин установлен и работает нормально
- [ ] Используется система macOS
Основная идея
Полный опыт уведомлений на платформе macOS основан на трех ключевых возможностях:
1. Интеллектуальное обнаружение фокуса
Плагин знает, смотрите ли вы в данный момент на окно терминала. Если вы просматриваете вывод AI, уведомления не будут вас беспокоить. Уведомления отправляются только когда вы переключаетесь на другое приложение.
Принцип реализации: через системный сервис macOS osascript запрашивается имя процесса текущего активного приложения и сравнивается с именем процесса используемого вами терминала.
2. Клик по уведомлению фокусирует терминал
После получения уведомления просто кликните на карточку уведомления, и окно терминала автоматически выйдет на передний план. Вы можете немедленно вернуться к рабочему состоянию.
Принцип реализации: Notification Center в macOS поддерживает опцию activate, передавая Bundle ID приложения можно реализовать фокусировку при клике.
3. Пользовательские звуковые эффекты
Устанавливайте различные звуки для разных типов событий: четкий звук для завершения задачи, низкий звук для ошибки, позволяя вам примерно понимать ситуацию, не глядя на уведомление.
Принцип реализации: используются 14 стандартных звуковых эффектов, встроенных в систему macOS (таких как Glass, Basso, Submarine), указываемых в поле sounds конфигурационного файла.
Взаимодействие трех возможностей
Обнаружение фокуса избегает беспокойства → Клик по уведомлению для быстрого возврата → Звуковые эффекты для быстрого различения типов событий
Следуйте за мной
Шаг 1: Проверка автоматически обнаруженного терминала
Плагин автоматически обнаруживает используемый вами эмулятор терминала при запуске. Давайте проверим, правильно ли он распознан.
Почему
Плагину нужно знать, какой у вас терминал, чтобы реализовать функции обнаружения фокуса и клика для фокусировки.
Действия
Откройте каталог конфигурации OpenCode:
bashls ~/.config/opencode/Если вы уже создали конфигурационный файл
kdco-notify.json, проверьте наличие поляterminal:bashcat ~/.config/opencode/kdco-notify.jsonЕсли в конфигурационном файле нет поля
terminal, это означает, что плагин использует автоматическое обнаружение.
Что вы должны увидеть
Если в конфигурационном файле нет поля terminal, плагин будет автоматически обнаруживать. Поддерживаемые терминалы включают:
- Популярные терминалы: Ghostty, Kitty, iTerm2, WezTerm, Alacritty
- Системный терминал: встроенный Terminal.app в macOS
- Другие терминалы: Hyper, Warp, встроенный терминал VS Code и т.д.
Поддержка 37+ терминалов
Плагин использует библиотеку detect-terminal, поддерживающую 37+ эмуляторов терминалов. Если вашего терминала нет в списке популярных, также будет предпринята попытка автоматического распознавания.
Шаг 2: Настройка пользовательских звуковых эффектов
macOS предоставляет 14 встроенных звуковых эффектов, вы можете назначить различные звуки для разных событий.
Почему
Различные звуки позволяют вам примерно понимать, что произошло, не глядя на уведомление: задача завершена или произошла ошибка, AI ожидает или просто завершил задачу.
Действия
Откройте или создайте конфигурационный файл:
bashnano ~/.config/opencode/kdco-notify.jsonДобавьте или измените конфигурацию
sounds:
{
"sounds": {
"idle": "Glass",
"error": "Basso",
"permission": "Submarine"
}
}- Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X)
Что вы должны увидеть
В поле sounds конфигурационного файла есть четыре опции:
| Поле | Назначение | Значение по умолчанию | Рекомендуемая настройка |
|---|---|---|---|
idle | Звук завершения задачи | Glass | Glass (четкий) |
error | Звук уведомления об ошибке | Basso | Basso (низкий) |
permission | Звук запроса разрешения | Submarine | Submarine (напоминание) |
question | Звук вопроса AI (опционально) | permission | Purr (мягкий) |
Рекомендуемая комбинация
Эта комбинация по умолчанию интуитивна: завершение с легким звуком, ошибка с предупреждающим звуком, запрос разрешения с напоминающим звуком.
Шаг 3: Изучение списка доступных звуковых эффектов
macOS имеет 14 встроенных звуковых эффектов, которые вы можете комбинировать по своему усмотрению.
Почему
Знание всех доступных звуковых эффектов поможет вам найти комбинацию, наиболее подходящую для ваших рабочих привычек.
Доступные звуковые эффекты
| Название звука | Характеристика звучания | Подходящий сценарий |
|---|---|---|
| Glass | Легкий, четкий | Завершение задачи |
| Basso | Низкий, предупреждающий | Уведомление об ошибке |
| Submarine | Напоминающий, мягкий | Запрос разрешения |
| Blow | Мощный | Важное событие |
| Bottle | Четкий | Завершение подзадачи |
| Frog | Легкий | Неформальное напоминание |
| Funk | Ритмичный | Завершение нескольких задач |
| Hero | Величественный | Завершение вехи |
| Morse | Азбука Морзе | Связанное с отладкой |
| Ping | Четкий | Легкое напоминание |
| Pop | Короткий | Быстрая задача |
| Purr | Мягкий | Ненавязчивое напоминание |
| Sosumi | Уникальный | Специальное событие |
| Tink | Яркий | Завершение небольшой задачи |
Распознавание звука
После настройки попробуйте различные комбинации звуковых эффектов, чтобы найти конфигурацию, наиболее подходящую для вашего рабочего процесса.
Шаг 4: Тестирование функции клика для фокусировки
После клика на уведомление окно терминала автоматически выйдет на передний план. Это уникальная функция macOS.
Почему
Когда вы получаете уведомление, не нужно вручную переключаться на терминал и искать окно, клик по уведомлению сразу возвращает вас в рабочее состояние.
Действия
- Убедитесь, что OpenCode запущен, и запустите задачу AI
- Переключитесь на другое приложение (например, браузер)
- Дождитесь завершения задачи AI, вы получите уведомление "Ready for review"
- Кликните на карточку уведомления
Что вы должны увидеть
- Уведомление исчезает
- Окно терминала автоматически выходит на передний план и получает фокус
- Вы можете немедленно просмотреть вывод AI
Принцип фокусировки
Плагин динамически получает Bundle ID приложения терминала через osascript, затем при отправке уведомления передает опцию activate. Notification Center в macOS, получив эту опцию, автоматически активирует соответствующее приложение при клике на уведомление.
Шаг 5: Проверка функции обнаружения фокуса
Когда вы смотрите на терминал, уведомления не приходят. Это позволяет избежать повторных напоминаний.
Почему
Если вы уже смотрите на терминал, уведомление избыточно. Уведомление имеет смысл только когда вы переключились на другое приложение.
Действия
- Откройте OpenCode, запустите задачу AI
- Держите окно терминала на переднем плане (не переключайтесь)
- Дождитесь завершения задачи
Что вы должны увидеть
- Уведомление "Ready for review" не получено
- В терминале отображается завершение задачи
Затем попробуйте:
- Запустите другую задачу AI
- Переключитесь на браузер или другое приложение
- Дождитесь завершения задачи
Что вы должны увидеть
- Получено уведомление "Ready for review"
- Воспроизведен настроенный звуковой эффект (по умолчанию Glass)
Интеллектуальность обнаружения фокуса
Плагин знает, когда вы смотрите на терминал, а когда нет. Таким образом, вы не пропустите важные напоминания и не будете беспокоиться повторными уведомлениями.
Контрольная точка ✅
Проверка конфигурации
- [ ] Конфигурационный файл
~/.config/opencode/kdco-notify.jsonсуществует - [ ] Поле
soundsнастроено (содержит как минимум idle, error, permission) - [ ] Поле
terminalне установлено (используется автоматическое обнаружение)
Проверка функциональности
- [ ] После завершения задачи AI можно получить уведомление
- [ ] После клика на уведомление окно терминала выходит на передний план
- [ ] Когда окно терминала на переднем плане, повторные уведомления не приходят
- [ ] Различные типы событий воспроизводят различные звуковые эффекты
Обнаружение фокуса не работает?
Если после клика на уведомление терминал не выходит на передний план, возможно:
- Приложение терминала не распознано правильно - проверьте поле
terminalв конфигурационном файле - Не удалось получить Bundle ID - посмотрите сообщения об ошибках в логах OpenCode
Возможные проблемы
Звуковые эффекты не воспроизводятся
Проблема: Настроены звуковые эффекты, но при уведомлении нет звука
Возможные причины:
- Системная громкость слишком низкая или отключена
- Звук уведомлений отключен в системных настройках macOS
Решение:
- Проверьте системную громкость и настройки уведомлений
- Откройте «Системные настройки → Уведомления → OpenCode», убедитесь, что звук включен
Клик по уведомлению не фокусирует
Проблема: После клика на уведомление окно терминала не выходит на передний план
Возможные причины:
- Приложение терминала не обнаружено автоматически
- Не удалось получить Bundle ID
Решение:
Вручную укажите тип терминала:
json{ "terminal": "ghostty" // или другое название терминала }Убедитесь, что название приложения терминала правильное (чувствительно к регистру)
Обнаружение фокуса не работает
Проблема: Даже когда терминал на переднем плане, все равно приходят уведомления
Возможные причины:
- Не удалось обнаружить имя процесса терминала
- Приложение терминала не в списке автоматического обнаружения
Решение:
Вручную укажите тип терминала:
json{ "terminal": "ghostty" // или другое название терминала }Убедитесь, что название приложения терминала правильное (чувствительно к регистру)
Посмотрите логи, убедитесь, что терминал распознан правильно
Резюме урока
Платформа macOS предоставляет полный опыт уведомлений:
| Функция | Назначение | Поддержка платформы |
|---|---|---|
| Нативные уведомления | Отображение системных уведомлений | ✅ macOS ✅ Windows ✅ Linux |
| Пользовательские звуковые эффекты | Различные звуки для разных событий | ✅ macOS |
| Обнаружение фокуса | Избежание повторных уведомлений | ✅ macOS |
| Клик для фокусировки | Быстрый возврат к работе | ✅ macOS |
Основная конфигурация:
{
"sounds": {
"idle": "Glass", // Завершение задачи
"error": "Basso", // Ошибка
"permission": "Submarine" // Запрос разрешения
}
}Рабочий процесс:
- AI завершает задачу → Отправляет уведомление → Воспроизводит звуковой эффект Glass
- Вы работаете в браузере → Получаете уведомление → Кликаете
- Терминал автоматически выходит на передний план → Просматриваете вывод AI
Следующий урок
В следующем уроке мы изучим Особенности платформы Windows.
Вы узнаете:
- Какие функции поддерживает платформа Windows
- Какие различия по сравнению с macOS
- Как настроить уведомления в Windows
Приложение: Справочник по исходному коду
Нажмите, чтобы развернуть и посмотреть расположение исходного кода
Обновлено: 2026-01-27
| Функция | Путь к файлу | Строки |
|---|---|---|
| Обнаружение фокуса | src/notify.ts | 166-175 |
| Клик для фокусировки | src/notify.ts | 238-240 |
| Получение Bundle ID | src/notify.ts | 135-137 |
| Обнаружение активного приложения | src/notify.ts | 139-143 |
| Сопоставление названий терминалов | src/notify.ts | 71-84 |
| Конфигурация звуковых эффектов по умолчанию | src/notify.ts | 59-61 |
| Список звуковых эффектов macOS | README.md | 81 |
| Таблица сравнения функций платформ | README.md | 54-62 |
Ключевые константы:
TERMINAL_PROCESS_NAMES(строки 71-84): таблица сопоставления названий терминалов с именами процессов macOSghostty→"Ghostty"kitty→"kitty"iterm/iterm2→"iTerm2"wezterm→"WezTerm"alacritty→"Alacritty"terminal/apple_terminal→"Terminal"hyper→"Hyper"warp→"Warp"vscode→"Code"vscode-insiders→"Code - Insiders"
Конфигурация по умолчанию:
sounds.idle = "Glass": звуковой эффект завершения задачиsounds.error = "Basso": звуковой эффект уведомления об ошибкеsounds.permission = "Submarine": звуковой эффект запроса разрешения
Ключевые функции:
isTerminalFocused(terminalInfo)(строки 166-175): проверяет, является ли терминал активным приложением- Использует
osascriptдля получения имени процесса активного приложения - Сравнивает с
processNameтерминала (без учета регистра) - Включено только на платформе macOS
- Использует
getBundleId(appName)(строки 135-137): динамически получает Bundle ID приложения- Использует
osascriptдля запроса - Bundle ID используется для функции фокусировки при клике на уведомление
- Использует
getFrontmostApp()(строки 139-143): получает текущее активное приложение- Использует
osascriptдля запроса System Events - Возвращает имя процесса активного приложения
- Использует
sendNotification(options)(строки 227-243): отправляет уведомление- Особенность macOS: если обнаружена платформа darwin и есть
terminalInfo.bundleId, устанавливается опцияactivateдля реализации фокусировки при клике
- Особенность macOS: если обнаружена платформа darwin и есть