Skip to content

Explicação dos Tipos de Eventos: Entenda Quando as Notificações do OpenCode São Acionadas ​

Esta página lista os tipos de eventos do OpenCode monitorados pelo plugin opencode-notify e suas condições de acionamento. O plugin monitora quatro eventos: session.idle, session.error, permission.updated e tool.execute.before. Compreender quando esses eventos são acionados e suas regras de filtragem ajuda a configurar melhor o comportamento das notificações.

Visão Geral dos Tipos de Eventos ​

Tipo de EventoQuando é AcionadoTítulo da NotificaçãoSom PadrãoVerifica Sessão PaiVerifica Foco do Terminal
session.idleSessão de IA entra em estado ocioso"Ready for review"Glass✅✅
session.errorErro durante execução da sessão de IA"Something went wrong"Basso✅✅
permission.updatedIA precisa de autorização do usuário"Waiting for you"Submarine❌✅
tool.execute.beforeIA faz uma pergunta (ferramenta question)"Question for you"Submarine*❌❌

*Nota: O evento question usa por padrão o som de permission, pode ser personalizado via configuração

Descrição Detalhada dos Eventos ​

session.idle ​

Condição de Acionamento: Sessão de IA entra em estado ocioso após completar uma tarefa

Conteúdo da Notificação:

  • Título: Ready for review
  • Mensagem: Título da sessão (máximo 50 caracteres)

Lógica de Processamento:

  1. Verifica se é uma sessão pai (quando notifyChildSessions=false)
  2. Verifica se está no horário silencioso
  3. Verifica se o terminal está em foco (suprime notificação quando focado)
  4. Envia notificação nativa

Localização no Código-fonte: src/notify.ts:249-284


session.error ​

Condição de Acionamento: Erro durante o processo de execução da sessão de IA

Conteúdo da Notificação:

  • Título: Something went wrong
  • Mensagem: Resumo do erro (máximo 100 caracteres)

Lógica de Processamento:

  1. Verifica se é uma sessão pai (quando notifyChildSessions=false)
  2. Verifica se está no horário silencioso
  3. Verifica se o terminal está em foco (suprime notificação quando focado)
  4. Envia notificação nativa

Localização no Código-fonte: src/notify.ts:286-313


permission.updated ​

Condição de Acionamento: IA precisa de autorização do usuário para executar uma operação

Conteúdo da Notificação:

  • Título: Waiting for you
  • Mensagem: OpenCode needs your input

Lógica de Processamento:

  1. Não verifica sessão pai (solicitações de permissão sempre precisam de intervenção manual)
  2. Verifica se está no horário silencioso
  3. Verifica se o terminal está em foco (suprime notificação quando focado)
  4. Envia notificação nativa

Localização no Código-fonte: src/notify.ts:315-334


tool.execute.before ​

Condição de Acionamento: Antes da IA executar uma ferramenta, quando o nome da ferramenta é question

Conteúdo da Notificação:

  • Título: Question for you
  • Mensagem: OpenCode needs your input

Lógica de Processamento:

  1. Não verifica sessão pai
  2. Não verifica foco do terminal (suporta fluxo de trabalho com tmux)
  3. Verifica se está no horário silencioso
  4. Envia notificação nativa

Observação Especial: Este evento não faz detecção de foco, para permitir receber notificações normalmente em fluxos de trabalho com múltiplas janelas tmux.

Localização no Código-fonte: src/notify.ts:336-351

Condições de Acionamento e Regras de Filtragem ​

Verificação de Sessão Pai ​

Por padrão, o plugin notifica apenas a sessão pai (sessão raiz), evitando um grande número de notificações de subtarefas.

Lógica de Verificação:

  • Obtém informações da sessão via client.session.get()
  • Se a sessão tiver parentID, pula a notificação

Opções de Configuração:

  • notifyChildSessions: false (padrão) - Notifica apenas sessão pai
  • notifyChildSessions: true - Notifica todas as sessões

Eventos Aplicáveis:

  • session.idle ✅
  • session.error ✅
  • permission.updated ❌ (não verifica)
  • tool.execute.before ❌ (não verifica)

Verificação de Horário Silencioso ​

Durante o horário silencioso configurado, nenhuma notificação é enviada.

Lógica de Verificação:

  • Lê quietHours.enabled, quietHours.start, quietHours.end
  • Suporta períodos que atravessam a meia-noite (ex: 22:00-08:00)

Eventos Aplicáveis:

  • Todos os eventos ✅

Verificação de Foco do Terminal ​

Quando o usuário está visualizando o terminal, suprime notificações para evitar lembretes redundantes.

Lógica de Verificação:

  • macOS: Obtém o nome do processo do aplicativo em primeiro plano via osascript
  • Compara frontmostApp com o processName do terminal

Eventos Aplicáveis:

  • session.idle ✅
  • session.error ✅
  • permission.updated ✅
  • tool.execute.before ❌ (não verifica, suporta tmux)

Diferenças entre Plataformas ​

FuncionalidademacOSWindowsLinux
Notificação nativa✅✅✅
Detecção de foco do terminal✅❌❌
Focar terminal ao clicar na notificação✅❌❌
Sons personalizados✅❌❌

Impacto da Configuração ​

O comportamento das notificações pode ser personalizado através do arquivo de configuração:

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

Tutoriais Relacionados:


Prévia da Próxima Lição ​

Na próxima lição aprenderemos sobre Exemplos de Arquivo de Configuração.

Você vai aprender:

  • Template completo do arquivo de configuração
  • Comentários detalhados de todos os campos de configuração
  • Explicação dos valores padrão do arquivo de configuração

Apêndice: Referência do Código-fonte ​

Clique para expandir e ver a localização no código-fonte

Data de atualização: 2026-01-27

Tipo de EventoCaminho do ArquivoLinhasFunção de Processamento
session.idlesrc/notify.ts249-284handleSessionIdle
session.errorsrc/notify.ts286-313handleSessionError
permission.updatedsrc/notify.ts315-334handlePermissionUpdated
tool.execute.beforesrc/notify.ts336-351handleQuestionAsked
Configuração dos listeners de eventossrc/notify.ts367-402NotifyPlugin

Constantes-chave:

  • DEFAULT_CONFIG (L56-68): Configuração padrão, incluindo sons e configurações de horário silencioso
  • TERMINAL_PROCESS_NAMES (L71-84): Mapeamento de nomes de terminal para nomes de processo do macOS

Funções-chave:

  • sendNotification() (L227-243): Envia notificação nativa, processa funcionalidade de foco no macOS
  • isParentSession() (L205-214): Verifica se é uma sessão pai
  • isQuietHours() (L181-199): Verifica se está no horário silencioso
  • isTerminalFocused() (L166-175): Verifica se o terminal está em foco (apenas macOS)