背景
当前 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.md、problem.txt、problem.pdf、problem.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 或报告逻辑修改。
背景
当前 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.md、problem.txt、problem.pdf、problem.docx,有明确且确定的优先级;同优先级歧义必须结构化失败。ImportedPackage对现有 Orchestrator 保持兼容;提取文本只用于 parse context,原始题面仍进入 frozen inputs。TDD / 验收
先写 Red,覆盖:PDF/DOCX 成功、PDF 空文本、DOCX 外部关系/zip-slip、超限、题面歧义、原始 SHA 不变。实现后:
并用本地生成的最小 PDF/DOCX fixture 做黑盒导入;不得依赖网络或用户机器凭据。
非目标