现役版本、渠道状态与产物来源统一查 0.7.10 修复与发布记录,用户变化见发布说明。GitHub 发布、本地 MSIX、商店认证和客户端安装必须分别验证;不要用后续测试或文档提交改写已验收二进制的构建来源。CAD 工作仍暂停,本地音乐专用模块不在公开分支。
Windows 构建使用 package.json 配置和锁定引擎,需准备 MSVC。完整重建 EXE/ASAR 后由 afterSign 附加原生入口。不得关闭 GPU 或渲染器沙箱、全局重置 ACL 或按 Unknown Account 名称批量删除权限。
FlyingMouse Format(飞鼠格式)是 Windows Electron 离线文件转换器。主产品必须使用原版鼠鼠 UI;它与“鼠鼠打印”是两个独立项目,禁止跨项目修改或混合发布物。
当前技术栈:Electron 43、Windows 10/11 x64、鼠鼠 UI、中英文切换、批量转换、偏好与保存目录记忆。PDF 按原生/扫描内容分流,见 架构;OFD 仅通过 ofd-convert.js 转 PDF,不走 LibreOffice。Windows 7 SP1 x64 只通过独立 staging 派生 Electron 22.3.27,禁止降低根 manifest 的主线依赖。分渠道发布状态以 0.7.10 修复说明 为准,不能从源码版本推断已安装版本。
server.js:Express 本地转换服务、能力检测、目标格式判断、上传与下载路由。electron-main.js:启动本地服务、创建窗口、设置打包引擎路径、保存 IPC。electron-security.js:导航、外链、下载和 IPC 的同源信任策略。preload.js:向渲染器暴露最小 IPC 接口。public/index.html、public/styles.css、public/app.js:鼠鼠 UI、批量队列、进度、状态与保存交互。public/i18n.js:zh-CN / en-US 语言状态与持久化。public/conversion-preferences.js:按规范化源扩展名记忆目标格式。settings-store.js:在 Electron userData/settings.json 中原子保存最近目录。office-readiness.js、store-engine-cache.js、store-engine-worker.js:Office 准备状态、Store 可写缓存与后台验证。desktop-shutdown.js、owned-tasks.js:有界退出、所属进程/Worker 收尾及临时目录身份校验。Store 默认逻辑缓存根使用 %LOCALAPPDATA%/FMF/e 和短目录名以避免 AppData 重定向后的路径溢出;完整内容键校验不得因目录缩短而删减。ocr.js、subtitles.js:带质量/方向诊断的 OCR、多页 TIFF 和字幕时间轴转换。resource-policy.js:统一图片、批量、PDF 与 OCR 资源上限和稳定错误码。text-conversion.js:统一 ATX/Fenced Turndown 与严格 CSV 解析。pdf-table-extractor.js / pdf-table-runtime.js:复杂 PDF 表格几何识别、OCR 回退与工作簿模型。ofd-convert.js:OFD(国标 GB/T 33190)→ PDF,@miconvert/ofd-to-pdf 纯 JS 链路,仅支持转 PDF 不走 LibreOffice。logger.js:主进程、服务端和渲染器共用的分级日志。win7-build-profile.js / scripts/build-win7.js:派生并构建隔离的 Windows 7 manifest;根依赖不得被改写。pe-metadata.js / scripts/inspect-pe.js:读取 PE32/PE32+ 的目标 OS 版本,发布时检查解包应用 EXE。build/icon.png:NSIS、EXE、任务栏和快捷方式的 512×512 鼠鼠图标;必须由 public/assets/mouse-format/mouse-idle.png 生成。bin/:本地转换引擎。除 bin/avs3/ 外被 Git 忽略,换机时必须单独准备。mouseMascot 和鼠鼠状态图;打包图标必须是鼠鼠,不得恢复闲鱼版橙色闪电或中性 UI。textContent,禁止重新引入动态 innerHTML。zh-CN 或 en-US 后使用 flyingmouse.language.v1 持久化。pdf-classifier.js 分类;扫描/混合页尝试 docstructure。DOCX 仅在 pdf.js 允许的错误码下回退 OCR 段落并提示版式损失;扫描 XLSX 不伪造成功或输出空表。docengine 并检查内容完整性,失败回退 PDF.js/OCR;原生 PDF → XLSX 使用 pdf-table-extractor.js 的文字坐标/表格模型。轻量版、Win7、macOS 的可用引擎不同,必须按能力检测呈现目标与降级说明。csv-parse 7.0.2(修复已知原型处理问题),禁止退回按换行拆分的简易解析器。resource-policy.js 按设备内存计算有限预算;上传由 upload-budget.js 按实际临时盘空间累计约束并保护输出余量。超额明确拒绝,不跳页、不自动降采样。高级结构识别使用 STRUCTURED_PDF_LIMITS 与 Python DEFAULT_LIMITS,含 500 页、单页 50MP、每批最多 8 页且累计 100MP(144 DPI);JS 串行分批且限制同时运行的完整识别请求。不得宣称无限制或保证任意文件 1:1 还原;Sharp 不得使用 limitInputPixels: false。contextIsolation: true、nodeIntegration: false、sandbox: true。127.0.0.1 origin。/downloads/<id>;外部打开只允许无凭证 HTTPS。path.basename 收敛。node_modules/pdfjs-dist 加载;旧版入口回退不得借用父目录依赖,所有 getDocument 调用保持 isEvalSupported: false。Electron 启动时设置:
FLYINGMOUSE_RUNTIME_DIRFLYINGMOUSE_FFMPEG_PATHFLYINGMOUSE_AVS3_DECODER_PATHFLYINGMOUSE_LIBREOFFICE_PATHFLYINGMOUSE_LOG_FILE开发或测试还可覆盖 FLYINGMOUSE_PDFTOPPM_PATH、FLYINGMOUSE_TESSDATA_PATH 和 PORT。
桌面日志位于 %APPDATA%\FlyingMouse Format\debug.log。独立运行 node server.js 时默认写 %TEMP%\flyingmouse-format-debug.log。
npm install
npm run desktop
npm test
npm run test:ci
npm audit --omit=dev
npm run dist
npm run dist:lite
npm run dist:appx
node scripts/build-win7.js --prepare-only
npm run dist:win7
node scripts/inspect-pe.js "output/win7-stage/dist/win-unpacked/FlyingMouse Format.exe"
npm audit --omit=dev --prefix output\win7-stage
沙箱限制 Node 子进程时可能出现 spawn EPERM;这不是转换代码失败。真实转换测试和打包应在普通 Windows PowerShell、cmd 或 CI 中运行。
完整本地测试依赖外置引擎。.github/workflows/ci.yml 在 main push 或 PR 时恢复锁定引擎并运行 npm test;普通修复分支 push 不触发。release.yml 在 v* 标签或手动 dispatch 时进入构建/发布流程。引擎资产必须同时匹配 ci-engines-v1.json 与原生引擎锁;不要跳过锁校验。
build.files 是显式白名单;新增被服务端引用的根目录 JS 模块时必须同步加入。package.json 打包 FFmpeg、AVS3、LibreOffice、Poppler、tessdata、Pandoc、docengine 和 docstructure 等引擎;windows-lite-profile.js 仅移除高级 docstructure。Windows OCR core 保留在 app.asar.unpacked/node_modules/tesseract.js-core,不得另加一份重复资源;macOS 资源由自己的配置定义。signExecutable: false,不要使用 signAndEditExecutable: false,后者会跳过图标嵌入。npm run dist 当前生成 NSIS 安装包和 dist/win-unpacked;不要假设 APPX 已同步生成。settings-store.js 的 EXDEV 跨卷回退,同卷仍用原子 rename。%LOCALAPPDATA%\FMF\e\lo-<32位内容摘要前缀>,避免 AppData 重定向后路径过长;完整内容键与文件清单校验仍保留。先显示窗口,再在自有独立子进程复制、校验与验证。只有 Office 任务等待,失败要可诊断;仅复用与内容及验证收据相符的缓存。见 架构。native/launcher.cpp 兼容启动入口;afterSign 完成原 Electron EXE 的 ASAR 绑定后,将其改名为 FlyingMouse Format Runtime.exe,再安装主入口。禁止在 afterPack 提前替换。需要 MSVC x64/Windows SDK;Win7 派生禁用该 hook,macOS 跳过。Store 打包同时验证入口、Runtime、ASAR 和公开功能边界。npm audit --omit=dev、ASAR 文件、引擎资源、EXE 产品版本、安装包 SHA-256、鼠鼠内嵌图标、桌面快捷方式、GitHub 资产摘要。AV3A 和平台加密音频不在当前输入能力表内;遗留 AVS3 资源或环境变量不能作为转换支持的证据,不得沿用已移除路径的 AV3A 发布门槛。dist/win-unpacked 是本机开发/验收入口;公开交付使用 Release 安装包。win7-package-lock.json 经 npm ci 重建 output/win7-stage/;子进程必须绑定当前 Node,源码复制须兼容 Unicode 路径。产物写入精确的 dist/FlyingMouse Format-Setup-<version>-win7-x64.exe;脚本必须锁定 staging manifest/lockfile,校验本地 builder 与 extraResources 各自在允许根目录内的 canonical containment 并拒绝 reparse point;测试可以清理 staging,不得覆盖标准安装包或移动既有版本标签。win7-build-profile.js 过滤出能在 staging 自洽运行的文件;数量以当次日志为准。根专属真实引擎/打包管线测试由主线执行,不能把历史测试数量当成当前验收。https://github.com/LaoFeng-mouse/flyingmouse-format.git。README.md:面向用户的中英文介绍、下载与格式范围。docs/ARCHITECTURE.md:运行架构、状态和数据边界。docs/RELEASE.md:本机测试、打包、桌面同步与 GitHub 发布清单。docs/HANDOFF.md:恢复工作入口;分渠道状态、来源与剩余风险指向 docs/REPAIR-0.7.10.md。docs/privacy-policy.html:面向用户和 Microsoft Store 的隐私政策。docs/微软商店上架清单.md、docs/上架材料包.md:商店渠道资料;外部审核状态必须写绝对日期并注明是否已现场复核。