1.6.0
Added (#397)
- Проброс файловых вложений в подагента — новый параметр
attachmentsтулаspawn(массив путей относительно workspace, ≤ 8; #397). Мотивация: сценарий «text-only родитель делегирует разбор изображений vision-специалисту» был нерабочим — граница spawn передавала только текст,prepareChildRunсобирал дочерние сообщения как{Role, Content}и отбрасывал мультимодальные Parts, инструментов с image-частями нет: подагент получал только текст и не видел картинку. Теперь: валидация путей fail-fast (spawnAttachmentsFromParams):safeWorkspacePathанти-escape + symlink-containment против канонического workspace (EvalSymlinks; вFileAttachment.Pathкладётся канонический относительный путь — symlink-компоненты раскрыты, подмена ссылки между spawn и стартом run’а не меняет читаемые байты), сниффинг содержимого для заявленных изображений (mislabel → путь-заметка вместо data-URL-400), image-кап 5 MiB (maxAttachmentImageBytes, паритет с #388; не-изображения не капаются — инструменты ребёнка имеют свои лимиты); вprepareChildRun(единая точка для sync и async) вложения проходят vision-гейт по модели ребёнка (profile.ModelID/ дефолт агента + его провайдер;resolveChildImageGate— общая точка для фидбека и инъекции): image-части встраиваются инлайном черезimagePartsFromAttachmentsвctxBuilder.CurrentParts(конверсия сообщений теперь переносит Parts; чтение — через открытый один раз дескриптор, пин inode против TOCTOU), всё остальное (не-изображения, text-only модель) — текстовой заметкойattachmentNote; ответ spawn сообщает сплит-вердиктattachments_delivered(image-пути, инлайн best-effort) +attachments_by_path, либоattachments_text_only— родительская модель знает, дошло ли. Провайдеры не менялись: OpenAI-compat и Anthropic уже несут image-части в user-сообщениях. Стык с #396: правильные vision-метки реестра — условие сценария (glm-5.3 больше не получает картинку инлайном и не падает 400; glm-5.3-flash видит её в подагенте). ПопутноimagePartsFromAttachments(chat-путь #388) получил best-effort symlink-containment (не активируется только когда сам workspace неканоникализуем — без регрессии на бинд-маунтах).
Review (#397)
- ocr review — находки и решения см. в комментарии. Проверки:
go test ./... -count=1,golangci-lint run ./...(0),go vet,make build-cross(6 платформ) — зелёные; фронт не менялся (схема тула — только для LLM). Тесты:TestSpawnAttachmentsFromParams(валидация/escape/лимиты),TestSpawn_AttachmentsForwardedToVisionChild_Sync/AsyncиTestSpawn_AttachmentsTextOnlyChild_Sync(энд-ту-энд черезrequestCaptureProvider: image-part в последнем user-сообщении ребёнка / только заметка),TestSpawn_AttachmentsInvalidPathFailsFast.