# 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 管理,不改代码路径