Files
qiming/qimingclaw/docs/digital-employee-frontend-integration-plan.md
2026-06-09 11:06:25 +08:00

1293 lines
46 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sgRobot 核心能力融合计划
## 定位
本计划不是单纯的“前端页面嵌入计划”。
真正目标是:
```text
以 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 样式污染
- 路由体系互相影响
推荐方式:
```text
源码融合
-> 独立构建
-> 输出静态资源
-> qimingclaw webview 加载
-> 后续通过 qimingclaw API 接真实数据
```
## 目标架构
最终目标链路:
```text
用户目标 / 后端远程任务 / 定时任务
-> Plan 或 Direct Task
-> Task
-> Run
-> qimingclaw ACP / MCP 执行
-> Event / Artifact / Approval
-> Projection
-> 数字员工页面展示与人工介入
```
核心对象:
```text
Plan
PlanStep
Task
Run
Skill
Event
Artifact
Approval
MemoryEntry
ManagedService
```
第一轮不要求一次性实现全部对象,但数据库和 API 设计要为这些对象预留边界。
## 当前状态
已完成的过渡实现:
```text
crates/agent-electron-client/public/sgrobot-digital/
crates/agent-electron-client/src/renderer/components/pages/OverviewPage.tsx
```
早期链路:
```text
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 前端源码目录:
```text
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/
```
新增脚本:
```text
scripts/sync-sgrobot-digital.js
scripts/build-sgrobot-digital.js
```
当前 qimingclaw 已新增:
```text
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
```
常用命令:
```bash
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 主客户端构建。
同步范围优先包含:
```text
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 容器处理
当前边界:
- 前端已从“纯构建产物快照”推进为“源码同步 + 独立构建 + 静态嵌入”。
- 数字员工页面已接入 qimingclaw bridge/API adapter不再让 demo mission/skill 冒充真实记录。
- qimingclaw 已落地 Plan / Task / Run / Event / Artifact / Approval 本地模型和 outbox。
- 下一阶段应开始建设 qimingclaw 本地数字员工 API 适配层。
## Phase 2qimingclaw 数字员工 API Adapter已开始
目标:让数字员工页面开始消费 qimingclaw 语义的数据,而不是完全依赖 sgRobot demo fallback。
当前 qimingclaw 已新增:
```text
crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts
```
当前覆盖的页面接口:
```text
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 内置的客户端任务职责。
- 主进程 SQLite settings 保存的今日任务选择、角色偏好、运营偏好和日报生成状态webview `localStorage` 仅保留为非 Electron 环境兜底和旧 key 迁移来源。
- 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 已扩展:
```text
crates/agent-electron-client/src/preload/webviewPerfBridge.ts
crates/agent-electron-client/src/main/main.ts
```
桥接对象:
```text
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 已新增:
```text
crates/agent-electron-client/src/main/services/digitalEmployee/stateService.ts
crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts
```
新增 IPC
```text
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_plans``digital_tasks``digital_runs``digital_events``digital_artifacts``digital_approvals`
- 在 computer server 的 `/computer/chat` 入口创建 Task / Run。
- 在 ACP event forwarder 中写入 Run/Event。
## Phase 5管理端任务入口落地已开始
目标:管理端或后端通过 `/computer/chat` 下发任务时qimingclaw 本地数字员工状态可以生成真实任务记录。
当前 qimingclaw 已接入:
```text
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 已接入:
```text
crates/agent-electron-client/src/main/ipc/eventForwarders.ts
crates/agent-electron-client/src/main/services/digitalEmployee/stateService.ts
```
记录来源:
- ACP session SSE 事件:`message.updated``session.updated``session.status``session.idle``session.error` 等。
- computer 执行进度:`computer:progress`
- prompt 生命周期:`computer:promptStart``computer:promptEnd`
- Agent 生命周期:`ready``destroyed``error`
当前落库方式:
- 运行中的事件会创建/更新对应 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 已新增:
```text
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` 拼接:
```text
/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_plans``digital_plan_steps``digital_schedules``digital_schedule_runs``digital_tasks``digital_runs``digital_events``digital_artifacts``digital_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 中的 `artifacts``outputs``files``outputPath``uri` 等字段会作为正式 artifact 记录为空时的兼容产物入口展示。
- qimingclaw 主进程记录 `/computer/chat` 结果和 runtime event 时,会从 payload 的 `artifacts``outputs``files``attachments``outputPath``uri` 以及 `approvals``approval_requests``needApproval` 等字段轻量提取正式 `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_plan``submit_plan``approve_plan``activate_plan``create_schedule``run_schedule_now` 等命令返回本地可解释结果,其中激活/立即运行会映射到 adapter 的 dispatch/workday 状态。
- 日报下载不再打开 sgRobot 风格 PDF 后端直链;生成日报后会基于当前 qimingclaw workday 投影在浏览器内导出本地文本日报。
- 任务中心和委托详情不再使用 sgRobot demo mission fallback没有 qimingclaw Plan / Task / Run / Event 时展示真实空态或错误态,避免示例任务冒充本地任务记录。
- 技能库不再使用 sgRobot demo skill fallbackSkill Catalog 为空或读取失败时展示真实空态 / 错误态,避免示例技能冒充本机能力。
- 嵌入页 localStorage/sessionStorage 的运行态 key 已切换到 `qimingclaw:*` / `qimingclaw_digital_*` 命名;旧 sgRobot/zeroclaw key 仅作为迁移读取或清理,不再作为新状态写入目标。
- 数字员工本地表不另建 sgRobot SQLite统一建在 qimingclaw 主进程数据库 `~/.qimingclaw/qimingclaw.db` 内,作为 qimingclaw 客户端本地事实缓存与 outbox表结构在主进程启动时创建数字员工 runtime/sync 服务读写前也会按需自修复执行 `CREATE TABLE IF NOT EXISTS`
- 同步状态通过 bridge 返回最近失败 outbox 明细首页可直接看到实体类型、outbox ID、操作类型、重试次数、失败时间和下次自动重试时间。
- 本地 SQLite 额外记录 `digital_sync_attempts`,每次 outbox 推送成功、失败或部分 ack 缺失都会留下一次尝试历史,默认保留最近 30 天。
- 点击失败 outbox 可打开详情弹窗,查看完整错误、实体 ID、退避状态、最近重试历史并可复制或导出诊断 JSON也可触发手动 `flushSync` 立即重试。若已配置管理端同步地址,详情弹窗可直接打开对应的管理端同步记录深链。
- qimingclaw 自动生成的管理端深链只携带 `device_id``entity_type``entity_id``outbox_id`,避免在 URL 中暴露客户端 Key同时仍能区分同租户下的不同客户端管理端列表仍保留客户端 Key 手动筛选能力。
新增 IPC / Bridge
```text
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_id``entity_type``entity_id``remote_id`
- 若管理端只 ack 批次中的部分 item已 ack 的 item 会标记 synced未 ack 的 item 会保留 failed 状态并进入下一轮补偿。
- 当前接口沿用管理端登录态鉴权,客户端必须能读取到客户端 Key 和登录 ticket/token 才会推送;缺少凭据时保持本地 outbox 等待,并在数字员工同步状态条显示缺少项。
- 管理端接收 outbox 时会校验 `X-Qiming-Client-Key`,请求体缺少 `client_key` 时以 header 为准,二者不一致时拒绝写入。
后端最小落点:
```text
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
```
后端观察接口:
```text
GET /api/digital-employee/sync/records
```
- 支持 `client_key``device_id``entity_type``entity_id``outbox_id``page_no``page_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 观察面升级为业务视图。
- 数字员工页面继续补充管理端业务视图入口和失败分组统计。
管理端业务视图建议:
```text
GET /api/digital-employee/plans
GET /api/digital-employee/plans/{plan_id}
GET /api/digital-employee/tasks
GET /api/digital-employee/runs
GET /api/digital-employee/events
GET /api/digital-employee/artifacts
GET /api/digital-employee/approvals
```
- 查询参数沿用同步记录维度:`client_key``device_id``entity_id``remote_id``status``sync_status``updated_from``updated_to``page_no``page_size`
- 业务视图先从通用 sync record 的 `entity_type/entity_id/payload/status/created_at/updated_at` 聚合,不要求立即拆物理表;后续再按容量和查询压力拆正式业务表。
- Plan 视图输出 `plan_id``title``objective``status``client_key_masked``device_id``task_count``run_count``latest_event_at``sync_status`
- Task / Run 视图保留 `plan_id``task_id``run_id` 关联Run 额外输出 `started_at``finished_at``duration_ms``last_event_message`
- Event / Artifact / Approval 视图保留原始 payload 抽屉,但列表层必须提炼 `kind/title/message/status/occurred_at`,避免管理端只能看 JSON 排障。
- qimingclaw 客户端的失败详情深链仍指向 sync record管理端命中后可跳转到对应业务视图详情形成“同步诊断 -> 业务事实”的双入口。
## 尚未完全吸收的核心能力清单
以下清单按当前 qimingclaw 已落地状态盘点,不重复列出已完成的前端嵌入、本地 Plan / Task / Run / Event / Artifact / Approval、outbox 同步、技能投影和同步诊断。
1. **PlanStep 与依赖图(已开始)**
- 已吸收Plan / Task / Run 记录、计划模板、`create_plan` 中的 steps/tasks 可物化为任务PlanStep 已开始作为正式本地实体落入 `digital_plan_steps`
- 当前能力PlanStep 会进入 `digital_sync_outbox`entity type 为 `plan_step`;任务中心 flow 和 debug store 优先读取真实 PlanStep 生成步骤图。
- 后续缺口:步骤级重试/跳过/取消、步骤依赖调度和跨任务编排执行仍待吸收。
- 建议:下一轮围绕 Task Agent 状态机补步骤级治理命令。
2. **调度 / 定时 / 周期任务**
- 已吸收:`digital_schedules``digital_schedule_runs` 已进入 qimingclaw 本地 SQLite 与 outboxentity type 为 `schedule` / `schedule_run`;旧 `/api/cron``/api/scheduler/jobs` 和治理命令会优先读取真实本地调度记录。
- 当前能力:主进程 `DigitalEmployeeScheduler` 可按本机 5 字段 cron 到点触发本地 `/computer/chat`,支持启动 catch-up、立即运行、暂停/恢复/删除、失败重试、运行历史和同步诊断。
- 后续缺口:更细的秒级 cron、复杂日历排除规则、多调度并发策略 UI 和管理端调度策略下发仍待吸收。
- 建议:下一轮围绕入口路由/任务分流,把 schedule 触发的计划与具体 Skill Policy、Task Agent 状态机更精确地绑定。
3. **MemoryEntry / 长期记忆**
- 已吸收qimingclaw 主客户端已有 memory 服务和 scheduler但尚未纳入数字员工模型。
- 缺口:`MemoryEntry` 未投射为数字员工能力embedded `/api/memory` 仍未由 qimingclaw adapter 接管;记忆未进入数字员工 outbox / 管理端视图。
- 建议:先把 qimingclaw memory 列表投射到数字员工,再补记忆新增、更新、归档和同步。
4. **治理命令完整生命周期**
- 已吸收:`create_plan``submit_plan``approve_plan``activate_plan` 等基础命令可记录本地运行事实。
- 缺口:`cancel``retry``skip``pause``resume``escalate`、计划 revision、任务 action endpoint 和治理审计链还不完整。
- 建议:围绕 Task Agent 状态机补命令映射,并把每次治理操作写入 Event / outbox。
5. **ManagedService 控制面**
- 已吸收Agent、MCP、Computer Server、Lanproxy、File Server、GUI Server 状态已进入 snapshot / projection。
- 缺口:仍是只读状态,缺少 start / stop / restart、lease 持久化、重启历史、服务异常恢复策略和人机介入入口。
- 建议:先做只允许安全服务的 restart bridge保持高风险命令不暴露。
6. **技能生命周期与策略**
- 已吸收ACP / MCP / GUI / file server 能力已投射到 Skill Catalog技能库不再使用 demo fallback。
- 缺口:技能启用/禁用当前主要是兼容返回尚未真正持久化策略缺少技能安装、版本、权限范围、allow/deny 生效和调用审计视图。
- 建议:新增本地 skill policy settings并让 Skill Library 的 enabled 状态影响后续任务分配和展示。
7. **产物交付闭环**
- 已吸收:运行 payload 中的 artifacts / outputs / files / uri 可提取为正式 `digital_artifacts` 并同步。
- 缺口:缺少文件上传/下载生命周期、产物预览、版本、保留策略、交付状态和管理端业务产物视图。
- 建议:先把 File Server 的 workspace / upload / download 状态写入 Artifact payload再补管理端产物列表。
8. **审批 / 人工介入增强**
- 已吸收approval 记录、workday decision、ACP permission 响应桥已有雏形。
- 缺口缺少评论、转交、超时、SLA、通知、审批历史、风险等级和多步审批流。
- 建议:先补 approval timeline 和 notification 投影,再做多动作审批。
9. **通知 / Inbox / 用户消息**
- 已吸收:运行事件和同步失败能在数字员工页面展示。
- 缺口sgRobot 风格 `/api/notifications`、未读数、read/dismiss/reply 尚未由 qimingclaw adapter 接管;没有统一数字员工 Inbox。
- 建议:把 approval、同步失败、服务异常和任务完成统一投射为通知。
10. **入口路由 / 任务分流**
- 已吸收:管理端通过 `/computer/chat` 进入 qimingclaw 后会生成本地任务事实。
- 缺口:`/api/ingress/route``/api/route-decisions` 类能力未吸收;缺少按任务类型、技能、风险、上下文自动路由到 Plan/Task/Skill 的决策记录。
- 建议:先把每次远程任务的路由决策写成 Event再补可视化时间线。
11. **诊断 / 成本 / 审计视图**
- 已吸收:同步失败诊断较完整,部分 sandbox / memory / service 日志在 qimingclaw 其他模块中存在。
- 缺口:`/api/doctor``/api/cost``/api/audit`、sandbox audit、token/cost、CLI/tool 调用审计尚未统一进入数字员工视图和 outbox。
- 建议:从只读 dashboard 投影开始,避免先做复杂写操作。
12. **管理端业务查询模型**
- 已吸收:管理端已有通用 sync record 接收、查询、payload 摘要和深链。
- 缺口:尚未拆出 `/api/digital-employee/plans/tasks/runs/events/artifacts/approvals` 业务视图;管理端仍主要从同步记录观察事实。
- 建议:先从 sync record 聚合业务视图,不急于拆物理业务表。
13. **日报实体与导出交付**
- 已吸收embedded 页面可基于当前 workday projection 导出本地文本日报。
- 缺口:没有正式 DailyReport 实体、日报计划、PDF/HTML 产物、发送记录、管理端回传和日报审批闭环。
- 建议:将日报生成记录作为 Artifact + Event 先沉淀,再考虑格式化导出。
## 管理端联动原则
数字员工状态是本地优先,但不能成为本地孤岛。
本地 SQLite 表设计必须同时满足:
- 离线可用:客户端无网络时仍能展示任务、运行明细和日报。
- 可追溯:本地每个 Plan / Task / Run / Event 都有稳定本地 ID。
- 可同步:预留管理端 ID 和同步状态。
- 可补偿:同步失败后可通过 outbox 重试。
当前已新增/规划的本地表:
```text
digital_plans
digital_plan_steps
digital_schedules
digital_schedule_runs
digital_tasks
digital_runs
digital_events
digital_artifacts
digital_approvals
digital_sync_outbox
```
同步字段:
```text
remote_id
sync_status
last_synced_at
sync_error
```
同步流建议:
```text
本地写入 Plan/Task/Run/Event
-> digital_sync_outbox pending
-> 管理端 sync API
-> 回填 remote_id
-> sync_status = synced
```
管理端 API 尚未在 qiming-backend 中确认最终路径,因此当前 qimingclaw 先落本地同步契约,不硬编码远端接口。
当前同步 item 契约:
```text
contract_version = qimingclaw.digital_employee.sync.v1
outbox_id
entity_type
entity_id
operation
entity_summary { title, status, summary }
business_view { entity_type, local_id, title, status, ...typed fields }
payload
```
`business_view` 按 Plan / Task / Run / Event / Artifact / Approval 归一常用业务字段,管理端可以先消费该稳定视图;`payload` 保留客户端原始上下文,便于后续扩展和审计。
### 产出
- 数字员工页面可以从源码重新构建。
- `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
```text
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。
- 无 qimingclaw 真实数据时展示真实空态 / 错误态,不再用 demo mission/skill 兜底。
## Phase 3Run / Event / Artifact 轻量控制平面
目标:把 qimingclaw 当前执行链路正式记录为可展示、可审计的运行对象。
### 当前 qimingclaw 执行链路
```text
backend
-> lanproxy
-> computerServer:60006 /computer/chat
-> agentService.ensureEngineForRequest
-> AcpEngine.chat
-> ACP session / prompt
-> /computer/progress/{session_id} SSE
```
### 需要新增的核心表
先落地最小集合:
```text
runs
events
artifacts
approvals
```
推荐语义:
- `Run`:一次 qimingclaw 执行尝试。
- `Event`:执行过程中的事实记录。
- `Artifact`:执行结果、文件、报告、截图、日志摘要。
- `Approval`:权限请求、人工确认、风险操作确认。
### 映射方式
```text
/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
```text
Task
-> Run attempt 1
-> Run attempt 2
```
Task 管业务目标Run 管执行尝试。
### 再做 Plan / PlanStep
当 Task 稳定后,引入:
```text
Plan
PlanStep
```
Plan 用于承载多步骤业务流程。
### 数据关系
```text
Plan
-> PlanStep[]
-> Task[]
-> Run[]
-> Event[]
-> Artifact[]
-> Approval[]
```
### 产出
- 数字员工任务中心从“执行记录列表”升级为“计划 / 任务 / 步骤”视图。
- 支持多步骤任务展示。
- 支持失败隔离和重试。
### 验收
- 单步任务能以 Task 展示。
- 多步任务能以 Plan 展示。
- 每个 Task 能看到 Run 历史。
## Phase 5PlanTemplate 融合
目标:吸收 sgRobot 的业务流程模板能力。
### 新增目录
```text
~/.qimingclaw/plan_templates/
```
支持文件:
```text
PlanTemplate.toml
PlanTemplate.json
```
当前客户端实现先读取本机目录,不依赖 sgRobot daemon。main process 通过
`digitalEmployee:getPlanTemplates` IPC 暴露模板列表preload bridge 提供
`window.QimingClawBridge.digital.getPlanTemplates()` 给 embedded digital 页面使用。
模板字段支持:
```text
plan_id / id / template_id
title / name
objective / description
status
steps[].step_id / steps[].id
steps[].preferred_skills / steps[].skills
steps[].tasks[].task_id / steps[].tasks[].id
```
### API
```text
GET /api/plan-templates
GET /api/plan-templates/:id
POST /api/plan-templates/:id/activate
```
### 与数字员工页面关系
数字员工“任务设置”区域读取 PlanTemplate。
用户可以:
- 查看模板
- 选择今日任务
- 一键执行
- 设置定时
页面融合位置:
- 任务设置:模板作为可选业务流程展示。
- 任务中心:模板步骤和任务合并到本地运行视图。
- 调度:模板生成 `plan_template` 类型 job。
- 详情/聊天:无运行态时以模板内容生成计划流和消息。
- 执行:点击模板执行会写入正式 `activate_plan` governance command生成 Plan / Task / Run / Event / outbox同步给管理后端。
- 创建 / 重新执行:`create_plan` payload 中的 `steps` / `tasks` 会展开为真实 pending Task后续 `submit_plan``approve_plan``activate_plan` 保留原计划标题和目标,不再用治理动作名覆盖业务计划。
- 调度去重:任务中心通过 `/api/governance/command` 激活计划时只记录一次治理命令,直接 `/api/debug/plan/:id/dispatch` 入口仍会自行记录本地激活。
### 产出
- qimingclaw 具备业务流程沉淀能力。
- 数字员工不只是临时聊天入口,而是可选择业务模板执行。
### 验收
- 放入一个 `PlanTemplate.toml` 后,数字员工页面能展示。
- 放入一个 `PlanTemplate.json` 后,数字员工页面能展示。
- 点击执行后生成 Plan / Task / Run。
- 执行记录进入 `digital_sync_outbox`,后续由本地同步链路上报。
## Phase 6Skill Catalog 融合
目标:把 qimingclaw 的 MCP / ACP 工具治理成 sgRobot 风格 Skill。
### 数据模型
```text
Skill
skill_id
name
description
version
kind
input_schema
output_schema
timeout_policy
retry_policy
approval_policy
sandbox_policy
enabled
```
### 来源映射
```text
MCP tools
ACP commands
qimingclaw built-in tools
GUI agent tools
file server tools
```
### 与数字员工页面关系
数字员工“技能库”展示 qimingclaw Skill Catalog。
当前客户端实现由 `digitalEmployee:getSkillCapabilities` IPC 输出本地 Skill Catalog
embedded digital 页面通过 `window.QimingClawBridge.digital.getSkillCapabilities()`
合并到 `/api/skill`。目录已覆盖 MCP server / tool并把 qimingclaw ACP 内建能力
投射为 SkillGUI agent tool 和 file server tool 也已作为 qimingclaw 本地技能源
进入目录。
MCP 技能字段已包含:
```text
server_id
transport
running
tools / tool_count
allow_tools / deny_tools
governance.effective_policy
recent_calls / call_count / last_called_at
project_ids
```
ACP 技能目录已包含:
```text
qimingclaw-acp-session
qimingclaw-computer-control
qimingclaw-acp-permission
qimingclaw-artifact-reporting
```
这些技能会展示 Agent 引擎、运行状态、活跃会话数、内建 command/tool 列表,
并从本地 digital runtime events 归集最近调用、项目 ID 和会话 ID。
GUI / File Server 技能目录已包含:
```text
qimingclaw-gui-agent
qimingclaw-file-server
gui_execute_task / gui_analyze_screen / gui_click / gui_type / ...
create_workspace / upload_file / download_all_files / export_project / ...
```
这些本地技能会展示对应服务运行状态、端口、工具列表,并从 runtime event 的
`toolName``source`、workspace/upload/download/artifact 等线索归集最近调用。
用户可以:
- 查看技能
- 启用 / 禁用
- 查看所属 MCP server
- 查看 MCP allow / deny 策略
- 查看 MCP proxy 运行状态
- 查看 ACP 内建能力与最近调用
- 查看 GUI agent / file server 本地工具和最近调用
- 查看输入输出说明
- 查看最近调用记录
### 产出
- 工具从“技术配置”变成“数字员工能力”。
- PlanTemplate 可以绑定 Skill。
- MCP server 和工具能按治理策略投射成可扫描的技能卡。
### 验收
- MCP tool 能出现在技能库。
- MCP server 能显示 allow / deny、运行状态和最近调用。
- 禁用技能后PlanTemplate 或任务执行不会再选择它。
## Phase 7Approval / Human-in-the-loop
目标:吸收 sgRobot 的人工治理机制。
### 融合对象
qimingclaw 已有 ACP permission 和 sandbox permission 概念。
需要统一成:
```text
Approval
```
来源包括:
- 文件写入
- 命令执行
- 外部服务调用
- 高风险工具
- Plan 执行确认
- Task 重试 / 跳过 / 取消
### 与数字员工页面关系
数字员工页面展示:
- 待审批
- 已批准
- 已拒绝
- 等待输入
- 风险说明
当前客户端实现:
- ACP `permission.updated` / `permission.replied` 事件会被 event forwarder 归一成 runtime event。
- `approval_requests` 会抽取到 `digital_approvals`,并进入本地 outbox。
- embedded digital 页面展示这些 runtime approval。
- 用户点击同意 / 驳回时adapter 从 approval payload 取出 `sessionId` / `permissionId`,通过 preload bridge 调用 `agent:respondPermission`
- 本地 approval payload 会记录 `acpPermission` 回复结果,供管理端同步和审计。
用户可操作:
- approve
- reject
- approve once
- approve always
- pause
- resume
- cancel
### 产出
- 人工介入成为主路径能力。
- 数字员工不是黑箱自动执行。
- 数字员工审批动作能继续 ACP permission 链路。
### 验收
- ACP permission request 能进入数字员工审批区。
- 用户在数字员工页面审批后ACP 执行继续。
- approval 同步 payload 能看到对应 `permission_id``session_id` 和回复结果。
## Phase 8Artifact / 日报 / 汇报
目标:把执行结果正式沉淀为产物,并由数字员工生成日报和汇报视图。
### Artifact 类型
```text
file
report
screenshot
log
json
markdown
diff
summary
```
### 日报数据来源
```text
Run
Event
Artifact
Approval
Task status
Plan status
```
### 与数字员工页面关系
数字员工“日报”区域展示:
- 今日执行
- 成功 / 失败 / 异常
- 人工介入次数
- 关键产物
- 风险提示
- 可下载报告
当前客户端实现:
- adapter 从 `digital_artifacts`、Run payload、Event payload 中抽取 artifact。
- artifact 会携带 `source_type``source_label``source_event_id``plan_id``task_id``run_id`
- 日报数据新增 `artifact_sources`,页面展示产物名称、来源和 URI。
- 下载的本地日报文本包含“产物来源”段落。
### 产出
- qimingclaw 的执行结果可沉淀、可回看、可汇报。
- 日报可以追溯到具体 Run / Event / Artifact 来源。
### 验收
- 完成任务后能在日报区域看到执行摘要。
- Artifact 可从任务详情进入查看。
- 日报区域能看到产物来源和 URI。
## Phase 9ManagedService / 常驻能力治理
目标:吸收 sgRobot 对长期服务能力的治理方式。
qimingclaw 当前已有多个服务:
```text
computerServer
fileServer
lanproxy
mcpProxy
agent
guiServer
adminServer
```
需要把它们建模为:
```text
ManagedService
ServiceInstance
ServiceLease
```
### 与数字员工页面关系
数字员工页面可以展示:
- 服务健康
- 最近错误
- 重启次数
- 当前依赖它的任务
- 是否需要人工处理
当前客户端实现:
- `digitalEmployee:getSnapshot` 输出 `managedServices`,由 Agent、MCP Proxy、Computer Server、File Server、Lanproxy、GUI Agent Server 状态投射生成。
- 每个服务包含 `serviceId``kind``status``requiresHumanAction``dependentTasks``instance``lease`
- embedded adapter 将其转换为 `workday.managed_services`,并写入 overview 指标、首页播报和 delivery lines。
- 服务异常或必需服务未运行时,首页“当前动作 / 下一步”会提示对应服务和受影响任务。
### 产出
- 服务状态不只在客户端设置页展示,也进入数字员工的运行上下文。
- 常驻服务具备 ManagedService / ServiceInstance / ServiceLease 的业务投影。
### 验收
- 服务异常时,数字员工首页能提示。
- 服务恢复后,事件和状态同步更新。
- 首页 overview 能看到服务运行数和需处理服务数。
## Phase 10Plan Agent / Task Agent
目标:在 qimingclaw 内形成 sgRobot 的双层 Agent 架构。
这是后期能力,不建议提前做。
### Plan Agent
负责:
- 计划生命周期
- 用户对话
- 异常决策
- 审批转发
- 重试 / 跳过 / 重规划
### Task Agent
负责:
- 单个 Task 的执行
- ACP session 调用
- MCP tool 调用
- 进度上报
- 产物回写
### 推荐链路
```text
User
-> Digital Employee
-> Plan Agent
-> Task Agent
-> ACP / MCP
-> Event / Artifact / Approval
-> Digital Employee Projection
```
当前客户端轻量实现:
- embedded adapter 从本地 Plan / Task / Run 派生 `plan_agents``task_agents`
- Plan Agent 包含计划生命周期、托管任务数、失败任务数、下一步动作和是否可重规划。
- Task Agent 包含执行状态、绑定 Skill、最新 Run、是否可 retry / skip / cancel以及下一步动作。
- 首页 overview 展示 Plan Agent、Task Agent 和可治理任务数量;播报区域优先提示可治理 Task Agent。
- 首页“今日执行”面板已提供 Task Agent 控制条,可对可治理任务发起重试、跳过、取消,并复用 governance command 写入本地运行状态和 outbox。
- `retry_task``skip_task``pause_task``resume_task``provide_task_input``cancel_task``start_run``cancel_run` governance command 会被 qimingclaw adapter 接受并写入正式本地 governance 记录。
### 产出
- qimingclaw 从“Agent 客户端”升级为“数字员工任务操作系统”。
- 计划/任务执行开始具备 Plan Agent / Task Agent 控制平面投影。
- Task Agent 的 retry / skip / cancel 不再只是提示,已经具备用户可触发的本地治理入口。
## 推荐实施顺序
按风险和收益排序:
```text
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` 可由脚本生成。
- `npm run check:digital-employee` 可重复验证数字员工关键单测、main build、embedded build、静态资源引用和本机 SQLite digital schema。
- 不启动 sgRobot 后端也能打开“概览”。
- “概览”直接显示数字员工页面。
- 不出现 sgRobot 配对页。
- 不手工维护压缩后的 `dist/assets/*.js`
- sgRobot 仓库不参与 qimingclaw 提交。
- `npm run build:renderer` 通过。
### 本地验证入口
```bash
cd crates/agent-electron-client
npm run check:digital-employee
```
该命令不启动 sgRobot daemon。本机已有 `~/.qimingclaw/qimingclaw.db` 时会检查 `digital_*` 表;数据库尚未生成或 `sqlite3` 不可用时只跳过 schema 检查,代码回归仍继续执行。
## 最终验收标准
整个融合完成后,应满足:
- 数字员工页面显示 qimingclaw 真实数据。
- 远程 `/computer/chat` 请求能生成 Run 和 Event。
- 用户能在数字员工页面看到任务进度、失败、产物和审批。
- PlanTemplate 能创建可执行计划。
- Skill Catalog 能治理 MCP/ACP 工具。
- 日报能基于真实 Run/Event/Artifact 生成。
- qimingclaw 不依赖 sgRobot daemon。
- sgRobot 的核心理念和对象模型被 qimingclaw 吸收,而不是简单嵌入另一个应用。