From a3416315c5e525612daae20e5864e8326a68b725 Mon Sep 17 00:00:00 2001 From: Markov Date: Wed, 25 Feb 2026 18:36:34 +0100 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=BD:=20=D0=B0=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=B0=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20+=20=D0=BF=D0=B0=D0=BC=D1=8F?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENT-PLAN.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 AGENT-PLAN.md diff --git a/AGENT-PLAN.md b/AGENT-PLAN.md new file mode 100644 index 0000000..e5530d8 --- /dev/null +++ b/AGENT-PLAN.md @@ -0,0 +1,61 @@ +# AGENT-PLAN.md — План работ: Агенты + Трекер + +## Фаза 1: Конфиг агента (agent.json → минимум) + +### 1.1 Разделение конфигов +- [ ] **agent.json** — только подключение: `token`, `tracker_url` +- [ ] **config.json** — внутренняя конфигурация LLM: `api_key`, `model`, `provider`, `prompt` (override) +- [ ] Picogent `resolveConfig()` — читает оба файла, мержит +- [ ] Убрать дублирующиеся поля (name, slug, capabilities) из agent.json + +### 1.2 Трекер: расширить auth_ok +- [ ] WS `auth_ok` возвращает полный AgentConfig: name, slug, capabilities, model, prompt, chat_listen, task_listen, max_concurrent_tasks +- [ ] Picogent мержит remote config с локальными override-ами (config.json приоритетнее) + +### 1.3 Горячее обновление конфига +- [ ] Новый WS event `config_updated` — трекер → агент при изменении через UI +- [ ] Picogent обрабатывает event, обновляет runtime config без рестарта + +### 1.4 Systemd template для мульти-агент +- [ ] `picogent@.service` — шаблонный unit: `ExecStart=node ... /opt/agents/%i/` +- [ ] `systemctl start picogent@coder`, `systemctl start picogent@reviewer` + +--- + +## Фаза 2: Память агента (ТРЕБУЕТ РЕСЕРЧ) + +### Вопросы для исследования +- [ ] **Per-project vs shared memory?** — стоит ли разделять память по проектам? Агент работает на нескольких проектах — смешивать или изолировать? +- [ ] **Структура памяти** — как организовать memory/: + - `memory/global/` — общие знания, уроки + - `memory/projects/{slug}/` — контекст конкретного проекта + - `memory/sessions/` — автокомпакция сессий +- [ ] **Загрузка контекста** — как агент выбирает какую память загружать? По текущему проекту? По задаче? Всю? +- [ ] **Размер контекста** — лимиты на bootstrap context (сейчас 15K chars). Как масштабировать при росте памяти? +- [ ] **Компакция** — автоматическая очистка старой памяти? Суммаризация? +- [ ] **Shared knowledge** — если два агента работают на одном проекте, должны ли они видеть память друг друга? + +### Возможные решения +- **Вариант A:** Flat memory — всё в `memory/`, агент сам разбирается (текущее) +- **Вариант B:** Per-project dirs — `memory/projects/{slug}/`, загружается по контексту задачи +- **Вариант C:** Semantic search — агент ищет по памяти через embeddings (тяжёлое решение) +- **Вариант D:** Project files as memory — документы проекта на трекере = общая память команды + +--- + +## Фаза 3: UUID-based workspace (отложено) + +- [ ] Workspace именуется по `member.id` (UUID) вместо slug +- [ ] Симлинки `agents/coder → agents/{uuid}` для удобства +- [ ] Переименование slug не ломает workspace + +--- + +## Решения (принятые) + +| Решение | Дата | +|---------|------| +| agent.json = token + tracker_url, config.json = LLM config | 2026-02-25 | +| Трекер = source of truth для routing/orchestration | 2026-02-25 | +| Агент не раскрывает api_key трекеру | 2026-02-25 | +| Directory mode для мульти-агент (уже работает) | 2026-02-25 |