2.9 KiB
2.9 KiB
架构与数据流
设计目标
Agent Studio Mini 把课堂上最容易被隐藏的 Agent 行为变成可观察事件:模型流式输出、Skill 渐进加载、工具生命周期、写操作审批和 Session 清理。浏览器是投影,服务端 Harness 才是状态权威。
flowchart LR
subgraph Browser
Composer
Thread[assistant-ui Thread]
ToolUI[Tool UI / Approval Dialog]
Timeline
Store[HarnessClientStore]
end
subgraph Fastify
Routes[HTTP Routes]
SSE[SSE Connection]
end
subgraph Harness
Registry[SessionRegistry]
Session[HarnessSession]
Events[EventStore]
Broker[ApprovalBroker]
Attachments[AttachmentStore]
Models[ModelConnectionStore]
Skills[SkillCatalog / Inference]
Workspace[SafeWorkspace]
end
subgraph Pi
Agent[AgentSession]
Loader[DefaultResourceLoader]
Runtime[ModelRuntime]
Tools[Pi Tools + Extension]
end
Composer -->|multipart / JSON| Routes
Routes --> Registry --> Session --> Agent
Store -->|EventSource| SSE --> Events
Events --> Store --> Thread
Store --> Timeline
Store --> ToolUI
Session --> Attachments
Session --> Models --> Runtime
Session --> Skills
Agent --> Loader
Agent --> Tools --> Workspace
Tools --> Broker --> ToolUI
一次消息的生命周期
- Web 创建 Session,读取 Skill Catalog,并建立 SSE。
- 图片由
AttachmentAdapter先上传,Composer 只保留attachmentId。 - Web 提交文本和 attachment IDs;Server 校验后立即返回
202 + runId。 HarnessSession显式解析当前模型,转换图片,创建或复用对应模型指纹的 Pi Session。- Pi 事件由
PiEventAdapter串行映射。异步 Skill 路径识别完成之前不会越过后续 read-completed 或run.completed。 InMemoryEventStore分配单调 sequence;SSE 支持 cursor replay、heartbeat 和断线清理。- Web reducer 去重并拒绝 sequence gap,映射为 assistant-ui 外部 Runtime、工具卡、审批框和时间线。
- run 完成、取消或失败后释放订阅;删除 Session 时取消审批、终止 run、删除附件和工作区。
核心所有权
| 状态 | 权威组件 | Web 的角色 |
|---|---|---|
| Session / active run | SessionRegistry / HarnessSession |
发起命令、展示结果 |
| Event sequence | EventStore |
去重、检测缺口、重连 |
| Approval | ApprovalBroker |
提交一次决策、等待事件确认 |
| API Key | ModelConnectionStore + Pi 内存凭证 |
仅在 password input 中临时持有 |
| Attachment bytes | AttachmentStore |
上传阶段持有 File/object URL |
| Tool write target | SafeWorkspace |
不参与路径选择 |
进程与存储模型
课堂版只有一个 Node 进程。EventStore、ApprovalBroker 和模型配置均在内存;Session 工作区位于 .agent-studio-sessions/<sessionId>。这种结构便于展示边界和清理行为,但不提供横向扩展、崩溃恢复或多租户隔离。