mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-08-29 19:42:37 +00:00
* docs(channels): design DingTalk multi-image delivery * docs(channels): plan DingTalk multi-image delivery * fix(channels): retain all DingTalk rich-text images * feat(channels): carry ordered prompt images * feat(channels): send all prompt images over ACP * feat(channels): persist all channel images in daemon sessions * fix(channels): clean up failed daemon image uploads * fix(channels): deliver channel images on older daemons and unknown MIME types * fix(channels): harden channel image delivery against malformed and rejected turns - Drop image entries missing data/mimeType in resolvePromptImages so one malformed attachment degrades to a prompt without the image instead of throwing a TypeError that kills the whole turn (restores the pre-diff legacy-guard behavior for out-of-contract extension adapters). - Require the image/ MIME prefix in channelImageName so non-image types whose tail spells a known extension (audio/png) are skipped with a warning instead of tripping the daemon store's name/content-type check and failing the turn. - Roll uploaded images back when the daemon definitively rejects prompt admission (DaemonHttpError on the admission request, local prompt-queue limit), matching the webui client; admitted-turn errors and transport failures keep the uploads because the daemon may already reference them. - Upload prompt images concurrently like the webui path, preserving input order and the existing rollback contract. - Log failed attachment removals during rollback via sanitizeLogText. - Point CHANNEL_IMAGE_EXTENSIONS at the daemon store's set as source of truth; document the ordered images contract in the README. * fix(channels): skip oversized channel images and pin review gaps (#9922) * fix(channels): keep channel image delivery within daemon admission limits (#9922) - Skip channel images whose base64 decodes to zero bytes before uploading: the daemon store rejects empty images with 400, which failed the whole turn instead of degrading by omission. - Bound the inline fallback for daemons without session_attachments: apply the same per-item admission gate and keep the aggregate base64 payload under the daemon's 10mb prompt-body limit, so multi-image turns against older daemons degrade by omission instead of failing with 413. - Reject oversized images from the base64 length before allocating the decoded buffer, so several oversized images no longer allocate their full decoded payloads concurrently before being discarded. - Tag the skip log lines with the session id so operators can correlate a skipped image to its channel session. * fix(channels): close channel image size-gate padding undercount (#9922) The pre-decode size estimate subtracted trailing '=' padding even when the input length does not complete a quantum; Node's lenient base64 decoder ignores such stray padding, so malformed input decoding to the 8 MiB limit plus one byte slipped past the gate and the daemon's 413 then failed the whole turn. Subtract padding only for multiple-of-4 input so the estimate is a strict upper bound. Also give the skip reason a caller-supplied label so the inline fallback for daemons without session_attachments names the inline budget instead of an attachment-store limit those daemons do not have. * fix(channels): roll back uploads on pre-admission cancel * fix(channels): roll back channel images when cancelled before prompt admission (#9922) Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> * fix(channels): preserve daemon session client compatibility --------- Co-authored-by: qwen-code-ci-bot <qwen-code-ci-bot@users.noreply.github.com> Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> Co-authored-by: qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| assets | ||
| design | ||
| developers | ||
| e2e-tests | ||
| images | ||
| plans | ||
| superpowers | ||
| users | ||
| verification/abort-controller-refactor | ||
| _meta.ts | ||
| index.md | ||