Files
qiming/qiming-rcoder/specs/computer-agent-runner/computer-agent-runner.md
2026-06-01 13:54:52 +08:00

5.0 KiB
Raw Blame History

Instruction

project alpha

我要做一个带有虚拟远程桌面的agentic aiagent 可以在这个带有远程桌面的docker容器里操作浏览器搜索访问自己需要的网络资料用户还可以通过 vnc 远程虚拟桌面查看操作使用最终agent在docker容器里挂载的目录下按照用户的 prompt 的要求,完成复杂任务。

我现在初步想法点,大概如下:

  • agent 复用当前 crates/agent_runner 模块使用的docker容器是 docker/rcoder-agent-runner/Dockerfile 通过这个构建出来的容器 ,通过 ServiceType::ComputerAgentRunner 来创建使用我们的新的docker 容器,进行使用。

  • crates/rcoder 模块的 crates/rcoder/src/router.rs 的http router 参考现有使用的agent_runner 模块的http接口("/agent"前缀的接口,"/chat"),我们统一增加新接口,前缀是 "/computer" 的http接口对外服务内部还是调用 crates/agent_runner 模块在 ServiceType::ComputerAgentRunner docker 容器里运行。

1 "/computer/chat" 接口,入参需要增加字段 user_id 用户id必填,根据 user_id 来检查有无对应的 docker容器一个 user_id对应一个docker容器一一对应如果没有则自动动态创建和现在的 ServiceType::RCoder创建容器方式一样),然后动态创建的子容器,是根据入参 user_id ,project_id 来进行挂载。容器挂载路径: /app/computer-project-workspace/{user_id} 。 挂载目录示意: /app/computer-project-workspace/{user_id}/{project_id}

如果 user_id 对应的docker容器已经启动容器里可以有多个agent服务运行根据 project_id 启动对应的agent 服务,当前 crates/agent_runner 模块是支持在一个docker容器里按照 project_id 启动对应的agent 服务)

注: 我在本地测试用的docker compose配置文件docker/docker-compose.yml有挂载 computer-project-workspace 目录到容器里,你可以去看下这个配置文件

  • docker/rcoder-agent-runner/Dockerfile docker镜像配置文件本身有用 noVnc 提供vnc服务用于连接虚拟远程桌面。 但用户访问是通过 crates/rcoder 模块 所在的主容器来访问vnc服务的不能直接让用户访问内部动态创建的子容器服务我这里想法是可以通过 pingora 来提供反向透明代理服务按照我定义的路径规则透明代理vnc服务。 我设想的vnc路径规则是 "/computer/desktop/{user_id}/{project_id}" ,这样 pingora 就知道要访问的是哪个子容器的vnc服务了可以进行透明代理操作。

然后关于vnc服务我还有些不清楚的点如果以后vnc 的虚拟远程桌面,需要粘贴复制,是不是应该进一步封装成接口,做一些处理,而不是仅仅只使用 pingora 透明代理了?

mcp参考json配置

{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"]
    }
  }
}

crates/agent_config/configs/default_agents.json 这个是 ServiceType::RCoder 默认使用的agent配置我们的新功能 ServiceType::ComputerAgentRunner 也可以使用这个配置吗? 但需要额外增加 "Chrome DevTools MCP" 这个浏览器操作的mcp工具。 ServiceType::ComputerAgentRunner对应的docker容器里已经有提前安装好的 chromium 浏览器,并设置开发里 9200 端口,用于开发调试使用。

  • 现有的接口 "/agent/stop" 是停止对应的 project_id 对应的容器,但是新接口: "/computer/agent/stop"对应的逻辑,是根据 user_id ,project_id 停止对应的agent服务就行了。

  • 现有根据 agent是否闲置的规则需要有区分枚举ServiceType,之前因为一个 project_id 对应一个docker容器现在ServiceType::ComputerAgentRunner 对应容器,是根据 user_id 对应一个docker容器 user_id 可能有多个 project_id 对应的agent 在运行,需要 user_id下的所有 project_id 对应的agent 都是闲置状态(复用现有闲置时间规则),才能销毁对应的 docker 容器。

  • 目前crates/rcoder 通过 gRPC和 crates/agent_runner 模块通信,如果失败,不要回退成 http通信crates/agent_runner 模块里的http接口后面是要彻底删除的。crates/agent_runner 模块只用gRPC通信。

vnc虚拟远程桌面手动测试

开发结束后在帮我开发一个html网页放在 fixtures目录下方便我打开网页输入本地的ip和端口来测试验证 vnc虚拟桌面。

按照这个想法,帮我生成详细的需求和设计文档,输出为中文。涉及到代码部分,不要写详细的具体实现,只需要写 trait 和 结构体 struct