# Интерфейс работы с пользователем ## Цель интерфейса Интерфейс должен быть не просто чатом. Он должен позволять пользователю: - поставить задачу; - увидеть, как система поняла задачу; - увидеть план/граф выполнения; - выбрать режим доступа; - подключить local worker; - подтвердить действия; - наблюдать прогресс; - посмотреть логи; - открыть артефакты; - продолжить задачу после ошибки; - повторить задачу с другой моделью. ## Основные экраны ### 1. Chat / Task Console Главный экран. Слева: - список диалогов; - проекты; - активные задачи; - подключенные workers. Центр: - чат; - сообщения пользователя; - ответы assistant; - карточки планов; - карточки подтверждений; - статусы выполнения. Справа: - execution graph; - используемые tools; - выбранные модели; - стоимость; - логи; - артефакты. ## 2. Project Settings Настройки проекта: ```text Project name Default model slots Available MCP servers Available local workers Policy modes Cost limits Log level Storage paths ``` ## 3. Model Settings Пользователь может настроить: ```text weak model strong model vision model embedding model ``` Пример: ```text weak: local/qwen-coder-7b strong: local/qwen-coder-32b vision: external/gpt-vision ``` Или полностью локально: ```text weak: local/qwen-coder-7b strong: local/qwen-coder-32b vision: local/qwen-vl ``` Или без strong: ```text weak: local/model strong: disabled vision: disabled ``` ## 4. Access Modes Важно: это не запреты в коде, а выбор пользователя. Для каждого класса действий: ```text models.external mcp.remote filesystem shell sql 1c browser desktop network cost ``` режим: ```text full_auto confirm manual disabled ``` Пример: ```text filesystem = confirm shell = confirm sql = full_auto 1c = confirm external_models = manual desktop = disabled ``` ## 5. Local Worker Screen Показывает: ```text Worker name Machine name OS Status: online/offline Capabilities Allowed paths Available commands Last heartbeat Current task Version ``` Кнопки: ```text Connect worker Disconnect Edit capabilities View logs Run diagnostic ``` ## 6. Task Plan Card Когда пользователь отправляет сложную задачу, система показывает: ```text Я понял задачу так: - найти файл - прочитать код - проверить запрос - предложить исправление - применить patch - запустить проверку ``` Кнопки: ```text Run Edit plan Run step by step Use strong model Use local only ``` ## 7. Confirmation Card Если нужно подтверждение: ```text Система хочет выполнить действие: Tool: file.write Path: D:/Projects/1C/module.bsl Risk: write Preview: - будет изменено 12 строк - будет создан backup ``` Кнопки: ```text Approve once Approve for this task Approve always for this project Reject Edit policy ``` ## 8. Progress View Показывает выполнение: ```text [done] analyze request [done] build plan [running] search files [pending] read file [pending] apply patch [pending] validate ``` Для каждого шага: ```text input output model used tool used duration logs errors artifacts ``` ## 9. Result View Итог должен быть не только текстом. Типы результата: ```text chat_answer file_created file_modified patch_generated sql_executed report_created task_failed confirmation_required manual_action_required ``` Пример: ```text Задача выполнена. Изменен файл: D:/Projects/1C/CommonModule/Exchange.bsl Создан backup: D:/Projects/1C/.backups/Exchange_2026-07-03.bsl Проверка: validate_sql: success syntax_check: success ``` ## 10. Error Recovery Если задача упала: ```text Ошибка на шаге: validate_sql Причина: поле Номенклатура.Артикул не найдено Варианты: - исправить автоматически - запустить strong model - показать подробный лог - изменить запрос вручную - остановить задачу ``` ## Интерфейс сообщения Каждое сообщение assistant может содержать: ```json { "type": "assistant_message", "text": "...", "task_id": "...", "cards": [ "plan", "confirmation", "progress", "artifact", "error" ] } ``` ## Backend Status Сейчас backend уже формирует: - `plan_card` - `progress_card` - `error_card` - normalized task event DTO with optional card references Следующие карточки остаются следующими шагами: - `confirmation_card` - `artifact_card` ## Принцип Пользователь должен всегда понимать: ```text что система собирается делать что она уже сделала какие данные использовала какая модель была вызвана какой tool был вызван что изменилось в системе как откатить действие ```