Перейти к содержимому

Архитектура

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