90 lines
4.8 KiB
Markdown
90 lines
4.8 KiB
Markdown
# 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 |
|