为什么 Octopus-SI-OS 重启后工作不丢失?Run 持久化与恢复机制剖析

【免费下载链接】Octopus-SI-OS

A self-evolving agentic OS. A new architecture for agent execution, built on operating-system principles, with the harness as a path toward superintelligence.

项目地址: https://gitcode.com/gh_mirrors/oc/Octopus-SI-OS
点击查看 免费下载

如果你正在使用 Octopus-SI-OS 这款自进化的 agentic OS,一定遇到过这样的场景:任务执行到一半,重启了整个运行环境——再打开时,之前的工作竟然还在。这不是魔法,而是它的 Run 持久化与恢复机制 在起作用。这篇文章将为你剖析 Octopus-SI-OS 如何做到"重启不丢状态",以及背后的 append-only 台账设计。

💡 TL;DR:在 Octopus-SI-OS 里,一个"任务"(Run)不是进程,而是磁盘上的数据。所有状态落在三处:Run 记录 JSON、追加式 movement 台账、内容寻址 blob。重启时,运行时会重放台账、重建"已消费的检查点"、恢复丢失的出站结果行——进程内存里什么都没存,所以也没有可丢的东西。

🧩 先分清:什么是 Run("任务"其实是一个数据文件)

很多 agent 框架里的"会话"活在进程内存里,进程一死就没了。Octopus-SI-OS 的设计词典里有句关键定义:

Run —— A durable execution record: a worker, an environment, checkpoints. Data, not a process. (Run 是一份持久化执行记录:一个 worker、一个环境、若干检查点。它是数据,不是进程。)

见 docs/glossary.md 中的术语表。在桌面客户端里,你在侧边栏看到的每一个 Task 就对应一个 Run,后续消息通过新的 checkpoint 继续同一个 Run:

Octopus-SI-OS 客户端 Tasks 界面:每个任务对应一个持久化 Run

每个 Run 落盘为一个 JSON 文件,位于 ~/.octopus/state/runs/<run>.json。它的结构非常简单直观,核心字段定义在 RunRecord 结构体:

字段含义
idRun 的唯一标识
worker这个 Run"穿上"的 worker(其他框架口中的 agent)
status只能是 running 或 idle
checkpoints[]每个检查点:等什么、输出去哪、可读什么
active_checkpoints[]当前生效的检查点列表

也就是说,"任务做到哪了"这个事实,天然就是磁盘上的一份 JSON——进程只是它的读者。

🖥️ 操作系统视角:为什么进程内存不可靠

Octopus-SI-OS 架构对比:典型 agent 循环 vs 操作系统式系统

对比左边的"典型 agent 循环"(Context → Model → Tools → Observation 一个转圈的内存过程),Octopus 把执行状态搬到了"操作系统"的位置:目标、完成的工作、挂起的等待,全部是磁盘数据而非进程状态。官方架构文档对此有一段直白的表述:

There is no recovery subsystem. This follows from intent, obligation, and memory living in files rather than in a running loop. (没有恢复子系统——因为意图、义务和记忆都住在文件里,而不是运行中的循环里。)

这句话的潜台词就是本文标题的答案:你不需要恢复,因为从来没有东西只存在于内存里。

📦 三层持久化:Run 记录、Movement 台账、内容寻址 Blob

Octopus-SI-OS 的持久化分三层,职责清晰:

层位置角色
Run 记录~/.octopus/state/runs/<run>.json"我是谁、做到哪"(意图与检查点)
Movement 台账ledger/movements.jsonl"发生过什么"(唯一事实来源)
内容寻址 blobledger/blobs/<BLAKE3 哈希>"内容是什么"(按哈希寻址、天然去重)

其中最关键的是 movements.jsonl 台账:它是追加式(append-only)、逐行刷盘、可重放的日志,每一行记录一次"artifact 在两个接口之间的移动"。客户端 Dashboard 的 Movements 页面就是它的可视化读取器,重启前后你都能看到完整的移动历史:

Octopus-SI-OS Movements 仪表盘:movement 台账的可视化读取,包含恢复后重记的行

台账的健壮性细节体现在 DurableLog 的打开逻辑:打开文件时会先扫描已提交的行,然后调用 discard_torn_tail 裁掉崩溃时可能写了一半的"撕裂尾巴",再以追加模式重新打开。换句话说,即使上次是断电导致的非正常退出,日志本身也能安全自愈。而 ledger-index.sqlite 这类索引只是可随时删除重建的缓存——删掉它什么都不会丢,下次启动会从台账零重建。

Octopus-SI-OS 接口边界:跨越接口的是 artifact,movement 台账记录 from→to 与溯源元数据

🔄 重启时到底发生了什么:五步恢复流程

运行时启动时,会按固定顺序执行一系列恢复阶段,事件类型定义在 DaemonBootEvent:

  1. 打开台账并投影 —— 扫描 movements.jsonl,校验其中引用的 grant 元数据;
  2. 重建内核索引 —— 把整本台账折进内存索引,回答"这个检查点是否已经消费过"这类幂等问题;
  3. 重建已消费检查点 —— 调用 reconstruct_spent_checkpoints_from_movements,让重启后的运行时"记得"哪些检查点已经完成;
  4. 恢复出站尾巴 —— 调用 recover_durable_checkpoint_outbound_tail:如果崩溃发生在一个结果已经产生、但对应台账行还没写下的瞬间,这里会把丢失的行补记进日志;
  5. 重建运行与 EE 投影 —— 从台账中收集所有出现过的 Run,恢复出"有哪些任务在盘上"。

这五步对应启动报告里的 checkpoints reconstructed、outbound tail movement(s) restored、durable run(s) 等字样,你启动客户端时都能亲眼看到。官方契约文档用一句话总结了这一章:

A run is rebuilt from its record and the movements recorded against it. A stopped process loses no state. (Run 由它的记录和针对它记录的 movement 重建。停止的进程不丢失任何状态。)

见 docs/contracts/LEDGER_INDEX.md 的 Restart 小节。

🔒 三个关键保证

  • 幂等性:重启后不会"重复交付"。检查点的消费历史来自台账而非内存,冷启动重放后,重复的到达会被类型化地拒绝(CheckpointSpent / StaleEpoch)。回归测试 checkpoint_coordinate_replay 专门验证了这一点:模拟崩溃后冷启动,两个已消费的检查点仍然拒收同样的 artifact。
  • 失败关闭(fail-closed)而非静默跳过。台账追加或读取失败时,运行时宁可 panic 也不跳过一行——"one index pairs with one ledger",一个索引只对应一本台账,日志被外部改写会被立即识别。
  • 进行中的工作也不丢。房间(worker environment)里启动的命令由独立的 keeper 进程托管,运行时重启后会按每次调用"恰好一次"地把结果重新投递回去,被切断的对话轮次由 provider 自己接续——见 docs/architecture.md 的 Restart and recovery 一节。

📂 相关文件导航

想看什么去哪里
Run 记录的数据模型与校验crates/octopus-run-record/src/lib.rs
追加式台账与撕裂尾巴修复crates/octopus-ledger-store/src/durable_ledger.rs
启动恢复流程(五步)crates/octopus-app/src/daemon.rs
出站尾巴恢复算法crates/octopus-app-server/src/arrival.rs
台账与索引契约docs/contracts/LEDGER_INDEX.md
Home 目录布局docs/architecture.md

✅ 总结

Octopus-SI-OS "重启不丢工作"的答案可以浓缩成一句:把状态从进程搬进文件。Run 记录 JSON 回答"做到哪了",append-only 的 movement 台账回答"发生过什么",内容寻址 blob 回答"内容是什么";索引与投影皆可丢弃重建,恢复流程只需重放日志、重建检查点消费状态、补记丢失的尾部。这套源自操作系统原理的设计,让"重启"从一次风险变成了一个普通的、可预测的启动过程。

【免费下载链接】Octopus-SI-OS

A self-evolving agentic OS. A new architecture for agent execution, built on operating-system principles, with the harness as a path toward superintelligence.

项目地址: https://gitcode.com/gh_mirrors/oc/Octopus-SI-OS
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值