0.152.0

Added

  • MCP: конфигурация через JSON вместо формы + расширение покрытия протокола. Настройка MCP-серверов переведена с громоздкой многопольной формы на вставку стандартного JSON-конфига (как в Claude Desktop claude_desktop_config.json, Cursor mcp.json, VS Code .vscode/mcp.json). Реализовано полное покрытие возможностей протокола MCP, которых раньше не было (раньше — только Tools). См. ADR docs/adr/2026-06-30-mcp-json-config.md и docs/adr/2026-06-30-mcp-protocol-coverage.md; инструкция — docs/mcp-config.md.
  • JSON-ввод/вывод. Парсер internal/mcp/config.go принимает оба формата (auto-detect): bulk {"mcpServers":{...}} и single-server {...}. Вывод type при отсутствии (есть command→stdio; есть url→streamable_http или sse по path-эвристике /sse). TaigaClaw-расширения верхнего уровня (tool_timeout, oauth_*, tls_skip_verify, tls_ca, allow_local) — стандартные клиенты их игнорируют, конфиг остаётся совместимым. Эндпоинты POST /api/v1/mcp-servers/import (bulk, со skipped/error построчно), GET /api/v1/mcp-servers/export (все серверы, реальные секреты, admin-only), GET /api/v1/mcp-servers/{id}/export (один сервер). Round-trip импорт→экспорт даёт стандартный JSON.
  • UI. Страница /settings/mcp: кнопка «Импорт JSON» → модалка с JSON-редактором (textarea), превью распарсенных серверов, кнопки «Вставить пример: stdio/remote», компактная панель TaigaClaw-расширений (oauth/tls/timeout применяются ко всем серверам вставки), валидация на клиенте (web/src/lib/utils/mcpConfig.ts — зеркало Go-парсера). На карточке сервера — «Экспорт JSON» (в буфер, с fallback для HTTP/старых браузеров через execCommand); в шапке — «Экспорт всех» (скачивание mcp-servers.json). Старая многопольная форма удалена.
  • Безопасность (SSRF + TLS). SSE/streamable_http-транспорт MCP теперь использует кастомный *http.Client с dial-time SSRF-guard (security.NewSafeHTTPClientFromGetterWithTLS) — раньше использовался дефолтный клиент библиотеки без проверки IP. Новые поля сервера: tls_skip_verify (InsecureSkipVerify), tls_ca (PEM root CA, добавляется к системному пулу), allow_local (расширяет guard до loopback + RFC1918 + link-local + ULA, с сохранением глобального denylist; cloud-metadata блокируется всегда). SSE/HTTP fail-closed при nil guard. Санитизация: tls_ca маскируется в API-ответах (как env/headers/oauth-токен).
  • Покрытие протокола. MCPSession теперь обнаруживает Resources/Prompts при подключении (через client.GetServerCapabilities(), с pagination — библиотека mcp-go сама следует nextCursor). Resources экспонируются агенту как tool mcp_<server>_resources (с валидацией URI против enum и bounds на размер описания — защита от чatty/злонамеренного сервера), gated by AllowedTools. Listing-эндпоинты GET /mcp-servers/{id}/resources и /prompts. Logging: серверные notifications/message → slog (всегда Info, data truncated до 512 байт — hostile-сервер не может эскалировать severity). Уровень логирования запрашивается через SetLevel (info). ReadResource/GetPrompt методы сессии.
  • Миграция 098 (SQLite + PG, обратимая): колонки tls_skip_verify, tls_ca, allow_local со значениями по умолчанию (FALSE/’’/FALSE) — существующие серверы не меняют поведение.
  • Проверки: go test ./internal/... — зелёно; npm run check — 0 ошибок; npm test — 549/549; make build-cross — 6 бинарников; golangci-lint — 0 замечаний; цикл ocr review — критические security/correctness-замечания устранены.