Segurança e confiança entre site e agente|INEMA.CLUB-PRO

Aula 3 · 18 min

Ação com consequência pede humano: confirmação e consequentialHint

Reservar, cancelar, pagar, apagar. O agente pode escolher a ferramenta errada, entender mal a descrição ou obedecer a um texto plantado. A spec do WebMCP responde com consequentialHint, para o cliente exigir confirmação. Nesta aula você põe a anotação e a confirmação do próprio site, e prova que recusar não muda nada.

Começar a aula
Diálogo de confirmação em tela escura com dois botões neutros, a mão de uma pessoa perto do mouse, luz neutra.

Nesta aula você vai

  1. 1Intenção mal descrita: o caso finalizeCart da spec
  2. 2consequentialHint (sinal para o cliente) e confirmação do site (a sua trava)
  3. 3O teste que recusa e confere que nada mudou
  4. 4O limite: um agente que opera a tela também clica no botão

Objetivo: pôr consequentialHint e uma confirmação com alvo e efeito em toda ferramenta que muda algo, e provar que recusar não muda nada.

01Do pedido ao efeito, com uma pessoa no meio

Clique em cada etapa.

Clique em cada bloco do diagrama para ver o que ele faz.

A anotação é para o cliente; a confirmação é sua. Uma não substitui a outra.

02Confirmação que protege

1. Alvo e efeito

A pergunta diz o que, de quem e o que acontece depois. "Tem certeza?" não serve: a pessoa não sabe o que está aprovando.

03O segundo furo: cancelar sem perguntar

Edite cancelar_agendamento em kit/pagina/ferramentas.mjs como no trecho e rode o checador. A versão pronta está em kit/solucao/aula3/.

Trecho · kit/solucao/aula3/ferramentas.mjs
      annotations: { consequentialHint: true },              // aula 3: avisa que a ação tem consequência
      execute: util(async ({ codigo }, { signal }) => {
        const ag = agenda.agendamentos().find(a => a.codigo === codigo);
        if (!ag) throw new Error(`agendamento não encontrado: ${codigo}`);
        // a pergunta diz o alvo e o efeito por extenso; cancelar a execução (signal) vale como "não"
        const ok = await ui.pedirConfirmacao(`Cancelar o agendamento ${ag.codigo} (${ag.id}, ${ag.nome})? A vaga volta para a agenda.`, signal);
        if (!ok) return { cancelado: false, motivo: 'a pessoa recusou na tela' };
        agenda.cancelar(codigo);
        ui.atualizar();
        return { cancelado: true, agendamento: ag };
      })
Terminal · checar depois
cd ~/projetos/formacao-webmcp-seguranca-v72/kit
node scripts/checar.mjs; echo "saída: $?"
Exemplo do repositório
== Chromium 156.0.8078.4 (Playwright) · modo: nativo
ok    buscar_mentorias: só leitura, sem texto de terceiro
ok    ler_avaliacoes: devolve texto de terceiro e está marcada com untrustedContentHint
ok    meus_agendamentos: só leitura, sem texto de terceiro
ok    agendar_mentoria: consequentialHint + confirmação; recusar não mudou nada
ok    cancelar_agendamento: consequentialHint + confirmação; recusar não mudou nada
RESULTADO: 0 falhas
saída: 0

Antes do conserto, a mesma linha dizia FALHA cancelar_agendamento: agiu sem pedir confirmação (saída da aula 2).

04Prática

A trava no kit e na sua página.

E7 · Conserte o cancelamento

15 min

Ponha consequentialHint e a confirmação em cancelar_agendamento e rode o bloco checar depois.

Pronto quando: RESULTADO: 0 falhas e saída: 0.

E8 · Quebre de propósito

5 min

Em agendar_mentoria, troque const ok = await ui.pedirConfirmacao(…) por const ok = true e rode o checador. Depois desfaça.

Pronto quando: FALHA agendar_mentoria: agiu sem pedir confirmação e saída: 1; desfeito, RESULTADO: 0 falhas.

E9 · Inventário do seu site

20 min

Liste as ferramentas do seu site que mudam alguma coisa. Cada uma recebe consequentialHint: true e uma pergunta com alvo e efeito.

Pronto quando: grep -c "consequentialHint: true" [seu arquivo de ferramentas] → o número de ferramentas da sua lista.

05Teste da aula

Pergunta 1 de 4

O que a spec diz que o cliente pode fazer ao ver consequentialHint?competência

06Em três frases

AnotaçãoconsequentialHint em toda ferramenta que muda algo.
ConfirmaçãoDo site, com alvo e efeito, uma por chamada; recusar não muda nada.
LimiteBotão na tela o agente também clica; alto valor pede o que só a pessoa tem.

Para ir além

Aula anteriorPróxima aula