跳到主内容
Spark
EN

架构

四端 UI、协议、服务端、引擎、会话文件,自上而下五层。

架构一览

五层:四端 UI / 协议 / 服务端 / 引擎 / 会话文件。

apps/*四端 UI(Web · Desktop · CLI · Mobile)
@spark/protocol27 种事件词表 · zod schema · Transport
apps/serverFastify · SSE · 仅绑定 127.0.0.1
@spark/engineInputQueue → RunLoop → ToolPipeline
sessions/*.jsonldurable append-only · 完整可回放

↓ data flow: user input → engine → events → UI

事件模型

27 种事件构成完整词表(durable 24 / live-only 3),每种事件带三个属性:

durable
24 种。落盘到 JSONL,可回放重建
live
3 种 delta 类。不落盘,重连后不重现
surface
2 种。模型可见面,必进模型历史

两个「投影」不同义:各端用同一份 applyEvent reducer 把事件流折叠成 UI 状态;引擎侧 Projector 投影的是模型上下文(surface 事件 → LlmMessage)。协议层是运行时代码,不是类型定义。新增事件走 new-event-type 全流程:类型定义 → zod schema → 归类 → reducer 单测 → 引擎 emit → 文档同步。

四端形态

共享 @spark/protocol,各自适配平台特性。

  • Web

    主力交互界面,全功能覆盖

    React 19 · Vite 7 · Tailwind CSS v4

  • Desktop

    本地壳,系统集成与快捷键

    Electron sidecar · 内嵌 server

  • CLI

    终端原生体验,纯键盘操作

    Ink 7 · Node.js 24

  • Mobile

    移动端会话查看与轻量交互

    Expo + RN · Taro 4 小程序

数据落点

会话数据以 append-only JSONL 存储在本地文件系统,不依赖外部数据库。

bash
# 会话数据落点(packages/engine/src/session/store.ts)
~/.spark/sessions/<cwd-munged>-<sha1前8位>/<ISO时间戳>_<sessionId>.jsonl

# 格式:append-only JSONL
# 第 0 行是 header(sparkVersion / cwd / createdAt / model)
# 其后每行一个事件信封,seq == 文件行号
# 只追加不改写,完整保留决策链
# 回放 = 从头逐行 reduce → 重建完整 UI 状态