[2026-09-28] eagle: personal/projects/balda/balda-valera.md personal/projects/balda/balda.md personal/tech/balda-go-fx-pitfalls.md
This commit is contained in:
1 parent
a74ce112a6
commit
803a53fd05
3 files changed
+121
-2
No files matched your search
@@ -53,6 +53,66 @@
|
||||
> 📌 **Как доказать, что код патча попал в образ** (образ `scratch`, shell нет): распаковать слои
|
||||
> `docker save` из `blobs/sha256/*` и грепнуть бинарник —
|
||||
> `strings …/usr/local/bin/balda | grep tool_call_id`. На OCI-образе `tar -tf` даёт ложный 0.
|
||||
>
|
||||
> ---
|
||||
> ### ✅ ВТОРОЙ PR — ФИКС MCP-ТУЛИНГА ОТПРАВЛЕН (2026-09-27)
|
||||
>
|
||||
> Чтобы закрыть обнажившийся баг `duplicate tool`, потребовалась правка **в `runtime`**, а не
|
||||
> в Балде. Отправлено **отдельным PR** — тема независима от #4.
|
||||
>
|
||||
> | Что | Значение |
|
||||
> |---|---|
|
||||
> | Форк | `mallexxx/runtime`, ветка `fix/hosted-toolsets-duplicate-endpoint` |
|
||||
> | **PR в апстрим** | **https://github.com/normahq/runtime/pull/5** |
|
||||
> | База | `main` (`12f1210`), `0` позади / `1` впереди — rebase не нужен |
|
||||
> | Коммит | `b01bdc6` |
|
||||
> | Объём | **2 файла, +263 / −0** |
|
||||
> | Патч | `agentfactory/agentfactory.go` +74; `agentfactory/duplicate_toolset_test.go` new (6 тестов) |
|
||||
>
|
||||
> **Суть фикса.** `hostedToolsets` схлопывает MCP-конфиги, различающиеся **только query/fragment**.
|
||||
> Балда регистрирует bundled-сервер дважды: `balda` (`…/mcp/balda`) и
|
||||
> `balda-session-memory-<token>` (`…/mcp/balda?ctx=<token>`). Оба отдают один список инструментов,
|
||||
> ADK пакует всё в одну карту → `duplicate tool`.
|
||||
>
|
||||
> 🔴 **Ключевое решение: выживает SCOPED-запись, не первая по алфавиту.** Её URL несёт
|
||||
> контекст-токен сессии — это строгое надмножество plain-эндпоинта. Наивный дедуп «первый победил»
|
||||
> отбросил бы токен и сломал session-scoped MCP-вызовы. Новые функции: `mcpEndpointKey`
|
||||
> (stdlib `net/url`, срезает `RawQuery` + `Fragment`) и `mcpURLIsScoped`.
|
||||
> `stdio`-транспорты возвращают `""` → **никогда не схлопываются**.
|
||||
>
|
||||
> Скип логируется — видно в проде:
|
||||
> `[mcp] skipping duplicate toolset "balda": endpoint already served by "balda-session-memory-<token>"`
|
||||
>
|
||||
> **Гейты (локально, все зелёные на закоммиченном дереве):**
|
||||
>
|
||||
> ```
|
||||
> go build ./... → exit 0
|
||||
> go vet ./... → exit 0
|
||||
> go tool golangci-lint run ./... → 0 issues
|
||||
> go test -race ./... → все пакеты ok
|
||||
> ```
|
||||
>
|
||||
> ⚠️ **Питфолл линтеров на тесте** (`duplicate_toolset_test.go:187`): `staticcheck ST1023`
|
||||
> требует убрать явный тип (`var x tool.Toolset = ts`), а `unconvert` — убрать конверсию
|
||||
> (`tool.Toolset(ts)`). Оба правы → правильное решение — **не вводить переменную вообще**:
|
||||
> `if _, ok := any(ts).(requestProcessor); ok {`. После этого импорт `adk/v2/tool` стал
|
||||
> неиспользуемым — его тоже надо убрать.
|
||||
>
|
||||
> 🔴 **CI на PR НЕ ЗАПУСТИЛСЯ** — `mergeStateStatus: UNSTABLE`, `check-runs: total_count 0`.
|
||||
> Причина: PR из **форка**, GitHub требует **ручного подтверждения** workflows владельцем репо
|
||||
> («Approve and run workflows»). Это НЕ поломка PR. Локальные гейты пройдены полностью.
|
||||
> Требуется действие Alex: открыть PR#5 и подтвердить запуск CI.
|
||||
>
|
||||
> 📌 **Развилка репозиториев (важно не путать):** фикс MCP-тулинга → `normahq/runtime` (PR#5),
|
||||
> Mattermost-транспорт → `baldaworks/balda` (PR#8). Это **разные репозитории**, у них разные
|
||||
> форки (`mallexxx/runtime` / `mallexxx/balda`) и разные клоны на диске
|
||||
> (`~/Developer/runtime-local/` — git-клон; `~/Developer/balda/` — репо Балды).
|
||||
>
|
||||
> ⚠️ **`runtime-local` существует в ДВУХ местах** и их легко перепутать:
|
||||
> | Путь | Что это |
|
||||
> |---|---|
|
||||
> | `~/Developer/runtime-local/` | **git-клон форка** `mallexxx/runtime` — здесь делаются PR |
|
||||
> | `~/Developer/balda/runtime-local/` | **копия без `.git`** для сборки образа Балды |
|
||||
|
||||
## Расположение
|
||||
- **Валера** = `balda-agent-valera-1`, конфиг: `~/Docker/balda-agent/.config/balda/config.yaml`
|
||||
|
||||
@@ -4,10 +4,24 @@
|
||||
|
||||
## Репо
|
||||
|
||||
- Upstream: https://github.com/normahq/balda
|
||||
- Upstream: https://github.com/baldaworks/balda (старое имя `normahq/balda` — редирект)
|
||||
- Fork: https://github.com/mallexxx/balda
|
||||
- Local: ~/Developer/balda
|
||||
- Ветка: `feat/zulip-transport`
|
||||
- Ветка: `feat/mattermost-channel` (PR [#8](https://github.com/baldaworks/balda/pull/8), OPEN, 8/8 CI, MERGEABLE)
|
||||
|
||||
### 🔴 Два репозитория — не путать
|
||||
|
||||
| Репо | Что там | PR |
|
||||
|---|---|---|
|
||||
| **`baldaworks/balda`** | сам бот, транспорты (Mattermost, Zulip) | [#8](https://github.com/baldaworks/balda/pull/8) Mattermost, OPEN · [#1](https://github.com/baldaworks/balda/pull/1) Zulip, merged |
|
||||
| **`normahq/runtime`** | библиотека рантайма (`agentfactory`, `hostedagent`) | [#5](https://github.com/normahq/runtime/pull/5) фикс MCP-тулинга, OPEN · [#4](https://github.com/normahq/runtime/pull/4) OpenAI tool_calls, OPEN |
|
||||
|
||||
Форки: `mallexxx/balda`, `mallexxx/runtime` — **разные**, клоны тоже разные.
|
||||
Детали по runtime-PR → [[personal/projects/balda/balda-valera]].
|
||||
|
||||
⚠️ **PR из форка: CI не запускается сам.** GitHub требует ручного подтверждения workflows
|
||||
владельцем репо («Approve and run workflows») → `mergeStateStatus: UNSTABLE` при
|
||||
`check-runs: total_count 0`. Это не поломка PR.
|
||||
|
||||
## Архитектура
|
||||
|
||||
|
||||
Reference in new issue
Block a user