feat(presenter): 导入已有版本的 DTO 与三条后台线程(M223)

core 的能力(M221)接进 presenter 的 IPC 面:

- dto/adopt.rs:AdoptCommand / AdoptEvent / 六种视图 / AdoptState + AdoptStage。
  全部 Serialize+Deserialize,**不 import 任何 core 类型**(契约 §5.4);
- host/adopt.rs:spawn_scan(adopt::scan)/ spawn_adopt(plan 或 adopt),结果经
  HostTask::Adopt 回流;core 的候选/计划/结果/失败逐字段搬进 DTO,problems[] 一条不少;
- CoreHost 加 adopt_epoch(每条命令 +1、关面板也 +1),连点与迟到的回程不会点亮面板;
- 登记成功后补一次 refresh_instances(新实例这一拍就出现在列表里)。

运行目录只从 plan()/adopt() 的返回值取(缺省档可能带 -2 后缀,只有 core 知道用了哪个);
target_notes() 的原文随 AdoptPlanView::notes 上屏,界面不另写一份后果话术。
This commit is contained in:
AskaEth committed 2026-11-10 19:37:23 +08:00
1 parent 9ab909d01c
commit 26e4fbb91d
6 files changed
+1012

No files matched your search

+7
View File
@@ -14,6 +14,8 @@
mod accounts;
mod addon;
// M223:导入已有版本(扫描 / 预检 / 确认三条后台线程)
mod adopt;
mod dispatch;
mod engine;
pub mod env;
@@ -106,6 +108,10 @@ pub struct CoreHost {
/// 一眼能看出「这是旧任务的」,于是既不会被取消掉的安装重新点亮面板,也不会串到下一轮安装
/// (两轮安装同时存在时,旧任务的事件曾经把新任务的进度条顶掉)。
install_epoch: u64,
/// 「导入已有版本」的代次(M223):每条 scan/preview/confirm 命令 +1,关面板也 +1。
///
/// 只认最新代次的回程事件——用户连点或点了关闭之后,旧线程带回来的结果不许再把面板点亮。
adopt_epoch: u64,
/// 自更新(M159):检查结论 / 应用状态 / 更新域偏好。
update: update_state::Runtime,
}
@@ -160,6 +166,7 @@ impl CoreHost {
chat: MockBackend::default(),
install_cancel: None,
install_epoch: 0,
adopt_epoch: 0,
update,
};
if refresh {