Files
agentik-desktop/README.md
T

11 KiB
Raw Blame History

agentik-desktop — дизайн десктопного клиента

Десктопный клиент агента agentik (Jetpack Compose Desktop). UI общается с агентом через опубликованную библиотеку pw.binom.agentik:client — она даёт готовые Agent / Conversation, живой поток событий и interrupt() для кнопки «Стоп».

Это пока только дизайн, не код приложения.

Что где лежит

approved/ — принятое. Это решение, на него опираемся в реализации.

approved/001-sidebar-utility.html            # ОСНОВА: привычный мессенджер
approved/004-settings-agents.html            # настройки агентов + проверка связи
approved/005-new-chat-picker.html            # модалка «Новый диалог»
approved/006-groups-manage/                  # группы: 4 файла по состояниям
approved/006-groups-manage/1-list.html       #   Группы: изменить, удалить, добавить
approved/006-groups-manage/2-add.html        #   новая группа
approved/006-groups-manage/3-edit.html       #   изменение и удаление
approved/006-groups-manage/4-delete.html     #   удаление: диалоги остаются
approved/README.md                           # что одобрено и когда

sketches/ — предложения. Не решение, а варианты и черновики.

sketches/002-rail-voice-first/index.html     # голос — главное действие
sketches/003-three-pane-command/index.html   # три панели + состояние агента
sketches/004-settings-agents/index.html      # черновик настроек агентов
sketches/005-new-chat-picker/index.html      # черновик модалки нового диалога

BORROW-FROM-ASSISTENT.md — что берём из ai/assistent (приёмы, плагины, версии), а что не берём (архитектура, экраны, дизайн — своё). MIC-ASR-SEARCH.md — библиотеки для микрофона и распознавания: своё готовое (mic-kmp, asr-kmp, vad-kmp), вместо копирования кода из assistent. STORAGE.md — где что хранится: хранилище делаем абстракцией, реализация — SQLite, настройки — JSON. Три отдельные абстракции (сообщения / настройки / снимок списка), почему SQLite, что менять в API (превью и число непрочитанных). CACHE.md — кэш сообщений на клиенте: что для него есть в библиотеке, схема загрузки «только новое», где может порваться. THEMES.md — цветовые темы: цвета не пишем в коде, берём из схемы. Тем будет несколько, поэтому ни одного цвета числом. MARKDOWN-SOURCE.md — откуда брать готовую отрисовку Markdown (файлы и адреса). REQUIREMENTS.md — требования. Статус: накидываем, ни один пункт не обязателен к исполнению в том виде, как записан.

Одобренное

approved/ — макеты, которые пользователь принял. Это решение, на него опираемся в реализации. Отличие от sketches/: там предложения, здесь принятое.

  • 001-sidebar-utility.html — основа дизайна: привычный мессенджер, список диалогов + чат, папки («Все чаты / Работа / Дом»). Выбран как основа.
  • 004-settings-agents.html — настройки агентов: список, форма нового, проверка связи отдельным окном поверх. Одобрена 2026-09-19.
  • 005-new-chat-picker.html — модалка «Новый диалог» при нескольких ассистентах. Одобрена 2026-09-19.
  • 006-groups-manage/ — управление группами, четыре файла по состояниям. Одобрена 2026-09-19. Пояснительной панели над окном в ней нет (в sketches/005 была — это была заметка для проверки, не часть интерфейса).

Правило: одобренное живёт только в approved/. Если макет приняли — он переезжает туда, а не остаётся «выбранным» среди вариантов.

Что решено

  • Сначала десктоп, затем Android — по тем же лекалам. Десктопный клиент делаем образцом: понятный, удобный и читаемый по коду. Когда получится — Android повторяет те же решения. Поэтому цель — максимально простой код, который пользователь открывает и понимает.
  • Основа — вариант 1 (approved/001-sidebar-utility.html). Остальные остаются рядом как источник идей.
  • Стиль — тёмный, из уже принятой темы клиента assistent: фон #121218, панели #17212B, акцент #6AB2F2, текст #EBEBEB.
  • Тем будет несколько — цвета берём из цветовой схемы, не пишем числом в коде. Имена по смыслу («фон», «панель», «акцент»), чтобы смена темы ничего не ломала. В макетах числа — это нормально. Разбор и список того, что забывают: THEMES.md.
  • Узкое окно — на экране что-то одно: либо список диалогов, либо чат. Переключение кнопкой «Назад», как в Телеграме. Широкое — обе части сразу.
  • Подсказка о горячих клавишах под полем ввода убрана.
  • Счётчиков токенов и кольца заполнения не будет. В библиотеке client таких данных нет вообще: ни модели, ни отправлено/получено, ни предела контекста. Правило: нет данных — нет цифры.
  • Несколько агентов — предусмотреть. Различение: цвет или картинка на выбор. Цвет помечает диалоги агента (полоска у строки, точка у группы); картинка показывается кружком вместо цвета. Картинку клиент копирует себе, а не берёт по исходному адресу — иначе значок пропадёт вместе с файлом.
  • Markdown — показывать разметкой, а не сырыми символами. Готовый рендер лежит в репозитории ai/assistent — писать свой не надо, брать оттуда. Точные координаты файлов — в MARKDOWN-SOURCE.md.
  • Папки над списком диалогов («Все чаты», «Работа», «Дом») — часть выбранного варианта 1, не терять их при доработках.
  • Проверка связи с агентом — в отдельном окне поверх настроек: идёт → отвечает → не отвечает, с подробностями и подсказкой. Добавить агента можно только после успешной проверки.
  • Новый диалог — при нескольких ассистентах спрашиваем, в каком создавать (диалог живёт внутри ассистента, отдельно его не создать). Один ассистент — окна нет, создаётся сразу. Ноль ассистентов — кнопки «+» нет вообще.

Заимствования: только приёмы, не архитектура

Из репозитория ai/assistent берём приёмы отрисовки, плагины и версии. Архитектуру, слои, готовые экраны и окна — не берём: дизайн у нас свой, нарисованный (см. sketches/). Разбор по пунктам — в BORROW-FROM-ASSISTENT.md, там же таблица «берём / не берём».

Как смотреть

Открыть в браузере любой из файлов — каждый самодостаточный, без сборки. В четвёртом сверху переключатель состояний: список агентов, форма, проверка связи (успех и ошибка), список диалогов с двумя агентами.

Что предстоит решить

  1. Запись — по нажатию (нажал — говоришь — нажал) или на удержание.
  2. Форма показа хода работы агента в свёрнутом виде.
  3. Различение агентов: одного цвета может оказаться мало.
  4. Где хранится список агентов.
  5. Нужны ли папки для диалогов, как в мобильном клиенте, или хватит поиска.
  6. Где хранится кэш сообщений — файл или лёгкая база (см. CACHE.md).
  7. Что делать с куском прерванного ответа в кэше — иначе схема даст сбой на первом же нажатии «Стоп» (CACHE.md, п. 3.2).

Что сознательно не решается здесь

  • Откуда берётся распознавание речи. Отдельная тема, к интерфейсу не относится: в дизайне показано только место кнопки и что происходит на экране во время записи. Кто именно превращает голос в текст — решается потом. Готовые библиотеки уже найдены, см. MIC-ASR-SEARCH.md.