0.134.90

Added

  • web_fetch v2.0.0 — Markdown-конвертация и метаданные: инструмент полностью переписан на github.com/PuerkitoBio/goquery. Новый параметр format (markdown по умолчанию, text — старое поведение). Markdown-режим конвертирует <h1-6>#, <a>[text](url), <ul>/<ol>-/1., <pre>```, <strong>/<em>**/_, <blockquote>>, таблицы → pipe-формат, <img>![alt](src). В начале результата добавляются метаданные страницы (Title:, Description:). В режиме text в конце добавляется секция Links: (до 30 ссылок).
  • Charset-декодирование: автоматическое определение и декодирование кодировок (windows-1251, iso-8859-*, gbk и др.) по Content-Type header и <meta charset>. Использует golang.org/x/text/encoding/htmlindex.
  • Content-Type сниффинг: если сервер не отправляет Content-Type: text/html, тип определяется по http.DetectContentType и <!DOCTYPE html>/<html> префиксу.
  • Accept-Language header: en,ru;q=0.8 — серверы отдают контент на предпочитаемом языке.

Changed

  • web_fetch.ExecuteStream удалён: фейковый стриминг (одно сообщение «Fetching…» + один результат) заменён на чистый Execute. Runner автоматически использует не-streaming путь через type assertion tool.(tools.StreamingTool).
  • Дублирование Execute/ExecuteStream устранено: единый fetch() helper для всей HTTP-логики.
  • Обрезка после парсинга: тело читается целиком (до 2 МБ ceiling), парсится полный DOM, обрезается уже текст на max_length. Раньше тело обрезалось посреди HTML → неполный DOM.
  • max_length клампится в коде (clampInt(v, 1000, 100000)) в дополнение к schema-валидации.
  • nil-guard: при ssrfGuard == nil создаётся дефолтный NewSSRFGuard(nil) (блокирует private IPs). Раньше nil полностью отключал SSRF-защиту.
  • URL экранируется в атрибуте <web_fetch url="…"> через html.EscapeString.
  • SSRF-проверка: ValidateURL + SafeHTTPClient (DialContext с DNS-проверкой + CheckRedirect с ре-валидацией) — без изменений, работает корректно.

Fixed

  • Описание инструмента: убрано ложное утверждение «http:// is auto-upgraded to https://» — auto-upgrade не реализован и не должен быть (ломает HTTP API, локальные серверы).