Skip to content

输入:支持真实 PDF/DOCX 赛题包的安全提取 #4

Description

@ZZDR1023

背景

当前 importer 只把 .md/.txt 作为题面,并仅盘点表格和图片文件;真实数学建模赛题常以 PDF/DOCX 提供题面,数据可能是 XLSX,图片也需要尺寸/格式等受限元数据。缺少安全、可审计的提取层会阻断真实题包进入现有 Orchestrator。

目标

建立不联网、有限额、可复现的赛题包盘点与题面提取能力,让 PDF/DOCX/TXT/Markdown 题面和 CSV/XLSX/JSON/Parquet/图片资产都能形成稳定 inventory,并拒绝危险或超限输入。

范围

  • 仅修改 src/input/**、输入专用 Schema(如确有必要)、tests/input-*.test.ts / tests/fixtures/input-*,以及解析依赖所需的 package.json/lock。
  • 支持题面候选:problem.mdproblem.txtproblem.pdfproblem.docx,有明确且确定的优先级;同优先级歧义必须结构化失败。
  • PDF:本地、无网络提取文本;记录页数、提取字符数、SHA-256;加页数/字节/输出字符上限;加密、损坏、空文本或工具缺失必须显式失败。
  • DOCX:只读取 OOXML 正文,不执行宏、不跟随外部关系、不展开任意嵌入对象;加压缩包条目数、解压字节和输出字符上限;拒绝 zip-slip、加密/损坏包。
  • XLSX/图片/Parquet 等数据资产继续保持原始字节不可变,只做有界元数据盘点;不得静默抽样或改写原文件。
  • symlink、路径穿越、隐藏目录和超限文件继续拒绝或忽略,并有测试。
  • ImportedPackage 对现有 Orchestrator 保持兼容;提取文本只用于 parse context,原始题面仍进入 frozen inputs。

TDD / 验收

先写 Red,覆盖:PDF/DOCX 成功、PDF 空文本、DOCX 外部关系/zip-slip、超限、题面歧义、原始 SHA 不变。实现后:

npm run check
npm run build
npm run smoke

并用本地生成的最小 PDF/DOCX fixture 做黑盒导入;不得依赖网络或用户机器凭据。

非目标

  • OCR、图片语义识别、任意压缩包递归解包;
  • ResearchGateway/OpenCLI;
  • Orchestrator、REST API、Benchmark harness 或报告逻辑修改。

Metadata

Metadata

Assignees

Labels

P1主功能或 Alpha 验收受阻,进入最近批次enhancementNew feature or request待验收代码与自动化验证通过,等待人类验收

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions