WB Weekly Maintenance v2.0 — 每周全面体检、清理、优化
> v2.0 定位升级(2026-07-01):从「维护」升级为「全面体检 + 主动清理 + 轻量优化」三位一体。
> 架构: weekly_maintenance.py 做数据采集 + 高置信度主动清理 → 本 SKILL.md 做 LLM 执行 + 报告。
> 反空转原则: 每一步必须实际读写文件或运行命令。
> 路径动态探测: 脚本通过 WORKBUDDY_WORKSPACE 环境变量 / --workspace 参数 / 默认值三级探测工作区路径。
流程总览
weekly_maintenance.py v2.0(Python 引擎)
┌──────────────────────────────────────────────────────────────────┐
│ Stage 0: StateLoader → 读 MEMORY/USER/SOUL/IDENTITY + 去重 + 状态自愈 │
│ Stage 1: SkillsHealth → 调用 scan_skills.py + 评分 + 自修复 │
│ Stage 2: MemoryAudit → 审查记忆/AGENTS/CLAUDE/README/docs │
│ Stage 2.5: SystemHealth → automation/MCP/experts/venv/磁盘体检【v2.0】 │
│ Stage 3: DocSync → 守卫检查:只有文档目标存在才触发 neat │
│ Stage 4: Cleaner → 主动清理可再生文件 + daily log 蒸馏标记 + proposals 清理【v2.0 增强】 │
│ Stage 5: ReportCompiler → 编译周报 │
│ Stage 5.5: MemoryStats → 生成 memory-stats.json 元记忆面板 │
│ Stage 6: Optimizer → 轻量优化建议(darwin联动/版本滞后/broken xref)【v2.0 新增】 │
└──────────────────────┬───────────────────────────────────────────┘
│ JSON: action_items[] + optimization_suggestions[]
▼
LLM 执行层(本 SKILL.md)
┌──────────────────────────────────────────────────────────────────┐
│ Step 1: 运行 weekly_maintenance.py │
│ Step 2: 执行 Stage 1 ActionItem(broken symlink + meta + fm) │
│ Step 3: 执行 Stage 2 ActionItem(记忆精简/安全/时间修复) │
│ Step 4: 处理 Stage 2.5 系统体检发现(automation/MCP/experts/venv) │
│ Step 5: 按需执行 Stage 3 neat-freak(仅文档目标存在时) │
│ Step 6: 处理 Stage 4 清理建议(主动清理已由 Python 完成,处理残留) │
│ Step 7: 处理 Stage 6 优化建议(darwin full_test / 版本更新 / xref 修复)│
│ Step 8: 输出周报 + 更新 daily log │
└──────────────────────────────────────────────────────────────────┘
Step 1:运行维护引擎
python3 ~/.workbuddy/skills/wb-weekly-maintenance/scripts/weekly_maintenance.py
解析 ---JSON--- 后的输出,获取:
- action_items: 待执行操作列表
- optimization_suggestions: 优化建议列表(v2.0 新增)
- system_health: 系统体检结果(v2.0 新增)
- doc_sync_needed: 是否需要 Stage 3 neat-freak
- skills: Skills 体检结果
- file_scan: 文件清理结果(含主动清理统计)
如果 action_items 为空且 optimization_suggestions 为空且 doc_sync_needed == false:
系统状态良好,直接跳到 Step 8 按模板输出周报。
Step 2:执行 Skills 体检修复
遍历 action_items 中 stage == 1 的项目:
2.1 高置信度修复(priority 0,自动执行)
| ActionItem.id | 操作 |
|---|---|
sk-clean-broken |
删除 broken symlinks(p.unlink()) |
sk-fix-meta |
为缺失 _meta.json 的 skill 创建基本 meta |
2.2 需人工判断修复(priority 1)
| ActionItem.id | 操作 |
|---|---|
sk-fix-fm |
读取 SKILL.md,补充缺失的 name/description frontmatter 字段 |
Step 3:执行记忆审计
遍历 action_items 中 stage == 2 的项目,按 priority 升序执行:
| priority | 类型 | 操作 |
|---|---|---|
| 0 | 容量/安全 | 必须执行:精简超限文件、移除凭据 |
| 1 | 相对时间/超长文档 | 执行后过自检清单 |
| 2 | automation 审查 | 可选项,视情况执行 |
| 3 | signal-log 蒸馏 | wb-self-evolving 信号蒸馏(见 3.1) |
编辑原则(每次修改前对照):
1. 合并不追加:新信息更新旧条目
2. 删除优于保留:临时会话状态、过期流水账 → 删
3. 绝对时间:不用"今天""最近"等
4. 无矛盾:矛盾用最新信息覆盖
3.1 signal-log 蒸馏(wb-self-evolving 协同)
读取 <workspace>/.workbuddy/memory/signal-log.md,按以下规则蒸馏:
| 信号年龄 | 动作 |
|---|---|
| 7 天以内 | 保留原样 |
| 7-30 天 + 同主题 ≥ 3 次 | 提升:提炼规则写入工作区 MEMORY.md ## 自我进化沉淀 段,原条目标注 [promoted YYYY-MM-DD] |
| 7-30 天 + 同主题 < 3 次 | 降级:标注 [decaying],再观察 1 周 |
| 30 天以上 | 归档删除:从 signal-log.md 移除 |
蒸馏前置校验(v2.0 新增):若 signal-log 全部条目产生于同一天 → 跳过蒸馏 + 告警(防测试数据被当真实模式提升)。
提升条目格式(写入 MEMORY.md):
- [主题]: [提炼的规则] (来源: signal-log.md, 3x 触发于 YYYY-MM-DD)
字符上限保护:signal-log.md 超 3,000 字符时,优先蒸馏最旧条目。
3.2 镜像归档一致性校验(新增)
遍历 action_items 中 stage == 2 且 subsystem == archive 的项目:
| 校验项 | 处理方式 |
|---|---|
| INDEX.md 引用的文件不存在 | 标记断链,从 INDEX.md 移除该行 |
| 归档目录有 .md 未在 INDEX.md 登记 | 补登到 INDEX.md |
| MEMORY.md 指针引用的归档文件不存在 | 从 MEMORY.md 指针段移除该行 |
| 归档目录总大小 > 5MB | 预警提醒 BOSS 审查清理 |
> 实现状态:SKILL.md 层面的校验规则供 agent 手动参考;weekly_maintenance.py Stage 2 已实现 _check_archive_consistency() 方法自动扫描归档目录(断链检测 + 未登记检测 + >5MB 预警),生成 subsystem='archive' 的 ActionItem。
Step 4:处理系统体检发现(v2.0 新增)
遍历 action_items 中 stage == 2 且 subsystem 为 automation/mcp/experts/disk 的项目:
| subsystem | 常见问题 | 处理方式 |
|---|---|---|
| automation | 全部 PAUSED / 无注册 | 用 automation_update mode=list 查看,按需重新激活 |
| mcp | JSON 格式错误 / 缺 command | 修复 mcp.json 格式 |
| experts | 缺 SKILL.md 和 plugin.json | 补充缺失文件或删除空目录 |
| disk | 空间 < 5GB | 清理大文件(旧日志、临时 zip、缓存) |
Step 5:文档同步(按需触发)
仅当 doc_sync_needed == true 时执行:
- 检查
action_items中stage == 3的ds-trim-*项,先对超长文档瘦身 - 加载 neat-freak skill,按其五步骤执行文档同步
- 注意:neat-freak 已适配 WorkBuddy 路径(
~/.workbuddy/MEMORY.md+.workbuddy/memory/)
如果 doc_sync_needed == false:跳过此步,周报中标注「文档同步:跳过(无目标)」。
Step 6:处理清理残留(v2.0 增强)
Python 引擎已在 Stage 4 主动完成高置信度清理:
- ✅ 可再生文件(.pyc/.DS_Store/~备份/.tmp)已自动删除
- ✅ 30 天以上 daily log 已标记待蒸馏
- ✅ _proposals 已采纳草稿已清理
遍历 action_items 中 stage == 4 处理残留:
| ActionItem.id | 说明 |
|---|---|
cl-remaining-regenerable |
主动清理未成功的残留可再生文件,需手动删除 |
cl-distill-logs |
蒸馏标记的 daily log 到 MEMORY.md,提取有价值信息后删除原文件 |
cl-suggest-delete |
建议删除清单(过期 log、临时 zip),需用户确认后执行 |
⚠️ 高风险删除项只列清单,不自动执行。
Step 7:处理优化建议(v2.0 新增)
遍历 optimization_suggestions,按 category 处理:
| category | 处理方式 |
|---|---|
darwin |
提醒 BOSS 对最弱 skill 跑 darwin full_test 验证。不直接调用 darwin。 |
version |
列出版本 < 1.0 的 skill,建议用 darwin-skill 评估升级。需 BOSS 确认。 |
xref |
broken cross-ref 可自动修复:删除 SKILL.md 中无效引用,或补充缺失文件。 |
cleanup |
潜在重复 skill,建议审查是否合并。需 BOSS 决策。 |
auto_fixable=true 的建议可自动执行,但建议先展示给 BOSS 确认。
Step 8:输出周报
## 📋 WB 每周全面体检报告 v2.0 — {YYYY年MM月DD日} 08:00
### 📊 Skills 库
| 指标 | 值 |
|------|-----|
| 总数 / 活跃 | {total} / {active} |
| 评分 | {score}/100 {+Δ/-Δ} |
| Broken | {N} |
| 待修复 | {N} |
### 🧠 记忆审计
| 指标 | 值 |
|------|-----|
| 问题数 | {N} |
| 容量超限 | {N} |
| 安全问题 | {N} |
| 归档断链 | {N} |
| 归档总大小 | {N}KB |
### ⚙️ 系统体检(v2.0)
| 指标 | 值 |
|------|-----|
| 体检评分 | {score}/100 |
| Automation | {active}/{total} active |
| MCP servers | {N} |
| Experts | {N} 个 |
| Python venv | {version} / {N} packages |
| 磁盘可用 | {N}GB |
### 📄 文档同步
{触发 / 跳过(无文档目标)}
### 🧹 主动清理(v2.0)
| 类型 | 数量 |
|------|------|
| 可再生文件已清理 | {N} 个 ({N} bytes) |
| daily log 待蒸馏 | {N} 个 |
| proposals 草稿已清理 | {N} 个 |
| 建议删除(待确认) | {N} 个 |
### 🔧 优化建议(v2.0)
| # | 类别 | 建议 | 优先级 |
|---|------|------|--------|
| 1 | darwin | dry_run 比例 67%,建议跑 full_test | 建议 |
| 2 | xref | 3 个 broken cross-ref [可自动修复] | 建议 |
### 📌 周报
- **本周更新**: {具体项目}
- **本修复**: {具体项目}
- **主动清理**: {具体项目}
- **本跳过**: {具体项目}
- **需决策**: {具体项目}
- **继续运行**: {是/否}
无变动项 → 省略对应段。周报同时追加到今日 daily log。
反空转检查点
| 阶段 | 空转特征 | 正确做法 |
|---|---|---|
| Stage 0 | 不读 state.json,凭记忆猜测 | 必须实际 Read state.json |
| Stage 1 | 不跑 scan_skills.py | 必须 subprocess 调用并解析输出 |
| Stage 2 | 读文件后说"无需修改"而不动手 | 按 ActionItem 用 Edit 实际修改 |
| Stage 2.5 | 不检查 automation/MCP/experts/venv | 实际查询 sqlite3 / 读 mcp.json / ls experts / 检查 venv |
| Stage 3 | 无文档目标仍执行完整 neat-freak | 守卫检查:无目标 → 跳过 |
| Stage 4 | 只扫描不清理,或清理后不报告 | 高置信度项必须主动清理 + 报告清理结果 |
| Stage 5 | 格式漂移、字段缺失 | 严格按模板输出,每次一致 |
| Stage 6 | 不检查 darwin results.tsv / 不扫描 xref | 实际读文件 + 正则扫描 |
安全边界
| 操作 | 是否自动执行 | 理由 |
|---|---|---|
| 删除 .pyc/.DS_Store/~备份/.tmp | ✅ 自动 | 高置信度可再生 |
| 标记 30 天以上 daily log 待蒸馏 | ✅ 自动 | 只标记不删除 |
| 清理 _proposals 已采纳草稿 | ✅ 自动 | 有 meta.json 标记 adopted |
| 删除过期 log/临时 zip | ❌ 只列清单 | 需用户确认 |
| 蒸馏 daily log 到 MEMORY.md | ❌ 生成 ActionItem | 需 LLM 判断有价值信息 |
| 修复 broken cross-ref | ❌ 生成建议 | 需 LLM 判断删除引用还是补文件 |
| 调用 darwin-skill | ❌ 只提醒 | 由 BOSS 手动触发 |