Skip to content

UI 投影契约

AgentUI 投影 是 Runtime facts 与 UI components 之间的唯一 adapter layer。

Projection 的职责是把不可直接展示的 runtime facts 归一化为稳定 UI state。它不拥有 Provider、执行状态、审批结果、artifact 内容或 evidence verdict;这些都回到 App Server / RuntimeCore / 对应 owner。

输入

text
RuntimeEvent
  + ThreadReadModel
  + TaskSnapshot
  + ArtifactSummary
  + EvidenceSummary
  + Diagnostics
  -> AgentUI Projection State

ProjectionState

ts
interface AgentUiProjectionState {
  runtime: RuntimeStatusView;
  messages: UIMessagePart[];
  timeline: ProcessTimelineEntry[];
  graph: ExecutionGraphNode[];
  tools: ToolCallView[];
  actions: ActionRequiredView[];
  tasks: TaskCapsuleView[];
  artifacts: ArtifactRefView[];
  evidence: EvidenceRefView[];
  diagnostics: DiagnosticView[];
  hydration: HydrationState;
  ui: LocalUiState;
}

ui 只能保存 collapse、focus、selected tab、draft input、scroll anchor 等本地状态。除 ui 外,所有字段都必须能从 RuntimeEvent + ReadModel 重建。

投影映射

Runtime 事实投影
turn.*run.statusRuntimeStatus、ProcessTimeline entries、ExecutionGraph run node。
model.deltamodel.completedUIMessageParts。
reasoning.*UIMessageParts reasoning part、ProcessTimeline reasoning entries。
tool.*process.*ToolGroup、ProcessTimeline entries、ExecutionGraph step/tool nodes。
action.*permission.*ActionRequired、TaskCapsule attention。
task.*queue.changedTaskCapsule、work board。
subagent.*job.*channel.*ExecutionGraph、Team Workbench surfaces。
artifact.changedArtifactRef、artifact workspace。
evidence.changedEvidenceRef、review/replay/ProcessTimeline evidence lane。
snapshot.updatedHydration/reconciliation。

标准投影对象

对象用途所有权
UIMessageParts用户和 assistant 可读消息分片,兼容 AI SDK UIMessage.parts 的设计方向。Projection owns derived state;Runtime owns source facts。
ProcessTimelinesequence 展示执行过程、工具、审批、产物、证据和诊断。Projection owns order/read state;Runtime owns event order。
ExecutionGraph表达 task、subagent、job、attempt、dependency、handoff 结构。RuntimeCore owns graph facts;Projection owns collapsed/focus state。
ToolGroup工具调用的生命周期、参数摘要、输出引用和失败分类。ExecutionBackend / RuntimeCore owns tool facts。

Reducer 规则

规则要求
去重eventId 幂等处理,同一事件重复到达不能重复追加文本或工具进度。
顺序sequence 更新 timeline;乱序时进入 stale,等待 read model repair。
合并model.delta 聚合到同一 messageId/partIdmodel.completed 做 reconciliation。
分离text、reasoning、tool、action、artifact、evidence、diagnostics 分开存,不塞进同一 prose 字段。
降级缺少 id 或 owner 时渲染 degraded entry,不伪造 tool/action/artifact 完成状态。
清理turn 完成后 active attention 可折叠,但 timeline、artifact/evidence refs 仍可回放。

Hydration 流程

Hydration 不是用快照覆盖所有本地状态。快照负责恢复 runtime facts;collapse、focus、draft 等本地 UI state 保留在 ui 子树。

与 AI SDK / AG-UI 的关系

参考采用Lime 扩展
AI SDK UIMessage.parts消息分片、reasoning/tool/artifact 以 part 形态展示。Tool/action/artifact/evidence 完整生命周期不由 message parts 拥有。
AG-UI event streamlifecycle、text、tool、state 分离。事件进入 RuntimeCore,补齐 durable read model、evidence correlation 和 governance 分类。

投影状态禁止事项

  • 保存 secret-bearing raw payload。
  • 把 diagnostics 放进 conversation text。
  • 把 local collapse/focus state 写回 runtime。
  • 从 prose 推断 tool/action/artifact/evidence 状态。
  • 在 产品应用 内 fork 一套相同 投影 model。

未知事实

Projection 缺事实时使用这些状态:

状态含义
unknown事件存在但字段不足。
unavailable剖面 不提供该能力。
blockedhost/Provider/policy 阻断。
stalehydration 或 stream 需要 repair。
not_applicable当前 scope 不适用。

Lime Agent Workbench 是面向 Lime AgentRuntime 与 AgentUI 的治理优先标准。