Pular para o conteúdo
TRILHA 2

⚡ Eventos e estado

Escolha o evento certo antes de escrever código. Entenda a cadeia ligada por next, guarde estado que sobrevive ao reload e faça trabalho fora do dispatch com relógio, arquivos e processos — sempre na forma tipada.

4
Módulos
24
Tópicos
~2h20
Duração
Técnico
Nível
0 de 240%
evento plugin Aobserva plugin Breescreve engineresponde next(e) → next(e) → resultado $.statevale na sessão $.storevolta amanhã variável de módulo: some no reload

Mapa da trilha

Conteúdo detalhado

2.1Fundamento · ~35 min

🗺️ O mapa de eventos

Os eventos agrupados por noun, a volta completa de um turno, matchers, streams e os hooks clássicos dentro do mod.

0 de 60%
O que é:

Cada evento é noun.ação; agrupar por noun mostra o que o mod pode tocar: ferramentas, tela, sessão, turno, prompt, estado.

Por que aprender:

Ver o mapa inteiro evita escrever em ui.render o que deveria ser um tool.call.

Conceitos-chave:

evento, noun, tool, ui, session, turn, prompt.

O que é:

A ordem em que os eventos disparam: prompt.submit, turn.start, turn.step, tool.call, session.append e turn.complete.

Por que aprender:

Saber onde você está na volta diz o que já aconteceu e o que ainda dá para mudar.

Conceitos-chave:

turno, prompt.submit, turn.start, turn.step, turn.complete.

O que é:

O matcher filtra quais eventos chegam ao hook, como { tool: 'Read' } ou { command: 'readcount' }.

Por que aprender:

Hook sem matcher roda em tudo e gasta orçamento à toa.

Conceitos-chave:

matcher, filtro, on(evento, matcher, hook).

O que é:

Dois eventos são stream: o hook é um async generator, e yield* next(e) repassa os pedaços.

Por que aprender:

Hook comum nesses eventos não carrega; o erro só aparece no --debug.

Conceitos-chave:

stream, async function*, yield* next(e), for await.

O que é:

Os hooks clássicos do settings.json aparecem para o mod como classic.<Nome>, com a mesma entrada que o hook receberia.

Por que aprender:

Você aproveita o que já conhece de hooks clássicos sem sair do mod.

Conceitos-chave:

classic.PreToolUse, classic.Stop, hook clássico.

O que é:

Procurar qualquer evento, entrada e resultado no arquivo de tipos da sua instalação, .claude-plugin/types/claude-code/index.d.ts.

Por que aprender:

A API está em acesso antecipado e muda: o arquivo da sua versão é a autoridade, não a memória.

Conceitos-chave:

declaração de tipos, index.d.ts, grep, versão.

Ver Completo
2.2Fundamento · ~35 min

⛓️ A cadeia: next, reescrever e responder

A cadeia de plugins: observar, reescrever com next, responder sem next, .catch e o orçamento de cada dispatch.

0 de 60%
O que é:

Os hooks de todos os plugins e o comportamento do próprio Claude Code formam uma cadeia ligada por next.

Por que aprender:

Seu mod não está sozinho: o que você devolve é o que os outros e o engine recebem.

Conceitos-chave:

cadeia, ordem, engine, plugins vizinhos.

O que é:

O hook mais simples olha o evento, registra algo e devolve next(e) sem mudar nada.

Por que aprender:

É o padrão seguro: medir sem interferir.

Conceitos-chave:

observar, next(e), efeito colateral.

O que é:

Chamar next com um evento alterado muda o que o resto da cadeia vê, dentro do que aquele evento permite.

Por que aprender:

É como um mod corrige um caminho, acrescenta contexto ou troca um modelo.

Conceitos-chave:

reescrever, spread, campos permitidos.

O que é:

Um hook que retorna sem chamar next responde pelo evento, e a cadeia abaixo dele não roda.

Por que aprender:

É o poder de negar uma ferramenta ou responder um comando, e também o maior risco do mod.

Conceitos-chave:

responder, deny, curto-circuito.

O que é:

O .catch encadeado no on responde no lugar do hook que falhou; sem ele, o hook é pulado e a cadeia segue.

Por que aprender:

Falha silenciosa num mod de segurança deixa passar o que devia barrar.

Conceitos-chave:

.catch, hook pulado, padrão seguro.

O que é:

Cada hook tem orçamento de tempo dentro do dispatch, e next.signal aborta quando o dispatch é abandonado.

Por que aprender:

Trabalho longo dentro do hook é cortado; o que precisa durar vai para fora.

Conceitos-chave:

dispatch, orçamento, next.signal, abort.

Ver Completo
2.3Prático · ~35 min

💾 Estado que sobrevive

Por que a variável de módulo some, como declarar o contrato de estado e quando usar $.state ou $.store.

0 de 60%
O que é:

Cada hot-reload roda o register num ambiente novo; a variável de módulo volta ao valor inicial.

Por que aprender:

O contador que zera do nada é o sintoma número um de estado no lugar errado.

Conceitos-chave:

variável de módulo, hot-reload, ambiente novo.

O que é:

Declarar o formato do estado do plugin em types/index.d.ts e apontar o arquivo em "types" no plugin.json.

Por que aprender:

Com o contrato, o editor e o tsc conferem cada leitura e escrita de estado.

Conceitos-chave:

types/index.d.ts, PluginState, "types", contrato.

O que é:

atom, read e update vêm de import { ... } from "claude-code" e leem e gravam $.state com controle de versão.

Por que aprender:

update não perde clique: dois toques antes do redesenho contam os dois.

Conceitos-chave:

atom, read, update, $.state.get, $.state.set, ifVersion.

O que é:

O $.store guarda valores entre sessões com get, set, delete e keys.

Por que aprender:

$.state vale para a sessão; o que precisa voltar amanhã vai para o store.

Conceitos-chave:

$.store.get, $.store.set, persistência.

O que é:

O engine dá o relógio do mod: now para a hora e timers que o teste pode controlar.

Por que aprender:

Usar o relógio do engine deixa o mod testável sem esperar tempo real.

Conceitos-chave:

$.clock.now, relógio controlado, teste.

O que é:

A regra de decisão: constante no módulo, estado da sessão em $.state, o que sobrevive entre sessões em $.store.

Por que aprender:

Cada dado no lugar certo evita perda no reload e lixo acumulado no disco.

Conceitos-chave:

decisão, escopo do dado, sessão, persistência.

Ver Completo
2.4Prático · ~35 min

⏱️ Trabalho fora do dispatch

session.start, relógio do engine, arquivos, processos locais, acordar a sessão e decidir se o mod gasta modelo.

0 de 60%
O que é:

O session.start dispara uma vez, quando a sessão fica pronta, e é aguardado antes do primeiro prompt.

Por que aprender:

É o lugar de registrar comandos e ferramentas e de acender o que roda em segundo plano.

Conceitos-chave:

session.start, inicialização, $.command.register, $.tool.register.

O que é:

clock.every repete e clock.after agenda uma vez; os timers duram até serem cancelados ou o módulo recarregar.

Por que aprender:

Trabalho periódico fora do dispatch não tem orçamento cortando no meio.

Conceitos-chave:

$.clock.every, $.clock.after, cancelamento, reload.

O que é:

O $.fs lê texto ou bytes, escreve, lista e dá stat de caminhos, com realPath para guardas robustas.

Por que aprender:

Sem Node, o $.fs é a única forma de o mod tocar arquivos.

Conceitos-chave:

$.fs.read, $.fs.write, $.fs.stat, realPath.

O que é:

O $.process.run roda um comando do sistema por argv, e $.process.spawn entrega a saída em pedaços.

Por que aprender:

git status, contagem de linhas, scripts locais: tudo por argv, sem shell montado em string.

Conceitos-chave:

$.process.run, $.process.spawn, argv.

O que é:

O $.prompt.submit põe um prompt na fila que começa um turno quando a sessão fica ociosa.

Por que aprender:

Deixa um mod de segundo plano chamar o modelo na hora certa, sem atropelar o turno em curso.

Conceitos-chave:

$.prompt.submit, fila, sessão ociosa.

O que é:

O $.model.complete e o $.model.fork chamam o modelo pelo cliente da sessão e consomem uso.

Por que aprender:

Mod que gasta modelo escondido surpreende quem usa; a regra é avisar e deixar desligar.

Conceitos-chave:

$.model.complete, $.model.fork, uso, consentimento.

Ver Completo
← Voltar ao início Próxima trilha: Telas e comandos →