Skip to content

[BUG] 回复中引用 workDir/用户主目录之外的本地图片(如 E:\、D:\)被 sidecar 403 拦截,图片静默消失 #1401

Description

@TheSunHaorui

更快得到帮助:如果你还不确定这是不是 Bug,或想先确认使用方法,建议先到用户交流群(企业微信,二维码见 README)里提问;确定为缺陷后,请完整填写以下信息,方便复现与定位。

提交前确认

  • 我已经阅读了 README 常见问题
  • 我已经升级到最新版本后复现过这个问题
  • 我已经搜索过现有 issues,确认没有重复问题
  • 我已经隐藏截图和日志中的 API Key、Token、Cookie 等敏感信息
  • 我已在分享前检查自动生成的诊断报告或诊断包,确认其中没有不应公开的私密元数据

问题描述

助手回复里引用的本地图片,只要路径不在「用户主目录 / /tmp / 当前会话 workDir 及其 git 根」之内(例如 E:\project\render.jpg),sidecar 的 /local-file、/preview-fs、/api/filesystem/file 都会返回 403 Access denied: path outside allowed directory,前端随后直接移除 <img>,界面上没有任何提示,图片就这样消失了。
期望:能正常显示;或者至少显示一个“无权限访问该路径”的占位/提示,并提供可配置的额外允许目录。

运行环境

  • 使用方式: 桌面端
  • 操作系统: Windows
  • 系统版本: Windows 11 Pro 10.0.26200
  • 桌面端版本: v0.6.7(关于页显示已是最新)
  • 安装来源: GitHub Release
  • Bun 版本: 不适用
  • Node 版本: 不适用

Provider / 模型配置

与 Provider 无关,属于本地文件服务的路径校验问题,任何模型都能复现。

复现步骤

  1. 在工作目录为 C:\Users\<user> 的会话里,让助手在回复中用 Markdown 引用另一块盘上的图片,例如 ![x](E:/test/a.jpg),或者直接在正文写出该绝对路径。
  2. 回复渲染后图片区域为空:markdown 内联图被移除,末尾的图片画廊也不显示。
  3. 把同一张图复制到 C:\Users\<user>\ 下并引用新路径,图片可以正常显示。

是否稳定复现: 是

错误信息与日志

直接请求 sidecar 验证(端口为本机实际端口):

# 同一张图,放在不同位置
C:/Users/<user>/test.jpg                   local-file 200 / preview-fs 200 / api/filesystem/file 200
C:/Users/<user>/AppData/Local/Temp/t.jpg   200 / 200 / 200
E:/test.jpg                                403 / 403 / 403
D:/test.jpg                                403 / 403 / 403

GET /api/filesystem/file?path=E%3A%2Ftest.jpg
-> 403 {"error":"Access denied: path outside allowed directory"}

从打包后的 sidecar 看,允许判断逻辑大致如下(混淆后的函数名):

function sZ6(q){ let K=Zd(q), $=Zd(os.homedir()), z=Zd("/tmp");
  if (ss5(K,$) || ss5(K,z)) return true;
  if (B6q(K)) return true;   // VW7:只由会话 workDir / git 根 / checkpoint 改动文件动态加入
  return false; }

前端 Hj() 在 resolveImageSrc 返回 null 或加载失败时直接 e.remove() 掉 img,所以用户看不到任何报错。

诊断信息(可选)

  • 相关 Event IDs: 无
  • 已粘贴到 Issue 正文的诊断报告: 否
  • 诊断包文件附件: 无

截图或录屏

(可附:回复中图片位置为空白的截图)

补充信息

  • 典型场景:Windows 上项目和素材多数放在非系统盘(E:\、D:\)。会话 workDir 设在用户目录时,助手生成或引用的渲染图、截图全部显示不出来,用户会误以为是“模型看不了图”或者“对话不支持图片”。
  • 目前的绕行办法:把图片复制到 %USERPROFILE% 下再引用;或者把会话 workDir 设成图片所在的项目目录。
  • 建议:
    1. 在设置里加一个「额外允许读取的目录」配置项(写入 VW7 白名单);
    2. 或者把本会话中助手通过 Read/Write/Bash 实际访问过的文件所在目录自动加入白名单(checkpoint 改动文件现在已有类似逻辑);
    3. 前端在 403 时显示占位和原因,不要静默删除。
  • 可参考 [BUG] 0.5.4 整理文件夹下的放置得图片,结果显示图片以及文字说明,其中的图片显示不出来 #1240(v0.6.0 已修的图片位置问题)。本问题与之不同,是路径白名单导致的。

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions