Tales-Cunha
refactor: remove old files
8bf5d01
|
Raw
History Blame Contribute Delete
4.55 kB
# 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:
1. **Lê e entende** o contexto.
2. **Planeja** uma estratégia de ataque em múltiplos passos.
3. **Escreve** o código no disco.
4. **Compila e testa** localmente via terminal.
5. **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 o `System Prompt` que 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 de `success`. Se falhar, devolve o feedback de erro para o `pocoAgentNode` tentar novamente, até o limite de 30 iterações.
## 3. Estrutura de Diretórios
```text
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:
```bash
# 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 do `forge` para 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 build` limpo antes de submetê-lo à auditoria.