返回 DeepSeek-Reasonix
MANUAL_SESSION_CREATION_RECOVERY.zh-CN.md
根目录 / docs / MANUAL_SESSION_CREATION_RECOVERY.zh-CN.md
1 # 手动创建会话的恢复机制
2
3 [English](MANUAL_SESSION_CREATION_RECOVERY.md)
4
5 ## 任务所有权与自动恢复
6
7 新建、启动恢复、手动重试统一交给本进程创建管理器。中断后沿用原操作、会话及
8 Topic ID。跨进程执行权限仍由原有操作系统创建锁决定,不能根据锁文件存在、
9 大小、时间或诊断状态判断可以接手。
10
11 遇到锁被占用时,任务保留在队列,按带小幅抖动的 0.5、1、2、4、最多 5 秒间隔
12 重试。启动恢复等待标签恢复完成后启用,并每 30 秒补扫。前端查询只展示进度。
13 取得锁后重新读取最新 revision 和 phase。失败任务需要用户明确重试,并绑定其
14 观察到的 revision;迟到重试不能重新启动一次更新的失败。
15
16 运行时构建成功后,结果保存遇到暂时性错误只重试保存,并保留原结果和创建锁,
17 不会重复构建。身份冲突、不兼容状态和不支持的数据库版本显示为阻塞。已归档或
18 删除的会话不会因为恢复创建而重新激活。
19
20 后台恢复不会改变当前选中的会话;新的导航操作优先于较早的新建完成回调。
21 Topic 激活在发布就绪事件前确定终态,后台清理尚未完成时再次切换,也不会
22 对已经就绪的请求重复发送取消事件。
23
24 ## 进度与诊断
25
26 现有 Begin/Get/List/Retry 接口参数不变,响应增加可选 `progress`。
27 状态包括排队、执行、等待锁、存储重试、阻塞和停止中。阶段、阶段开始时间、
28 耗时、下次重试时间、慢操作标记和脱敏错误码仅用于观察。缺失或未知字段必须
29 安全展示为等待恢复或状态暂不可用。
30
31 恢复提示区域提供“导出创建诊断”,对应 `ExportManualCreationDiagnostics()`。
32 JSON 包含构建标识、本进程当前任务快照和最近 256 条阶段/尝试事件。导出不读取
33 会话数据库,不包含消息、附件、供应商配置或原始服务日志;不会推测其他进程的
34 PID 和执行阶段。服务日志也记录阶段变化及限频慢阶段警告。
35
36 单阶段 30 秒无进展只触发诊断提示,不会因此释放锁或抢占任务。遇到卡住时,
37 请在重启应用前从发生问题的进程导出报告,并记录触发操作及大致时间。报告可以
38 缩小阻塞范围,不能直接证明所有历史 `starting` 记录的根因。
39
40 ## 退出与兼容性
41
42 退出先冻结新任务,停止补扫和重试,取消构建并等待实际执行结束,之后才关闭
43 共享资源。构建换代关闭旧通知通道,不代表旧执行者已经停止。等待超过 10 秒时,
44 退出返回可重试失败并保留资源和任务所有权,不能提前关库或报告干净退出。
45 被退出中断的创建保留为下次启动可恢复状态。本次不新增用户取消新建入口。
46
47 SQLite 格式、锁路径、身份算法及持久化 `reserved/starting/ready/failed` 状态
48 保持不变。只更新 phase/error,保留未知 JSON 字段。本地进度不写入创建记录。
49 旧客户端可忽略新增响应字段,新客户端可以读取旧记录。
50
51 ## 验证
52
53 在 Desktop 独立 Go 模块内运行:
54
55 ```sh
56 go test -race . -run 'TestManualCreation|TestComposerRestart|TestShutdownServiceFailure|TestArchiveLastVisibleSession' -count=1
57 node ../scripts/desktop-windows-go-tests.mjs --all
58 ```
59
60 测试使用隔离目录和真实子进程锁,覆盖持锁者退出、两个管理器竞争、等待期间
61 revision 变化、只重试结果保存、构建换代后的实际结束、退出所有权、存储复用、
62 未知字段和归档后新建。Windows x64 与 macOS 均需原生执行;交叉编译不能证明
63 原生锁和退出行为通过。
64
65 前端测试包括恢复提示、纯文本发送、输入框退出持久化和导航顺序。
66 `node bench/manual-creation-recovery.mjs` 使用真实组件及模拟宿主,在 Chromium
67 中验证交互。使用本机 Chrome 时可设置 `CHROME_EXECUTABLE`。该浏览器测试不代表
68 原生文件保存对话框已验证。
69
69 lines MARKDOWN