Архитектура
Текст / голос (GPT-Live) → AppModel → CommandParser (OpenAI) → TaskOrchestrator → AgentAdapter (mock | ACP) │ │ └──────────────────── события задач ←────────────────────┘ │ BlobStateMachine → пятна (Metal-шейдер)- Ввод. Текстовая команда или делегирование голоса от GPT-Live попадает в
AppModel.handleCommand— один путь для обоих. - Разбор.
ModelCommandParserотправляет модели текст правил (commands.md) и сцену в JSON и получает намерение, id проектов, разговор и чистый текст задачи — в рамках JSON-схемы. - Оркестрация.
TaskOrchestrator(один на приложение) ведёт разговоры и очереди проектов, создаёт git worktree, применяет правила разрешений и восстанавливает задачи после перезапуска. - Агенты.
ACPAgentAdapterобщается по JSON-RPC через stdio сclaude-agent-acp/codex-acp: один процесс на вид агента, одна ACP-сессия на разговор, с папками и MCP-серверами проекта. - Обратная связь. События задач управляют состояниями пятен, панелью результата и
VoiceEvent, которые пересказывает голос.
| Путь | Что |
|---|---|
blu/App | AppModel, вход в приложение, настройки, AppIdentity |
blu/Commands | разбор команд, модель решений, каталог моделей |
blu/Prompts | встроенные тексты правил и PromptLibrary (правки пользователя, трёхстороннее слияние) |
blu/Orchestration | TaskOrchestrator, GitWorktrees |
blu/Agents, blu/Agents/ACP | протокол адаптера, ACP-клиент, маппинг разрешений |
blu/Models | Project, AgentTask, BlobColor, состояния |
blu/Persistence | SQLiteData (GRDB), схема по правилам CloudKit, синхронизация |
blu/Voice | GPTLiveVoiceSession, звук, промпт и события голоса |
blu/Floating, blu/UI, blu/Shaders | плавающие окна, панели, редакторы, Metal-шейдер пятен |
Принципы
Заголовок раздела «Принципы»- Понимать текст — работа модели. Никаких списков слов, регулярок и проверок «кончается на ?» над тем, что говорят люди или агенты; сырой текст уходит модели данными, а правило — в промпт.
- Никаких инструкций на естественном языке в коде. До моделей доходят только тексты правил; всё остальное — JSON.
- Только общие правила. Промпты не обрастают частными случаями под тестовый сценарий.
- Решения записываются в
docs/DECISIONS.md, планы — вdocs/ROADMAP.md.