Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
53d3a8b
fix: seleccionar último modelo usado por defecto en chats nuevos
aalejandrossj Jan 5, 2026
455d9af
added auto-focus on new chat
Jan 7, 2026
709b459
Merge pull request #165 from Saul-Gomez-J/feat/auto-focus-chat
Saul-Gomez-J Jan 7, 2026
fdb5280
feat(chat): add message editing and copy functionality for user messages
Jan 10, 2026
a5bfa08
feat(chat): add visual feedback on copy with check icon
Jan 10, 2026
c9cb0b5
Merge pull request #169 from Saul-Gomez-J/feat/edit-messages
Saul-Gomez-J Jan 11, 2026
92e9178
fix(chat): implement JavaScript-based auto-resize for textarea
Jan 11, 2026
d3c4ff8
Merge pull request #171 from Saul-Gomez-J/fix/textarea-auto-resize
Saul-Gomez-J Jan 11, 2026
f435446
feat(mcp): add individual tool enable/disable functionality
Jan 12, 2026
3509010
hemos conseguido que funcione la aprovación con OpenRouter
Jan 14, 2026
398ba6b
fix(approval): handle tool denial without infinite loop
Jan 15, 2026
87b90c5
chore: remove diagnostic logs from tool approval flow
Jan 15, 2026
3576f65
Merge pull request #172 from Saul-Gomez-J/feat/mcp-tools-enable-disable
Saul-Gomez-J Jan 15, 2026
dec5af8
refactor(approval): simplify tool approval UI and add i18n support
Jan 15, 2026
2b4ced6
docs: consolidate tool approval documentation
Jan 15, 2026
fc47284
feat(approval): add session-based auto-approval and update documentation
Jan 15, 2026
c0311c5
eliminamos log de las credenciales de oauth peligroso
Jan 15, 2026
f86ef47
fix: use static import for mcp-use with bundled configuration
olivermontes Jan 17, 2026
c70d7bb
chore: upgrade mcp-use from 1.11.2 to 1.13.4
olivermontes Jan 17, 2026
b62c204
security: fix 9 Dependabot alerts by updating dependencies and overrides
olivermontes Jan 17, 2026
9b031a0
Merge pull request #173 from Saul-Gomez-J/feat/approval-tool-execution2
olivermontes Jan 17, 2026
72861f9
Merge pull request #166 from levante-hub/feat/improve-ux
olivermontes Jan 17, 2026
eff9339
Merge pull request #174 from levante-hub/fix/mcp-use-static-import
olivermontes Jan 17, 2026
0d523da
chore: untrack .mcp.json and .claude configuration files
olivermontes Jan 17, 2026
0eae2dc
feat: add tabs to separate enabled and disabled MCP servers in tools …
olivermontes Jan 17, 2026
fc0631a
fix: make title generation non-blocking to improve chat creation UX
olivermontes Jan 17, 2026
d723945
chore: update Vercel AI SDK packages to latest versions
olivermontes Jan 17, 2026
ed2013e
Revert "Merge pull request #173 from Saul-Gomez-J/feat/approval-tool-…
olivermontes Jan 17, 2026
3164eec
fix: initialize MCP store on app startup to show server status correctly
olivermontes Jan 17, 2026
17f14f8
fix: prioritize structuredContent over content in MCP tool responses
olivermontes Jan 17, 2026
89f3481
feat: add displayName support for user-friendly MCP integration names
olivermontes Jan 17, 2026
27d4b28
Merge pull request #177 from levante-hub/changes-1.7.0-version
olivermontes Jan 17, 2026
20c9e59
feat: migrate logging system from custom transports to Winston
Jan 28, 2026
bc0b818
fix: correct Winston logger issues from PR #186 review
Jan 28, 2026
8669108
fix: resolve BigInt serialization and log rotation issues
Jan 28, 2026
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
36 changes: 0 additions & 36 deletions .claude/settings.local.json

This file was deleted.

4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ prueba/
docs/PRD/
dev-levante.db

# Claude Code configuration
.mcp.json
.claude/


# TypeScript build info
*.tsbuildinfo
Expand Down
33 changes: 0 additions & 33 deletions .mcp.json

This file was deleted.

52 changes: 11 additions & 41 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,50 +285,20 @@ Environment variables loaded from:

## Logging System

Levante uses a centralized logging system for better development experience and debugging:
Levante utiliza **Winston** para logging centralizado con sistema de categorías:

### Usage
- **Categorías**: ai-sdk, mcp, database, ipc, preferences, models, core, analytics, oauth
- **Niveles**: debug, info, warn, error
- **Producción**: Logs JSON estructurados con archivo de errores separado
- **Desarrollo**: Salida coloreada legible en consola
- **Zero Overhead**: Categorías deshabilitadas no ejecutan código de log
- **Rotación**: Automática con winston-daily-rotate-file

```typescript
// Main Process
import { getLogger } from './services/logging';
const logger = getLogger();

// Renderer Process
import { logger } from '@/services/logger';

// Usage examples
logger.aiSdk.debug('Model provider loaded', { provider: 'openai' });
logger.mcp.info('Server started', { serverId: 'filesystem' });
logger.database.error('Migration failed', { error: error.message });
logger.core.info('Application initialized');
```

### Categories

- **ai-sdk**: AI service operations, model interactions, streaming
- **mcp**: MCP server management, tool execution, health monitoring
- **database**: Database operations and migrations
- **ipc**: Inter-process communication
- **preferences**: Settings and configuration management
- **core**: General application lifecycle and errors

### Configuration

Control logging via `.env.local`:

```bash
DEBUG_ENABLED=true
DEBUG_AI_SDK=true
DEBUG_MCP=true
DEBUG_DATABASE=false
DEBUG_IPC=false
DEBUG_PREFERENCES=false
DEBUG_CORE=true
LOG_LEVEL=debug
```
**Configuración por Entorno**:
- `NODE_ENV=development`: Verbose, consola, rotación pequeña
- `NODE_ENV=production`: Minimal, solo archivo, rotación grande

See [docs/LOGGING.md](docs/LOGGING.md) for complete documentation.
Ver [docs/LOGGING.md](docs/LOGGING.md) para documentación completa.
- No utilices pnpm dev

## Developer Documentation
Expand Down
136 changes: 131 additions & 5 deletions docs/LOGGING.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,21 +110,147 @@ Always include relevant context for better debugging:

```typescript
// Good
logger.aiSdk.debug('Model provider loaded', {
provider: 'openai',
models: 15,
loadTime: '45ms'
logger.aiSdk.debug('Model provider loaded', {
provider: 'openai',
models: 15,
loadTime: '45ms'
});

// Better
logger.mcp.error('Server connection failed', {
logger.mcp.error('Server connection failed', {
serverId: 'filesystem',
error: error.message,
attempt: 3,
timestamp: Date.now()
});
```

## Arquitectura Winston

Levante usa Winston como sistema de logging con las siguientes características:

### Producción vs Desarrollo

El comportamiento del logger cambia según `NODE_ENV`:

**Desarrollo** (`NODE_ENV=development` o no configurado):
- Salida a consola con colores
- Log level: `debug` (muy verboso)
- Categorías verbose habilitadas por defecto: ai-sdk, mcp, database, oauth
- Archivo único: `levante-YYYY-MM-DD-HHmmss.log` (datePattern configurable)
- Rotación: 10MB, 3 archivos, 7 días

**Producción** (`NODE_ENV=production`):
- Sin salida a consola (solo archivo)
- Log level: `warn` (solo warnings y errores)
- Categorías verbose deshabilitadas
- Dos archivos:
- Todos: `levante-YYYY-MM-DD-HHmmss.log`
- Errores: `levante-error-YYYY-MM-DD-HHmmss.log`
- Rotación: 50MB, 10 archivos, 30 días (errores: 90 días)
- Compresión gzip habilitada por defecto

### Archivos de Log

**Ubicación**: `~/levante/`

**Desarrollo**:
```
~/levante/
├── levante-2025-01-28-143025.log # Con datePattern YYYY-MM-DD-HHmmss
├── levante-2025-01-28-120000.log # Rotado anteriormente
└── .winston-audit.json # Tracking de Winston
```

**Producción**:
```
~/levante/
├── levante-2025-01-28-143025.log # Todos los logs
├── levante-error-2025-01-28-143025.log # Solo errores
├── levante-2025-01-27-120000.log.gz # Comprimidos (del día anterior)
├── .winston-audit.json
└── .winston-error-audit.json
```

### Sistema de Rotación

Winston's `winston-daily-rotate-file` maneja:
- **Rotación temporal**: Según datePattern configurado (soporta precisión de segundos con moment.js)
- **Límite de tamaño**: Máximo por archivo antes de comprimir
- **Compresión automática**: Gzip en producción
- **Limpieza por edad**: Elimina logs antiguos según maxAge
- **Tracking**: `.winston-audit.json` para gestión de archivos

### Formato de Logs

**Desarrollo** (legible, con colores):
```
[2025-01-28 14:30:25] [AI-SDK] [DEBUG] Model provider loaded
{
"provider": "openai",
"models": 15
}
```

**Producción** (JSON estructurado):
```json
{
"timestamp": "2025-01-28T14:30:25.123Z",
"level": "error",
"category": "ai-sdk",
"message": "Model provider failed",
"provider": "openai",
"error": "API key invalid"
}
```

### Winston Transports

Levante usa los siguientes transports de Winston:

1. **Console Transport** (solo desarrollo):
- Formato legible con colores ANSI
- Errores a stderr, resto a stdout

2. **DailyRotateFile Transport** (siempre):
- Todos los logs (nivel configurado)
- Rotación automática

3. **DailyRotateFile Transport** (solo producción):
- Solo errores (level: error)
- Retención más larga (3x maxAge)

### Variables de Entorno

Las variables de entorno pueden override los defaults de producción/desarrollo:

```bash
# Forzar level específico (override defaults)
LOG_LEVEL=debug

# Forzar console en producción
DEBUG_ENABLED=true

# Rotación personalizada
LOG_MAX_SIZE=20971520 # 20MB
LOG_MAX_FILES=5
LOG_MAX_AGE=14 # 14 días
LOG_COMPRESS=true
```

### Migración desde Sistema Custom

El sistema Winston mantiene compatibilidad 100% con el API anterior:
- Mismo API de logger: `logger.aiSdk.debug(...)`
- Mismas variables de entorno
- Mismo formato de LogRotationConfig
- Mismo comportamiento de timezone

**Cambios internos** (no afectan uso):
- Transports custom reemplazados por winston transports
- Rotación manejada por winston-daily-rotate-file (usa moment.js, soporta todos los formatos de fecha incluyendo segundos)
- Mismo date pattern que el sistema custom (`YYYY-MM-DD-HHmmss`)

## Log Format

Logs are formatted with timestamps, colored categories, and structured context:
Expand Down
Loading