docs(wiki): 全量代码验证驱动更新 — 10页基于实际扫描非文档推测
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

关键数字修正:
- Rust 74.5K行(原66K), Tauri命令 183(原182), SaaS路由 121
- 前端组件 104, lib/ 85文件, Store 17+4子store
- TODO/FIXME 仅 8 个(前端4+Rust4)

内容增强:
- 中间件完整14层注册清单含注册条件和优先级分类
- Store完整目录结构, Pipeline完整目录树
- Hands测试分布, Memory 16个Tauri命令列表
- 管家模式: 关键词路由→语义路由(TF-IDF)修正
- 代码健康度指标新增
This commit is contained in:
iven
2026-04-11 01:05:15 +08:00
parent 36a1c87d87
commit b3f97d6525
12 changed files with 415 additions and 132 deletions

View File

@@ -13,51 +13,88 @@ tags: [module, middleware, runtime]
**中间件是请求处理的管道,按优先级顺序执行。**
- 优先级 0-100,数值越越先执行
- 每层中间件可以: 修改请求 / 拦截响应 / 记录日志 / 注入上下文
- 优先级 0-999,数值越越先执行`middleware.rs` 按升序排列)
- 每层中间件实现 `AgentMiddleware` trait4个 hook 点: `before_completion` / `before_tool_call` / `after_tool_call` / `after_completion`
- 所有消息流(聊天、管家)都经过完整中间件链
- 中间件可返回 `Stop`/`Block`/`AbortLoop` 决策来中断流程
## 代码逻辑
### 14 层中间件
### 14 层中间件(注册顺序见 `kernel/mod.rs:190-345`
关键中间件(按优先级排序):
| # | 中间件 | 文件 | 职责 | 注册条件 |
|---|--------|------|------|----------|
| 1 | ButlerRouter | `middleware/butler_router.rs` | 语义技能路由 + system prompt 增强 | 始终 |
| 2 | DataMasking | `middleware/data_masking.rs` | 手机号/身份证等敏感数据脱敏 | 始终 |
| 3 | Compaction | `middleware/compaction.rs` | 超阈值时压缩对话历史 | `compaction_threshold > 0` |
| 4 | Memory | `middleware/memory.rs` | 对话后自动提取记忆 | 始终 |
| 5 | LoopGuard | `middleware/loop_guard.rs` | 防止工具调用无限循环 | 始终 |
| 6 | TokenCalibration | `middleware/token_calibration.rs` | Token 用量校准 | 始终 |
| 7 | SkillIndex | `middleware/skill_index.rs` | 注入技能索引到 system prompt | `!skill_index.is_empty()` |
| 8 | Title | `middleware/title.rs` | 自动生成会话标题 | 始终 |
| 9 | DanglingTool | `middleware/dangling_tool.rs` | 修复缺失的工具调用结果 | 始终 |
| 10 | ToolError | `middleware/tool_error.rs` | 格式化工具错误供 LLM 恢复 | 始终 |
| 11 | ToolOutputGuard | `middleware/tool_output_guard.rs` | 工具输出安全检查 | 始终 |
| 12 | Guardrail | `middleware/guardrail.rs` | shell_exec/file_write/web_fetch 安全规则 | 始终 |
| 13 | SubagentLimit | `middleware/subagent_limit.rs` | 限制并发子 agent | 始终 |
| 14 | TrajectoryRecorder | `middleware/trajectory_recorder.rs` | 轨迹记录 + 压缩 | 始终 |
| 优先级 | 中间件 | 文件 | 职责 |
|--------|--------|------|------|
| 90 | DataMasking | `middleware/data_masking.rs` | 请求发送前数据脱敏 (手机号/身份证) |
| ~500 | ButlerRouter | `middleware/butler_router.rs` | 4域关键词分类 + system prompt 增强 |
| 650 | TrajectoryRecorder | `middleware/trajectory_recorder.rs` | 轨迹记录 + 压缩 |
### 优先级分类(来自 `middleware.rs` 头注释)
其他 11 层: 认证、速率限制、日志、技能注入、记忆注入等。
| 范围 | 类别 | 包含的中间件 |
|------|------|-------------|
| 100-199 | 上下文塑造 | Compaction, Memory |
| 200-399 | 能力 | SkillIndex, Guardrail |
| 400-599 | 安全 | LoopGuard, DataMasking |
| 600-799 | 遥测 | TokenCalibration, Title, TrajectoryRecorder |
### 中间件执行流
```
用户消息
[优先级 90] DataMasking — 脱敏敏感数据
→ [优先级 ~500] ButlerRouter — 关键词分类 + prompt 增强
→ [优先级 650] TrajectoryRecorder — 记录请求轨迹
→ [其他层] 认证/限流/日志/技能/记忆
用户消息 → AgentLoop
chain.run_before_completion(ctx)
→ [优先级升序] 每层 middleware.before_completion()
→ Continue: 继续下一层
→ Stop(reason): 中断循环,返回 reason
→ LLM 调用
响应原路返回
(工具调用时) chain.run_before_tool_call()
→ Allow: 允许执行
→ Block(msg): 阻止,返回错误给 LLM
→ ReplaceInput: 替换参数后允许
→ AbortLoop: 立即终止整个循环
→ chain.run_after_tool_call()
→ chain.run_after_completion()
```
### 核心接口
```rust
// crates/zclaw-runtime/src/middleware.rs
trait AgentMiddleware: Send + Sync {
fn name(&self) -> &str;
fn priority(&self) -> i32 { 500 }
async fn before_completion(&self, ctx: &mut MiddlewareContext) -> Result<MiddlewareDecision>;
async fn before_tool_call(&self, ctx: &MiddlewareContext, tool_name: &str, tool_input: &Value) -> Result<ToolCallDecision>;
async fn after_tool_call(&self, ctx: &mut MiddlewareContext, tool_name: &str, result: &Value) -> Result<()>;
async fn after_completion(&self, ctx: &MiddlewareContext) -> Result<()>;
}
```
### 注册位置
中间件在 `crates/zclaw-runtime/` 中注册Kernel 启动时加载
`crates/zclaw-kernel/src/kernel/mod.rs:190-345``create_middleware_chain()` 方法13 次 `chain.register()` + 1 个条件注册
## 关联模块
- [[butler]] — ButlerRouter 是管家模式的核心
- [[chat]] — 每条消息经过完整中间件链
- [[memory]] — 记忆注入层从 FTS5 检索并注入 system prompt
- [[memory]] — Memory 中间件从对话提取记忆
- [[hands-skills]] — SkillIndex 中间件注入技能索引
## 关键文件
| 文件 | 职责 |
|------|------|
| `crates/zclaw-runtime/src/middleware/` | 所有中间件实现 |
| `crates/zclaw-runtime/src/middleware/butler_router.rs` | 管家路由器 |
| `crates/zclaw-runtime/src/middleware/data_masking.rs` | 数据脱敏 |
| `crates/zclaw-runtime/src/middleware/trajectory_recorder.rs` | 轨迹记录 |
| `crates/zclaw-runtime/src/middleware.rs` | AgentMiddleware trait + MiddlewareChain |
| `crates/zclaw-runtime/src/middleware/` | 14 个中间件实现 (14个 .rs 文件) |
| `crates/zclaw-kernel/src/kernel/mod.rs:190-345` | 注册入口 |