22 · 预发 Legacy 瘦身清单 v1
状态:process → 执行完成(Wave 0–9 出口已达)
日期:2026-07-25
目标:云首发前去掉非产品主链代码与叙事,减小二进制/认知负担;不误伤 Pi Lab / LightRAG / OnlyOffice / Vault。
控制面云首发:libsql-local(独立部署)。
产品 Page AI 唯一主链:Pi Lab(Rust host page_ai_pi + packages/pi-mnote)。
关联:AGENTS.md、ARCHITECTURE.md、21-mvp-post-architecture-closure-checklist-v1.md
0. 原则
- 产品面只保留:树/文档、Pi Lab、LightRAG、OnlyOffice、Vault、libSQL 控制面。
- 文档不再写「OpenHub / Hermes / ACP / Reasonix / OpenCode 是兼容选项」类历史叙事;清理任务只写在本清单。
- 原子删除:route +
lib.rs/mod.rs 注册 + browser 引用 + 测试 fixture 同批;禁止半删导致编译红。
- 先重命名再删依赖名:
hermes_tools 是 Pi 仍在用的 agent tool pack,不是整包可删垃圾。
- 不动用户进行中的 Vault WIP、无关脏改动。
- 影响面用 CodeGraph +
rg;大块删除后 cargo test -p mnote-web + 主链 smoke。
1. 体量快照(2026-07-25 本机)
| 路径 |
约行数 / 体积 |
处置 |
routes/hermes_client.rs |
~18.7k 行 / ~688KB |
DELETED |
routes/hermes_tools.rs |
~6.8k 行 / ~272KB |
RENAMED → routes/mnote_tools.rs |
src/hermes_tools/ |
~412KB(tool pack) |
RENAMED → src/mnote_agent_tools/ |
routes/hermes.rs |
~297 行 |
DELETED |
acp_*.rs(5 文件) |
~4.4k 行合计 |
DELETED |
routes/page_ai_opencode.rs |
~1.1k 行 |
DELETED |
routes/page_ai_pi/ |
主链 |
KEEP |
routes/knowledge_rag.rs |
主链 |
KEEP |
routes/vault*.rs |
主链 |
KEEP(含进行中 extension token) |
reference-code/ |
~5GB 级 |
不进部署;仓库可保留对照 |
recycle/ |
历史 |
不进部署 |
2. 路由面
2.1 正式保留(产品)
| 前缀 / 路径 |
说明 |
/api/page-ai/pi/* |
Pi Lab |
/api/mnote/tools/{manifest,call,audit} |
Agent 工具(中性名) |
/api/knowledge-rag/* |
LightRAG |
/api/vault/* |
Vault |
/api/page-body/*、/api/page-aggregate/*、tree/realtime 等 |
文档与树主链 |
/api/onlyoffice/* |
OnlyOffice |
2.2 已删除(非首发)
| 前缀 / 路径 |
实现 |
状态 |
/api/hermes/*(含 client/sessions/runs/…) |
hermes.rs + hermes_client.rs |
DELETED |
/api/hermes/tools/* |
legacy alias |
DELETED(仅留 /api/mnote/tools) |
/api/page-ai/opencode/*、/page-ai/opencode |
page_ai_opencode.rs |
DELETED |
| hermes_client 独占 page-ai sessions/runs |
hermes_client |
DELETED(Pi 自有 session API 保留) |
debug:/tree、/document-debug、/ui-debug/* |
flag enable_debug_shell_routes |
云默认 false;代码可保留 |
2.3 配置 / 状态字段
| 符号 |
处置 |
AppConfig.hermes_base_path |
已随 hermes 删除 / 测试清理 |
AppState.acp_runtime |
DELETED(随 ACP) |
MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT |
云默认 false |
MNOTE_PAGE_AI_PI_LAB |
保留,云默认 true |
MNOTE_WEB_ACP_* / MNOTE_WEB_HERMES_* / Reasonix wrapper |
DELETED |
3. 源码文件处置
3.1 DELETED(整文件)
同步已改:lib.rs、routes/mod.rs、app.rs、相关测试 fixture。
3.2 RENAMED(不可整删)
| 现状 |
目标 |
状态 |
src/hermes_tools/ |
src/mnote_agent_tools/ |
DONE |
routes/hermes_tools.rs |
routes/mnote_tools.rs |
DONE |
crate::hermes_tools:: |
crate::mnote_agent_tools:: |
DONE |
Pi 硬依赖(保留):
page_ai_pi/runtime.rs → mnote_agent_tools::knowledge_rag
page_ai_workflow.rs → ToolCallInput + execute_mnote_tool_call
- skill pack:
mnote_agent_tools/skill.rs(mnote-vault 等)
3.3 KEEP(首发)
3.4 Browser 清理(产品入口)
产品唯一入口:Pi Lab
| 路径 |
行为 |
浮钮 data-mnote-action="open-page-ai-pi-lab" |
只打开 Pi Lab |
sidebar-tree-runtime open-page-ai / open-page-ai-pi-lab |
mnote:pi-lab-show,不打开 legacy drawer |
openPageAiDrawer() |
Pi-only stub:mnote:pi-lab-show |
sidebar-page-ai-runtime.js |
已瘦身为 ~100 行 stub |
sidebar-page-ai-{markdown,permission,profile,render,session,skill,target}-runtime.js |
DELETED |
agent-stream-event-router.js |
DELETED |
| page-settings 扩展面板 |
Skills/Tools 读 /api/mnote/tools/manifest;已移除 MCP / hermes runs 面板与 /api/hermes/* fetch |
| document shell Hermes settings inject |
DELETED(__mnoteHermesSettingsUrl) |
合同测试:page_ai_product_entry_is_pi_lab_only + 布局无 open-page-ai 旧 action。
3.5 脚本 / 包装
| 路径 |
处置 |
scripts/reasonix-acp-wrapper.mjs |
DELETED |
| 仅测 hermes/opencode 的 smoke |
Wave 10:依赖 /api/hermes/client 或 OpenCode host 的 20 个 smoke 已 soft-retire(exit 0 + 注释);工具类 smoke 改 /api/mnote/tools/* |
| OpenHub 负向检查 |
可保留「禁止生成 openhub 目录」类断言 |
task126 hermes bridge |
改为负向门禁:/api/hermes/bridge 404 + tools manifest 可达 |
task116 islands |
AI bridge 检查改为 /api/mnote/tools/manifest |
4. 执行波次(结果)
| Wave |
内容 |
出口 |
| 0 |
本文清单 + 文档去历史叙事 |
✅ |
| 1 |
agent/架构只描述当前主链 |
✅ AGENTS / ARCHITECTURE |
| 2 |
RENAME hermes_tools → mnote_agent_tools;路由只挂 /api/mnote/tools |
✅ |
| 3 |
DELETE page_ai_opencode + 代理 routes |
✅ |
| 4 |
DELETE acp_* + Reasonix wrapper + env |
✅ |
| 5 |
DELETE hermes_client + hermes.rs + /api/hermes/* |
✅ |
| 6 |
browser 产品入口 Pi-only + 合同测试 |
✅ |
| 7 |
全量 cargo test -p mnote-web |
✅ 见 §5 |
| 8 |
page-ai legacy 子模块 + agent-stream 物理删除;page-settings / document shell 去 Hermes |
✅ |
| 9 |
agent tool schema / 头 / env / skill agent_ids 中性化 |
✅ |
| 10 |
活跃 smoke 去 /api/hermes;死 smoke soft-retire;fixture 字面量中性化 |
✅ |
5. 验证门禁
执行记录(2026-07-25)
cargo test -p mnote-web --lib --test-threads=1:849+ passed, 0 failed
- 含合同
page_ai_product_entry_is_pi_lab_only、mnote_tools_mount_is_current_only
- 测试适配:lazy PageTree reveal、
watch_revision 缓存键 canonicalize、layout FILETREE_DND_RUNTIME_JS 常量名
- 文件门禁:
hermes_client / hermes.rs / page_ai_opencode / acp_* / hermes_tools/ / reasonix-acp-wrapper.mjs 均已删除;mnote_agent_tools + mnote_tools 就位
- Wave 8:page-ai 7 子模块 + agent-stream 物理删除;page-settings 去
/api/hermes;document shell 去 Hermes settings inject;sidebar-page-ai-runtime.js 瘦身为 Pi-only stub
- Wave 9(schema 中性化,已完成):
mnote.agent_tool_manifest.v1 / mnote.agent_tool.v1
- 响应头
x-mnote-agent-tool-owner: mnote-web-agent-tools
- 审计 env
MNOTE_AGENT_TOOL_AUDIT_LOG(兼容旧 MNOTE_HERMES_TOOL_AUDIT_LOG)
- profile home
MNOTE_AGENT_HOME(兼容 HERMES_HOME / ~/.hermes)
- write meta:
channel=agent、client=mnote-agent-plugin、refs=agent-tool-call
- skill
agent_ids 仅 pi / chat_only
- static smoke 适配:
task-pi-lab-static-smoke.js 读取 routes/page_ai_pi/{mod,constants,runtime}.rs 目录模块(不再假定 monofile page_ai_pi.rs);legacy opencode host 断言改为 Pi-only stub
- 主链 E2E smoke(本机 :3000,2026-07-25):
node scripts/task-pi-lab-static-smoke.js:270 checks passed
node scripts/task-pi-lab-api-endpoint-smoke.js:17/17 passed
- 登录
POST /api/auth auth:signIn → whoami mnote-e2e
- Pi
GET /api/page-ai/pi/status enabled + mnote.page_ai_pi.status.v1
- tools
GET /api/mnote/tools/manifest → mnote.agent_tool_manifest.v1 + owner mnote-web-agent-tools
- LightRAG
GET /api/knowledge-rag/status 路由挂载 200(本机 daemon 9621 未起 → lightrag_unreachable,API 面 OK)
- Vault
GET /api/vault/list?rootUri=… 200
- 负向:
/api/hermes/status、/api/page-ai/opencode/status → 404
- 可选清理(本批):删除
page-ai.css reasonix/opencode 死样式;测试 fixture reasonix→pi
- Wave 10(smoke / fixture 清理,2026-07-25):
- 13 个工具 smoke:
/api/hermes/tools/mnote/{call,manifest} → /api/mnote/tools/{call,manifest}
task116:检查 agent tools manifest(不再打 hermes bridge)
task126:/api/hermes/bridge 负向 404 + tools 可达
- 20 个依赖 hermes client / OpenCode host 的浏览器或静态 smoke:soft-retire(保留文件、exit 0)
- fixture:search
Hermes→SkillGraph;evidence @Reasonix→@AtlasNote;ai_settings skill 示例路径 .hermes→.mnote/agent-profiles
- 保留:负向合同(compat hermes provider)、
HERMES_HOME/~/.hermes 兼容读、.reasonix/.opencode 目录忽略、mnote-hermes-tool 历史 source 兼容
- Wave 10.1(desktop-hot 去 OpenCode,2026-07-25):
scripts/desktop-hot.js:删除 ENABLE_OPENCODE / OPENCODE_CMD / SKIP_OPENCODE / buildDefaultOpencodeCommand / shouldStartOpencode / opencode task / MNOTE_OPENCODE_BASE_URL
scripts/dev-hot.js:不再注入 MNOTE_OPENCODE_BASE_URL
- 测试:
desktop-hot.test.js、task-dev-hot-plan-test.js 断言无 OpenCode 分支
6. 明确不在本清单
- Vault 功能增强 / extension(
design/12-vault 进行中工作保持不动;本批只做可达性 smoke)
- LightRAG provider 替换
- Phase C 流式 apply
- 把 control-plane 强行改成 turso-remote(云首发默认 libsql-local)
- 删除
design/old 历史稿(可选后续,非阻塞)
- 测试函数名仍可带历史前缀(如
hermes_tools_*);产品 schema 已中性化,不必再以「schema 可另批」阻塞出口
可选清理:page-ai.css 内 reasonix/opencode 死样式、测试 fixture 字面量中性化 本批已做:CSS 删 reasonix/opencode 死块;dev_seed/mod/mnote_tools 测试字面量 reasonix→pi(.reasonix 目录忽略保留)
7. CodeGraph / 残留备忘
ToolCallInput:在 mnote_agent_tools
page_ai_pi/runtime.rs 绑定 mnote_agent_tools::knowledge_rag
- 测试函数名仍可带
hermes_tools_* 前缀(历史命名,非产品路由)
- 正式 tools 仅
/api/mnote/tools
- 产品 Page AI:仅
/api/page-ai/pi/* + browser Pi Lab host
状态:Wave 0–10 / 10.1 已完成;全量 lib 测试绿;主链 E2E smoke 绿;活跃 smoke 已切到 /api/mnote/tools,死 hermes/opencode smoke 已 soft-retire;desktop-hot 不再启动 OpenCode。