# Arquitetura do Sistema de Arquivos
## ๐๏ธ Visรฃo Geral da Arquitetura
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ USUรRIO / AGENTE IA โ
โ "Envie este relatรณrio.pdf por email para cliente@empresa.com" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMPOSIO SDK (Rust) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FileHelper โ โ
โ โ - Processa schemas de ferramentas โ โ
โ โ - Identifica campos file_uploadable/file_downloadable โ โ
โ โ - Transforma schemas para formato simples โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FileUploadable โ โ
โ โ - from_path(): Upload de arquivo local โ โ
โ โ - from_url(): Upload de URL pรบblica โ โ
โ โ - Calcula MD5 hash โ โ
โ โ - Detecta MIME type โ โ
โ โ - Valida tamanho e permissรตes โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP Client (reqwest) โ โ
โ โ - POST /api/v3/files/upload/request โ โ
โ โ - Recebe presigned URL do S3 โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMPOSIO BACKEND API โ
โ โ
โ 1. Valida API key โ
โ 2. Verifica MD5 hash (deduplicaรงรฃo) โ
โ 3. Gera presigned URL do S3 โ
โ 4. Retorna: { id, key, type, new_presigned_url } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AMAZON S3 STORAGE โ
โ โ
โ - Recebe arquivo via PUT request โ
โ - Armazena com chave รบnica โ
โ - Gera URLs temporรกrias para download โ
โ - Gerencia expiraรงรฃo de arquivos โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMPOSIO TOOL ROUTER โ
โ โ
โ - Recebe parรขmetros com s3key โ
โ - Baixa arquivo de S3 se necessรกrio โ
โ - Executa ferramenta (Gmail, Slack, etc.) โ
โ - Retorna resultado (pode incluir arquivos) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ API EXTERNA (Gmail) โ
โ โ
โ - Recebe requisiรงรฃo com arquivo โ
โ - Processa (envia email com anexo) โ
โ - Retorna confirmaรงรฃo โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## ๐ Fluxo de Upload Detalhado
```
โโโโโโโโโโโโโโโโ
โ Arquivo Localโ
โ report.pdf โ
โโโโโโโโฌโโโโโโโโ
โ
โ 1. FileUploadable::from_path()
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Validaรงรตes โ
โ โ Arquivo existe? โ
โ โ ร um arquivo (nรฃo diretรณrio)? โ
โ โ Tem permissรฃo de leitura? โ
โ โ Calcula MD5 hash โ
โ โ Detecta MIME type โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 2. Request presigned URL
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ POST /api/v3/files/upload/request โ
โ { โ
โ "md5": "abc123...", โ
โ "filename": "report.pdf", โ
โ "mimetype": "application/pdf", โ
โ "tool_slug": "GMAIL_SEND_EMAIL", โ
โ "toolkit_slug": "gmail" โ
โ } โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 3. Resposta da API
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Response โ
โ { โ
โ "id": "file_xyz", โ
โ "key": "s3://bucket/path/file", โ
โ "type": "application/pdf", โ
โ "new_presigned_url": "https://..." โ
โ } โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 4. Upload para S3
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PUT https://s3.amazonaws.com/... โ
โ Content-Type: application/pdf โ
โ Body: [binary file content] โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 5. Retorno
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FileUploadable { โ
โ name: "report.pdf", โ
โ mimetype: "application/pdf", โ
โ s3key: "s3://bucket/path/file" โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## ๐ฝ Fluxo de Download Detalhado
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Tool Response โ
โ { โ
โ "success": true, โ
โ "receipt": { โ
โ "name": "receipt.pdf", โ
โ "mimetype": "application/pdf", โ
โ "s3url": "https://s3.../file" โ
โ } โ
โ } โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 1. SDK detecta file_downloadable
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FileDownloadable::download() โ
โ - Cria diretรณrio de saรญda โ
โ - Faz GET request para s3url โ
โ - Valida status HTTP โ
โ - Salva arquivo localmente โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 2. Download de S3
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GET https://s3.amazonaws.com/... โ
โ Response: [binary file content] โ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ 3. Salvar localmente
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ~/.composio/outputs/ โ
โ gmail/ โ
โ GMAIL_SEND_EMAIL/ โ
โ receipt.pdf โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## ๐ก๏ธ Recursos de Seguranรงa
### 1. Validaรงรฃo de Arquivos Locais
```rust
// Verificaรงรตes antes do upload
โ Arquivo existe
โ ร um arquivo regular (nรฃo link simbรณlico)
โ Tem permissรฃo de leitura
โ Tamanho dentro do limite
```
### 2. Proteรงรตes para URLs Pรบblicas
```rust
// Proteรงรตes ao baixar de URLs
โ Apenas HTTP/HTTPS permitido
โ Redirects desabilitados (previne ataques)
โ Timeout de conexรฃo: 5 segundos
โ Timeout de leitura: 60 segundos
โ Limite de tamanho: 100 MB
โ Validaรงรฃo de Content-Type
```
### 3. Deduplicaรงรฃo com MD5
```rust
// Evita uploads duplicados
1. Calcula MD5 do arquivo
2. Envia hash para API
3. API verifica se arquivo jรก existe
4. Se existe, retorna chave existente
5. Se nรฃo existe, faz upload
```
### 4. URLs Temporรกrias
```
- Presigned URLs expiram apรณs uso
- Nรฃo expรตem credenciais AWS
- Acesso controlado por tempo
```
## ๐ Processamento de Schemas
### Schema Original (Complexo)
```json
{
"properties": {
"attachment": {
"type": "object",
"file_uploadable": true,
"properties": {
"name": {"type": "string"},
"mimetype": {"type": "string"},
"s3key": {"type": "string"}
},
"required": ["name", "mimetype", "s3key"]
}
}
}
```
### Schema Processado (Simples)
```json
{
"properties": {
"attachment": {
"type": "string",
"format": "path",
"description": "Path to file. Please provide a value of type string.",
"file_uploadable": true
}
}
}
```
### Transformaรงรฃo de Parรขmetros
```
Entrada do Agente:
{
"attachment": "/home/user/report.pdf"
}
โ SDK processa
Enviado para API:
{
"attachment": {
"name": "report.pdf",
"mimetype": "application/pdf",
"s3key": "s3://composio-bucket/files/abc123"
}
}
```
## ๐ฏ Casos de Uso por Toolkit
### ๐ง Gmail / Outlook
```
Upload:
- Anexos de email
- Imagens inline
- Documentos
Download:
- Anexos recebidos
- Backups de emails
```
### ๐ฌ Slack / Discord / WhatsApp
```
Upload:
- Imagens
- Vรญdeos
- Documentos
- GIFs
Download:
- Mรญdia compartilhada
- Arquivos de canais
```
### ๐๏ธ Google Drive / Dropbox
```
Upload:
- Qualquer tipo de arquivo
- Backups
- Sincronizaรงรฃo
Download:
- Arquivos compartilhados
- Backups restaurados
```
### ๐ Processamento de Documentos
```
Upload:
- PDFs para anรกlise
- Imagens para OCR
- Planilhas para processamento
Download:
- Relatรณrios gerados
- Dados extraรญdos
- Resultados de anรกlise
```
### ๐จ Geraรงรฃo de Conteรบdo (DALL-E, Midjourney)
```
Upload:
- Templates
- Referรชncias
- Assets
Download:
- Imagens geradas
- Vรญdeos renderizados
- Designs criados
```
## ๐พ Estrutura de Diretรณrios
```
~/.composio/ # Diretรณrio raiz
โโโ outputs/ # Arquivos baixados
โ โโโ gmail/
โ โ โโโ GMAIL_SEND_EMAIL/
โ โ โ โโโ receipt_001.pdf
โ โ โ โโโ receipt_002.pdf
โ โ โโโ GMAIL_GET_ATTACHMENT/
โ โ โโโ document.docx
โ โ โโโ image.png
โ โโโ slack/
โ โ โโโ SLACK_SEND_MESSAGE/
โ โ โโโ screenshot.png
โ โ โโโ video.mp4
โ โโโ github/
โ โโโ GITHUB_CREATE_RELEASE/
โ โโโ release_notes.md
โโโ cache/ # Cache temporรกrio
โโโ uploads/
โโโ temp_file_001.tmp
โโโ temp_file_002.tmp
```
## ๐ง Configuraรงรฃo
### Variรกveis de Ambiente
```bash
# Diretรณrio de cache customizado
export COMPOSIO_CACHE_DIR="/custom/path/.composio"
# API Key
export COMPOSIO_API_KEY="your-api-key"
```
### Limites Configurรกveis
```rust
// Constantes que podem ser ajustadas
const MAX_RESPONSE_SIZE: usize = 100 * 1024 * 1024; // 100 MB
const MAX_FILENAME_LENGTH: usize = 100;
const CONNECT_TIMEOUT_SECS: u64 = 5;
const READ_TIMEOUT_SECS: u64 = 60;
const DEFAULT_CHUNK_SIZE: usize = 1024 * 1024; // 1 MB
```
## ๐ Mรฉtricas e Monitoramento
### Informaรงรตes Rastreadas
```
- Tamanho do arquivo
- Tempo de upload
- Tempo de download
- MD5 hash (deduplicaรงรฃo)
- Tool slug (qual ferramenta usou)
- Toolkit slug (qual serviรงo)
- MIME type
- Timestamp de criaรงรฃo
```
### Logs Importantes
```
[INFO] Uploading file: report.pdf (2.5 MB)
[INFO] MD5 hash: abc123...
[INFO] Requesting presigned URL...
[INFO] Uploading to S3...
[INFO] Upload complete: s3://bucket/path/file
[INFO] File available for tool: GMAIL_SEND_EMAIL
```
## ๐ Performance
### Otimizaรงรตes Implementadas
1. **Streaming de Arquivos**
- Leitura em chunks de 1 MB
- Nรฃo carrega arquivo inteiro na memรณria
2. **Deduplicaรงรฃo**
- MD5 hash evita uploads duplicados
- Economiza banda e tempo
3. **Async/Await**
- Operaรงรตes nรฃo bloqueantes
- Mรบltiplos uploads simultรขneos
4. **Timeouts Inteligentes**
- Connect timeout curto (5s)
- Read timeout longo (60s)
- Previne travamentos
## ๐ฎ Futuras Melhorias
1. **Compressรฃo Automรกtica**
- Comprimir arquivos grandes antes do upload
- Descomprimir automaticamente no download
2. **Retry com Backoff**
- Retry automรกtico em falhas temporรกrias
- Exponential backoff
3. **Progress Callbacks**
- Notificar progresso de upload/download
- รtil para arquivos grandes
4. **Cache Local**
- Cache de arquivos baixados
- Evita downloads duplicados
5. **Streaming de Vรญdeo**
- Suporte para streaming de arquivos grandes
- รtil para vรญdeos e รกudio