本文档说明如何在移动端接入文件树、远程桌面和文件预览组件,以配合 CustomActionService 和 AgentDetailService 完成 Agent 完整能力的落地。
移动端采用了与 PC 端一致的事件驱动架构:
- 消息层 (
AgentDetailService): 解析后端流式消息,自动触发OPEN_DESKTOP(事件) 和REFRESH_FILE_LIST(工具调用)。 - 交互层 (
task-result): 用户点击任务结果时,触发OPEN_PREVIEW。 - 中枢层 (
CustomActionService): 统一分发事件。 - UI 层 (待接入): 监听事件并做出响应(如弹出抽屉、跳转页面)。
在你的聊天页面(如 chat-conversation-component.uvue)或全局布局中,监听以下事件:
import { CustomEventType, OpenPreviewEventData, OpenDesktopEventData, RefreshFileListEventData } from '@/utils/customActionService.uts'
export default {
onLoad() {
// 1. 监听打开文件预览/文件树
uni.$on(CustomEventType.OPEN_PREVIEW, (data: OpenPreviewEventData) => {
console.log('收到打开预览请求:', data.conversationId)
// TODO: 打开文件树抽屉/侧边栏
// this.showFileTreeDrawer = true
// this.currentViewMode = 'preview'
// this.fetchFileList(data.conversationId)
})
// 2. 监听打开远程桌面
uni.$on(CustomEventType.OPEN_DESKTOP, (data: OpenDesktopEventData) => {
console.log('收到打开远程桌面请求:', data.conversationId)
// TODO: 显示远程桌面组件/跳转远程桌面页面
// this.showDesktopView = true
// this.currentViewMode = 'desktop'
// this.connectVNC(data.conversationId)
})
// 3. 监听刷新文件列表
uni.$on(CustomEventType.REFRESH_FILE_LIST, (data: RefreshFileListEventData) => {
console.log('收到刷新文件列表请求:', data.conversationId)
// TODO: 如果当前文件树是打开的,重新获取文件列表
// if (this.showFileTreeDrawer) {
// this.fetchFileList(data.conversationId)
// }
})
},
onUnload() {
// 记得移除监听
uni.$off(CustomEventType.OPEN_PREVIEW)
uni.$off(CustomEventType.OPEN_DESKTOP)
uni.$off(CustomEventType.REFRESH_FILE_LIST)
}
}- 触发时机: 收到
OPEN_PREVIEW或用户主动点击文件图标。 - 功能要求:
- 根据
conversationId调用后端 API 获取文件列表。 - 收到
REFRESH_FILE_LIST事件时自动刷新。 - 点击文件项时,调用
CustomActionService.openPage或内部逻辑进行预览。
- 根据
- 触发时机: 收到
OPEN_DESKTOP或用户主动切换。 - 功能要求:
- 建立 VNC 连接(这通常需要特定的 VNC 客户端组件或 WebView 方案)。
- 处理容器保活(Keep-alive)。
- 支持键盘输入和触摸手势映射。
- 触发时机: 用户在文件树中点击文件。
- 功能要求:
- 根据文件类型(图片、Markdown、代码、HTML)渲染不同内容。
- 对于 HTML/Web 应用,建议使用
webview并通过CustomActionService.openPage打开。
你可以手动调用 CustomActionService 来模拟触发,测试 UI 响应:
import { CustomActionService } from '@/utils/customActionService.uts'
// 模拟打开预览
CustomActionService.openPreviewView(123)
// 模拟打开远程桌面
CustomActionService.openDesktopView(123)-
Q:
task-result点击无反应?- A: 检查是否传入了
conversationId。如果没有conversationId,task-result会降级发出task_result_click事件,你需要手动处理该事件。
- A: 检查是否传入了
-
Q: 样式不符合预期?
- A:
task-result和Plan的样式已内置在组件中,如需全局调整,请修改uni_modules/mp-html下的相关文件。
- A: