架构
sivtr 是一个 Cargo workspace,主要分为两层:
sivtr:位于src/的二进制 crate;sivtr-core:位于crates/sivtr-core/的库 crate。
二进制层负责用户交互:CLI 解析、命令分发、TUI 状态、workspace picker、平台相关 launcher/hotkey,以及 remote-memory daemon。Core crate 负责可复用的 memory 逻辑:capture、解析、buffer、selection、search primitives、history、export、config、workspace 解析和 Agent provider session 解析。
Workspace 布局
Section titled “Workspace 布局”sivtr/|- Cargo.toml|- src/| |- cli/| | |- mod.rs| | `- remote.rs| |- main.rs| |- app.rs| |- commands/| | |- capture/| | |- memory/| | |- remote/| | `- system/| |- remote/ # daemon runtime| `- tui/`- crates/ `- sivtr-core/ `- src/ |- agents/ # AgentProvider registry + per-provider parsers |- buffer/ |- capture/ |- config/ |- export/ |- history/ |- parse/ |- query/ |- record/ # WorkRecord / WorkRef (scope + path + at) |- search/ |- selection/ |- session/ `- workspace.rsBinary crate
Section titled “Binary crate”| 区域 | 责任 |
|---|---|
cli/ |
clap 命令定义和 help text(mod.rs + remote.rs) |
commands/capture/ |
run、pipe、copy、init、flush、import、diff、clear、browse |
commands/memory/ |
search、filter、var、nav、zoom、show、work、WorkSet store |
commands/remote/ |
serve、share、remote(git-remote 风格命名)、peer、workspace list |
commands/system/ |
config、doctor、history、hotkey、codex export、migrate、version |
remote/ |
设备 daemon、identity、SQLite state、protocol、本地 IPC |
app.rs |
捕获输出 browser 状态机 |
tui/ |
终端设置、事件处理、browser 渲染、workspace 渲染 |
command_blocks.rs |
session 浏览和复制用的命令块 span |
这一层可以依赖终端 UI 库、平台 API、进程启动,以及(daemon)异步网络。
Core crate
Section titled “Core crate”| 模块 | 责任 |
|---|---|
agents |
AgentProvider registry 以及各 provider 发现/解析(Codex、Claude、Cursor、OpenCode、OpenClaw、Hermes、Grok、Pi…) |
record |
WorkRecord、WorkPart、WorkRef = WorkScope + WorkPath + WorkAt([scope:]path[/at]) |
query |
为 CLI 和 daemon 加载 workspace records 与 local-shaped sources |
capture |
stdin、subprocess、scrollback/session capture helpers |
parse |
ANSI 剥离、Unicode display width、行解析 |
buffer |
line、cursor、viewport 模型 |
selection |
visual / line / block selection 提取 |
search |
文本匹配和导航状态 |
history |
SQLite 存储、schema、搜索 |
export |
clipboard、file、editor export helpers |
config |
TOML config 模型、默认值和路径解析 |
session |
结构化 shell session entries 和渲染 |
workspace |
git-root workspace 解析、registry、data_dir() |
这种拆分让计算和数据处理可以独立于终端 UI 测试。
Capture 流程
Section titled “Capture 流程”Pipe mode:
stdin -> capture::pipe -> parse::parse_lines -> Buffer -> App -> TUI/editorRun mode:
subprocess -> combined output -> parse::parse_lines -> Buffer -> App -> TUI/editorSession import:
session log -> render entries -> parse::parse_lines -> Buffer -> command block spans -> TUI/editorCommand-block copy:
session log -> SessionEntry list -> command blocks -> selector -> filters -> clipboardAgent-provider copy:
provider transcript/db -> AgentSession -> AgentBlock list -> selector -> filters -> clipboardWorkspace picker/search:
terminal context + provider sessions -> WorkspaceSession list -> search/pick/show -> clipboard/stdout/jsonRemote memory 流程
Section titled “Remote memory 流程”owner: sivtr share -> daemon Share + InviteTicketpeer: sivtr remote add alias invite -> 当前 workspace 的 Mountquery: desk:terminal/... -> resolve origin -> daemon IPC -> iroh -> authorize(share_id) -> load_workspace_source(root, body) -> SourceResponse -> WorkSet/show模型:Device Daemon + Identity + Share + Grant + Mount。分享是 opt-in、只读;默认脱敏。
Provider 边界
Section titled “Provider 边界”Agent support 在 command 和 workspace 层是 provider-neutral 的。Provider 模块负责找到本地记录,并把 provider-specific 事件格式转换成共享 memory blocks:
AgentProvider -> AgentSessionProvider -> AgentSession -> AgentBlock共享 workspace 代码随后可以 copy、pick、search、show memory,而不依赖某一家 vendor 的 transcript 形状。
前端层负责呈现和交互。Rust core 负责持久 memory 工作:解析、capture、selection 提取、search、存储、provider 解析和格式化。remote daemon 在已授权 share root 上复用 core query loading,因此 remote 和 local refs 共享同一 record 模型。这样 UI 变化不会泄漏进 provider parsers,provider 变化也不会重写整个 CLI 表面。