金表(rebase 到 M161 后重写这一段):**采用 main 的拆分边界**——`golden/tail.rs`
(`InstancesLaunchReset` 之后、`PackTargetNew` 之前)+ `golden/tail2.rs`
(`PackInstanceName` 之后),不再保留本分支原来那套 205/221 的切法。
本分支新增的 6 条 key(`ContentOffline{Title,Body}`、`ContentDetail{Fetching,FetchFailed,
VersionCount,VersionLine}`)按 `Key::ALL` 的顺序并入 main 的 `tail.rs`;
`golden.rs` 的 `rows()` 保持 `GOLDEN + tail + tail2` 三段串联。(`len()` 与内容同源的修正
在下一个提交里。)
其余两处(本来就是我推过线的,现在回到红线内):
- `import/phase.rs` 397 → **400**:只动注释(`Resolved` 的两个摘要字段共用一句、
`resolve`/`settle` 的文档各并一行),代码语义零改动。
- `import/pipeline.rs` 399 → **400**:把补全注记(14 行)搬到 `import/complete.rs` 的
`Completion::note(lead)` 旁边,管线只剩一行 `complete_and_note(...)`;
`scan_pack_online` 也改用同一个 `note("预检前")`——注记文案由两处变一处。
同时删除与 `import/complete.rs` 重复的 `online::complete::{complete_files, CompletionSummary}`
(生产零调用方),只留生产在用的 `identity_of`。
64 lines
3.4 KiB
Rust
64 lines
3.4 KiB
Rust
//! Mod 与整合包:加载器安装(Fabric/Quilt/NeoForge/Forge)、整合包双格式导入导出、
|
||
//! 本地 Mod 管理、CurseForge / Modrinth 客户端。
|
||
//!
|
||
//! 设计定稿:`DevDocs/PlanDoc/08-mod-and-recommend.md`(决策 D10)。
|
||
//! 安全要点:整合包路径穿越双检;AI 推荐走「结构化过滤在前 + LLM 排序在后 + 来源链接防幻觉」。
|
||
//!
|
||
//! # 当前公共面
|
||
//!
|
||
//! - [`loader`](P2 · M32):加载器安装——官方元数据 → 带 `inheritsFrom` 的 loader 版本 JSON
|
||
//! → 补库清单,落盘与实例登记复用 `core::game::install`(M27)。
|
||
//! - [`pack`](P2 · M110):整合包的**格式无关模型**与**格式扩展点**——CF / Modrinth / MultiMC
|
||
//! 三种格式的探测与读取、CF / mrpack 的渲染与导出、zip 安全读取(穿越双检 / 符号链接 /
|
||
//! 条数体积上限)。
|
||
//! - [`import`](P2 · M111):**导入管线**——三种格式 → 实例目录:跨段落地、overrides 三方
|
||
//! 合并(保用户改动)、两阶段补全与失败分级、临时目录 + rename/journal 回滚、结构化报告。
|
||
//! 导出(M112)另起模块。
|
||
//! - [`export`](P2 · M112):**导出管线**——实例目录 → `.mrpack`(优先)/ CF `manifest.json`。
|
||
//! 逐文件判定「能否被远程替代」(Modrinth SHA-1 + CF 指纹),判定不了的**内联进 `overrides/`**
|
||
//! 并逐条进报告;`.disabled` 用路径后缀;`game`/`dependencies` 从实例快照取。
|
||
//! MultiMC/Prism **只导入不导出**(有意省略)。
|
||
//!
|
||
//! - [`online`](P2 · M162):**在线内容源**——先只做匿名可用的 Modrinth(`/v2/search` /
|
||
//! `/v2/project` / `/v2/project/{id}/version` / `/v2/version_file/{hash}`)。网络出口只有
|
||
//! `Transport` 一个 trait(生产实现走 `core::download` 的引擎);下载走引擎并**复核
|
||
//! sha1 + sha512**;远端条目补全按 sha512 反查 sha1,补不出照旧如实计数。
|
||
//! CurseForge 需要 `x-api-key`,本轮不碰(见模块文档的「留的缝」)。
|
||
//!
|
||
//! 规划中:本地 mod 管理(D10 §3)、CurseForge 客户端(§5)。
|
||
|
||
pub mod export;
|
||
pub mod import;
|
||
pub mod loader;
|
||
pub mod online;
|
||
pub mod pack;
|
||
|
||
pub use export::{
|
||
export_instance, ExportFile, ExportReport, ExportRequest, FileClass, FileReason, RemoteCatalog,
|
||
RemoteHit,
|
||
};
|
||
pub use import::{
|
||
import_pack, scan_pack, scan_pack_online, ConflictChoice, ConflictDecisions, ConflictFile,
|
||
ConflictPolicy, ImportConflict, ImportError, ImportErrorKind, ImportProgress,
|
||
ImportProgressSink, ImportReport, ImportRequest, ImportScan, ImportStage, ImportStatus,
|
||
ImportedFile, MissingFile, PackBaseline, PackFetcher, RejectedComponent,
|
||
};
|
||
pub use loader::{
|
||
LoaderError, LoaderErrorKind, LoaderInstallPlan, LoaderKind, LoaderPlanInput, LoaderRelease,
|
||
LoaderSource, LoaderSupport,
|
||
};
|
||
pub use online::{
|
||
download_verified, ArtifactFetcher, ContentType, Downloaded, EngineArtifactFetcher,
|
||
EngineTransport, Modrinth, OnlineError, OnlineErrorKind, ProjectDetail, ProjectHit, SearchPage,
|
||
SearchQuery, SortIndex, Transport, Version, VersionFile, VersionQuery, MODRINTH_API,
|
||
};
|
||
pub use pack::{
|
||
EnvSupport, PackArchive, PackError, PackErrorKind, PackFile, PackFormat, PackLimits,
|
||
PackLoader, PackManifest, PackOverrides, PackRegistry, PackResult, PackSide,
|
||
};
|
||
|
||
#[cfg(test)]
|
||
pub(crate) mod temp;
|
||
#[cfg(test)]
|
||
mod tests;
|