0.14.0
Итерация 10 плана аудита: функциональные баги в tools — Scanner buffer, Glob, Grep, EditFile, ToolResult, MCP collisions.
Added
bufio.Scanner.Buffer(1MB, 16MB)вread_fileиgrep— поддержка строк длиной до 16 МБ (раньше падали на >64KB)- Glob через
github.com/bmatcuk/doublestar/v4— корректная поддержка**/*.go, вложенных**/sub/**/*.tsи др. - Grep
context_lines: правильная нумерация строк до совпадения (m.lineNum-len(before)+iвместо сломанной формулы) - Read-before-edit warning теперь возвращается в
tool_resultLLM (раньше игнорировался через_ = warn) - HTML→text парсинг через
golang.org/x/net/html.Parse— корректно обрабатывает<в тексте, сущности&и т.п. (раньше плоский regex ломался) MCPToolWrapperколлизии имён:Registry.RegisterMCPавтоматически добавляет суффикс_2,_3(до 99) при коллизии; первая регистрация без коллизии — без суффиксаRegistry.RegisterChecked(Tool) error— строгая регистрация с проверкой коллизий (для встроенных инструментов)validateValueвhelpers.go: добавлены веткиarray(с рекурсивной валидациейitems),object(с проверкойrequired/properties),number, целочисленность дробныхfloat64Registry.ExecuteStructured→ToolResult{Content, IsError}; не-string результаты сериализуются черезjson.Marshal(объекты MCP-инструментов и пр.)MessageToolлимитMaxMessageBytes = 64 KB— защита шины/UI/БД от выгрузки многомегабайтных сообщенийEditFileTool: подсчёт совпадений до правки, ошибка с инструкцией добавить контекст приcount > 1, новый параметрreplace_all boolдля массовой заменыBaseTool.SetName(string)— для переименования при коллизиях MCP- 26 новых тестов в
iter10_test.go: длинные строки, doublestar-паттерны, before-line numbering, count matches, replace_all, HTML-сущности и script/style stripping, MessageTool лимит, MCP-коллизии, structured ToolResult, validateValue для массивов/объектов/чисел
Changed
Registry.Registerостался обратно-совместимым (без проверки коллизий, перезаписывает); строгая семантика —RegisterCheckedextractTextFromHTMLпереписан с правильным парсером DOM; убраныstripTagи плоские regex-заменыGlobиспользуетfilepath.WalkDir+doublestar.PathMatchдля поддержки skipDirs (node_modules,.git, и пр.) совместно с глоб-паттернами
Fixed
- Падение
read_file/grepна файлах с длинными строками (>64 KB) - Неправильные номера строк в
before-секцииgrep --context_lines(формула содержалаlen(m.before)-len(m.before)) - Тихое игнорирование read-before-edit warning — LLM теперь видит предупреждение
- Уязвимость HTML-парсинга на тексте с
<и>(например, в неравенствах) - MCP-коллизии: при наличии двух MCP-серверов с одинаковыми именами инструментов второй молча перезаписывал первый