Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 159 additions & 0 deletions README.es-ES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@


# DeepCode

Analizador de repositorios de GitHub impulsado por LLM que lee un repositorio de abajo hacia arriba, resume archivos y directorios, y publica un documento estructurado en Lark (Feishu).

Envía una URL de GitHub al bot de Lark, o analiza un clon local directamente desde Python.

## Características

- Resumen jerárquico: primero archivos, luego directorios, luego pros y contras a nivel de repositorio
- Carga concurrente de archivos y procesamiento por lotes con LLM con límites de workers configurables
- Cambio a modelos alternativos (fallback) a través de LiteLLM
- Tarjetas de progreso en tiempo real en el chat de Lark
- Filtros de archivos, proxy, endpoint de LLM y URL base de documentos de Lark configurables

## Arquitectura

```mermaid
graph LR
User[LarkUser] -->|GitHubURL| LarkWS[LarkWebSocket]
LarkWS --> Controller
Controller -->|Thread| Worker
Worker --> RepoProcessor
RepoProcessor -->|clone| GitHub
RepoProcessor -->|summarize| LLM
Worker --> MdProcessor
MdProcessor -->|render| MarkdownFile
Worker --> DocProcessor
DocProcessor -->|upload| LarkDrive
DocProcessor -->|convert| LarkDocx
LarkDocx -->|URL| User
```

## Flujo de Procesamiento

```mermaid
sequenceDiagram
participant User
participant Controller
participant Worker
participant RepoProcessor
participant LLM
participant MdProcessor
participant DocProcessor
participant Lark

User->>Controller: GitHub repo URL
Controller->>Worker: spawn background task
Worker->>RepoProcessor: clone and build file tree
RepoProcessor->>LLM: summarize files and directories
RepoProcessor->>LLM: analyze pros and cons
Worker->>MdProcessor: render Markdown
Worker->>DocProcessor: upload and convert
DocProcessor->>Lark: create cloud document
Worker->>User: send document link
```

## Inicio Rápido

### 1. Instalación

```bash
git clone <repo-url>
cd DeepCode
pip install -r requirements.txt
cp .env.example .env
```

### 2. Configurar `.env`

Requeridos:

- `LLM_API_KEY` — Clave API del proveedor de LLM
- `LARK_APP_ID` — ID de la aplicación de Lark
- `LARK_APP_SECRET` — Secreto de la aplicación de Lark
- `LARK_CLOUD_FOLDER_ID` — Token de la carpeta en la nube de Lark de destino

Ajustes opcionales (valores predeterminados mostrados en `.env.example`):

- `LLM_API_BASE` — endpoint predeterminado de Volcano Ark
- `LLM_MODEL` — nombre del modelo principal
- `LLM_FALLBACK_MODELS` — modelos de respaldo separados por comas
- `LLM_BATCH_SIZE` — tamaño del lote para resúmenes de archivos (predeterminado `32`)
- `LLM_NUM_RETRIES` — número de reintentos para límites de tasa (predeterminado `60`)
- `MAX_WORKERS` — tamaño del grupo de hilos (predeterminado `16`)
- `MAX_FILE_BYTES` — bytes máximos leídos por archivo (predeterminado `65536`)
- `TEMPORARY_DIR` — espacio de trabajo temporal (predeterminado `/tmp/`)
- `HTTP_PROXY` — proxy HTTP/HTTPS opcional para git clone
- `LARK_DOC_BASE_URL` — prefijo de URL del documento
- `FS_SUPPORTED_SUFFIX` — extensiones de archivo a analizar separadas por comas
- `FS_IGNORE_CHARS` — fragmentos de ruta a omitir (ej. archivos de prueba)
- `POLL_INTERVAL_SEC` / `POLL_TIMEOUT_SEC` — configuración de sondeo para importación de Lark

### 3. Ejecutar

Modo bot de Lark:

```bash
python core/entrypoint.py
```

Modo repositorio local:

```python
from core.worker import Worker

worker = Worker()
worker.run_on_local_path("/path/to/local/repo")
```

## Estructura del Proyecto

```text
DeepCode/
├── core/
│ ├── bus/ # DataBus y EventBus
│ ├── config/ # Configuración basada en entorno
│ ├── fs/ # Modelo de nodo del árbol de directorios
│ ├── model/ # Cliente LLM y prompts
│ ├── processor/ # Procesadores de repositorio, Markdown, documentos Lark y bot
│ ├── templates/ # Plantillas de documentos y tarjetas
│ ├── controller.py # Entrada de websocket de Lark
│ ├── worker.py # Orquesta la pipeline
│ └── entrypoint.py # Entrada CLI
├── tests/ # Suite pytest (APIs externas simuladas)
├── requirements.txt
├── pyproject.toml
└── README.md
```

## Desarrollo

Ejecutar pruebas:

```bash
pytest -q
```

Extender el análisis:

- Prompts: editar `core/model/prompts.py`
- Filtrado de archivos: ajustar `FS_SUPPORTED_SUFFIX` / `FS_IGNORE_CHARS` en la configuración
- Formato de salida: editar `core/templates/document.md`
- Nueva etapa de pipeline: agregar un procesador y conectarlo en `core/worker.py`

## Cómo Funciona

1. Clonar el repositorio de GitHub (clonación superficial por defecto)
2. Construir un árbol de directorios y cargar archivos fuente compatibles en paralelo
3. Resumir archivos en lotes con LLM
4. Resumir directorios de abajo hacia arriba
5. Generar pros y contras del repositorio
6. Renderizar un informe en Markdown desde la plantilla
7. Subir a la nube de Lark y convertir a un documento docx

## Licencia

Este proyecto está licenciado bajo la [Licencia MIT](./LICENSE).