mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-28 06:00:38 +00:00
* fix(uploads): convert the same source version the upload saved (#6600) DeerFlowClient.upload_files copied the caller's file into the uploads directory, then reopened the original path for Markdown conversion. A save landing between the two reads left the saved upload at version A while the companion registered version B, and resolve_companion still accepted the mismatched Markdown. Snapshot convertible sources into a private temp dir up front and run both the upload copy and the conversion from that one read. The snapshot keeps the #5611 invariant (conversion never reopens a name inside the sandbox-writable uploads dir), preserves metadata via copy2, and keeps the re-upload SameFileError rejection through an explicit same-file probe before the snapshot. Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> * fix(uploads): pin the snapshot copy to one held source descriptor Review on #6621 found two gaps in the snapshot step: stat-by-name then copy2-by-name split identity from content across two path resolutions, and copy2 drops ACLs so a source readable only via ACL made the private snapshot unreadable. Open the source once, fstat it for the same-file rejection, and copyfileobj out of the held fd; restore the mtime from that same stat so the upload keeps the source's timestamps. Tests: the version-parity regression's injection now also fires when a future regression reads the caller's path during conversion, and a real macOS ACL case (mode 000 + read grant) uploads and converts cleanly. Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> * test: catch upload conversion source regressions --------- Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> Co-authored-by: Willem Jiang <willem.jiang@gmail.com>