# Автоматическое разрешение зависимостей в ZSVO

Теперь твой пакетный менеджер может автоматически находить и устанавливать зависимости без внешних инструментов!

## 🚀 Новые возможности

### 1. Автоматическое разрешение зависимостей
```bash
# Установить пакет с автоматическим поиском зависимостей
zsvo install --auto-resolve-deps myapp.pkg.tar.zst

# Пакетник найдет все зависимости в указанных директориях и установит их в правильном порядке
```

### 2. Рекурсивное разрешение
- Пакетник анализирует зависимости каждого пакета
- Находит зависимости зависимостей
- Строит правильный порядок установки (топологическая сортировка)
- Устанавливает все пакеты одной транзакцией

### 3. Поиск в нескольких директориях
Пакетник ищет зависимости в:
- `work-dir/packages/` (пакеты, собранные из исходников)
- `/var/cache/packages/` (глобальный кэш пакетов)
- `$ROOT/var/cache/packages/` (кэш в корневой директории)

## 📋 Как это работает

### Пример сценария:
```
myapp.pkg.tar.zst
├── Зависимости: libssl, zlib
libssl.pkg.tar.zst  
├── Зависимости: libcrypt
zlib.pkg.tar.zst
├── Зависимости: libc
libcrypt.pkg.tar.zst
├── Зависимости: libc
```

**Результат:** Пакетник установит пакеты в порядке:
1. `libc` (базовая зависимость)
2. `libcrypt` (зависит от libc)
3. `zlib` (зависит от libc)
4. `libssl` (зависит от libcrypt)
5. `myapp` (зависит от libssl, zlib)

## 🔧 Технические улучшения

### Новые архитектурные компоненты:

1. **DependencyResolver** (`pkg/deps/resolver.go`)
   - Топологическая сортировка зависимостей
   - Поддержка альтернативных зависимостей (`pkgA | pkgB`)
   - Проверка версий и ограничений

2. **PackageRepository** (`pkg/installer/repository_adapter.go`)
   - Абстракция для доступа к пакетам
   - Поддержка разных источников пакетов

3. **PathValidator** (`pkg/security/path_validator.go`)
   - Защита от path traversal атак
   - Валидация имен файлов
   - Кросс-платформенная безопасность

4. **Typed Errors** (`pkg/errors/errors.go`)
   - Структурированные ошибки с контекстом
   - Коды ошибок для лучшей обработки
   - Поддержка цепочек ошибок

## 🧪 Тестирование

Все новые функции покрыты тестами:
```bash
go test ./pkg/deps -v          # Тесты зависимостей
go test ./pkg/installer -v     # Тесты установщика  
go test ./pkg/security -v      # Тесты безопасности
go test ./pkg/errors -v        # Тесты ошибок
```

## 💡 Использование в коде

```go
// Создать installer с автоматическим разрешением
installer := installer.NewInstaller("/")

// Установить с поиском зависимостей
err := installer.InstallWithAutoResolve(
    []string{"myapp.pkg.tar.zst"},
    []string{"/path/to/packages", "/var/cache/packages"},
)

if err != nil {
    if errors.IsErrorCode(err, errors.ErrCodeDependencyMissing) {
        fmt.Println("Не найдена зависимость:", err)
    }
    return err
}
```

## 🎯 Преимущества

- **Без внешних зависимостей** - все реализовано внутри ZSVO
- **Надежность** - транзакционная установка с откатом
- **Безопасность** - валидация путей и проверка целостности
- **Гибкость** - поддержка разных источников пакетов
- **Производительность** - кэширование и параллельная обработка

Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!
