Add support for uploading Markdown, Text, Word (.docx), CSV, Excel (.xlsx),
PDF, and PowerPoint (.pptx) files in addition to existing JPEG/PNG image
uploads in the spec creation and project expansion chat interfaces.
Backend changes:
- New server/utils/document_extraction.py: in-memory text extraction for all
document formats using python-docx, openpyxl, PyPDF2, python-pptx (no disk
persistence)
- Rename ImageAttachment to FileAttachment across schemas, routers, and
chat session services
- Add build_attachment_content_blocks() helper in chat_constants.py to route
images as image content blocks and documents as extracted text blocks
- Separate size limits: 5MB for images, 20MB for documents
- Handle extraction errors (corrupt files, encrypted PDFs) gracefully
Frontend changes:
- Widen accepted MIME types and file extensions in both chat components
- Add resolveMimeType() fallback for browsers that don't set MIME on .md files
- Document attachments display with FileText icon instead of image thumbnail
- ChatMessage renders documents as compact pills with filename and size
- Update help text from "attach images" to "attach files"
Dependencies added: python-docx, openpyxl, PyPDF2, python-pptx
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>