docs/AGENT-PLAN.md

90 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENT-PLAN.md — План работ: Агенты + Трекер
## Фаза 1: Конфиг агента (agent.json → минимум)
### 1.1 Разделение конфигов ✅
- [x] **agent.json** — только подключение: `token`, `tracker_url`, `ws_url`, `transport`, `session_id`
- [x] **config.json** — LLM: `api_key`, `model`, `provider`
- [x] Picogent `loadAgentConfig()` — читает оба файла, мержит (env > config.json > agent.json)
- [x] name, slug, capabilities теперь приходят из Tracker (auth.ok)
### 1.2 Трекер: расширить auth_ok ✅
- [x] WS `auth_ok` возвращает `agent_config`: model, provider, prompt, chat_listen, task_listen, max_concurrent_tasks, capabilities
- [x] AgentConfig model: добавлены `provider`, `max_concurrent_tasks`
- [x] Picogent мержит remote config с локальными override-ами
### 1.3 Горячее обновление конфига ✅
- [x] Новый WS event `config.updated` (WSEventType.CONFIG_UPDATED)
- [x] Tracker отправляет при PATCH /members/{id} с agent_config
- [x] Picogent обрабатывает event, обновляет runtime model/provider/prompt
### 1.4 Systemd template для мульти-агент ✅
- [x] `picogent@.service`: `ExecStart=node dist/index.js /root/projects/team-board/agents/%i/`
- [x] `systemctl start picogent@coder`
---
## Фаза 2: Память агента ✅ РЕАЛИЗОВАНО
### Структура (двухуровневая, per-project)
```
agents/{slug}/
AGENT.md # инструкции (статичные)
memory/
agent.md # личные уроки, стиль (грузится ВСЕГДА)
projects/
{project_uuid}/
context.md # архитектура, решения (грузится per-task)
recent.md # последние действия (rolling window, ~20 записей)
```
> **Почему UUID, а не slug?** Slug проекта может измениться (переименование).
> UUID — immutable. Память агента не ломается при переименовании проекта.
### Загрузка контекста
1. Task приходит с `project_id` (UUID)
2. Bootstrap: `AGENT.md` + `memory/agent.md` + `memory/projects/{project_uuid}/context.md` + `recent.md`
3. Итого ~7K chars вместо 15K (экономия ~50%)
4. Кросс-проектная инфа — on-demand через MCP-тулзы, НЕ в bootstrap
### Компакция
- После завершения задачи: LLM суммаризирует сессию → 3-5 строк → append `recent.md`
- `recent.md`: rolling window, последние ~20 записей, старые вытесняются
- Weekly: LLM ревьюит `recent.md` → обновляет `context.md` (long-term)
- Сырые JSONL сессии: удалять через 7 дней (суммаризация уже произошла)
### Кросс-проектный доступ
- Агент = **member** в своём проекте, **viewer** в связанных
- Viewer = read-only (list_tasks, list_project_files через REST)
- Viewer НЕ получает WS push-события (экономия токенов)
- Три уровня контроля: AGENT.md → MCP-тулзы → API (403)
### Shared knowledge
- Project docs (README, ARCHITECTURE) = shared, живут в трекере/репо
- Personal memory = agent-only, не шарится между агентами
- Координация — через project docs или чат, не через чужую память
---
## Фаза 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 |
| Per-project память: agent.md (always) + projects/{uuid}/ (per-task) | 2026-02-25 |
| Папки памяти по UUID проекта (не slug — slug может измениться) | 2026-02-25 |
| Viewer-роль: read-only доступ к чужим проектам | 2026-02-25 |
| Viewer без WS push — только REST pull | 2026-02-25 |
| Shared knowledge через project docs, не через чужую память | 2026-02-25 |