MobileVibe - Описание проекта
Обзор
MobileVibe — это гибридная среда разработки для iOS, которая превращает мобильные устройства в мощные рабочие станции для разработки. Она сочетает эффективность интерфейса в стиле терминала с интуитивностью современного SwiftUI, позволяя разработчикам писать код, сотрудничать и управлять репозиториями на ходу с помощью рабочих процессов на базе ИИ.
Бизнес-функциональность
Основное ценностное предложение
MobileVibe устраняет разрыв между средами разработки на десктопе и мобильной доступностью, предлагая:
- Полнофункциональную среду разработки на устройствах iOS
- Помощь в разработке на основе ИИ с автономным выполнением задач
- Бесшовную интеграцию с GitHub для управления репозиториями и контроля версий
- Двойной режим интерфейса, ориентированный как на опытных пользователей, так и на обычных разработчиков
Ключевые функции
1. Архитектура двойного интерфейса
Режим терминала
- Интерфейс в стиле CLI для опытных пользователей
- Прокручиваемая история команд и буфер вывода
- Прямое взаимодействие с ИИ-ассистентом через командную строку
- Расширенные возможности агентных рабочих процессов
- Управление файлами и репозиториями
Режим SwiftUI
- Главная панель: Обзор репозитория с лентой активности и быстрыми действиями
- Чат с ИИ-ассистентом: Разговорный интерфейс с переключением режимов
- Браузер репозиториев: Обнаружение репозиториев GitHub с поиском и фильтрацией
- Проводник файлов: Иерархический просмотр файлов с просмотром содержимого
- Браузер различий: Просмотр и одобрение/отклонение подготовленных изменений
- Настройки: Управление API-ключами и аутентификация GitHub
Оба режима используют одно и то же базовое состояние и сервисы, что позволяет бесшовно переключаться без потери контекста.
2. ИИ-ассистент для разработки
Поддержка нескольких провайдеров
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Google (Gemini)
- DeepSeek
Два режима работы
Стандартный режим ассистента
- Прямое разговорное взаимодействие с ИИ
- Ручное прикрепление файлов и управление контекстом
- Ссылки на файлы через @-упоминания в чате
- Q&A в реальном времени и объяснения кода
Расширенный агентный режим
Продвинутые автономные рабочие процессы на базе LangGraph-Swift:
- Общение: Общие диалоги с ИИ
- Кодирование: Автономные изменения кода для одной задачи с использованием инструментов
- Самокорректирующийся цикл обратной связи
- Оценка качества перед завершением
- Автоматическое чтение и запись файлов
- Планирование: Оркестрация сложных многошаговых задач
- Архитектурное планирование с детальными планами действий
- Требуется одобрение пользователя перед выполнением
- Механизмы повторных попыток и обработка ошибок
- Итеративный контроль качества
3. Интеллектуальное управление контекстом файлов
- Автоопределение: Автоматически идентифицирует ссылки на файлы в сообщениях
- Умное кэширование: Кэширует содержимое файлов для уменьшения API-вызовов
- @-Упоминания: Введите @имяфайла, чтобы прикрепить файлы к беседам
- Предварительный просмотр и инспектирование: Просмотр содержимого файлов перед отправкой ИИ
- Контекстная осведомленность: ИИ-ассистент получает полный контекст файлов
4. Интеграция с GitHub
Управление репозиториями
- Просмотр и поиск публичных/приватных репозиториев
- Клонирование и переключение репозиториев
- Создание и управление ветками
- Просмотр метаданных репозитория (звезды, язык, последнее обновление)
Контроль версий
- Подготовка изменений файлов, сделанных ИИ
- Просмотр различий с унифицированным просмотрщиком diff
- Пакетные операции одобрения/отклонения
- Коммит изменений с пользовательскими сообщениями
- Отправка в удаленные репозитории
Аутентификация
- Поток GitHub OAuth
- Поддержка Personal Access Token
- Безопасное хранилище в связке ключей
5. Управление сессиями
- Локальная персистентность: Все беседы и история команд хранятся на устройстве
- История сессий: Возобновление предыдущих сессий кодирования
- Поддержка нескольких сессий: Переключение между различными проектами
- Сохранение вывода: Полная история вывода команд сохраняется на мобильном устройстве (не в памяти ИИ или облаке)
Архитектура кода
Архитектурные принципы
1. Организация на основе функций
Кодовая база следует структуре на основе функций, где связанные компоненты сгруппированы вместе:
Features/
├── Home/ # Панель управления и обзор
├── AIAssistant/ # Интерфейс чата
├── Repository/ # Просмотр репозиториев
├── FileExplorer/ # Навигация по файлам
├── DiffBrowser/ # Просмотр изменений
├── Settings/ # Конфигурация
└── Terminal/ # Интерфейс CLI
Каждая функция содержит свои собственные Views, ViewModels и Models, способствуя модульности и поддерживаемости.
2. Архитектура основных сервисов
Дизайн слоя сервисов
- Внедрение зависимостей на основе протоколов: Все сервисы реализуют протоколы для тестируемости
- @MainActor Сервисы: Все сервисы работают на главном акторе для потокобезопасности
- Async/Await: Современные паттерны конкурентности повсюду (без коллбэков)
- Singleton-доступ: Большинство сервисов доступны через .shared для глобального состояния
Ключевые сервисы
Services/
├── AI/
│ ├── AIService # Интеграция ИИ с несколькими провайдерами
│ └── FileEditService # Централизованная подготовка файлов
├── Agent/
│ ├── AgentService # Оркестрация рабочих процессов LangGraph
│ ├── AgentPrompts # Шаблоны промптов для узлов
│ ├── AgentProtocol # Типобезопасный JSON-протокол
│ └── AgentResponseParser # Парсинг чистых JSON-ответов
├── Command/
│ └── CommandInterpreterService # Выполнение команд терминала
├── Conversation/
│ └── ConversationService # Управление историей сообщений
├── FileContext/
│ └── FileContextService # Умное обнаружение и кэширование файлов
└── GitHub/
└── GitHubService # Интеграция с GitHub API
3. Управление состоянием
AppState (Общее глобальное состояние)
- ObservableObject, доступный во всем приложении
- Управляет текущим репозиторием, веткой, информацией о пользователе
- Отслеживает режим интерфейса (Терминал vs SwiftUI)
- Координирует состояние навигации
- Синхронизируется между режимами Терминала и SwiftUI
ViewModels (Состояние для конкретных функций)
- У каждой функции есть своя ViewModel (ObservableObject)
- Управляет локальным состоянием UI и взаимодействиями пользователя
- Общается с сервисами через протоколы
- Примеры: AIAssistantViewModel, FileExplorerViewModel
AgentState (Состояние рабочего процесса)
- Поддерживает состояние на протяжении агентных рабочих процессов
- Отслеживает сообщения, результаты инструментов, этапы планирования
- Управляет прогрессом оркестрации
- Обрабатывает циклы обратной связи оценки
4. Архитектура системы агентов
Фреймворк LangGraph-Swift
Система агентов построена на рабочем процессе на основе графа с состоянием с тремя основными путями выполнения:
Пути выполнения
-
Путь общения: START → router → chatting_llm → END
-
Путь кодирования одной задачи: START → router → coding_llm ⇄ tool_executor → evaluator ⇄ coding_llm → final_responder → END
- Самодостаточные задачи кодирования с циклом обратной связи
-
Путь многошагового планирования: START → router → planning_llm → plan_review → orchestrator ⇄ worker_llm ⇄ tool_executor → evaluator ⇄ orchestrator → final_responder → END
- Сложные задачи с одобрением плана пользователем и итеративным выполнением
Узлы агента
| Узел |
Назначение |
| Router |
Классифицирует запросы как CHATTING, CODING или PLANNING |
| Chatting LLM |
Обрабатывает беседу без инструментов |
| Coding LLM |
Выполняет кодирование одной задачи с использованием инструментов |
| Planning LLM |
Разбивает сложные задачи на пошаговые планы |
| Plan Review |
Страж: Требует одобрения пользователя перед выполнением |
| Orchestrator |
Управляет выполнением многошагового плана и повторными попытками |
| Worker LLM |
Выполняет отдельные шаги одобренных планов |
| Tool Executor |
Запускает инструменты: readFile, writeFile, listFiles, askUser |
| Evaluator |
Контроль качества: Проверяет работу, запрашивает исправления (макс. 3 раунда) |
| Final Responder |
Генерирует дружественные для пользователя сводки завершения |
Архитектура JSON-протокола
Вся коммуникация агента использует структурированный JSON-протокол для типобезопасности:
{
"action": "TOOL|COMPLETE|STATUS|EVALUATE|PLAN",
"tool": { "name": "...", "parameters": {...} },
"status": { "type": "SUCCESS|FAILURE", "message": "..." },
"evaluation": { "decision": "APPROVED|NEEDS_REVISION", "feedback": "..." },
"response": "...",
"steps": [...]
}
Преимущества:
- Типобезопасный парсинг через Swift Codable
- Единая точка парсинга с валидацией
- Универсальная поддержка провайдеров ИИ
- Обработка ошибок и отладка
5. Стратегия обработки ошибок
Унифицированный enum AppError
enum AppError: Error {
case noAPIKey(provider: String)
case networkError(Error)
case rateLimitExceeded(retryAfter: TimeInterval)
case githubAuthenticationFailed
case repositoryNotFound(String)
case toolExecutionFailed(String)
case maxRetriesExceeded(step: Int)
case fileTooLarge(String, size: Int)
case tooManyFiles(count: Int)
case timeout
case cancelled
}
Логика повторных попыток
- Свойство
shouldRetry: Определяет, является ли ошибка временной
- Свойство
retryDelay: Предлагает время ожидания (2-60 секунд)
- Встроенные механизмы повторных попыток в оркестраторе (по умолчанию: 2 попытки/шаг)
- Дружественные для пользователя сообщения об ошибках с предложениями по восстановлению
6. Персистентность данных
Core Data
- Управление сессиями (SessionEntity)
- История команд (SessionCommandEntity)
- Журналы вывода (SessionOutputEntity)
- Правильные значения по умолчанию и nil-coalescing для опциональных свойств
Keychain
- Безопасное хранение API-ключей
- Сохранение токена доступа GitHub
- KeychainService обрабатывает все операции безопасности
7. Архитектура компонентов
Повторно используемые UI-компоненты
Components/
├── UI/
│ ├── ActionButton # 4 стиля кнопок
│ ├── StatusIndicator # 6 типов статуса
│ ├── QuickActionCard # Плитки панели управления
│ └── ErrorBanner # Отображение ошибок
├── Chat/
│ ├── MessageBubble # Сообщения чата
│ ├── InputToolbar # Многострочный ввод
│ ├── FileContextPill # Прикрепленные файлы
│ └── FilePreviewSheet # Модальный просмотр
├── Files/
│ ├── FileContentView # Общий рендеринг
│ └── FileRow # Элементы дерева
└── Diff/
└── DiffView # Унифицированный просмотрщик diff
Принципы дизайна:
- Единая ответственность: Каждый компонент имеет одну четкую цель
- Композиция вместо наследования: Создание сложных UI из простых компонентов
- Управляемый props: Внешние данные через параметры, внутреннее состояние минимальное
- Повторное использование: Общие, настраиваемые компоненты, используемые во всех функциях
8. Архитектура навигации
Централизованная навигация
- NavigationRouter: Управляет состоянием навигации во всем приложении
- MainNavigationView: Корневой контейнер навигации
- Поддерживает как программную, так и управляемую UI навигацию
- Координируется между режимами Терминала и SwiftUI
9. Потокобезопасность
- @MainActor Сервисы: Все сервисы работают в главном потоке для безопасности состояния
- Async/Await: Структурированная конкурентность повсюду
- Изоляция акторов: Предотвращает гонки данных
- Обновления ObservableObject: Всегда в главном потоке
Технологический стек
- Язык: Swift 5.9+
- Фреймворк: SwiftUI
- Персистентность: Core Data
- Безопасность: Keychain Services
- Интеграция ИИ: REST API с несколькими провайдерами
- Фреймворк агента: LangGraph-Swift
- Async: Swift Concurrency (async/await)
- Управление зависимостями: Swift Package Manager
Используемые паттерны проектирования
- MVVM (Model-View-ViewModel): Разделение UI и бизнес-логики
- Паттерн репозитория: Абстракция доступа к данным GitHub/API
- Слой сервисов: Инкапсуляция бизнес-логики
- Программирование, ориентированное на протоколы: Тестируемость и гибкость
- Модель состояния: Оркестрация рабочих процессов агента
- Паттерн наблюдателя: ObservableObject для реактивного UI
- Внедрение зависимостей: Внедрение сервисов на основе протоколов
- Паттерн команды: Интерпретация команд терминала
Функции обеспечения качества
- Самокорректирующийся агент: Узел оценки обеспечивает циклы обратной связи (макс. 3 итерации)
- Одобрение плана пользователем: Сложные задачи требуют явного подтверждения перед выполнением
- Система просмотра различий: Все изменения файлов подготавливаются для просмотра пользователем перед коммитом
- Механизмы повторных попыток: Автоматическая повторная попытка для временных сбоев
- Типобезопасный парсинг: JSON-протокол с валидацией во время компиляции
- Восстановление после ошибок: Изящная деградация с дружественными для пользователя сообщениями
Эта архитектура позволяет MobileVibe предоставлять надежную, масштабируемую и поддерживаемую мобильную среду разработки, сохраняя при этом качество кода и опыт разработчика.