AACWorkflow Docs
Разработчикам

Архитектура

Техническая архитектура платформы AACWorkflow.

Обзор

AACWorkflow — это бэкенд на Go + монорепозиторий фронтенда (pnpm workspaces + Turborepo) с общими пакетами.

┌──────────────┐     ┌──────────────┐     ┌──────────────────┐
│   Next.js    │────>│  Go Backend  │────>│   PostgreSQL     │
│   Frontend   │<────│  (Chi + WS)  │<────│   (pgvector)     │
└──────────────┘     └──────┬───────┘     └──────────────────┘

                     ┌──────┴───────┐
                     │ Agent Daemon │  (запускается на вашем компьютере)
                     │Claude/Codex/ │
                     │OpenClaw/Code │
                     └──────────────┘

Структура проекта

ДиректорияНазначениеТехнология
server/Бэкенд на GoChi router, sqlc для БД, gorilla/websocket
apps/web/Фронтенд на Next.jsApp Router
apps/desktop/Десктопное приложение на Electronelectron-vite
apps/docs/Сайт документацииFumadocs
packages/core/Headless бизнес-логикаZero react-dom, повторное использование на всех платформах
packages/ui/Атомарные UI-компонентыZero бизнес-логики, на основе shadcn
packages/views/Общие бизнес-страницыZero next/\*, zero react-router imports
packages/tsconfig/Общая конфигурация TypeScript
packages/eslint-config/Общая конфигурация ESLint

Структура бэкенда

  • Точки входа (cmd/): server (HTTP API), aacworkflow (CLI + демон), migrate
  • Обработчики (internal/handler/): Один файл на домен (issue, comment, agent, auth, daemon)
  • Реальное время (internal/realtime/): Hub управляет WebSocket-клиентами, сервер транслирует события
  • Аутентификация (internal/auth/ + internal/middleware/): JWT (HS256), middleware устанавливает заголовки X-User-ID и X-User-Email
  • Жизненный цикл задач (internal/service/task.go): постановка в очередь → взятие → запуск → завершение/неудача
  • SDK агентов (pkg/agent/): Единый интерфейс Backend для выполнения промптов через Claude Code или Codex
  • Демон (internal/daemon/): Автоматически обнаруживает CLI-инструменты, регистрирует среды выполнения, опрашивает задачи
  • База данных: PostgreSQL 17 с pgvector, sqlc генерирует код из SQL в pkg/db/queries/

Архитектура фронтенда

Шаблон внутренних пакетов

Все общие пакеты экспортируют сырые .ts/.tsx файлы (без предварительной компиляции). Бандлер потребляющего приложения компилирует их напрямую. Это даёт zero-config HMR и мгновенный переход к определению.

Границы пакетов

  • packages/core/ — zero react-dom, zero localStorage, zero UI-библиотек. Все Zustand-хранилища находятся здесь.
  • packages/ui/ — чистые UI-компоненты, zero бизнес-логики.
  • packages/views/ — zero next/*, zero react-router-dom. Использует NavigationAdapter для маршрутизации.

Управление состоянием

  • TanStack Query владеет всеми серверными данными (задачи, пользователи, рабочие пространства)
  • Zustand владеет всеми клиентскими данными (выбор UI, фильтры, черновики)
  • React Context зарезервирован для сквозной инфраструктуры (WorkspaceIdProvider, NavigationProvider)

Поток данных

Browser → ApiClient (shared/api) → REST API (Chi handlers) → sqlc queries → PostgreSQL
Browser ← WSClient (shared/api) ← WebSocket ← Hub.Broadcast() ← Handlers/TaskService

Мультитенантность

Все запросы фильтруются по workspace_id. Проверки членства контролируют доступ. Заголовок X-Workspace-ID направляет запросы в правильное рабочее пространство.