[2026-09-26] eagle: personal/plans/balda-mm-phase4-agents.md personal/tech/balda-executor-mcp.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 22:53:40 +06:00
1 parent 2a8706d450
commit 0c7b1f6466
2 files changed
+204 -34

No files matched your search

+52 -10
View File
@@ -16,7 +16,7 @@
| 4 | Секция «Agents» в Dashboard | ✅ активирована и проверена |
| 5 | Связка Балда → мост | ✅ конфиг `type: http`, образ 0.2.0, `tools/list` из docker-сети |
| 6 | Obsidian MCP для Балды | ✅ контейнер `obsidian-mcp` на Kraken + `type: sse` в конфиге (транспорт проверен) |
| 6a | 🔴 Инструменты MCP в сессии Балды | 🔴 **блокер:** снапшот каталога в `state.db` содержит только `builtin` → Балда «MCP не вижу». См. [[personal/tech/balda-executor-mcp]] §10g |
| 6a | 🔴 Инструменты MCP в сессии Балды | 🔴 **корень: `session_memory` выключен; при включении на Mattermost падает `/reset`** (`no session-memory classifier for "mattermost"`). См. §9.3 |
| 7 | Приёмка от аккаунта Alex | 🔴 блокер: авторизация CLI |
---
@@ -293,16 +293,58 @@ lsof -nP -iTCP:8790 -sTCP:LISTEN
- obsidian
```
См. §11 ниже.
3. 🔴 **MCP-инструменты не видны в сессии Балды.** Транспорты и сети проверены живьём
(оба сервера отвечают 200 из docker-сети), Балда стартует без ошибок и отвечает в чате —
но говорит «MCP не вижу». **Корень найден:** снапшот каталога в `state.db`
(`balda.appruntime_catalog_snapshot:*`) содержит **только `builtin`** — источники
`configured` не скомпилированы; плюс сессия закреплена за старым `RuntimeSnapshotID`.
Разбор и механика — [[personal/tech/balda-executor-mcp]] §10g.
⏳ Ждёт решения Alex: **A)** вычистить ключи снапшотов из `state.db` (рекомендовано),
**B)** полный сброс `state.db`.
3. 🔴 **MCP-инструменты не видны в сессии Балды. КОРЕНЬ НАЙДЕН (2026-09-26).**
Оказалось **не** снапшот каталога — снапшот в порядке. Самый свежий (`scope: effective`,
`runtime_catalog_snapshot:895d7905…`) содержит всё как надо:
```json
"sources":[{"kind":"builtin","name":"balda"},
{"kind":"configured-mcp","name":"executor-mcp"},
{"kind":"configured-mcp","name":"obsidian"}]
"mcp_servers":[{"name":"executor-mcp","transport":"streamable-http"},
{"name":"obsidian","transport":"sse"}]
```
**Две настоящие причины (обе исправлены в конфиге):**
**3a. Провайдер не ссылался на MCP-серверы.** Доки Balda:
`runtime.providers.<id>.mcp_servers` — серверы подключаются **через секцию провайдера**;
`balda.mcp_servers` лишь добавляет ID в сессию. Без провайдерской секции инструменты
не грузятся. Формула: `effective = bundled(balda) + runtime.providers.<p>.mcp_servers + balda.mcp_servers`.
```yaml
runtime:
providers:
deepseek:
type: openai
openai: {…}
mcp_servers: # 🔴 обязательная секция
- executor-mcp
- obsidian
```
**3b. 🔴 `balda.session_memory.enabled` — выключатель MCP-биндера, но на Mattermost
он ломает `/reset`.** Биндер создаётся как
`SessionMCPBinderAdapter{Enabled: cfg.Balda.SessionMemory.Enabled}`
(`sessionapp/module.go:191-196`). Значит MCP-инструменты в сессии включаются именно
`session_memory`, а не `balda.memory` (это разные секции!).
НО: при `session_memory.enabled: true` сброс сессии падает —
```
warn … "observe reset boundary: no session-memory classifier is registered for \"mattermost\""
→ в чате: "Could not reset this session."
```
`ScopeResolver` регистрирует классификаторы только для **telegram / slackagent / zulip**
(`preflight.go`), для Mattermost — нет. Итог: сессия не пересоздаётся, MCP не подключаются.
**Вывод:** MCP-инструменты в сессии Балды на Mattermost сейчас **недостижимы** —
упирается в отсутствие Mattermost-классификатора в `ScopeResolver`.
`session_memory` оставлен **выключенным** (иначе `/reset` не работает).
Для разблокировки нужно либо добавить `ClassifyLocatorScope` для Mattermost в апстриме,
либо перейти на канал с поддержкой (telegram/slackagent/zulip).
⚠️ Тест-пост должен идти **от админского токена** — посты от имени самого бота Балда
игнорирует (правильно): `docker exec mattermost mmctl --local token generate admin …`.
игнорирует (правильно), в логе `dropping posted event: bot not mentioned`:
`docker exec mattermost mmctl --local token generate admin …`.
И **не забывать `@balda`** в тексте поста.
4. 🔴 Логин CLI (Alex вручную) — без него сквозная приёмка невозможна.
5. 🔴 **Завести Access Application** на `agents-bridge.qentra.top` — сейчас туннель
отвечает 200 без авторизации (проверено). Защита — только `X-Bridge-Secret`.