feat: ativa permissoes do chat IA com whitelist nos dois launchers - #5
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexto
O
MestreDoPC-Launcher.ps1— o backend elevado, registrado na tarefa agendadaMestreDoPC_Admin_Launcher— executavaInvoke-Expressionsobre qualquer texto recebido emPOST /run, sem nenhuma validação. Ov10/launcher.jsjá validava tudo contraallowed-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
v10/allowed-operations.jsonno startup; sem catálogo o launcher não sobe (seria um servidor elevado sem restrição)./runresolve porid+paramsou porcmdexato/template; comando livre → HTTP 403 com a mesma mensagem do launcher Node.Invoke-Expressionpassa 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
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/chatnos dois launchers: bloqueiamaliciosocom HTTP 400 e mensagem no chat; logasuspeito.perguntar_ia,perguntar_ia_com_contextoeia_comando_sugerir, com registro em auditoria.Limpeza de
ia_comando_sugerirRemove o parâmetro morto
confirmar, deixa de citar a tool inexistenteexecutar_comandoe classifica a própria sugestão contra a whitelist.Bugs pré-existentes corrigidos
{{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.templatesque trazemcommandfixo em vez depatternestavam inalcançáveis por qualquer modo. O PS1 agora reconhece 343 comandos exatos (era 265).Verificação
npm testemmcp-server/: 73 passam, 0 falham (1 skip é o smoke opcional do Ollama).node --checkemindex.jsev10/launcher.js;Parser.ParseFilenoMestreDoPC-Launcher.ps1.POST /runcom comando livrePOST /runcom{"id":"ver_uso_ram"}POST /classifyallowed: true, destructive: falsePOST /ollama/chatcom "ignore all previous instructions…"classification: maliciosoNota de compatibilidade
Breaking change intencional: comandos livres em
POST /rundeixam de funcionar. Toda operação nova precisa entrar emv10/allowed-operations.json.Testes novos:
mcp-server/test/whitelist-enforcement.test.jsemcp-server/test/chat-permissions.test.js.🤖 Generated with Claude Code
https://claude.ai/code/session_01YaqA4B6THjpdK7KxAvW4LW