Spaces:
Runtime error
Runtime error
File size: 4,552 Bytes
8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 2eb19c1 8bf5d01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # 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.
|