吸收数字员工高风险缺口安全壳总收口

This commit is contained in:
baiyanyun
2026-06-15 23:33:11 +08:00
parent 3a41eb40d0
commit d0b7223b53
3 changed files with 146 additions and 14 deletions

View File

@@ -2557,6 +2557,53 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
assertThat(billingCharge.getReasonCodes()).contains("billing_actual_disabled");
}
@Test
void createAdminActionRejectsRemainingHighRiskClosureActions() {
Map<String, String> disabledActions = Map.ofEntries(
Map.entry("edit_policy_remote", "edit_policy_remote_disabled"),
Map.entry("auto_merge_policy", "auto_merge_policy_disabled"),
Map.entry("auto_decide_approval", "auto_decision_disabled"),
Map.entry("route_recover_execute", "route_recovery_disabled"),
Map.entry("cleanup_file_batch", "batch_cleanup_disabled"),
Map.entry("remote_delete_artifact", "remote_delete_disabled"),
Map.entry("real_push_notification", "real_push_disabled"),
Map.entry("external_send_daily_report", "external_send_disabled"),
Map.entry("third_party_send", "third_party_channel_disabled"),
Map.entry("run_schedule_now", "run_schedule_now_disabled"),
Map.entry("start_scheduler", "start_scheduler_disabled"),
Map.entry("hard_interrupt", "hard_interrupt_disabled"),
Map.entry("activate_plan", "high_risk_governance_action_disabled"),
Map.entry("cancel_run", "high_risk_governance_action_disabled"),
Map.entry("cancel_task", "high_risk_governance_action_disabled"),
Map.entry("accept_remote_approval_batch", "high_risk_governance_action_disabled"),
Map.entry("start_service", "start_service_disabled"),
Map.entry("stop_service", "stop_service_disabled"),
Map.entry("lease_takeover", "lease_takeover_disabled"),
Map.entry("execute_auto_recovery", "auto_recovery_execution_disabled"),
Map.entry("install_skill", "install_action_disabled"),
Map.entry("upgrade_skill", "upgrade_action_disabled"),
Map.entry("edit_permission_scope", "permission_edit_disabled"),
Map.entry("merge_memory_auto", "merge_action_disabled"),
Map.entry("push_remote_memory_policy", "remote_memory_policy_disabled"),
Map.entry("run_shell_repair", "run_shell_repair_disabled"),
Map.entry("modify_system_config", "modify_system_config_disabled"),
Map.entry("restart_unlisted_service", "restart_unlisted_service_disabled"),
Map.entry("delete_file_repair", "delete_file_repair_disabled"),
Map.entry("real_billing_charge", "billing_actual_disabled"),
Map.entry("archive_sandbox_file", "sandbox_archive_file_disabled"),
Map.entry("execute_auto_repair", "auto_repair_execution_disabled")
);
disabledActions.forEach((action, reasonCode) -> {
DigitalEmployeeAdminActionResultDto result = service.createAdminAction(
adminActionRequest("high_risk_closure", action, action)
);
assertThat(result.getOk()).isFalse();
assertThat(result.getStatus()).isEqualTo("rejected");
assertThat(result.getReasonCodes()).contains(reasonCode);
});
}
@Test
void queryPendingAdminActionsFiltersTenantClientDeviceAndMasksKey() {
when(adminActionRepository.queryActions(eq(101L), eq("client-key-001"), eq("device-001"), eq("pending"), eq(1L), eq(20L)))

View File

@@ -3421,6 +3421,88 @@ function checkLocalDatabaseSchema() {
console.log(`[DigitalEmployeeCheck] ${requiredDigitalTables.length} digital tables OK`);
}
function checkDigitalAdminHighRiskClosure() {
console.log("\n[DigitalEmployeeCheck] Verify admin high-risk closure safety shell hooks");
const backendRoot = path.resolve(packageRoot, "..", "..", "..", "qiming-backend");
const qimingRoot = path.resolve(packageRoot, "..", "..", "..", "qiming");
const servicePath = path.join(
backendRoot,
"app-platform-modules",
"app-platform-agent",
"app-platform-agent-core-application",
"src",
"main",
"java",
"com",
"xspaceagi",
"agent",
"core",
"application",
"service",
"DigitalEmployeeSyncApplicationServiceImpl.java",
);
const testPath = path.join(
backendRoot,
"app-platform-modules",
"app-platform-agent",
"app-platform-agent-core-application",
"src",
"test",
"java",
"com",
"xspaceagi",
"agent",
"core",
"application",
"service",
"DigitalEmployeeSyncApplicationServiceImplTest.java",
);
const qimingOpsPath = path.join(qimingRoot, "src", "pages", "SystemManagement", "Content", "DigitalEmployeeOps", "index.tsx");
const docsPath = path.resolve(packageRoot, "..", "..", "docs", "digital-employee-frontend-integration-plan.md");
const service = fs.readFileSync(servicePath, "utf8");
const test = fs.readFileSync(testPath, "utf8");
const qimingOps = fs.readFileSync(qimingOpsPath, "utf8");
const docs = fs.readFileSync(docsPath, "utf8");
const requiredSnippets = [
[service, "edit_policy_remote_disabled", "backend remote policy edit disabled reason"],
[service, "auto_merge_policy_disabled", "backend auto merge disabled reason"],
[service, "run_schedule_now_disabled", "backend scheduler run disabled reason"],
[service, "hard_interrupt_disabled", "backend hard interrupt disabled reason"],
[service, "high_risk_governance_action_disabled", "backend high risk governance disabled reason"],
[service, "start_service_disabled", "backend service start disabled reason"],
[service, "stop_service_disabled", "backend service stop disabled reason"],
[service, "lease_takeover_disabled", "backend lease takeover disabled reason"],
[service, "auto_recovery_execution_disabled", "backend auto recovery disabled reason"],
[service, "install_action_disabled", "backend skill install disabled reason"],
[service, "upgrade_action_disabled", "backend skill upgrade disabled reason"],
[service, "permission_edit_disabled", "backend permission edit disabled reason"],
[service, "merge_action_disabled", "backend memory merge disabled reason"],
[service, "remote_memory_policy_disabled", "backend remote memory policy disabled reason"],
[service, "batch_cleanup_disabled", "backend batch cleanup disabled reason"],
[service, "real_push_disabled", "backend real push disabled reason"],
[service, "external_send_disabled", "backend external send disabled reason"],
[service, "third_party_channel_disabled", "backend third party send disabled reason"],
[service, "billing_actual_disabled", "backend real billing disabled reason"],
[service, "sandbox_archive_file_disabled", "backend sandbox archive file disabled reason"],
[service, "auto_repair_execution_disabled", "backend auto repair disabled reason"],
[test, "createAdminActionRejectsRemainingHighRiskClosureActions", "backend final high risk closure test"],
[qimingOps, "远程策略编辑禁用", "qiming policy edit guard copy"],
[qimingOps, "高风险执行禁用", "qiming high risk execution guard copy"],
[qimingOps, "批量真实清理禁用", "qiming batch cleanup guard copy"],
[qimingOps, "真实推送禁用", "qiming real push guard copy"],
[qimingOps, "正式外部日报页面禁用", "qiming formal daily report page guard copy"],
[docs, "高风险缺口安全壳总收口已完成", "docs high risk closure completion"],
[docs, "真实高风险执行另开专项", "docs high risk execution separated"],
];
const missing = requiredSnippets
.filter(([content, snippet]) => !content.includes(snippet))
.map(([, , label]) => label);
if (missing.length > 0) {
throw new Error(`Missing admin high-risk closure hooks: ${missing.join(", ")}`);
}
console.log("[DigitalEmployeeCheck] admin high-risk closure safety shell hooks OK");
}
function main() {
try {
runStep("Run digital employee unit tests", "npm", ["run", "test:run", "--", ...testFiles]);
@@ -3466,6 +3548,7 @@ function main() {
checkDigitalAdminDailyReportWorkbench();
checkDigitalAdminGovernanceCommandWorkbench();
checkDigitalAdminServiceSkillMemoryAuditClosure();
checkDigitalAdminHighRiskClosure();
checkLocalDatabaseSchema();
console.log("\n[DigitalEmployeeCheck] All checks passed");
} catch (error) {

View File

@@ -544,78 +544,80 @@ GET /api/digital-employee/approvals
- Event / Artifact / Approval 视图保留原始 payload 抽屉,但列表层必须提炼 `kind/title/message/status/occurred_at`,避免管理端只能看 JSON 排障。
- qimingclaw 客户端的失败详情深链仍指向 sync record管理端命中后可跳转到对应业务视图详情形成“同步诊断 -> 业务事实”的双入口。
## 尚未完全吸收的核心能力清单
## 高风险缺口安全壳总收口能力清单
高风险缺口安全壳总收口已完成:以下能力均已进入管理端视图、低风险意图记录、审计投影、静态守卫和明确禁用 reason。真实高风险执行另开专项当前不开放真实远程策略编辑、真实服务启停、真实批量删除、真实技能安装/升级、真实记忆合并、真实通知推送、真实账单扣费、真实自动修复或真实 ACP 硬中断。
以下清单按当前 qimingclaw 已落地状态盘点,不重复列出已完成的前端嵌入、本地 Plan / Task / Run / Event / Artifact / Approval / MemoryEntry、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 的 retry / skip / cancel / pause / resume / input / run 控制已可更新真实 Task、PlanStep、Run、Event 和 outbox前置步骤跳过、取消或重试后会重新评估后继步骤推进为 ready / blocked / pending 并写入依赖图事件scheduler sweep 会识别可派发的 ready PlanStep派发前先通过管理端 `POST /api/digital-employee/leases/plan-step-dispatch/acquire` 做跨设备强租约仲裁,管理端拒绝会以 `remote_lease_rejected` 跳过,管理端异常会降级为 5 分钟本地软租约 `payload.dispatchLease.source = local_fallback` 并记录 `remote_error`;调用本地 `/computer/chat` 后会写入 `plan_step_dispatch_*``governance_start_run` 事件,派发完成或失败会先尝试 `release` 管理端租约再释放本地 lease 并写入 `plan_step_lease_*` 事件;已有未过期租约的步骤仍会以 `lease_active` 跳过auto sweep 会按节流从管理端 `GET /api/digital-employee/policies/plan-step-dispatch` 拉取远端派发策略,拉取失败时保留本地策略并记录 `last_pull_error`embedded 已提供 `/api/digital-employee/plan-steps``/api/digital-employee/plan-step-graph``/api/digital-employee/plans/:planId/dispatch-ready-steps``/api/plan-step/dispatch-policy``/api/plan-step/dispatch-policy/pull`ready PlanStep 安全派发、计划级跨任务推进、管理端依赖图视图、本地/远端派发策略、可观察租约状态和首页阻塞依赖处理入口已开始闭环。派发策略管理 UI 已开始吸收embedded 新增“策略中心”集中展示和编辑 `enabled/max_per_sweep/auto_dispatch_ready_steps`。正式管理端策略中心预览已开始吸收qiming-backend 新增 `policy_center` 运营台视图聚合派发、风险审批、入口路由和技能策略快照qiming“数字员工运营台”的“策略中心”tab 可记录批量拉取策略、标记已看和忽略意图不开放远程策略编辑。策略治理审批路由总收口已开始吸收策略中心会展示策略编辑请求、合并建议和真实远程策略强编辑禁用状态。正式管理端步骤调度预览已开始吸收qiming“数字员工运营台”的“步骤调度”tab 会聚合 PlanStep fact、依赖状态、租约、派发事件和策略拉取审计只记录标记已看、忽略和重试策略检查意图不远程派发、不抢占租约、不释放租约。
- 后续缺口:跨设备审批策略冲突预览已开始吸收,策略冲突页可展示审批策略、冲突策略、裁决保护和自动裁决保护差异;跨设备调度派发策略冲突预览已开始吸收,策略冲突页可展示 `max_per_sweep``auto_dispatch_ready_steps``catch_up_on_startup``max_run_history` 差异;远程策略编辑安全模型、真实派发/租约裁决和跨设备策略自动合并仍待吸收
- 安全壳收口:跨设备审批策略冲突预览已开始吸收,策略冲突页可展示审批策略、冲突策略、裁决保护和自动裁决保护差异;跨设备调度派发策略冲突预览已开始吸收,策略冲突页可展示 `max_per_sweep``auto_dispatch_ready_steps``catch_up_on_startup``max_run_history` 差异;远程策略编辑、真实派发/租约裁决和跨设备策略自动合并已收口为请求、复核、禁用 reason 和审计投影
- 建议:下一轮围绕管理端正式路由 UI 或跨端审批策略 UI把本地可治理调度继续推进到跨端治理策略。
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、立即运行、暂停/恢复/删除、失败重试、运行历史和同步诊断。多调度并发策略 UI 已开始吸收embedded 新增“调度运营”入口,可查看 scheduler jobs、最近运行、`catch_up_on_startup``max_run_history`并触发一次立即检查调度。正式管理端调度运营预览已开始吸收qiming-backend 新增 `scheduler_operations` 运营台视图聚合 scheduler job、cron settings、lease、dispatch sweep 和 recent run 摘要qiming“数字员工运营台”的“调度运营”tab 只开放立即检查调度、标记已看和忽略意图,不开放 start/stop 或高风险立即运行。
- 后续缺口:跨设备调度派发策略冲突预览已开始吸收,管理端策略冲突页只读展示调度 catch-up、运行历史和派发 sweep 策略差异,不立即调度、不接管租约、不自动合并策略;更细的秒级 cron、复杂日历排除规则、正式外部管理端调度策略下发和跨设备调度冲突合并仍待吸收
- 安全壳收口:跨设备调度派发策略冲突预览已开始吸收,管理端策略冲突页只读展示调度 catch-up、运行历史和派发 sweep 策略差异,不立即调度、不接管租约、不自动合并策略;秒级 cron、复杂日历排除规则、正式外部调度策略下发和跨设备调度冲突合并已收口为策略快照、差异解释、复核意图和禁用 reason
- 建议:下一轮围绕入口路由/任务分流,把 schedule 触发的计划与具体 Skill Policy、Task Agent 状态机更精确地绑定。
3. **MemoryEntry / 长期记忆(已开始)**
- 已吸收qimingclaw `memoryService` 已投射为数字员工本地 `digital_memories`,支持从主客户端记忆列表同步、桥接新增和软删除;本地兜底记忆仍可在 memory 服务未初始化时工作。
- 当前能力embedded `/api/memory` 已由 qimingclaw adapter 接管GET / POST / DELETE 会通过 preload bridge 读写 `digital_memories`;记忆新增、更新和删除会进入 `digital_sync_outbox`entity type 为 `memory`,同步业务视图会提炼 key、category、source、status 和 content preview。记忆归档/恢复 UI、管理端长期记忆业务视图和记忆治理审计链已开始吸收embedded 新增“记忆治理”入口,可从 runtime memories 派生 key/category/source/status/content preview、重复候选和同步状态并通过本地 overlay/audit 批量归档、恢复或标记复核。正式管理端记忆治理预览已开始吸收qiming-backend 新增 `memory_governance` 运营台视图聚合 memory fact、归档/恢复/复核事件和重复候选摘要qiming“数字员工运营台”的“记忆治理”tab 可记录批量归档、批量恢复和标记复核等低风险动作意图。正式管理端记忆合并候选预览已开始吸收,运营台详情可展示治理状态、合并候选数、重复记忆 ID、最近治理动作和复核时间但不自动合并记忆。远端记忆策略预览已开始吸收qiming-backend 新增 `memory_policies` 运营台视图聚合记忆策略、合并策略和远端策略禁用状态qiming“数字员工运营台”的“记忆策略”tab 只记录拉取记忆策略、标记复核和忽略意图,不触发真实下发或自动合并。服务技能记忆审计诊断总收口已开始吸收,记忆治理/记忆策略会展示合并请求、远端策略请求、自动合并禁用和真实下发禁用,只记录合并复核或策略拉取请求。
- 后续缺口:真实合并执行、远端记忆策略真实下发和更完整的外部管理端长期记忆策略工作台仍待吸收
- 安全壳收口:真实合并执行、远端记忆策略真实下发和外部管理端长期记忆策略工作台已收口为合并候选、远端策略请求、策略拉取、复核/忽略意图和禁用 reason
- 建议:下一轮围绕管理端视图和记忆治理,把长期记忆从本地事实继续扩展到人工可审计、可归档、可合并的运营闭环。
4. **治理命令完整生命周期**
- 已吸收:`create_plan``submit_plan``approve_plan``activate_plan` 等基础命令可记录本地运行事实;任务级 `retry_task``skip_task``pause_task``resume_task``provide_task_input``cancel_task``start_run``cancel_run` 已具备本地事实闭环embedded plan / task action endpoint 已开始映射为正式 governance command治理审计链和低风险 action policy 已开始吸收route decision 自动映射 governance command 前会先经过低风险/受保护高风险 action guard未命中的动作写入 `route_action_policy_blocked`,所有 `governance_*` event 的同步 `business_view` 会提炼 command、route、实体目标、风险等级和结果字段`provide_task_input` 只同步 `input_length`
- 当前能力:`/api/plan/:id/submit``/api/debug/plan/:id/:action``/api/task/:id/:action` 会进入 qimingclaw 本地治理记录plan revision v1 可从 `governance_*` 事件投影只读时间线;数字员工首页会展示“治理审计/治理拦截”摘要,管理端通用 sync record 可通过 `business_view.category = governance` 消费治理命令审计字段。正式管理端治理命令预览已开始吸收qiming-backend 的 `governance_commands` 运营台视图会聚合治理命令记录、拒绝和低风险输入审计qiming“数字员工运营台”的“治理命令”tab 只开放标记已看和忽略意图,不开放 ACP 硬中断或高风险执行。正式管理端治理执行安全壳预览和正式管理端计划版本预览已开始吸收qiming-backend 新增 `plan_governance` / `plan_revisions` 视图聚合治理动作、升级请求、人工介入和版本复核摘要qiming“数字员工运营台”的“计划治理”“计划版本”tab 只记录标记已看、忽略、请求版本复核和记录升级等低风险意图;`hard_interrupt``activate_plan``cancel_run``cancel_task``accept_remote_approval_batch` 继续返回明确禁用 reason。正式管理端治理策略预览和计划版本物化预览已开始吸收qiming-backend 新增 `governance_policies` / `plan_revision_materialization` 视图聚合治理策略、策略保护、版本事实来源、基线版本和变更字段qiming“数字员工运营台”的“治理策略”“版本物化”tab 只记录策略拉取、复核、忽略和版本复核意图。策略治理审批路由总收口已开始吸收,治理策略详情补充高风险执行禁用和策略编辑/合并复核请求安全壳,不开放真实 ACP 高风险执行。
- 口:正式计划 revision 物理表、治理策略编辑 UI 和真实 ACP 执行流的硬中断仍不完整;计划版本物化预览不自动激活计划、不取消运行或任务。
- 安全壳收口:正式计划 revision 物理表、治理策略编辑 UI 和真实 ACP 硬中断已收口为版本物化预览、策略编辑请求、版本复核、升级记录和 `hard_interrupt_disabled`;计划版本物化预览不自动激活计划、不取消运行或任务。
- 建议:下一轮围绕正式管理端治理策略和 ACP 硬中断安全设计,把本地治理审计推进到完整跨端裁决与执行控制。
5. **ManagedService 控制面**
- 已吸收Agent、MCP、Computer Server、Lanproxy、File Server、GUI Server 状态已进入 snapshot / projectionFile Server 与 GUI Server 已开放白名单式 restart bridge并会写入 `managed_service_restart` / `managed_service_restart_rejected` 事件,安全服务 restart bridge 已开始闭环。完整人机介入入口已开始吸收embedded 新增“处置台”聚合服务异常、诊断风险、审计风险和策略拉取错误支持批量标记已看、忽略、策略重拉和白名单服务安全重启。正式外部管理端服务运营台预览已开始吸收qiming-backend 新增 `service_operations` 运营台视图聚合 managed service 快照、服务诊断和重启审计qiming“数字员工运营台”新增“服务运营” tab并只开放复核/忽略等低风险动作意图,不开放 start/stop。正式管理端服务恢复运营预览已开始吸收`service_operations` 继续聚合 service lease、restart record、recovery policy 和 doctor service issueqiming 详情可展示 lease holder/到期时间、重启次数/最近重启、恢复策略和自动恢复状态,并明确不接管 lease、不自动恢复服务。服务恢复安全壳预览已开始吸收`service_operations` 会展示服务启动/停止禁用、lease 接管禁用、自动恢复执行禁用和恢复请求状态,管理端动作记录会对 `start_service``stop_service``lease_takeover``execute_auto_recovery` 返回明确禁用 reason不进入客户端待执行队列。服务技能记忆审计诊断总收口已开始吸收服务运营会展示启动/停止请求、lease 接管请求、自动恢复请求和 start/stop 禁用,只记录请求与复核意图。
- 缺口:仍缺少真实 start / stop、lease 接管执行、自动恢复执行和完整外部管理端服务运营台Agent、MCP、Computer Server、Lanproxy 等高风险服务不暴露数字员工重启动作。
- 安全壳收口:真实 start / stop、lease 接管执行、自动恢复执行和完整外部管理端服务运营台已收口为服务恢复预览、启动/停止请求、lease 接管请求、自动恢复请求和禁用 reasonAgent、MCP、Computer Server、Lanproxy 等高风险服务不暴露数字员工重启动作。
- 建议:先沉淀安全重启审计和人工确认体验,再评估更细粒度的服务恢复策略。
6. **技能生命周期与策略**
- 已吸收ACP / MCP / GUI / file server 能力已投射到 Skill Catalog技能库不再使用 demo fallbackSkill Library 启用/禁用已写入 qimingclaw 本地 `digital_employee_skill_policies_v1.local_skills`,管理端下发策略写入 `remote_skills`远端禁用优先生效且不会被本地按钮覆盖入口路由候选技能会按有效策略过滤MCP 注入 Agent 前会应用有效技能策略ACP permission / tool update 会写入 `skill_call_allowed` / `skill_call_rejected` / `skill_call_observed` 审计事件,`policy_snapshot` 会包含本地/远端策略命中字段embedded 已提供 `/api/digital-employee/skill-call-audits` 只读投影、`POST /api/skill/policies/pull` 手动拉取入口技能调用策略与审计已开始闭环。管理端调用审计视图已开始吸收embedded 新增“技能审计”入口,将 skill call audit、tool_call_audit、sandbox_audit 和 token_cost 统一成可筛选列表,技能库可按 skill id 跳转聚焦。正式管理端技能审计预览已开始吸收qiming-backend 新增 `skill_audits` 运营台视图聚合 skill call、tool、sandbox 和 token/cost 安全摘要qiming“数字员工运营台”的“技能审计”tab 只开放标记复核和忽略意图,不安装技能、不变更权限范围。正式管理端技能版本权限预览已开始吸收,`skill_audits` 继续聚合 skill catalog / skill policy snapshotqiming 详情可展示技能版本、安装状态、权限范围、策略来源和策略状态,用于解释权限命中但不开放安装或权限编辑。正式管理端技能安装权限预览已开始吸收,`skill_audits` 继续展示安装请求、升级请求、权限策略和安装/升级/权限编辑禁用状态,只做安全壳提示和审计解释,不执行技能安装、升级或远程权限编辑。服务技能记忆审计诊断总收口已开始吸收,技能审计会展示安装/升级/权限编辑请求和禁用原因,只记录安装/升级请求或权限复核意图。
- 缺口:仍缺少真实技能安装、版本升级管理和细粒度权限范围编辑。
- 安全壳收口:真实技能安装、版本升级管理和细粒度权限范围编辑已收口为安装/升级请求、权限复核请求、策略来源展示和禁用 reason
- 建议:下一轮围绕管理端审计消费、技能安装和权限范围,把本地调用审计推进到更完整的跨端治理闭环。
7. **产物交付闭环**
- 已吸收:运行 payload 中的 artifacts / outputs / files / uri 可提取为正式 `digital_artifacts` 并同步File Server workspace / upload / download / export / file update 生命周期状态已开始写入 Artifact payload 的 `delivery` 对象embedded `/api/artifact` 和日报产物来源可读取交付阶段、状态、文件与 workspace 信息Artifact 预览/下载权限已开始闭环,嵌入页通过受控 bridge 访问本地产物,并写入 `artifact_access_allowed` / `artifact_access_rejected` 审计事件Artifact 版本/保留策略已开始闭环,业务产物视图可读取 version / retention 摘要,保留标记会写入 `artifact_retention_marked` / `artifact_retention_rejected` / `artifact_version_observed` 事件。真实文件清理执行已开始吸收,过期本地普通文件可通过独立 `cleanup` bridge 删除,清理结果会写入 `artifact_cleanup_executed` / `artifact_cleanup_rejected` / `artifact_cleanup_failed`artifact payload 与业务视图会投影 `cleanup_status``deleted_at` 和原因字段。保留策略批量治理和跨设备聚合视图已开始吸收embedded 业务视图新增 `artifact-groups` 产物聚合入口,可按版本/来源聚合产物、统计设备/版本/保留/清理状态,并通过受控批量接口写入保留、到期或复核标记;日报产物来源也提供批量标记到期入口。
- 正式管理端产物生命周期预览已开始吸收qiming“数字员工运营台”的“产物治理”tab 可只读聚合产物 lifecycle / access / retention / cleanup / version 业务视图,并通过低风险 admin action 记录 `mark_keep` / `mark_expire` / `mark_reviewed` 意图,等待客户端拉取执行;正式管理端协作运营收口已开始吸收,产物治理详情会展示 `cleanup_request_id``cleanup_eligible_count``batch_cleanup_disabled`,只允许记录批量清理申请,不执行批量真实清理。正式管理端产物跨设备聚合预览已开始吸收,产物治理详情可展示 artifact group、产物数、设备数、版本数、最新产物和 version key用于解释跨设备/跨版本聚合但不触发批量真实删除。资产通知日报业务查询总收口已开始吸收,产物治理详情会继续补充 `artifact_graph_id``group_key``related_artifact_ids`、保留/清理冲突和远端删除禁用状态。仍缺少批量真实文件清理、复杂跨设备图谱、正式外部生命周期工作台和更完整物化业务表。
- 安全壳收正式管理端产物生命周期预览已开始吸收qiming“数字员工运营台”的“产物治理”tab 可只读聚合产物 lifecycle / access / retention / cleanup / version 业务视图,并通过低风险 admin action 记录 `mark_keep` / `mark_expire` / `mark_reviewed` 意图,等待客户端拉取执行;正式管理端协作运营收口已开始吸收,产物治理详情会展示 `cleanup_request_id``cleanup_eligible_count``batch_cleanup_disabled`,只允许记录批量清理申请,不执行批量真实清理。正式管理端产物跨设备聚合预览已开始吸收,产物治理详情可展示 artifact group、产物数、设备数、版本数、最新产物和 version key用于解释跨设备/跨版本聚合但不触发批量真实删除。资产通知日报业务查询总收口已开始吸收,产物治理详情会继续补充 `artifact_graph_id``group_key``related_artifact_ids`、保留/清理冲突和远端删除禁用状态。批量真实文件清理、复杂跨设备图谱、正式外部生命周期工作台和更完整物化业务表已收口为聚合预览、申请记录、禁用 reason 和增量物化解释
- 建议:下一轮围绕正式管理端生命周期工作台和跨设备图谱,把 embedded 预览聚合推进到跨端运营治理。
8. **审批 / 人工介入增强**
- 已吸收approval 记录、workday decision、ACP permission 响应桥已有雏形;用户处理审批时会写入 `approval_decision` runtime event评论、转交、超时、风险标记会写入 `approval_action_recorded` / `approval_action_rejected`,并联动 embedded `/api/approval/:approvalId/timeline`、审批列表摘要、管理端 `/api/digital-employee/approval-history` 历史视图、`/api/approval/subscriptions` 订阅策略和 notification 投影;风险审批策略已支持管理端远端下发、手动拉取、本地策略评估、高风险动作前置拦截和本地设置页管理,`/api/risk-approval/policy` 可读写本地策略并记录 `update_risk_approval_policy`;多步审批 workflow 已复用 `digital_approvals.payload`,支持步骤推进、转交/超时/风险动作更新当前步骤、管理端审批更新拉取和审批处理回写,审批动作历史、风险策略、多步流程与通知联动已开始闭环;跨端审批冲突可视化已开始吸收,管理端远端更新与本地终态/更新时间/current step 不一致时会保留本地状态、记录 `approval_conflict_detected`、在业务视图投影 `approval_conflict_*` 字段,并在首页审批卡暂停直接同意/驳回;冲突解决动作闭环已开始吸收,客户端可通过独立 `resolveApprovalConflict` bridge 选择保留本地、采纳管理端或标记已复核,裁决会写入 `approval_conflict_resolved` / `approval_conflict_resolution_rejected`,并在审批业务视图投影 `approval_conflict_resolution``approval_conflict_resolved_at` 和裁决人摘要。跨设备批量冲突排查已开始吸收embedded 新增“介入台”聚合审批冲突、风险审批、路由干预和待处理通知,支持筛选、分页、批量保留本地和批量标记复核;批量采纳管理端被 `batch_accept_remote_disabled` 保护避免扩大状态分叉。正式管理端审批工作台预览已开始吸收qiming-backend 新增 `approval_governance` 运营台视图聚合审批冲突、风险审批、路由待审和审批动作历史qiming“数字员工运营台”新增“审批治理” tab并只开放保留本地、标记复核、标记已看、忽略和重试策略检查等低风险动作意图。正式管理端审批裁决策略预览已开始吸收审批治理详情可展示 `approval_policy_id``conflict_policy_id``decision_guard_status``batch_accept_remote_disabled``auto_decision_disabled` 和策略原因用于解释为什么只允许低风险复核或保留本地。正式管理端审批策略预览已开始吸收qiming“数字员工运营台”的“审批策略”tab 可独立筛选审批策略、冲突策略、风险审批策略和裁决保护快照只记录批量拉取策略、标记已看和忽略意图不远程编辑策略、不自动裁决、不批量采纳远端。远程策略编辑安全壳预览已开始吸收qiming“数字员工运营台”的“策略中心”会显示远程策略编辑请求、安全禁用和自动合并禁用状态只记录远程策略编辑请求、标记已看和忽略意图不开放真实远程编辑或自动合并。策略治理审批路由总收口已开始吸收审批策略详情新增审批策略编辑禁用、自动裁决禁用和批量采纳远端禁用解释审批裁决仍只通过低风险请求和复核入口推进。
- 缺口:仍缺少管理端可编辑裁决策略 UI、批量采纳远端和高风险审批自动执行。
- 安全壳收口:管理端可编辑裁决策略 UI、批量采纳远端和高风险审批自动执行已收口为审批策略预览、策略编辑请求、批量采纳禁用、自动裁决禁用和复核意图
- 建议:下一轮围绕正式管理端审批工作台,把 embedded 介入台预览推进到外部管理端批量排查和策略化回写。
9. **通知 / Inbox / 用户消息**
- 已吸收运行事件和同步失败能在数字员工页面展示embedded adapter 已接管 sgRobot 风格 `/api/notifications`、未读数、read/dismiss/reply本地 UI state 会保存通知已读、忽略和回复 overlay顶部 Bell 已开始展示 approval、同步失败、服务异常和任务完成通知本地通知订阅偏好已接入 `/api/notifications/preferences`,可按总开关、桌面通知开关、等级和常用类型过滤 Inbox`/api/digital-employee/notifications` 已提供管理端可消费的本地通知业务视图,通知动作和订阅偏好事件的 sync `business_view` 会归类为 notification 并提炼状态字段;`need_input` 通知首次回复会同步转化为 `provide_task_input` 治理命令,保留通知回复 overlay 的同时写入 Task/Run/Event/outbox客户端已支持管理端通知状态拉取与本地通知动作回写未读 action/warn/error 通知会按偏好触发一次系统级桌面提醒,系统权限引导 UI 已开始吸收Bell 设置面板可展示桌面通知可用性、测试发送结果、自动通知失败原因,并通过系统设置入口辅助修复,`digital_workday_notification_*` 同步事件只暴露通知 ID、状态、endpoint、错误和回复长度通知投影、本地订阅策略、桌面提醒、系统权限引导、跨端未读状态与任务输入链路已开始闭环。
- 正式管理端通知运营预览已开始吸收embedded 新增“通知运营”入口,可筛选全部/未读/待处理/异常通知支持批量已读、批量忽略、拉取远端通知、打开系统通知设置和单条回复qiming“数字员工运营台”的“通知运营”tab 可只读聚合通知业务视图,并通过低风险 admin action 记录 `mark_read` / `dismiss` 意图,等待客户端拉取执行;正式管理端协作运营收口已开始吸收,通知运营详情会展示 `subscription_policy_id``channel``delivery_status``conflict_status`用于解释订阅策略和跨设备状态。正式管理端通知订阅策略预览已开始吸收qiming“数字员工运营台”的“通知策略”tab 可独立筛选订阅策略、桌面通知开关、最低通知等级和渠道策略,并只记录拉取通知策略、复核和忽略意图,不远程编辑策略、不触发真实推送。资产通知日报业务查询总收口已开始吸收,通知运营详情会补充协作线程、订阅冲突、投递尝试、发送请求和真实推送禁用状态。仍缺少正式外部通知协作工作台、复杂订阅策略编辑 UI、真实通知发送/推送通道和跨设备通知冲突合并。
- 安全壳收正式管理端通知运营预览已开始吸收embedded 新增“通知运营”入口,可筛选全部/未读/待处理/异常通知支持批量已读、批量忽略、拉取远端通知、打开系统通知设置和单条回复qiming“数字员工运营台”的“通知运营”tab 可只读聚合通知业务视图,并通过低风险 admin action 记录 `mark_read` / `dismiss` 意图,等待客户端拉取执行;正式管理端协作运营收口已开始吸收,通知运营详情会展示 `subscription_policy_id``channel``delivery_status``conflict_status`用于解释订阅策略和跨设备状态。正式管理端通知订阅策略预览已开始吸收qiming“数字员工运营台”的“通知策略”tab 可独立筛选订阅策略、桌面通知开关、最低通知等级和渠道策略,并只记录拉取通知策略、复核和忽略意图,不远程编辑策略、不触发真实推送。资产通知日报业务查询总收口已开始吸收,通知运营详情会补充协作线程、订阅冲突、投递尝试、发送请求和真实推送禁用状态。正式外部通知协作工作台、复杂订阅策略编辑 UI、真实通知发送/推送通道和跨设备通知冲突合并已收口为协作预览、订阅策略预览、发送请求记录、冲突状态和真实推送禁用 reason
- 建议:下一轮围绕正式管理端通知工作台,把 Inbox 从嵌入页投影推进到完整跨端协作入口。
10. **入口路由 / 任务分流(路由业务视图与通知联动已开始)**
- 已吸收:管理端通过 `/computer/chat` 进入 qimingclaw 后会生成本地任务事实embedded `/api/ingress/route``/api/route-decisions``/api/digital-employee/route-decisions` 已由 qimingclaw adapter 接管。
- 当前能力入口请求会按上下文、ready PlanStep、调度、查询和控制动作生成 route decision并写入 `digital_events.kind = route_decision` 与现有 event outbox路由时间线优先从 qimingclaw 本地事件读取;低风险 route decision 已开始映射为明确的本地 governance command并把 `created_command_id` 回填到 route decision自动映射前会执行低风险/受保护高风险 action guard未允许的控制动作会记录 `route_action_policy_blocked``route_action_missing_context`,避免静默创建命令;入口路由策略可从管理端远端下发,支持按 intent 阻断、按 intent 要求审批、限制自动创建 governance command并在策略干预时先记录 route decision 再停止本地命令执行;首页已展示路由干预队列和治理审计摘要,审批通过/拒绝会写入本地 approval decision 并回写管理端,管理端审批更新拉取后会自动扫描已批准 route approval 并按幂等规则恢复执行scheduler check 已接入 ready PlanStep 安全派发,首页立即执行后会触发一次派发 sweep 并展示派发结果;路由决策本地业务视图、首页摘要、治理审计、策略来源/拉取错误、阻断/待审/待干预/已恢复计数和通知联动已开始闭环。管理端正式路由 UI 预览已开始吸收“策略中心”会把入口路由策略纳入统一拉取与状态展示。正式管理端策略中心预览已开始吸收qiming 运营台可从 `policy_center` 查看入口路由策略快照和拉取状态。正式管理端路由治理预览已开始吸收qiming-backend 的 `route_governance` 运营台视图会聚合 route blocked / approval required / missing context / not mapped / governance auditqiming“数字员工运营台”的“路由治理”tab 只开放标记已看、忽略和重试策略检查等低风险动作意图。跨设备路由干预冲突可视化已开始吸收qiming-backend 的策略快照读模型会把 route blocked / approval required / missing context / not mapped 汇总为 `intervention_conflict_status` 和干预计数qiming“策略冲突”tab 可展示跨设备路由干预冲突,但不恢复执行、不绕过审批、不远程改策略。策略治理审批路由总收口已开始吸收,路由治理详情展示路由策略编辑禁用、恢复安全壳和高风险恢复执行不开放,恢复执行只保留复查与请求入口。
- 后续缺口:路由策略编辑和高风险恢复执行策略 UI 仍待吸收
- 安全壳收口:路由策略编辑和高风险恢复执行策略 UI 已收口为策略编辑请求、恢复安全壳、重试策略检查、复核/忽略意图和高风险恢复禁用 reason
- 建议:下一轮围绕管理端正式路由 UI 和跨设备冲突可视化,把 embedded 批量干预入口推进到管理端运营台。
11. **诊断 / 成本 / 审计视图**
- 已吸收:同步失败诊断较完整,部分 sandbox / memory / service 日志在 qimingclaw 其他模块中存在embedded adapter 已接管 `/api/doctor``/api/cost``/api/audit`,从 snapshot、runtime records、sync status、managed services 和 artifact delivery facts 生成诊断、估算成本和审计投影sandbox audit、token/cost 和 CLI/tool 调用事件已开始通过 `digital_events` 与 outbox `business_view` 提炼为 `sandbox_audit``token_cost``tool_call_audit` 分类,并只同步 session、tool、server、operation、status、exit code、duration、model、token 计数和估算成本等安全字段;数字员工首页已展示诊断/审计/Token/估算成本摘要,`/api/digital-employee/audits` 已提供本地审计业务视图诊断与审计风险通知联动已开始闭环。管理端正式审计视图预览和正式管理端审计诊断预览已开始吸收qiming-backend 的 `audits` 运营台视图会聚合 sandbox / token cost / tool call / sync failure / governance 审计业务视图qiming“数字员工运营台”的“审计诊断”tab 可标记复核、忽略和脱敏归档。诊断修复动作预览已开始吸收,“处置台”可把 doctor/audit/service/policy 风险转为可筛选、可标记和可安全重试的运营事项。正式管理端诊断修复预览已开始吸收,审计诊断详情可展示诊断 ID、问题码、建议动作、修复动作、修复状态和安全修复禁用状态并只记录重试诊断、复核、忽略和修复意图不执行 shell、不修改系统配置、不自动修复。发送账单审计外壳已开始吸收后端提供估算账单查询和审计归档记录接口qiming 运营台可显示 Token/估算成本并标记脱敏归档;归档记录会剔除 token、authorization、raw_input、prompt 和 command 等敏感字段。正式管理端审计归档账单预览已开始吸收,审计诊断详情可展示 `audit_archive_id``archive_status``archive_location``billing_estimate_id``billing_source``estimated`,用于解释脱敏归档位置与账单估算来源。服务技能记忆审计诊断总收口已开始吸收,审计诊断会展示真实账单禁用、独立 sandbox 文件归档禁用、自动修复执行禁用和高风险修复审批需求,只记录修复意图或审批请求,不触发真实扣费或 shell 自动修复。
- 口:真实计费账单、独立 sandbox audit 文件归档、真实自动诊断修复执行器和高风险修复审批流尚未统一吸收;当前账单仍是估算,审计归档只记录脱敏摘要和归档位置。
- 安全壳收口:真实计费账单、独立 sandbox audit 文件归档、真实自动诊断修复执行器和高风险修复审批流已统一收口为估算账单、脱敏归档位置、修复意图、修复审批请求和禁用 reason;当前账单仍是估算,审计归档只记录脱敏摘要和归档位置。
- 建议:下一轮围绕管理端正式审计视图和诊断修复动作,把本地可追溯审计继续推进到可运营处置。
12. **管理端业务查询模型**
- 已吸收:管理端已有通用 sync record 接收、查询、payload 摘要和深链;后端 sync record 已开始保存客户端顶层 `contract_version``entity_summary``business_view`,并基于现有 `digital_employee_sync_record` 拆出 `/api/digital-employee/plans``/plans/{plan_id}``/tasks``/runs``/events``/artifacts``/approvals` 管理端业务查询模型;列表支持客户端 Key、设备、实体 ID、状态、同步状态和同步时间范围过滤业务 row 会提炼 title/status/summary、Plan/Task/Run 关联、发生/开始/结束时间、sync record 深链和脱敏客户端 KeyPlan 视图会聚合 task/run 计数与最近事件Plan 详情会返回关联 tasks/runs/events/artifacts/approvals 摘要。embedded adapter 已拆出同名只读业务查询接口,从 qimingclaw runtime、artifact、approval 和 canonical event 投影生成统一分页视图embedded 数字员工页已新增“业务视图”入口,支持计划/任务/运行/事件/产物/审批分段、实体/状态/同步状态/时间筛选、分页和详情 JSON 查看;客户端 outbox 的 event `business_view` 已开始按 route decision、governance command、approval action、artifact lifecycle/access、skill call audit 和 ready PlanStep dispatch 细分常用字段本地与管理端业务视图投影已开始闭环。正式外部管理端台面已开始吸收qiming-backend 新增 `/api/digital-employee/admin/workbench/{view}`qiming 管理端新增“数字员工运营台”,统一展示业务视图、介入台、产物治理、通知运营、审计诊断、日报运营和路由治理,只读消费 sync record `business_view` 并提供同步记录深链。管理端低风险动作闭环已开始吸收:后端新增 `/api/digital-employee/admin/actions` 记录动作意图和 `/pending` 拉取队列qimingclaw 只应用保留本地、标记复核、通知已读/忽略、产物保留/到期、日报交付/确认/审批请求等低风险动作并写入 `admin_action_applied` / `admin_action_rejected` / `admin_action_failed`qiming 运营台抽屉只提示“已记录等待客户端拉取”。跨设备策略冲突视图已开始吸收qimingclaw 将派发、风险审批和入口路由策略同步事件投影为 `policy_snapshot` business view后端新增 `/api/digital-employee/admin/policies/snapshots` 聚合 client/device 维度差异并输出 `conflict_keys`qiming 运营台新增“策略冲突” tab 展示 policy drift 与 sync record 深链。跨设备审批策略冲突预览已开始吸收:策略冲突页会把 `approval_policy_id``conflict_policy_id``decision_guard_status``batch_accept_remote_disabled``auto_decision_disabled` 和策略原因纳入冲突字段和详情解释,但不自动合并策略、不远程编辑策略。跨设备调度派发策略冲突预览已开始吸收:策略冲突页会把 `dispatch_policy_key``max_per_sweep``auto_dispatch_ready_steps``catch_up_on_startup``max_run_history` 纳入冲突字段和详情解释,但不立即运行、不接管租约、不远程改策略。正式管理端策略中心预览和正式管理端调度运营预览已开始吸收:`admin/workbench` 新增 `policy_center``scheduler_operations` 视图统一消费策略快照、scheduler job、cron settings、lease、dispatch sweep 和 recent run 摘要,并通过低风险 admin action 记录策略拉取、立即检查调度、复核和忽略意图。正式管理端治理策略预览和计划版本物化预览已开始吸收:`admin/workbench` 新增 `governance_policies``plan_revision_materialization`,从 sync record / business fact 投影治理策略保护、ACP 硬中断禁用、版本事实来源和变更字段。策略治理审批路由总收口已开始吸收,`policy_center``governance_policies``approval_policies``route_governance` 会统一暴露策略编辑、合并、裁决和恢复执行安全壳字段,并把真实远程强编辑、自动合并、批量采纳远端、自动裁决和高风险恢复执行保持禁用。资产通知日报业务查询总收口已开始吸收,业务查询 row 增加 `advanced_query_supported``aggregation_scope``materialized_source`,用于解释高级查询能力和物化来源。业务事实物化查询已开始吸收:后端新增 `digital_employee_business_fact``digital_employee_artifact_lifecycle``digital_employee_daily_report_fact` 三张增量物化表,同步入库时 upsert 安全业务摘要,业务查询优先返回 `materialized: true` 行,旧记录继续回退 sync record。
- 口:复杂组合检索、跨设备聚合图、远程裁决/策略编辑动作和物化业务表仍待吸收
- 安全壳收口:复杂组合检索、跨设备聚合图、远程裁决/策略编辑动作和物化业务表已收口为业务视图筛选、跨设备策略/产物聚合预览、低风险动作记录和 `digital_employee_business_fact` / `digital_employee_artifact_lifecycle` / `digital_employee_daily_report_fact` 增量物化解释
- 建议:先使用 sync record 派生业务查询模型和 embedded 业务视图预览承接联调,再按容量和查询压力决定是否拆 Plan / Task / Run / Event 物理业务表。
13. **日报实体与导出交付**
- 已吸收embedded 页面可基于当前 workday projection 导出本地文本日报;生成日报时会通过 qimingclaw bridge 写入 `daily_report` text / HTML / PDF Artifact 与 `daily_report_generated` Event并可通过 `/api/digital-employee/daily-reports` 和详情接口读取只读日报投影。日报 HTML/PDF 导出、发送记录、管理端确认回执和日报发送审批已开始吸收,交付动作会写入 `daily_report_send_recorded` / `daily_report_confirmed` / `daily_report_approval_requested` 事件sync `business_view.category = daily_report` 可被管理端筛选消费。管理端正式日报页面预览和正式管理端日报运营预览已开始吸收embedded 新增“日报运营”入口展示日报生成、交付、确认、审批和关联产物状态并复用现有生成、记录发送、确认回执和请求审批动作qiming-backend 的 `daily_reports` 运营台视图会聚合日报生成、发送记录、确认回执和审批请求qiming“数字员工运营台”的“日报运营”tab 可记录已送达、确认回执、请求审批和发送结果。发送账单审计外壳已开始吸收qiming-backend 新增 `/api/digital-employee/admin/daily-reports/send-records`qiming 运营台可在日报详情中“记录发送结果”,但不接真实第三方发送通道。正式管理端协作运营收口已开始吸收,日报运营详情会展示 `daily_report_fact_id``send_record_id``approval_decision_status`,用于解释事实来源、发送记录和审批状态。管理端日报审批裁决回写预览已开始吸收,日报运营详情可展示 `daily_report_approval_id`、裁决动作、裁决人、原因和记录时间,并只记录审批裁决意图,不触发真实发送或自动审批。资产通知日报业务查询总收口已开始吸收,日报运营详情会补充 `daily_report_physical_fact_status`、发送渠道、发送请求状态、外部发送禁用和第三方发送禁用说明。正式日报物理事实与发送记录预览已开始吸收,后端复用 `digital_employee_daily_report_fact` 增量物化日报事实、物理事实状态、审批裁决状态、发送记录状态和物化来源qiming 日报运营详情展示正式日报物理表、发送记录物化和正式外部日报页面禁用状态。
- 口:真实管理端发送通道、第三方发送通道、更完整 DailyReport 物理模型和正式外部管理端日报页面。
- 安全壳收口:真实管理端发送通道、第三方发送通道、更完整 DailyReport 物理模型和正式外部管理端日报页面已收口为发送记录、审批请求、物理事实预览、第三方发送禁用和正式外部日报页面禁用
- 建议:先稳定 `digital_employee_daily_report_fact` 增量物化与 Artifact/Event 派生交付模型,再根据管理端联调需要决定是否扩展正式 DailyReport 表、发送记录表和外部页面。
## 管理端联动原则