Spaces:
Runtime error
PoCo Agent (Proof-of-Concept Agent)
Este diretório contém a implementação principal do Agente PoCo, uma arquitetura autônoma baseada no framework LangGraph, desenvolvida para atuar como um auditor de segurança e desenvolvedor de exploits (Proof of Concepts) em Smart Contracts.
1. Visão Geral
O Agente recebe como entrada um relatório de vulnerabilidade (escrito por um auditor humano) e o código-fonte do contrato afetado. O objetivo do agente é explorar iterativamente o ambiente local usando o framework Foundry até conseguir escrever um arquivo Exploit.t.sol que prove matematicamente que a vulnerabilidade descrita é explorável (roubando fundos, burlando acessos, etc).
Diferente de scripts sequenciais convencionais, este agente emprega um Loop ReAct (Raciocínio e Ação) iterativo:
- Lê e entende o contexto.
- Planeja uma estratégia de ataque em múltiplos passos.
- Escreve o código no disco.
- Compila e testa localmente via terminal.
- Analisa o erro de compilação ou de lógica e auto-corrige o exploit na próxima iteração.
2. Componentes da Arquitetura
O sistema é orquestrado através de uma Máquina de Estados Finita (Graph) no graph.ts, composta por 5 nós fundamentais:
contextNode: Nó de entrada. Carrega o relatório original do auditor e injeta no estado global do agente.routerNode: Formata as restrições do ambiente e monta oSystem Promptque define a persona do LLM.pocoAgentNode: O motor cognitivo. Utiliza o modelo de linguagem avançado (ex: Claude 3.5 Sonnet) para raciocinar sobre as falhas e escolher qual ferramenta invocar.pocoToolsNode: O executor mecânico das ferramentas. Acessa o FileSystem (read_file,write_file) e o terminal (smart_contract_test,smart_contract_compile).trackToolCallsNode: Intercepta a saída do teste. Se o teste passar (Test Passed Successfully!), ele interrompe o grafo prematuramente definindo o status desuccess. Se falhar, devolve o feedback de erro para opocoAgentNodetentar novamente, até o limite de 30 iterações.
3. Estrutura de Diretórios
src/agents/tester/
├── index.ts # Entrypoint da biblioteca, orquestra e dispara o grafo LangGraph.
├── agent.ts # Definição e wrapper do agente para integração externa.
├── graph.ts # A topologia da rede ReAct (nodes e edges).
├── state.ts # Interface de Estado global que trafega entre os nós do grafo.
├── types.ts # Tipagens TypeScript (Report, Vulnerability, etc).
├── tools/ # (Depreciado) Ferramentas antigas de suporte.
├── utils/ # Scripts utilitários e stubs de dependências.
└── nodes/
├── context.ts # Setup inicial e parser do contexto.
├── router.ts # Montagem do prompt base.
└── pocoAgent.ts # Chamada direta à API do LLM com as Tools associadas.
4. Como Executar
O agente não é chamado isoladamente pelo usuário, mas sim invocado pelo orquestrador principal de Benchmark ou pela CLI da ferramenta. Para avaliar a eficácia do agente, recomenda-se executar os scripts do Benchmark na raiz do projeto:
# Executa a avaliação em cima do dataset Hard (Proof-of-Patch)
DEBUG_CONTEXT=true FORCE_RERUN=true npx tsx src/benchmark/runTesterBenchmark.ts 100
5. Ferramentas (Tools)
A maestria do agente vem de seu arsenal de ferramentas (tools.ts), que operam com alta precisão cirúrgica para economizar tokens:
read_file,list_dir: Explorar a árvore de contratos vulneráveis.todo_planner: Criar uma lista de tarefas persistente para orientar a memória de longo prazo durante as 30 iterações.write_file,edit_file: Gerar ou alterar partes específicas do exploit de forma isolada.smart_contract_compile,smart_contract_test: Interagir diretamente com a CLI doforgepara compilar ou rodar os testes, com os logs canalizados de volta para o agente.
Nota Metodológica: O agente assume que está operando em um repositório configurado e funcional. Se as dependências do repositório alvo (ex: submódulos do foundry) estiverem quebradas ou faltantes fisicamente no disco, o agente tentará alucinar "Mocks" arquiteturais para forçar o projeto a compilar, o que foge do escopo do teste da vulnerabilidade. Sempre garanta que o projeto alvo passa por um
forge buildlimpo antes de submetê-lo à auditoria.