Inside Rind:架构与 Worker 内核文档地图

本系列包含 9 组、52 篇中文机制文档。每篇从一个问题和一张 Mermaid 图进入,解释当前实现、关键顺序与保证范围,并附源码和测试入口。以本次整理所依据的仓库源码为准;测试链接用于追溯契约,不代表全部测试在此次文档整理中运行。这里的“无状态”特指持久会话状态以磁盘为准:Worker 仍持有运行中的任务、取消信号、队列和共享资源。

整体叙事

SurfaceCLI · Desktop · Web · Mobile ·Gateway协议与传输Worker Server会话访问 · 执行协调执行内核AgentRuntime · TurnRunner上下文组装 · 预算 · 压缩模型适配流式输出工具系统调用 · 结果 · 后台任务持久事实会话 · 工具 · 任务日志事件 · 重放 · 快照
图表源码
flowchart LR
    S["Surface<br/>CLI · Desktop · Web · Mobile · Gateway"] --> P["协议与传输"]
    P --> W["Worker Server<br/>会话访问 · 执行协调"]
    W --> R["执行内核<br/>AgentRuntime · TurnRunner"]
    R --> C["上下文<br/>组装 · 预算 · 压缩"]
    R --> M["模型适配<br/>流式输出"]
    R --> T["工具系统<br/>调用 · 结果 · 后台任务"]
    C --> D["持久事实<br/>会话 · 工具 · 任务日志"]
    T --> D
    D --> W
    W --> E["事件 · 重放 · 快照"]
    E --> P

贯穿各篇的不是“有哪些类”,而是五组设计张力:

设计张力 Rind 的回答 重点文章
多入口与单一执行语义 Surface 处理交互,Worker 用统一协议承接执行。 Surface/Worker、统一协议
长会话与低常驻负载 磁盘保存会话事实,执行容器只在需要时存在。 资源所有权、会话生命周期
完整历史与有限上下文 保留原始记录,按需投影、估算和压缩模型视图。 消息投影、ContextManager、压缩交接
长任务与单轮对话 进程事实先落盘,通知与自动续接再跨回合交付。 后台任务日志、自动续接
丰富工具与稳定接口 ToolSpec、结构化结果和双投影隔离工具差异。 工具注册、调用链、工具结果

整套文档从五个角度看同一个系统,文章只有一个归属,其他角度用阅读路线交叉引用,避免重复讲解:

角度 读者想回答的问题 对应章节
空间结构 组件放在哪里,谁依赖谁,谁拥有资源? 00、01、07
时间过程 一次请求、一个回合、一个后台任务如何开始和结束? 01、05、07
数据形态 原始历史、模型上下文、事件、快照分别是什么? 02、03
能力扩展 如何接入模型、工具、Skill、Team 和新 Surface? 02、04、05、06、07
可靠性 断连、取消、重启、超限或失败后还能保证什么? 01、03、08

00 · 系统全景与边界(5 篇)

先建立地图,再进入实现。重点是“一个引擎,多种入口”和显式依赖边界。

文章 阅读问题 主图
一张图看懂 Rind 一次请求会穿过哪些层,哪些状态会留下来? 全局结构图
Surface 与 Worker 输入、渲染、协议、执行各由谁负责?为何能复用内核? 进程边界图
分层与装配根 domain、application、runtime、infrastructure 怎样通过 bootstrap 连接而不反向依赖? 依赖图
统一协议 request、response、event、capability、method 如何形成稳定契约? 协议结构图
同协议的不同传输 stdio、WebSocket、Electron preload 的连接与关闭语义有何不同? 传输拓扑图

01 · Worker 与执行内核(9 篇)

从资源生命周期走到单轮执行,再走到事件、取消与恢复。

文章 阅读问题 主图
Worker 的一生 启动、初始化、请求、关闭分别创建和释放什么? 生命周期时序图
低负载的关键 Worker 共享资源、会话落盘、执行容器按需创建和空闲释放如何配合? 资源所有权图
每会话一条执行通道 用户回合、目标检查点、任务续接怎样竞争同一个执行位置? 仲裁状态图
一个回合的内循环 输入如何经历上下文、模型采样、工具调用,直到终止? 时序图
流式模型边界 增量文本与工具参数如何解析、限流、合批并保持顺序? 有界队列数据流图
Steering 与 Follow-up 采样前插话、完成后续接、撤回和提升各在何时生效? 双队列时序图
事件系统 域事件、协议封装、durable/incremental、session/turn ID 各承担什么职责? 事件流图
重放与重新订阅 历史光标、当前回合快照、后台任务快照如何在断连后拼回完整状态? 断线重连时序图
取消、失败与续跑 取消如何跨模型/工具/进程传播?未闭合工具调用怎样恢复且不重复执行? 失败分支图

02 · 上下文、记忆与压缩(7 篇)

这一组回答“模型究竟看到了什么”,把上下文组装与磁盘历史区分开。

文章 阅读问题 主图
指令从哪里来 基础系统提示、RIND.md、Goal/Team 指令、Skill 目录与临时消息怎样进入请求? 提示来源叠层图
ContextManager 持久消息、运行时注入、Skill、待处理输入如何构成最终模型消息? 组装流水线图
上下文预算 本地估算、服务端用量锚点、窗口余量和 context inspect 怎样避免盲目塞满? 预算分配图
何时压缩 手动、自动、上下文超长恢复为何共享管线,却由不同调用者决定是否继续采样? 触发状态图
压缩交接 历史摘要、原样保留的最近消息、工具配对、失败回退与边界校验怎样保证可续接? 压缩前后对照图
Skill 的渐进披露 元数据发现、作用域覆盖、显式激活、快照持久化如何避免每轮加载全文? 发现与激活时序图
图片进入上下文 用户上传与工具图片如何快照、存储、校验能力并适配模型请求? 图片数据流图

03 · 持久化与事实来源(5 篇)

分别解释“盘上存什么”和“运行时怎样解释这些记录”,不把聊天记录等同于模型上下文。

文章 阅读问题 主图
会话落盘结构 meta、messages、tool_calls、compactions、索引与附件各记什么? 存储布局图
原始历史到模型视图 内部消息、压缩边界、工具结果、推理内容如何投影而不改写原始记录? 投影管线图
会话的创建、恢复、分叉与删除 启动草稿为何延迟落盘?fork 复制什么,哪些运行中任务不随之复制? 生命周期状态图
后台任务日志 追加事实、Worker lease、去重、重启后的 lost 状态怎样支撑恢复? 日志与恢复时序图
用量账本 采样用量、压缩用量、会话统计与汇总报告的来源分别是什么? 数据血缘图

04 · 工具系统(8 篇)

先讲统一调用链,再讲不同工具为什么需要不同的资源与结果契约。

文章 阅读问题 主图
ToolSpec 与注册表 schema、参数归一化、可用性、执行器如何组成可扩展工具边界? 工具装配图
一次工具调用 模型输出如何解析、校验、执行、归一化、落盘、发事件,并在恢复时去重? 完整时序图
同一结果的两种视图 结构化结果、模型可见内容、终端展示、完整落盘输出、截断与分页为何分开? 双投影数据流图
文件读取与修改 分页读取、glob/grep、单点 edit、逐路径写队列、暂存后替换如何协作? 读写路径图
受控进程与后台执行 bash、task_control、进程树、输出游标、取消和超时怎样受 Worker 管理? 进程状态图
Web 搜索与抓取 搜索、抓取、会话复用与有界内容如何保持工具契约? 请求数据流图
工具中的用户问答 执行暂停、协议答复和无交互 one-shot 之间是什么关系? 问答时序图
计划不是对话 update_plan 的会话文件、快照和压缩交接怎样保持计划可见? 计划状态图

05 · 长任务、目标与协作(5 篇)

这些机制跨越单个模型回合,是“Agent 能持续做事”的主体。

文章 阅读问题 主图
后台任务状态机 命令返回、进程继续、手动读取、等待释放与最终状态如何分离? 任务状态图
自动续接 工具结果先提交、任务完成再投递通知、模型消费后再确认,如何避免丢失或重复? 提交—通知—消费时序图
持久 Goal active/paused/blocked/complete、检查点、完成证据与续接门控怎样工作? Goal 状态图
Team Team 如何作为注册表关系存在,Worker 与控制面如何分工? 控制面结构图

06 · 模型与供应商(3 篇)

解释模型差异如何止于适配层,而不是向执行内核渗透。

文章 阅读问题 主图
统一模型接口 OpenAI Chat/Responses、Anthropic、Gemini 的消息、工具、流式事件与取消如何归一? 适配层结构图
能力与目录 内建定义、远端刷新、缓存有效期、context window 与 image_input 如何决定可用能力? 能力解析图
配置与凭证 Provider 登录、设置来源、模型选择与密钥保存的职责边界是什么? 配置流图

07 · Surface 如何复用内核(6 篇)

围绕 Surface/Worker 的交界解释输入、状态和连接;同时保留源码启动、配置和构建入口。

文章 阅读问题 主图
交互式 CLI Node Surface 如何维护输入、投递请求、消费事件和稳定渲染? CLI—Worker 时序图
rind run completion_scope=request 如何等待本次任务及续接;stdout、stderr、日志为何分流? 请求作用域图
rind send 另一个终端如何找到目标会话,忙碌和空闲时如何投递输入? 跨进程时序图
Desktop Electron main、preload、renderer 与共享的存活 Worker 如何隔离? 进程拓扑图
Web 与 Mobile WebSocket、重连、远程访问与 Capacitor 容器如何复用 Web Surface? 连接拓扑图
消息网关 渠道适配、会话路由、去重、事件光标和 Worker 连接怎样组合? 网关数据流图

08 · 横切约束与工程验证(4 篇)

把设计的不变量、边界和证据讲清,而不是只展示顺利路径。

文章 阅读问题 主图
信任边界 文件路径、Team 私有空间、凭证、外部网页与进程输出在哪些边界被约束? 信任边界图
有界系统 流队列、事件队列、上下文、工具输出和后台进程分别在哪一层限流? 限额位置图
看见内核 context inspect、事件、用量、trace、debug 如何定位一次回合的问题? 观测数据流图
如何验证设计 协议 golden fixture、单元与 fake-provider 进程测试、虚拟终端、手动验收分别证明什么? 测试分层图

推荐阅读路线

用一个场景串起全篇

用户要求“运行测试,分析失败并修复”:Surface 发出 prompt → 执行协调器装配会话容器 → ContextManager 构造模型视图 → 模型提出 bash → Worker supervisor 管理进程 → 初始工具结果提交 → 长命令交回控制权后,回合容器可释放 → 任务终态写日志 → 通知门控发起续接 → 新容器读取会话继续处理。历史太长时,压缩只替换模型视图;客户端断线时,重放负责重建显示。

这条链上最值得留意的是三个顺序:事实先落盘,再交付通知;先确定资源拥有者,再决定何时释放;保留原始历史,再构造有限视图。 各篇分别说明这些顺序成立的条件与例外。

相邻专题刻意分工:协议讲公开契约,传输讲连接;Shell 讲进程控制,后台任务讲跨回合语义;任务日志讲存储事实,自动续接讲何时消费;事件讲实时通知,重放讲状态重建;压缩触发讲决策,压缩交接讲保真与恢复。

返回文档入口 · 返回项目