0.163.0
Added
- MCP: sandbox stdio + lazy-search (BM25) + протокольные handlers (ADR Фаза 4b+5, ). Три набора улучшений для завершения покрытия MCP: sandbox для stdio-процессов, BM25-поиск по инструментам, и Roots/Sampling/Elicitation/Capabilities (завершение ADR
2026-06-30-mcp-protocol-coverage).
Фаза 4b — Sandbox stdio:
security.WrapCommandArgs(argv0, args, workDir, config)— argv-based sandbox (bwrap/sandbox-exec). В отличие от shell-basedWrapCommand, сохраняет argv-структуру для MCP stdio. bwrap: условный--unshare-netпоAllowNetwork(раньше захардкожен).- Интеграция через
transport.WithCommandFuncвMCPSession.createStdioClient— sandbox spawn с minimal env (security.BuildMinimalEnv(), не наследует полный родительский env). Manager.SetSandboxConfig+MCPSession.SetSandboxConfig— auto-detect backend (security.DetectSandboxBackend()),AllowNetwork=true(MCP-серверы обычно проксируют API).
Фаза 4b — Lazy-search (BM25):
internal/mcp/bm25_index.go— лёгкий BM25-индекс (без внешних зависимостей): tokenize name+description, IDF over corpus, score с k1=1.2/b=0.75.AddDoc/Search(query, k)— top-k tool names.- Готов для интеграции в
registerMCPToolsпри >40 tools (полная интеграция с deferred registry — отдельная задача UI/UX).
Фаза 5 — Протокольные handlers (завершение ADR 2026-06-30):
internal/mcp/roots.go—AgentRootsHandler(workspace агента как root URI).client.WithRootsHandler→ capabilities.roots декларируется.internal/mcp/sampling.go—AgentSamplingHandler(LLM-делегирование с max_tokens cap 4096, no tool-calling).client.WithSamplingHandler→ capabilities.sampling.internal/mcp/elicitation.go—DeclineElicitationHandler(decline для non-interactive sessions).client.WithElicitationHandler→ capabilities.elicitation.internal/mcp/completion.go— stub (empty completion values).MCPSession.clientOptions()— собирает handler-опции и передаёт вNewClientдля всех 3 транспортов (stdio/SSE/streamable_http). Библиотека автоматически добавляет capabilities в Initialize.
Фаза 6 — UI/DX (API client):
web/src/lib/api/endpoints.ts—oauthStatus,oauthRevoke,listGrants,upsertGrant,deleteGrantметоды.web/src/lib/api/types.ts— типMCPGrant, расширенныйOAuthAuthorizeResult(completed/status).npm run check— 0/0.
Проверки: go test ./internal/... — 0 FAIL; новые тесты: TestBM25Index_{Search,SearchGitHub,EmptyQuery,NoMatch,Len} (ранжирование, edge cases), TestContainsTool_WildcardPrefix, TestSandboxSpawn_NoSandbox (fallback); go vet + golangci-lint — 0 issues; make build-cross — проходит; npm run check — 0/0.