import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/scripts/Classes/AiGoogleCliLite - Google Gemini AI через CLI'/>

# Класс AiGoogleCliLite

Специализированная реализация класса `AiAbstract`, которая взаимодействует с ИИ Google Gemini через интерфейс командной строки (CLI) системы. Этот подход полезен в средах, где прямое использование SDK нежелательно или где используются существующие инструменты CLI.

> Для работы этой реализации требуется установленная утилита `gemini` CLI, доступная в переменной PATH вашей системы.

## Ключевые особенности

- **Работа через CLI** — выполняет запросы путем формирования и запуска системных команд оболочки.
- **Обработка длинных промптов** — автоматически создает временные файлы для передачи объемного содержимого промптов в CLI, обходя ограничения на длину командной строки.
- **Чистое выполнение** — управляет собственным временным хранилищем (`./ai-tmp`) и выполняет очистку после каждого запроса.
- **Режим YOLO** — выполняет команды со строгими флагами вывода, чтобы результаты были лаконичными и не содержали лишних рассуждений ИИ.

## Инициализация

Инициализируйте `AiGoogleCliLite`, указав ваш API-ключ и нужную модель.

**Параметры:**
- `key: string` — ваш API-ключ Google AI (передается в CLI через переменные окружения).
- `model: string` — идентификатор модели для Gemini CLI.

```typescript
import { AiGoogleCliLite } from '@dxtmisha/scripts'

const ai = new AiGoogleCliLite('ВАШ_API_КЛЮЧ', 'gemini-1.5-flash')

// Генерация ответа
const response = await ai.generate('Проверь этот фрагмент кода.')
```

## Методы

### Генерация

- `generate(contents: string): Promise<string>` — основной метод взаимодействия. Компилирует контекст во временные файлы, выполняет команду CLI и возвращает очищенный результат.

### Конфигурация

- `setKey(key: string): this` — обновляет API-ключ для последующих вызовов CLI.
- `setModel(model: string): this` — переключает идентификатор активной модели.

### Сбор контекста

- `addPrompt(prompt: string): void` — устанавливает постоянный текстовый префикс.
- `addContent(content: string): this` — добавляет текстовую часть к накопительному промпту.
- `resetPrompt(): void` — очищает постоянный префикс.
- `resetContents(): this` — очищает все накопленные части текста.

## Ограничения

- **Изображения** — в настоящее время реализация CLI не поддерживает передачу изображений (вызов `addImage` не повлияет на генерацию).
- **Окружение** — зависит от доступности функции `exec` и файловой системы для хранения временных данных.
