Skip to content

AgentFileDiff

面向 Agent 变更审阅的双端文件差异:单栏/并排布局、行内变更、折叠上下文、行选择与接受拒绝操作。

案例

AgentFileDiffH5 与 Wevu 使用同一公共 API
实时状态
发布检查工作流AgentFileDiff
src/runtime/create-agent-stream.tsRunning
+2−1
@@ -16,5 +16,6 @@ createAgentStream
3 行变更

安装

bash
pnpm add @varo-ui/ai
pnpm dlx @varo-ui/cli add --target h5 components/agent-ui
pnpm dlx @varo-ui/cli add --target weapp components/agent-ui

UI 组件由 Registry 安装到项目本地,因此从 @/components/agent-ui 导入;@varo-ui/ai 只提供事件协议、流控制和 Markdown 能力,不导出 Vue/Wevu UI 组件。

基础用法

vue
<script setup lang="ts">
import type { AgentDiffLine, AgentDiffView } from '@/components/agent-ui'
import { shallowRef } from 'vue'
import { AgentFileDiff } from '@/components/agent-ui'

const view = shallowRef<AgentDiffView>('unified')
const lines: AgentDiffLine[] = [
  { content: '@@ -16,5 +16,6 @@ createAgentStream', type: 'hunk' },
  { content: '  const status = shallowRef<\'idle\' | \'done\'>(\'idle\')', oldNumber: 17, type: 'remove' },
  { content: '  const status = shallowRef<AgentStreamStatus>(\'streaming\')', newNumber: 17, type: 'add' },
  { content: '  const scheduler = target === \'weapp\' ? \'time-slice\' : \'raf\'', newNumber: 18, type: 'add' },
  { collapsedLines: 18, content: '@@ More unchanged context', type: 'hunk' }
]
</script>

<template>
  <AgentFileDiff
    v-model:view="view"
    filename="src/runtime/create-agent-stream.ts"
    :lines="lines"
    @accept="applyChanges"
    @reject="discardChanges"
  />
</template>

Props

PropTypeDefault说明
classNameClassValueundefined通过目标对应的 cn 合并根节点样式
filenamestringrequired文件路径;头部会区分目录和文件名
linesAgentDiffLine[][]差异行;支持 addremovecontexthunk
additionsnumber自动统计覆盖新增行计数
deletionsnumber自动统计覆盖删除行计数
openbooleanundefined受控展开状态
defaultOpenbooleantrue非受控默认展开状态
viewAgentDiffViewundefined受控 unified / split 视图
defaultViewAgentDiffViewunified非受控默认视图
wrapbooleanundefined受控代码换行状态
defaultWrapbooleanfalse非受控默认换行状态
lineNumbersbooleanundefined受控行号状态
defaultLineNumbersbooleantrue非受控默认行号状态
indicatorsbars | classic | nonebars变更指示方式
inlineChangesbooleantrue高亮成对删除/新增行中的变化片段
showToolbarbooleantrue显示布局、换行和行号控制
showActionsbooleantrue显示接受/拒绝操作
disabledbooleanfalse禁用审阅操作
labelsPartial<AgentFileDiffLabels>{}覆盖界面文案
statusAgentAdvancedStatuscompletedAgent 状态

Events

EventPayload说明
acceptvoid接受当前文件变更
rejectvoid拒绝当前文件变更
selectAgentDiffSelection选择单栏行或并排侧的行
expand(line, index)请求展开 hunk 中折叠的上下文
update:openboolean展开状态变化
update:viewAgentDiffView单栏/并排视图变化
update:wrapboolean换行状态变化
update:lineNumbersboolean行号状态变化

Slots

SlotProps说明
line{ line, index, side }覆盖代码内容渲染;用于接入已有 token 高亮器

设计边界

视觉和交互参考 @pierre/diffs:中性代码面、低饱和新增/删除层、边栏指示、单栏/并排布局、行内变化和可展开 hunk。

Varo 不是其移植版。@pierre/diffs 的 Shadow DOM、Shiki、Worker Pool 和大规模虚拟化针对浏览器代码审阅;这些能力不能直接运行在小程序。AgentFileDiff 保留适合 Agent 输出的轻量数据契约和双端一致交互。只做 H5 且需要超大 Diff、语法高亮、注释或编辑时,应直接使用 @pierre/diffs

平台差异

TargetImport
H5Named export from @/components/agent-ui
weapp默认导出自 @/components/agent-ui/AgentFileDiff.vue;类型来自 @/components/agent-ui/file-diff

组件 API 在两个目标保持一致;DOM/WXML、调度和原生事件由目标实现负责。