Problem
AutoBot has no path anywhere that opens a .zip archive and ingests its members as documents. Confirmed absent: grep -rli "zipfile" across autobot-backend/media/ and autobot-backend/knowledge/ returns no hits; ALLOWED_EXTENSIONS in autobot-backend/api/knowledge.py:126 has no .zip entry; DocumentExtractor.SUPPORTED_FORMATS (autobot-backend/utils/document_extractors.py) has no zip entry either. A user with a folder of documents must upload each file individually.
Location
autobot-backend/api/knowledge.py:126 (ALLOWED_EXTENSIONS)
autobot-backend/utils/document_extractors.py (DocumentExtractor.SUPPORTED_FORMATS)
- New extractor, likely
autobot-backend/media/document/archive.py, following the existing module split in media/document/ (extraction.py, provenance.py, ocr.py)
Impact
Bulk KB uploads (a folder of research PDFs, a project's docs) require N individual uploads today instead of one zip upload — a real workflow friction for any user onboarding an existing document set.
Acceptance Criteria
Discovered During
Research pass — docs/research/document-to-markdown-conversion-pipeline.md, "What We Can Adopt" #2
Problem
AutoBot has no path anywhere that opens a
.ziparchive and ingests its members as documents. Confirmed absent:grep -rli "zipfile"acrossautobot-backend/media/andautobot-backend/knowledge/returns no hits;ALLOWED_EXTENSIONSinautobot-backend/api/knowledge.py:126has no.zipentry;DocumentExtractor.SUPPORTED_FORMATS(autobot-backend/utils/document_extractors.py) has no zip entry either. A user with a folder of documents must upload each file individually.Location
autobot-backend/api/knowledge.py:126(ALLOWED_EXTENSIONS)autobot-backend/utils/document_extractors.py(DocumentExtractor.SUPPORTED_FORMATS)autobot-backend/media/document/archive.py, following the existing module split inmedia/document/(extraction.py,provenance.py,ocr.py)Impact
Bulk KB uploads (a folder of research PDFs, a project's docs) require N individual uploads today instead of one zip upload — a real workflow friction for any user onboarding an existing document set.
Acceptance Criteria
.zipupload is unpacked and each supported member is routed through the existing per-format extractors (extract_document,DocumentParser) — no new parsing logic duplicatedmin_text_page_ratio()/max_table_pages()inmedia/document/extraction.pyfor the pattern to follow): member count, nesting depth, and total decompressed size — this is a decompression-bomb vector and ships with the caps, not as a follow-upextraction_timeout()(media/document/ocr.py) individually, not one timeout for the whole archiveDocumentExtractor.extract_from_directory)Discovered During
Research pass —
docs/research/document-to-markdown-conversion-pipeline.md, "What We Can Adopt" #2