原「上传文件」入口改为「资料库」,同时出现在聊天顶部的新增页签菜单、面板内部新增菜单和空面板入口。上述位置暂时隐藏侧边任务和终端,运行管理的日志入口不变。
- 汇总
/chat/uploads/mine最近 200 项记录中的原始附件,以及当前项目现有文档目录接口。上传文本提取副本不重复展示。项目上传资料属于项目文件,不混入「我的上传」。 - 按文件修改时间/附件保存时间倒序,支持文件名及路径搜索、全部/我的上传/项目文件筛选、手动刷新。聊天结束、重新打开资料库、窗口恢复焦点时重新查询。
- 白名单保留 HTML、Markdown、文本、CSV、PDF、Office 与上传图片;排除代码后缀、依赖、源码和构建目录。项目范围沿用现有文档扫描及其数量限制,不扫描任意服务器目录。
- 最近保存的 AI 文档通过项目目录扫描发现,包括仓库根目录 HTML、DOC。没有可靠的生成者证据时统一标记「项目文件」,不将修改时间当成 AI 作者证明。未写入文件系统的聊天文本、项目外文件、未发送的临时附件不进入持久资料列表。
- 下载使用受权限检查的接口获取 Blob,保留文件名和原始字节;失败时展示错误。项目文档预览沿用已有受限预览面板,资料库不执行 HTML。
- 项目文档「关联到聊天」使用既有引用与待发送资料机制;历史上传附件读取本人原文件,再走原有上传/提取接口,遵守模型能力、数量、格式等检查,不复用失效的临时 ID。
- 切换项目或会话重建资料库,取消旧下载;重新上传结束前再次验证会话范围。列表的一类来源失败时显示明确提示,仍可查看另一类来源。
uploads/mine 和个人附件内容接口对管理员也显式传入本人 ID;管理员跨用户读取仍通过独立管理接口。项目文档查询、下载、聊天关联沿用既有项目授权。
node --test tests/chat-library.test.mjs tests/chat-document-download.test.mjs tests/chat-file-links.test.mjs:31 项通过。node tests/chat-library.browser.mjs(通过CHAT_LIBRARY_TEST_TOOLS指定独立 Playwright/esbuild 依赖目录):真实 React 组件配模拟 API,验证发现、筛选、搜索、预览回调、两类关联回调、下载文件名、403、刷新、会话切换竞态和窄面板无横向溢出。tsc --noEmit:通过。dotnet test ... --filter 'FullyQualifiedName~ChatUploadLibraryServiceTests|FullyQualifiedName~ProjectPackageDocumentTests':17 项通过,含普通用户/管理员个人上传隔离。编译仍有其他模块原有的可空性等警告。
浏览器验证使用模拟接口,不表示已在生产环境部署或验证真实账号。