Files
ops-assistant/docs/ops-assistant-v1.md
T
openclaw 81939825d1 feat: 模块化命令框架 + runbook 严格断言与查询结果回传
- core/module: 命令模板、门控(feature flag/confirm/dry-run)、ecode 错误标签、ResultFormatter
- runbook executor: http.get/http.post/assert.json(expect_success 严格断言)、目标主机管理、任务落库、最终 stdout 直接回传
- cf 模块: /cf dns list 支持域名自动解析 zone_id;dns list/zones/workers list 格式化回传;API success:false 判真失败
- 全部 CF/CPA runbook 接入严格断言,杜绝假阳性 success
- 新增 cpa/cfdav/mail/sub 模块与 runbooks;QQ 订阅到期提醒调度
- Web 后台: 模块设置(CF/CPA/cfdav/AI)、OPS 任务、渠道管理、审计页
2026-09-13 07:42:17 +08:00

5.2 KiB
Raw Blame History

Ops Assistant 独立项目 v1 方案

目标

把高频运维动作做成固定命令 + 固定流水线,AI 只负责解释,不参与关键执行决策。


v1 范围(先做)

优先只落地 CPA 管理中枢:

  1. 固定命令入口(Telegram/QQ/飞书统一)
  2. Runbook(YAML)确定性执行器
  3. 审计日志(步骤级)
  4. 高风险能力默认关闭(Feature Flag)

后续再扩展:Cloudflare DNS、邮箱转发。


目录结构(新增)

ops-assistant/
├── internal/
│   ├── core/
│   │   ├── command/             # 命令解析
│   │   ├── registry/            # 命令注册与路由
│   │   ├── runbook/             # runbook 结构、执行器、锁、target 解析
│   │   └── ops/                 # ops 服务编排、重试
│   └── module/
│       └── cpa/                 # CPA 模块命令与高风险闸门
├── runbooks/
│   ├── cpa_status.yaml
│   ├── cpa_usage_backup.yaml
│   └── cpa_usage_restore.yaml
└── docs/
    └── ops-assistant-v1.md

命令清单(v1)

  • /cpa status
  • /cpa usage backup
  • /cpa usage restore <backup_id>

约束

  • 仅允许上述命令(严格白名单)
  • 每个命令映射到唯一 runbook
  • 不支持自由 shell 指令输入

Runbook DSL(v1)

仅支持这些动作:

  • ssh.exec:远程执行固定命令
  • http.get / http.post:调用固定接口
  • file.upload:上传压缩包到 staging
  • file.extract:解压到 staging
  • assert.json:断言字段值
  • sleep:延迟

每个步骤必须有:

  • id
  • action
  • on_fail(stop | continue)

所有变量只能来自:

  • inputs.*(命令参数)
  • env.*(服务端配置)
  • steps.<id>.output.*(前置步骤输出)

审计与可追溯

建议新增两张表:

1) ops_jobs

  • id
  • command
  • runbook
  • operator_id
  • status(pending/running/success/failed)
  • started_at
  • ended_at

2) ops_job_steps

  • id
  • job_id
  • step_id
  • action
  • status
  • rc
  • stdout_tail
  • stderr_tail
  • started_at
  • ended_at

所有 Bot 命令回执都返回 job_id,便于追踪。


风险控制

  • 默认 dry-run=true(先演练)
  • 高风险步骤(restore/import)必须:
    • 双确认(命令 + confirm token)
    • feature flag 开启才允许执行
  • 审计日志不写明文 secrets
  • 全部 secrets 走现有 channel 加密机制存储

与现有系统的集成点(独立项目并存)

  1. Bot 层:在 Telegram/QQ/飞书消息处理中增加 /cpa 命令分流
  2. Web 层:新增 /ops 页面查看任务状态与步骤日志
  3. 模型层:新增 ops_jobs / ops_job_steps
  4. 配置层:增加 ops.targets(如 hwsg/wjynl)

阶段性进度汇报原则(必须遵守)

模板(四要素)

  1. 阶段名(设计/实现/自测/上线等)
  2. 已执行动作(具体到做了什么)
  3. 可验证证据(日志、产物路径、返回码、截图等)
  4. 下一步与前置条件(还差什么、需谁确认)

硬规则

  • 无证据不使用“完成/已执行/进行中”等措辞
  • 遇到卡点必须立即说明:卡点 + 原因 + 需要的唯一输入
  • 先清单后执行的任务,未确认不得执行

事故复盘(2026-03-13,CF DNS Runbook)

详见:docs/cf-dns-runbook-incident-20260313.md

要点摘要:

  • 认证方式误判(API Token 被当作 API Key)。
  • heredoc/转义在 ssh.exec 中导致脚本未执行。
  • 最终采用 base64 + python3 -c exec 稳定执行。
  • 强化“阶段性汇报必须带证据”的纪律。

验收标准(v1)

  1. /cpa status 能返回结构化结果(非自由文本)
  2. /cpa usage backup 能输出:备份路径 + sha256 + usage 快照
  3. /cpa usage restore <id> 支持双校验(立即 + 延迟)
  4. 任一步骤失败时可追溯到具体 step 日志
  5. 未授权命令必须被拒绝并记录审计

当前已落地(2026-03-10)

  1. 已打通命令入口:Telegram / QQ / 飞书
  2. 已支持命令:
    • /cpa status
    • /cpa usage backup
    • /cpa usage restore <backup_id>
  3. 已提供查询接口:
    • GET /api/v1/ops/jobs
    • GET /api/v1/ops/jobs/:id(含 steps)
  4. assert.json 已支持真实 JSON 路径断言
  5. 已增加安全闸门:
    • allow_ops_restore feature flag(默认 false)
    • restore 需要 --confirm YES_RESTORE
    • 支持 --dry-run
  6. 已支持 ops_targets 目标主机表(优先解析 target 名称)

当前 Core 强化(2026-03-10 第二阶段)

  1. 同 target 串行锁(避免并发覆盖)
  2. 作业元信息增强:target/risk_level/request_id/confirm_hash
  3. 统一错误码前缀(如 ERR_FEATURE_DISABLED / ERR_CONFIRM_REQUIRED / ERR_STEP_FAILED)
  4. step 超时控制(默认 45s)
  5. 任务取消接口:POST /api/v1/ops/jobs/:id/cancel

下一步落地建议

  1. 为取消操作增加权限细分(ops.cancel)
  2. 增加 job 重试接口(仅失败任务可重试)
  3. 增加步骤级超时配置(runbook 可覆盖)
  4. 增加 Cloudflare / Mail 模块(在 Core 验收完成后)