Skip to content

feat: ativa permissoes do chat IA com whitelist nos dois launchers - #5

Merged
jeanavila997-ux merged 1 commit into
mainfrom
feat/permissoes-chat-ia
Aug 18, 2026
Merged

feat: ativa permissoes do chat IA com whitelist nos dois launchers#5
jeanavila997-ux merged 1 commit into
mainfrom
feat/permissoes-chat-ia

Conversation

@jeanavila997-ux

Copy link
Copy Markdown
Owner

Contexto

O MestreDoPC-Launcher.ps1 — o backend elevado, registrado na tarefa agendada MestreDoPC_Admin_Launcher — executava Invoke-Expression sobre qualquer texto recebido em POST /run, sem nenhuma validação. O v10/launcher.js já validava tudo contra allowed-operations.json. Este PR fecha essa lacuna e liga o chat da V10 a uma política de permissões explícita.

Mudanças

Whitelist no launcher elevado

  • Carrega v10/allowed-operations.json no startup; sem catálogo o launcher não sobe (seria um servidor elevado sem restrição).
  • /run resolve por id+params ou por cmd exato/template; comando livre → HTTP 403 com a mesma mensagem do launcher Node.
  • Invoke-Expression passa a receber apenas o comando resolvido da whitelist.

Novo POST /classify (nos dois launchers)
Resolve o comando sem executar e devolve {allowed, destructive, id, title, category, cmd}.

Permissões do chat na UI

  • Sugestão da IA na whitelist e não destrutiva → executa automaticamente (toast "low-risk").
  • Na whitelist e destrutiva → modal de confirmação com preview do comando, título e categoria.
  • Fora da whitelist → bloqueada, com opção de copiar o comando.
  • window.confirm() substituído por modal próprio, usado também pela fila, pelo modo live e pelo catálogo.

Prompt injection automático

  • /ollama/chat nos dois launchers: bloqueia malicioso com HTTP 400 e mensagem no chat; loga suspeito.
  • Handlers MCP perguntar_ia, perguntar_ia_com_contexto e ia_comando_sugerir, com registro em auditoria.

Limpeza de ia_comando_sugerir
Remove o parâmetro morto confirmar, deixa de citar a tool inexistente executar_comando e classifica a própria sugestão contra a whitelist.

Bugs pré-existentes corrigidos

  1. O placeholder {{X}} nunca era substituído na compilação dos templates (a busca usava a forma não escapada contra um texto já escapado) — nenhum template parametrizado casava no modo legado. Ocorrências repetidas agora viram backreference, exigindo o mesmo valor em todas as posições.
  2. Os 82 itens de templates que trazem command fixo em vez de pattern estavam inalcançáveis por qualquer modo. O PS1 agora reconhece 343 comandos exatos (era 265).

Verificação

  • npm test em mcp-server/: 73 passam, 0 falham (1 skip é o smoke opcional do Ollama).
  • node --check em index.js e v10/launcher.js; Parser.ParseFile no MestreDoPC-Launcher.ps1.
  • Testado ao vivo contra o launcher elevado real:
Teste Resultado
POST /run com comando livre HTTP 403 — "Operacao bloqueada…"
POST /run com {"id":"ver_uso_ram"} HTTP 200, job completou
POST /classify HTTP 200, allowed: true, destructive: false
POST /ollama/chat com "ignore all previous instructions…" HTTP 400, classification: malicioso

Nota de compatibilidade

Breaking change intencional: comandos livres em POST /run deixam de funcionar. Toda operação nova precisa entrar em v10/allowed-operations.json.

Testes novos: mcp-server/test/whitelist-enforcement.test.js e mcp-server/test/chat-permissions.test.js.

🤖 Generated with Claude Code

https://claude.ai/code/session_01YaqA4B6THjpdK7KxAvW4LW

O launcher elevado (MestreDoPC-Launcher.ps1) executava Invoke-Expression sobre
qualquer texto recebido em POST /run, enquanto v10/launcher.js ja validava tudo
contra allowed-operations.json. Esta mudanca fecha essa lacuna e liga o chat da
V10 a uma politica de permissoes explicita.

- PS1: carrega a whitelist no startup (falha fatal se ausente), resolve /run por
  id+params ou cmd exato/template, e devolve 403 para qualquer comando livre.
- Novo POST /classify nos dois launchers: resolve o comando sem executar e
  informa allowed/destructive/id/title.
- Chat da UI: comando sugerido pela IA na whitelist e nao destrutivo executa
  automaticamente; destrutivo abre modal de confirmacao com preview; fora da
  whitelist e bloqueado com opcao de copiar. window.confirm foi substituido por
  modal proprio.
- checkPromptInjection passa a ser aplicado automaticamente em /ollama/chat
  (ambos os launchers) e nos handlers MCP perguntar_ia,
  perguntar_ia_com_contexto e ia_comando_sugerir, com registro em auditoria.
- ia_comando_sugerir: remove o parametro morto 'confirmar', deixa de citar a
  tool inexistente 'executar_comando' e passa a classificar a sugestao contra a
  whitelist.

Corrige tambem dois bugs pre-existentes na compilacao de templates:
- o placeholder {{X}} nunca era substituido (a busca usava a forma nao escapada),
  entao nenhum template parametrizado casava no modo legado;
- os 82 itens de 'templates' que trazem 'command' fixo em vez de 'pattern'
  ficavam inalcancaveis por qualquer modo.

Testes: mcp-server/test/whitelist-enforcement.test.js e chat-permissions.test.js.
Suite completa: 73 passam, 0 falham.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YaqA4B6THjpdK7KxAvW4LW
@jeanavila997-ux
jeanavila997-ux merged commit d58b9ab into main Aug 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant