Files
ops-assistant/docs/architecture-core.md
2026-03-19 21:23:28 +08:00

105 lines
3.4 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.
# Ops-Assistant Core Architecture (v0.0.1)
> 目标程序可独立运行AI 可选接入但无执行权;新通道/新功能模块可低成本适配接入。
## 1. 设计红线(强约束)
1. **执行权唯一入口**:所有变更类动作只能经 `Command -> Policy -> Runbook Engine`
2. **AI 不可执行**AI 仅能做建议/解释,不可直接调用执行器。
3. **通道与业务解耦**TG/QQ/Feishu 仅适配输入输出,不承载业务规则。
4. **模块与核心解耦**CPA/CF/Mail 仅注册命令和构建 runbook 请求。
5. **全链路可审计**job/step、operator、request_id、risk_level、input_json 必须可追溯。
---
## 2. 分层结构
1) **Channel Adapter 层**
- 责任:收消息、身份映射、回消息。
- 输入:平台消息。
- 输出统一消息结构text/operator/channel
2) **Command Runtime 层**
- 责任:命令解析、路由、参数校验。
- 输出模块请求Module Request
3) **Policy Gate 层**
- 责任权限、feature flag、confirm token、dry-run。
- 输出:允许/拒绝(含原因)。
4) **Runbook Engine 层**
- 责任:确定性执行 step白名单动作、锁、超时、断言、取消。
5) **Audit/State 层**
- 责任:记录 job/step 状态和执行证据。
6) **AI Advisor可选**
- 责任:建议命令、参数补全、解释结果。
- 限制:**无执行器句柄、无 DB 写权限、无外部动作权限**。
---
## 3. 接入标准
### 3.1 新通道接入(最小接口)
- 实现统一消息输入
- 实现统一回复输出
- 提供身份映射operator_id
> 新通道不允许直接操作 runbook / db。
### 3.2 新功能模块接入(最小接口)
- 注册命令前缀(如 `/cpa` `/cf` `/mail`
- 输入校验
- 构建 runbook 请求name + inputs + meta + policy
> 新模块不允许直接执行 shell/ssh只能请求 runbook 引擎。
### 3.3 当前注册机制
- Parser 按 `/xxx` 自动识别 `module=xxx`
- Registry 支持两种注册:
- 精确命令注册(`Register("/health", ...)`
- 模块前缀注册(`RegisterModule("cpa", ...)`
- 推荐新模块使用 `RegisterModule`,降低接入成本。
---
## 4. AI 介入模式
- `off`:完全关闭 AI默认可用
- `suggest`:允许 AI 给出命令建议,不自动执行
- `explain`:允许 AI 解释结果,不自动执行
### 安全边界
- AI 输出必须是文本建议,不是可执行指令。
- 任何执行动作都需要用户命令触发并通过 Policy Gate。
---
## 5. 统一执行链
`Channel -> Command -> Module.BuildRequest -> Policy.Check -> Runbook.Execute -> Audit -> Reply`
这条链是扩展 CF/Mail 时的唯一合法路径。
---
## 6. 当前状态与后续
### 已具备
- Runbook 引擎(执行/锁/超时/取消)
- CPA 模块status/backup/restore
- 任务审计jobs/steps
- CF/Mail 模块骨架(`/cf status``/mail status` 占位)
### 下一步(框架整理)
1. 将模块内零散 gate 逻辑统一沉淀到 `core/policy`
2. 形成通道适配模板和模块适配模板
3. 引入 `core/ai` 的 Noop Advisor默认 off
4. 在 CF/Mail 骨架上补齐真实 runbook不改核心
### 模块管理可观测性
- 聊天命令:`/ops modules` 查看注册模块与启用状态
- Web 首页:模块状态卡片(读取 `enable_module_*`
- 模块启停:统一通过 feature flag 管理,不改代码路径