Skip to content

feat: 接入 PDF、Word、Excel、CSV 与 PPT 附件读取 - #97

Draft
hifizz wants to merge 1 commit into
mainfrom
codex/office-attachments
Draft

feat: 接入 PDF、Word、Excel、CSV 与 PPT 附件读取#97
hifizz wants to merge 1 commit into
mainfrom
codex/office-attachments

Conversation

@hifizz

@hifizz hifizz commented Sep 6, 2026

Copy link
Copy Markdown
Owner

背景

ThreadChat 的附件上传链路已存在,但消息输入只允许文本和图片,已有 PDF 文本解析也没有接入 Composer。办公文件需要真正进入模型上下文,并让用户核对读到了什么。

关联 #82。这是办公文件阶段切片,不关闭整个跟踪 Issue。

变更

  • 接入 PDF、DOCX、XLSX、CSV、PPTX 的选择/拖放、上传、解析、稳定消息引用、提取内容预览与原文件下载。
  • Word 保留段落、表格与脚注;Excel 保留工作表、单元格地址、日期、数字格式、公式及缓存结果;CSV 保留前导零、空值、引号与单元格换行。
  • PPT 按实际演示顺序和关系关联备注,修正通用解析器按文件编号组合页面的问题。
  • 复用 attachments.pages 保存带位置的片段,Office 的 pageCount 留空;不增加数据库迁移。
  • 客户端/服务端共享 MIME 白名单,继续检查所有权、ready 状态与 MIME 一致性。解析超限/失败明确报错;上下文截断明确标识。Office 作为文本供现有模型读取。
  • 办公解析按需加载,图片/文本路径不预先加载 Office 解析模块。

设计、API 支持核实、后续阶段与手动验收见 docs/attachments/office-input-mvp.md

验证

已通过:

  • 办公文件真实字节测试:Word 表格/脚注、PPT 打乱页序及备注编号、Excel 日期/公式/合并格/多表、CSV 特殊字符、损坏/伪装文件、上下文预算与引用所有权门禁。
  • 既有文本/图片附件、文件卡片渲染、规范化消息管线、客户端状态回归。
  • 完整 TypeScript 类型检查、改动模块 ESLint、生产构建(随机临时认证 secret、localhost base URL)。

新增统一测试入口:pnpm test:attachments

待实际环境验收

本环境没有生产数据库、R2 或模型凭据,尚未执行真实上传→持久化→付费模型调用的联调,因此先提交草稿 PR。验收步骤已写入设计文档。

仍不包含扫描件 OCR、图片/图表视觉、大表按问题检索和完整计算、旧版 DOC/XLS/PPT 解析、上传原地重试、草稿恢复与清理。公式不执行,缓存可能过期;第三方兼容端点尚未验证原生 Office 输入能力。

基于 main 7da00eaba9fb116a4ff4612b08005f51e886cd45

@vercel

vercel Bot commented Sep 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
thread-chatbot Error Error Sep 6, 2026 7:59pm UTC

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant