Files
qiming/qimingclaw/docs/digital-employee-frontend-integration-plan.md
2026-06-07 17:56:37 +08:00

31 KiB
Raw Blame History

sgRobot 核心能力融合计划

定位

本计划不是单纯的“前端页面嵌入计划”。

真正目标是:

以 qimingclaw 为客户端底座,
以数字员工页面为主要产品载体,
逐步吸收 sgRobot 的核心任务操作系统能力。

数字员工页面不是一个展示壳,而是后续承载以下能力的主入口:

  • 今日工作台
  • 任务中心
  • 技能库
  • 执行记录
  • 审批与人工介入
  • 运行时间线
  • 产物与日报
  • 计划模板与业务流程

当前 qimingclaw 已经完成一个过渡版本:在“概览”菜单内嵌 sgRobot 数字员工静态页面,不启动 sgRobot 后端也能展示页面。但这只是第一步,后续要把 sgRobot 的核心模型和执行治理能力融合进 qimingclaw。

总体原则

1. qimingclaw 是底座

保留 qimingclaw 当前已有优势:

  • Electron 客户端
  • 登录与注册链路
  • lanproxy 远程接入
  • /computer/chat 本地执行入口
  • ACP 引擎
  • MCP 工具接入
  • 本地 SQLite 配置与状态存储

不把 sgRobot Rust daemon 原样搬进来,不让 qimingclaw 启动依赖 sgRobot 进程。

2. 数字员工页面是产品载体

sgRobot 的能力不是以后台模块裸露给用户,而是通过数字员工页面呈现:

  • 用户看到的是数字员工的任务、状态、汇报和介入点。
  • 后台融合的是 Plan / Task / Run / Skill / Event / Artifact / Approval。
  • 页面最终从 demo fallback 过渡到 qimingclaw 真实数据。

3. 源码融合,运行隔离

数字员工前端采用源码级融合,而不是长期维护 dist 快照。

但第一阶段仍保持独立构建,不直接混入 qimingclaw 主 renderer bundle避免

  • React 18 / React 19 冲突
  • Tailwind / Ant Design 样式污染
  • 路由体系互相影响

推荐方式:

源码融合
  -> 独立构建
  -> 输出静态资源
  -> qimingclaw webview 加载
  -> 后续通过 qimingclaw API 接真实数据

目标架构

最终目标链路:

用户目标 / 后端远程任务 / 定时任务
  -> Plan 或 Direct Task
  -> Task
  -> Run
  -> qimingclaw ACP / MCP 执行
  -> Event / Artifact / Approval
  -> Projection
  -> 数字员工页面展示与人工介入

核心对象:

Plan
PlanStep
Task
Run
Skill
Event
Artifact
Approval
MemoryEntry
ManagedService

第一轮不要求一次性实现全部对象,但数据库和 API 设计要为这些对象预留边界。

当前状态

已完成的过渡实现:

crates/agent-electron-client/public/sgrobot-digital/
crates/agent-electron-client/src/renderer/components/pages/OverviewPage.tsx

当前链路:

qimingclaw 左侧菜单“概览”
  -> OverviewPage
  -> Electron webview
  -> sgrobot-digital/index.html#/digital
  -> sgRobot 数字员工静态页面
  -> demo fallback 数据

当前问题:

  • 数字员工前端还是构建产物快照。
  • 页面数据主要来自 sgRobot demo fallback。
  • qimingclaw 没有 Plan / Task / Run / Event / Artifact 的正式状态模型。
  • qimingclaw 的 ACP 执行链路尚未映射到数字员工任务中心。
  • Skill、Approval、日报、执行时间线还不是 qimingclaw 真实能力。

分阶段融合计划

Phase 1数字员工前端源码融合已开始

目标:把现在的静态快照变成可维护源码集成。

做法

在 qimingclaw 中新增独立 embedded 前端源码目录:

crates/agent-electron-client/
  embedded/
    sgrobot-digital/
      package.json
      vite.config.ts
      tsconfig.json
      src/
        pages/digital/
        components/digital/
        contexts/
        lib/
        types/
        index.css
        main.tsx
      public/
        digital-assets/
        logo.png
      patches/
        README.md
  public/
    sgrobot-digital/

新增脚本:

scripts/sync-sgrobot-digital.js
scripts/build-sgrobot-digital.js

当前 qimingclaw 已新增:

crates/agent-electron-client/embedded/sgrobot-digital/
crates/agent-electron-client/scripts/sync-sgrobot-digital.js
crates/agent-electron-client/scripts/build-sgrobot-digital.js

常用命令:

cd crates/agent-electron-client
npm run sync:sgrobot-digital
npm --prefix embedded/sgrobot-digital install
npm run build:sgrobot-digital
npm run build:renderer

其中:

  • sync:sgrobot-digital 从 sgRobot 的 web 源码同步数字员工相关源码和资源。
  • build:sgrobot-digital 从 qimingclaw 内的 embedded 源码构建到 public/sgrobot-digital
  • build:renderer 验证 qimingclaw 主客户端构建。

同步范围优先包含:

sgRobot/crates/sgclaw-core/web/src/pages/digital/
sgRobot/crates/sgclaw-core/web/src/components/digital/
sgRobot/crates/sgclaw-core/web/src/contexts/RoleContext.tsx
sgRobot/crates/sgclaw-core/web/src/lib/api.ts
sgRobot/crates/sgclaw-core/web/src/lib/basePath.ts
sgRobot/crates/sgclaw-core/web/src/lib/i18n.ts
sgRobot/crates/sgclaw-core/web/src/lib/tauri.ts
sgRobot/crates/sgclaw-core/web/src/types/api.ts
sgRobot/crates/sgclaw-core/web/src/index.css
sgRobot/crates/sgclaw-core/web/public/digital-assets/

qimingclaw 专用 patch

  • 直达 #/digital
  • 禁用 sgRobot 配对页
  • 静态资源使用相对 base path兼容 Vite dev server 和 Electron file:// 打包态
  • API 暂时允许 fallback 到 demo 数据
  • 关闭 sgRobot 独立窗口行为,交给 qimingclaw 容器处理

当前边界:

  • 前端已从“纯构建产物快照”推进为“源码同步 + 独立构建 + 静态嵌入”。
  • 数字员工页面仍主要使用 sgRobot 的 demo fallback 和同源 API 探测。
  • qimingclaw 还没有正式落地 Plan / Task / Run / Event / Artifact / Approval 数据模型。
  • 下一阶段应开始建设 qimingclaw 本地数字员工 API 适配层。

Phase 2qimingclaw 数字员工 API Adapter已开始

目标:让数字员工页面开始消费 qimingclaw 语义的数据,而不是完全依赖 sgRobot demo fallback。

当前 qimingclaw 已新增:

crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts

当前覆盖的页面接口:

GET  /api/digital-employee/workday
POST /api/digital-employee/workday/actions
GET  /api/scheduler/jobs
GET  /api/debug/plans
GET  /api/debug/tasks
GET  /api/debug/plan/:planId/flow
POST /api/debug/plan/:planId/dispatch
GET  /api/plan/:planId/messages
GET  /api/skill
POST /api/skill/:skillId/enabled

当前数据来源:

  • qimingclaw adapter 内置的客户端任务职责。
  • localStorage 保存的今日任务选择、特性设置、日报生成状态。
  • qimingclaw 语义的 ACP / MCP / computer server / artifact-report 技能定义。

当前页面表现:

  • source 返回 live,数字员工首页会使用真实 adapter 数据通道。
  • 今日任务从“白领一天 demo”切换为 qimingclaw 客户端职责。
  • 任务中心、技能库、运行明细、日报预览开始使用 qimingclaw adapter 数据。

下一步:

  • 将 adapter 的静态职责替换为 qimingclaw 主进程 IPC 数据源。
  • 新增本地数字员工状态服务,持久化 Plan / Task / Run / Event / Artifact / Approval。
  • /computer/chat、ACP session、MCP tool status 写入 Run/Event。

Phase 3webview 只读状态桥(已开始)

目标:让 embedded 数字员工页能读取 qimingclaw 客户端真实状态,同时保持 webview 权限收敛。

当前 qimingclaw 已扩展:

crates/agent-electron-client/src/preload/webviewPerfBridge.ts
crates/agent-electron-client/src/main/main.ts

桥接对象:

window.QimingClawBridge.digital.getSnapshot()

当前 snapshot 内容:

  • Agent service status
  • MCP proxy status
  • Computer Server status
  • Lanproxy status
  • File Server status
  • GUI Server status
  • ACP detailed sessions summary

安全边界:

  • 只读。
  • 不暴露 start / stop / restart。
  • 不暴露 prompt / shell / computer chat。
  • webview 页面只能拿到状态快照,再由 adapter 映射到数字员工页面。

当前页面表现:

  • “客户端运行状态巡检”会显示 Agent、MCP、活跃会话数。
  • “远程任务接入准备”会显示 Computer Server、Lanproxy、File Server 状态。
  • 在非 Electron webview 环境下adapter 自动降级为“未连接 bridge”的 fallback 文案。

下一步:

  • 新增 qimingclaw digital employee state service。
  • 将 bridge snapshot 写入 Run/Event而不是只作为页面即时 projection。
  • /computer/chat 请求生成真实 Task / Run / Event。

Phase 4qimingclaw 本地状态服务雏形(已开始)

目标:让数字员工能力不只是页面 projection而是开始拥有 qimingclaw 自己的本地状态沉淀。

当前 qimingclaw 已新增:

crates/agent-electron-client/src/main/services/digitalEmployee/stateService.ts
crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts

新增 IPC

digitalEmployee:getSnapshot
digitalEmployee:getState

当前职责:

  • 主进程统一采集 Agent / MCP / Computer Server / Lanproxy / File Server / GUI Server / Sessions。
  • 每次 snapshot 写入 digital_employee_state_v1
  • 状态服务生成轻量事件 service_snapshot
  • webview bridge 改为调用 digitalEmployee:getSnapshot,不再自行聚合多个 IPC。

当前边界:

  • 状态服务仍保留 settings JSON 作为兼容快照。
  • Plan / Task / Run / Event 已开始写入独立 SQLite 表。
  • 当前事件主要记录服务状态变化,还没有接入 /computer/chat 和 ACP token/event stream。

下一步:

  • 新建正式 SQLite 表:digital_plansdigital_tasksdigital_runsdigital_eventsdigital_artifactsdigital_approvals
  • 在 computer server 的 /computer/chat 入口创建 Task / Run。
  • 在 ACP event forwarder 中写入 Run/Event。

Phase 5管理端任务入口落地已开始

目标:管理端或后端通过 /computer/chat 下发任务时qimingclaw 本地数字员工状态可以生成真实任务记录。

当前 qimingclaw 已接入:

crates/agent-electron-client/src/main/services/computerServer.ts
crates/agent-electron-client/src/main/ipc/computerHandlers.ts
crates/agent-electron-client/src/main/services/digitalEmployee/stateService.ts

记录时点:

  • 收到 chat 请求:创建/更新 Plan、Task、Run写入 computer_chat_received
  • chat 成功返回Run 标记 completed写入 computer_chat_completed
  • chat 失败返回Run 标记 failed写入 computer_chat_failed

当前联动意义:

  • 管理端任务进入客户端后,本地 SQLite 会立即有可追溯记录。
  • 对应 Plan / Task / Run / Event 均进入 digital_sync_outbox
  • 后续管理端 sync API 确定后,可将 outbox 推送到管理端并回填 remote_id

下一步:

  • 接 ACP event forwarder把 token、tool、step、artifact 写入 Run/Event/Artifact。
  • 增加 sync worker根据 step1_config.serverHost 和登录 token 推送 outbox。

Phase 6ACP / computer 运行事件落库(已开始)

目标:让数字员工不只知道“管理端下发了任务”,也能看到 qimingclaw 执行过程中的真实运行事件。

当前 qimingclaw 已接入:

crates/agent-electron-client/src/main/ipc/eventForwarders.ts
crates/agent-electron-client/src/main/services/digitalEmployee/stateService.ts

记录来源:

  • ACP session SSE 事件:message.updatedsession.updatedsession.statussession.idlesession.error 等。
  • computer 执行进度:computer:progress
  • prompt 生命周期:computer:promptStartcomputer:promptEnd
  • Agent 生命周期:readydestroyederror

当前落库方式:

  • 运行中的事件会创建/更新对应 Plan、Task、Run。
  • 完成和失败事件会结束 Run。
  • 每条 Event 都写入 digital_events
  • Plan / Task / Run / Event 均进入 digital_sync_outbox,等待后续同步到管理端。

与管理端联动的边界:

  • SQLite 作为本地事实缓存和离线队列,不作为最终中心库。
  • 管理端 API 未确定前qimingclaw 先沉淀统一的本地实体和 outbox。
  • 后续 sync worker 只消费 digital_sync_outbox,避免业务写入链路直接依赖网络。

下一步:

  • 确认 qiming-backend 的数字员工同步 API 路径和鉴权方式。
  • 将 Artifact / Approval 从普通 Event 中拆成正式实体。
  • 数字员工页面展示同步状态:待同步、同步失败、最近同步时间。

Phase 7管理端 outbox 同步 worker已开始

目标SQLite 继续作为本地事实缓存和离线队列,同时把 Plan / Task / Run / Event 推送到管理端,避免数字员工数据停留在单机。

当前 qimingclaw 已新增:

crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts
crates/agent-electron-client/src/main/bootstrap/startup.ts
crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts
crates/agent-electron-client/src/preload/webviewPerfBridge.ts

当前机制:

  • 启动后后台启动 sync worker默认每 30 秒扫描 digital_sync_outbox
  • 默认同步地址由 step1_config.serverHost 拼接:
/api/digital-employee/sync/outbox
  • 可通过 settings digital_employee_sync_config.endpoint 覆盖同步地址。
  • 使用 auth.saved_key 或域名级 saved key 作为客户端标识。
  • 使用管理端登录态 token 作为 Authorization: Bearer <token>,同时携带 X-Qiming-Client-Key
  • 同步成功后回填 outbox 状态,并根据后端 ack 回填实体 remote_id / last_synced_at
  • 同步失败时标记 failed 和错误信息;定时 worker 按指数退避补偿,手动 flushSync 可强制立即重试,不影响 /computer/chat 和 ACP 执行链路。
  • 数字员工任务设置工具栏已增加“同步管理端”按钮,可通过 bridge 立即触发 flushSync 并刷新页面投影。
  • 数字员工首页已增加管理端同步状态条,展示待同步数量、失败数量、可重试/退避分布、失败实体类型分布、最近同步时间和最近失败原因摘要。
  • 数字员工嵌入页会通过 window.QimingClawBridge.digital.getRuntimeRecords() 读取本地 SQLite 的 digital_plansdigital_tasksdigital_runsdigital_eventsdigital_artifactsdigital_approvals,优先用真实本地记录生成 workday、任务中心、任务详情和流程投影本地记录为空时才回落到 qimingclaw 固定适配任务。
  • 数字员工页面的任务确认、资料设置、日报状态通过 getUiState / saveUiState 保存在主进程 SQLite settings保存时会记录 digital_workday_* 本地事件并进入 outbox避免这些页面操作只留在 webview localStorage。
  • 数字员工技能库通过 getSkillCapabilities 读取 qimingclaw 当前 MCP 配置、server 状态、已发现工具与 allow/deny 限制,并把 MCP server/tool 投射为 /api/skill 技能项。
  • 数字员工调试存储、dashboard、flow 和产物列表通过 qimingclaw adapter 的 /api/debug/store/api/dashboard/api/debug/plan/:id/flow/api/debug/task/:id/flow/api/artifact 投射本地 Plan / Task / Run / Event / Artifact / ApprovalRun/Event payload 中的 artifactsoutputsfilesoutputPathuri 等字段会作为正式 artifact 记录为空时的兼容产物入口展示。
  • qimingclaw 主进程记录 /computer/chat 结果和 runtime event 时,会从 payload 的 artifactsoutputsfilesattachmentsoutputPathuri 以及 approvalsapproval_requestsneedApproval 等字段轻量提取正式 digital_artifacts / digital_approvals 记录,并进入 outbox 同步。
  • digital_approvals 会投射为数字员工 workday 的 decisions;首页待解决事项按钮会调用本地 decide_approval action把处理结果写入 SQLite UI state回写正式 approval 状态并进入 approval outbox同时生成 digital_workday_decide_approval runtime event。同步失败 review 只保留在 dashboard/同步诊断中,不作为可审批 workday decision。
  • 任务中心的 /api/governance/command 已接入 qimingclaw 兼容层:create_plansubmit_planapprove_planactivate_plancreate_schedulerun_schedule_now 等命令返回本地可解释结果,其中激活/立即运行会映射到 adapter 的 dispatch/workday 状态。
  • 日报下载不再打开 sgRobot 风格 PDF 后端直链;生成日报后会基于当前 qimingclaw workday 投影在浏览器内导出本地文本日报。
  • 任务中心在加载到 qimingclaw 真实计划时不再混入“白领一天”等 demo supplement只有没有任何真实计划或请求失败时才使用本地示例兜底。
  • 同步状态通过 bridge 返回最近失败 outbox 明细首页可直接看到实体类型、outbox ID、操作类型、重试次数、失败时间和下次自动重试时间。
  • 本地 SQLite 额外记录 digital_sync_attempts,每次 outbox 推送成功、失败或部分 ack 缺失都会留下一次尝试历史,默认保留最近 30 天。
  • 点击失败 outbox 可打开详情弹窗,查看完整错误、实体 ID、退避状态、最近重试历史并可复制或导出诊断 JSON也可触发手动 flushSync 立即重试。若已配置管理端同步地址,详情弹窗可直接打开对应的管理端同步记录深链。
  • qimingclaw 自动生成的管理端深链只携带 device_identity_typeentity_idoutbox_id,避免在 URL 中暴露客户端 Key同时仍能区分同租户下的不同客户端管理端列表仍保留客户端 Key 手动筛选能力。

新增 IPC / Bridge

digitalEmployee:getSyncStatus
digitalEmployee:flushSync
digitalEmployee:getRuntimeRecords
digitalEmployee:getUiState
digitalEmployee:saveUiState
digitalEmployee:getSkillCapabilities
window.QimingClawBridge.digital.getSyncStatus()
window.QimingClawBridge.digital.flushSync()
window.QimingClawBridge.digital.getRuntimeRecords()
window.QimingClawBridge.digital.getUiState()
window.QimingClawBridge.digital.saveUiState(update)
window.QimingClawBridge.digital.getSkillCapabilities()

当前边界:

  • qiming-backend 已补最小接收端,先以通用同步记录表承接客户端 outbox。
  • worker 只消费 outbox不直接侵入 Plan / Task / Run / Event 写入链路。
  • 管理端返回格式包含 acked[],每项带 outbox_identity_typeentity_idremote_id
  • 若管理端只 ack 批次中的部分 item已 ack 的 item 会标记 synced未 ack 的 item 会保留 failed 状态并进入下一轮补偿。
  • 当前接口沿用管理端登录态鉴权,客户端必须能读取到客户端 Key 和登录 ticket/token 才会推送;缺少凭据时保持本地 outbox 等待,并在数字员工同步状态条显示缺少项。
  • 管理端接收 outbox 时会校验 X-Qiming-Client-Key,请求体缺少 client_key 时以 header 为准,二者不一致时拒绝写入。

后端最小落点:

qiming-backend/sql/update-20260605.sql
qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-ui/.../DigitalEmployeeSyncController.java
qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/.../DigitalEmployeeSyncApplicationServiceImpl.java
qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/.../DigitalEmployeeSyncRecord.java

后端观察接口:

GET /api/digital-employee/sync/records
  • 支持 client_keydevice_identity_typeentity_idoutbox_idpage_nopage_size 查询参数。
  • 按当前登录上下文租户隔离,默认每页 20 条,最大每页 100 条。
  • 当前返回通用同步记录和原始 payload用于管理端页面或联调工具先查看同步结果后续再拆分为更丰富的 Plan / Task / Run / Event 查询模型。
  • 管理端已增加“数字员工同步记录”菜单、权限资源和列表页,可按客户端 Key、设备 ID、实体类型、实体 ID、Outbox ID 查询并查看 payloadURL 查询参数会预填筛选条件,并在命中 Outbox ID 时自动打开 payload 抽屉。
  • 管理端同步记录页会从通用 payload 中提炼标题、状态、Plan/Task/Run 关联、发生时间等业务摘要,列表和详情抽屉不再只能依赖原始 JSON 排障。
  • 管理端列表和抽屉内的客户端 Key 仅脱敏展示,筛选框仍支持输入完整客户端 Key 精准查询。

下一步:

  • 后续再拆分管理端 Plan / Task / Run / Event 查询模型,让同步记录从通用 payload 观察面升级为业务视图。
  • 数字员工页面继续补充管理端业务视图入口和失败分组统计。

管理端联动原则

数字员工状态是本地优先,但不能成为本地孤岛。

本地 SQLite 表设计必须同时满足:

  • 离线可用:客户端无网络时仍能展示任务、运行明细和日报。
  • 可追溯:本地每个 Plan / Task / Run / Event 都有稳定本地 ID。
  • 可同步:预留管理端 ID 和同步状态。
  • 可补偿:同步失败后可通过 outbox 重试。

当前已新增/规划的本地表:

digital_plans
digital_tasks
digital_runs
digital_events
digital_artifacts
digital_approvals
digital_sync_outbox

同步字段:

remote_id
sync_status
last_synced_at
sync_error

同步流建议:

本地写入 Plan/Task/Run/Event
  -> digital_sync_outbox pending
  -> 管理端 sync API
  -> 回填 remote_id
  -> sync_status = synced

管理端 API 尚未在 qiming-backend 中确认最终路径,因此当前 qimingclaw 先落本地同步契约,不硬编码远端接口。

产出

  • 数字员工页面可以从源码重新构建。
  • public/sgrobot-digital 不再手工维护。
  • qimingclaw 不启动 sgRobot 也能打开数字员工页面。

验收

  • npm run sync:sgrobot-digital
  • npm run build:sgrobot-digital
  • npm run build:renderer
  • qimingclaw“概览”直接显示数字员工首页不出现配对页。

Phase 2数字员工 API 适配层

目标:让数字员工页面开始读取 qimingclaw 真实数据。

做法

在 qimingclaw main process 或本地 HTTP 服务中新增数字员工 API 适配层。

先实现这些 sgRobot 兼容 API

GET  /api/digital-employee/workday
POST /api/digital-employee/workday/actions
GET  /api/debug/plans
GET  /api/debug/tasks
GET  /api/skill
GET  /api/debug/store

数据来源先映射 qimingclaw 当前已有能力:

  • 当前用户
  • 登录状态
  • 服务状态
  • Agent 状态
  • 会话列表
  • 最近 /computer/chat 请求
  • ACP session 状态
  • MCP tool 列表

此阶段不追求完整 Plan/Task/Run只先让页面从 qimingclaw 取真实状态。

产出

  • 数字员工首页展示 qimingclaw 的真实运行状态。
  • 技能库可以显示 qimingclaw 当前 MCP/ACP 工具能力。
  • 任务中心开始展示 qimingclaw 最近执行记录。

验收

  • 停止 sgRobot 后端,数字员工页面仍然工作。
  • 页面 API 请求命中 qimingclaw。
  • demo fallback 只作为无数据兜底,不再是主数据源。

Phase 3Run / Event / Artifact 轻量控制平面

目标:把 qimingclaw 当前执行链路正式记录为可展示、可审计的运行对象。

当前 qimingclaw 执行链路

backend
  -> lanproxy
  -> computerServer:60006 /computer/chat
  -> agentService.ensureEngineForRequest
  -> AcpEngine.chat
  -> ACP session / prompt
  -> /computer/progress/{session_id} SSE

需要新增的核心表

先落地最小集合:

runs
events
artifacts
approvals

推荐语义:

  • Run:一次 qimingclaw 执行尝试。
  • Event:执行过程中的事实记录。
  • Artifact:执行结果、文件、报告、截图、日志摘要。
  • Approval:权限请求、人工确认、风险操作确认。

映射方式

/computer/chat request
  -> create Run
ACP progress event
  -> append Event
permission request
  -> create Approval
tool result / final message
  -> create Artifact 或 Event
session complete
  -> finish Run

产出

  • 每次执行都有 Run ID。
  • 数字员工“今日执行”“运行明细”读取真实 Run/Event。
  • 后续日报和审计有数据基础。

验收

  • 发起一次远程 /computer/chat 后,数字员工页面能看到执行记录。
  • Run 状态能从 running 进入 succeeded / failed / cancelled。
  • Event 时间线可追踪主要执行过程。

Phase 4Task / PlanStep / Plan

目标:吸收 sgRobot 的任务操作系统骨架。

先做 Task

把一次业务执行抽象成 Task

Task
  -> Run attempt 1
  -> Run attempt 2

Task 管业务目标Run 管执行尝试。

再做 Plan / PlanStep

当 Task 稳定后,引入:

Plan
PlanStep

Plan 用于承载多步骤业务流程。

数据关系

Plan
  -> PlanStep[]
  -> Task[]
  -> Run[]
  -> Event[]
  -> Artifact[]
  -> Approval[]

产出

  • 数字员工任务中心从“执行记录列表”升级为“计划 / 任务 / 步骤”视图。
  • 支持多步骤任务展示。
  • 支持失败隔离和重试。

验收

  • 单步任务能以 Task 展示。
  • 多步任务能以 Plan 展示。
  • 每个 Task 能看到 Run 历史。

Phase 5PlanTemplate 融合

目标:吸收 sgRobot 的业务流程模板能力。

新增目录

~/.qimingclaw/plan_templates/

支持文件:

PlanTemplate.toml

API

GET  /api/plan-templates
GET  /api/plan-templates/:id
POST /api/plan-templates/:id/activate

与数字员工页面关系

数字员工“任务设置”区域读取 PlanTemplate。

用户可以:

  • 查看模板
  • 选择今日任务
  • 一键执行
  • 设置定时

产出

  • qimingclaw 具备业务流程沉淀能力。
  • 数字员工不只是临时聊天入口,而是可选择业务模板执行。

验收

  • 放入一个 PlanTemplate.toml 后,数字员工页面能展示。
  • 点击执行后生成 Plan / Task / Run。

Phase 6Skill Catalog 融合

目标:把 qimingclaw 的 MCP / ACP 工具治理成 sgRobot 风格 Skill。

数据模型

Skill
  skill_id
  name
  description
  version
  kind
  input_schema
  output_schema
  timeout_policy
  retry_policy
  approval_policy
  sandbox_policy
  enabled

来源映射

MCP tools
ACP commands
qimingclaw built-in tools
GUI agent tools
file server tools

与数字员工页面关系

数字员工“技能库”展示 qimingclaw Skill Catalog。

用户可以:

  • 查看技能
  • 启用 / 禁用
  • 查看所属 MCP server
  • 查看输入输出说明
  • 查看最近调用记录

产出

  • 工具从“技术配置”变成“数字员工能力”。
  • PlanTemplate 可以绑定 Skill。

验收

  • MCP tool 能出现在技能库。
  • 禁用技能后PlanTemplate 或任务执行不会再选择它。

Phase 7Approval / Human-in-the-loop

目标:吸收 sgRobot 的人工治理机制。

融合对象

qimingclaw 已有 ACP permission 和 sandbox permission 概念。

需要统一成:

Approval

来源包括:

  • 文件写入
  • 命令执行
  • 外部服务调用
  • 高风险工具
  • Plan 执行确认
  • Task 重试 / 跳过 / 取消

与数字员工页面关系

数字员工页面展示:

  • 待审批
  • 已批准
  • 已拒绝
  • 等待输入
  • 风险说明

用户可操作:

  • approve
  • reject
  • approve once
  • approve always
  • pause
  • resume
  • cancel

产出

  • 人工介入成为主路径能力。
  • 数字员工不是黑箱自动执行。

验收

  • ACP permission request 能进入数字员工审批区。
  • 用户在数字员工页面审批后ACP 执行继续。

Phase 8Artifact / 日报 / 汇报

目标:把执行结果正式沉淀为产物,并由数字员工生成日报和汇报视图。

Artifact 类型

file
report
screenshot
log
json
markdown
diff
summary

日报数据来源

Run
Event
Artifact
Approval
Task status
Plan status

与数字员工页面关系

数字员工“日报”区域展示:

  • 今日执行
  • 成功 / 失败 / 异常
  • 人工介入次数
  • 关键产物
  • 风险提示
  • 可下载报告

产出

  • qimingclaw 的执行结果可沉淀、可回看、可汇报。

验收

  • 完成任务后能在日报区域看到执行摘要。
  • Artifact 可从任务详情进入查看。

Phase 9ManagedService / 常驻能力治理

目标:吸收 sgRobot 对长期服务能力的治理方式。

qimingclaw 当前已有多个服务:

computerServer
fileServer
lanproxy
mcpProxy
agent
guiServer
adminServer

需要把它们建模为:

ManagedService
ServiceInstance
ServiceLease

与数字员工页面关系

数字员工页面可以展示:

  • 服务健康
  • 最近错误
  • 重启次数
  • 当前依赖它的任务
  • 是否需要人工处理

产出

  • 服务状态不只在客户端设置页展示,也进入数字员工的运行上下文。

验收

  • 服务异常时,数字员工首页能提示。
  • 服务恢复后,事件和状态同步更新。

Phase 10Plan Agent / Task Agent

目标:在 qimingclaw 内形成 sgRobot 的双层 Agent 架构。

这是后期能力,不建议提前做。

Plan Agent

负责:

  • 计划生命周期
  • 用户对话
  • 异常决策
  • 审批转发
  • 重试 / 跳过 / 重规划

Task Agent

负责:

  • 单个 Task 的执行
  • ACP session 调用
  • MCP tool 调用
  • 进度上报
  • 产物回写

推荐链路

User
  -> Digital Employee
  -> Plan Agent
  -> Task Agent
  -> ACP / MCP
  -> Event / Artifact / Approval
  -> Digital Employee Projection

产出

  • qimingclaw 从“Agent 客户端”升级为“数字员工任务操作系统”。

推荐实施顺序

按风险和收益排序:

1. 数字员工前端源码融合
2. 数字员工 API 适配层
3. Run / Event / Artifact 轻量控制平面
4. Task / Plan 基础模型
5. PlanTemplate
6. Skill Catalog
7. Approval / Human-in-the-loop
8. 日报与 Artifact
9. ManagedService
10. Plan Agent / Task Agent

第一阶段验收清单

第一阶段完成后,应满足:

  • qimingclaw 内有数字员工前端源码目录。
  • public/sgrobot-digital 可由脚本生成。
  • 不启动 sgRobot 后端也能打开“概览”。
  • “概览”直接显示数字员工页面。
  • 不出现 sgRobot 配对页。
  • 不手工维护压缩后的 dist/assets/*.js
  • sgRobot 仓库不参与 qimingclaw 提交。
  • npm run build:renderer 通过。

最终验收标准

整个融合完成后,应满足:

  • 数字员工页面显示 qimingclaw 真实数据。
  • 远程 /computer/chat 请求能生成 Run 和 Event。
  • 用户能在数字员工页面看到任务进度、失败、产物和审批。
  • PlanTemplate 能创建可执行计划。
  • Skill Catalog 能治理 MCP/ACP 工具。
  • 日报能基于真实 Run/Event/Artifact 生成。
  • qimingclaw 不依赖 sgRobot daemon。
  • sgRobot 的核心理念和对象模型被 qimingclaw 吸收,而不是简单嵌入另一个应用。