收口 Rust Web 入口与 AI 写入链

- 将 3000 主入口继续收口到 mnote-web,补齐 /favicon.ico、/api/auth、session alias、AI run 等 Rust Web 路由边界。

- 更新登录页与 Convex Auth 代理,支持测试账号快速登录写入真实 Convex Auth cookie。

- 推进页面设置、Wolai 对齐、Phase 7 AI kernel/CLI-first 设计文档与相关 smoke 脚本。

- 更新 leptos-tiptap 生成资产、mnote-cli/bridge-runtime、前端依赖和 dev/prod 启动脚本。
This commit is contained in:
lix-2026
2026-05-06 21:44:20 +08:00
parent 98b6360595
commit e8ba12e461
86 changed files with 8872 additions and 1716 deletions
@@ -22,6 +22,10 @@
> - 2026-04-23 验证补充:
> - `cd /mnt/Data1T/mnote/wolai-backend && ./.venv/bin/python -m pytest -q tests/test_ai_document_agent.py` -> `15 passed`
> - `cd /mnt/Data1T/mnote/wolai-frontend && pnpm test -- --runInBand src/app/api/ai-agent/run/route.test.ts src/app/api/ai-agent/document/config/route.test.ts src/components/editor/DocumentAiAgentPanel.runtime.test.tsx src/components/ai-agent/panelShared.test.ts` -> `202 passed`
> - 2026-05-05 口径修正:
> - 本稿记录的 `openai-agents-python` 文档页主链收口,当前仅作为过渡阶段基线
> - 长期方向已被 `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v4.md` 覆盖
> - 当前长期口径固定为:`mnote-cli` 是唯一长期 agent 执行面;`openai-agents-python`、Hermes、Codex 都视为可插拔外置 agent
---
@@ -41,7 +45,7 @@
1. 如果现在开始做 `Phase 7`,第一交付物到底是什么
2. `Phase 7` 应该接在哪条现有主线之后,而不是另起一套理想结构
3. `openai-agents-python` 到底如何接入当前文档页 AI 主链
3. 过渡期 `openai-agents-python` 适配链到底如何接入当前文档页 AI 主链
4. 哪些 `v1` 里的目标继续保留,哪些必须降级到后续阶段
一句话收口:
@@ -54,7 +58,9 @@
当前推荐口径固定如下:
> **`mnote` 的长期 AI 主线仍然采用“Rust kernel / Rust runtime 做唯一事实源与真执行面,`openai-agents-python` 作为 `mnote` 专用编排层,`Hermes` 退回过渡与实验平台”的结构。**
> **本稿原始判断是“Rust kernel / Rust runtime 做唯一事实源与真执行面,`openai-agents-python` 作为 `mnote` 专用编排层,`Hermes` 退回过渡与实验平台”。**
>
> **该判断现已退化为历史过渡口径;当前长期口径改为:`Rust kernel / Rust runtime` 做唯一事实源与真执行面,`mnote-cli` 做唯一长期 agent 执行面,`openai-agents-python` 与 `Hermes` 都作为可插拔外置 agent。**
但如果按真实执行顺序来排,当前 `Phase 7` 必须服从下面这个前置条件:
@@ -153,7 +159,7 @@
- 已有一个可工作的文档页 AI 过渡链
- 这条链已经开始向 `page aggregate command family` 回接
- `Phase 7` 的第一任务,应是把这条链从 Hermes 兼容桥迁到正式 `openai-agents-python` 编排层
- `Phase 7` 的第一任务,应是把这条链从 Hermes 兼容桥收口到统一 `mnote-cli` host / adapter`openai-agents-python`、Hermes、Codex 只作为可插拔外置 agent
---
@@ -212,7 +218,7 @@
1. 明确它是过渡链
2. 冻结它的保留边界
3.`openai-agents-python` 替换它的编排层,而不是推翻整条文档页 AI 回写链
3.`mnote-cli` 统一承接长期 agent 执行面,而不是把 `openai-agents-python` 或 Hermes 继续写成长期主编排
---
@@ -226,13 +232,13 @@ Document Page / Read View / AI Panel
v
AI Gateway / SSE Event Adapter
|
+---- current fallback: Hermes bridge
|
+---- target mainline: openai-agents-python
+---- long-term execution surface: mnote-cli
| |
| +---- provider: OpenAI Responses API
| +---- mnote page tools
| +---- mnote tree tools
| +---- external agent adapter: openai-agents-python
| +---- external agent adapter: Hermes
| +---- external agent adapter: Codex
|
+---- current fallback: Hermes bridge
|
v
Rust runtime / mnote-web / bridge-runtime
@@ -267,14 +273,14 @@ Rust kernel truth
- 通用 agent 编排框架
- 通用聊天产品壳
#### `openai-agents-python`
#### `mnote-cli`
负责:
- 文档页 AI 会话编排
- tools / handoffs / tracing / guardrails / HITL
- 调用 OpenAI `Responses API`
- 组织 `mnote` 的文档页 AI 工具合同
- 外置 agent adapter 调度
- mnote page tools / tree tools 统一入口
- CLI host / Web AI host 之间的执行契约
不负责:
@@ -282,6 +288,22 @@ Rust kernel truth
- 绕过 Rust runtime 直接写产品数据
- 自己持有第二套页面真相
#### `openai-agents-python`
负责:
- 作为可插拔外置 agent adapter / 对照实现
- tools / handoffs / tracing / guardrails / HITL
- 调用 OpenAI `Responses API`
- 通过 `mnote-cli` 暴露的工具合同接入 `mnote`
不负责:
- 保存产品真相
- 绕过 Rust runtime 直接写产品数据
- 自己持有第二套页面真相
- 文档页 AI 长期默认主编排
#### Hermes
负责:
@@ -530,9 +552,9 @@ AI 第一批正式写能力只冻结为:
> **`Phase 7` 不删除过渡工具面,但也不把过渡工具名继续写成长期产品契约。**
### 8.3 `openai-agents-python` 的接入原则
### 8.3 外置 agent adapter 的接入原则
`openai-agents-python` 接入时,优先接的不是抽象理想工具名,而是
`openai-agents-python`、Hermes、Codex 作为外置 adapter 接入时,优先接的不是抽象理想工具名,而是 `mnote-cli` 暴露的统一工具契约
1. 当前页最小闭环所需的正式命令语义
2. 当前已真实存在的过渡运行时工具能力
@@ -574,7 +596,7 @@ AI 第一批正式写能力只冻结为:
- [x] 明确当前第一闭环只覆盖文档页 AI 主写链
- [x] 明确 `summary / ai_note / reference / index` 降为后续扩展
- [x] 明确 `Hermes` 只保留为 fallback / 对照链
- [x] 明确 `openai-agents-python` 为长期推荐编排层
- [x] 明确 `openai-agents-python` 仅作为过渡期可插拔外置 agent / adapter 示例
- [x] 明确页面 AI 模型配置真源是 `model_key`,不是 combo 名或 provider model
- [x] 明确 `profile` 前端可设、后端持有真源
- [x] 明确 tool registry 必须前端可见
@@ -645,11 +667,11 @@ AI 第一批正式写能力只冻结为:
---
## 阶段 3引入 `openai-agents-python` 文档页编排层
## 阶段 3整理并保留 `openai-agents-python` 过渡适配链
### 目标
在不推翻现有文档页 AI 回写链的前提下, `openai-agents-python` 替换 Hermes 作为长期文档页编排层。
在不推翻现有文档页 AI 回写链的前提下,保留 `openai-agents-python` 这条已跑通的过渡外置 adapter,用它作为 `mnote-cli`-first 迁移期间的对照与行为基线,而不是把它定义成长期默认文档页编排层。
### 需要完成
@@ -669,19 +691,20 @@ AI 第一批正式写能力只冻结为:
### 完成判定
- [x] 在不依赖 Hermes 主编排的情况下,文档页 AI 已能跑通第一闭环
- [x] 新编排层已具备“模型 / profile / 工具”统一能力面出口
- [x] 当前过渡 adapter 已具备“模型 / profile / 工具”统一能力面出口
---
## 阶段 4:切文档页 AI 默认路径
## 阶段 4:切文档页 AI 默认执行路径
### 目标
让文档页 AI 在产品可见行为上真正从 Hermes 过渡到新编排层
让文档页 AI 在产品可见行为上从 Hermes 兼容链过渡到 `mnote-cli` host / adapter;当前已跑通的 `openai-agents-python` 链只保留为外置 adapter 行为基线
### 需要完成
- [x] 文档页 AI panel 默认走 `openai-agents-python`
- [x] 历史基线中,文档页 AI panel 默认走 `openai-agents-python`
- [x] 长期口径中,文档页 AI panel 默认应走 `mnote-cli` host / adapter
- [x] 标题改名沿 `page.head.updateTitle` 回写
- [x] 正文改写沿 `page.body.save` 回写
- [x] 主编辑区 island 稳定回显 AI 结果
@@ -726,7 +749,7 @@ AI 第一批正式写能力只冻结为:
### 10.1 继续保留的价值
- 承接现有文档页 AI 运行链
- 作为 `openai-agents-python` 的回归对照
- 作为 `mnote-cli` host 与其他外置 adapter 的回归对照
- 作为 fallback 开关
- 承接非主链实验场景
@@ -741,8 +764,8 @@ AI 第一批正式写能力只冻结为:
最终可接受状态有两种:
1. Hermes 退化为非主链实验平台
2. Hermes 完全下线,只保留 `openai-agents-python + Rust runtime`
1. Hermes 退化为非主链实验平台 / 外置 agent adapter
2. Hermes 完全下线,只保留 `mnote-cli` + Rust runtime,并按需接入 `openai-agents-python` / Codex 等外置 agent adapter
---
@@ -766,11 +789,11 @@ AI 第一批正式写能力只冻结为:
当前冻结如下:
> **`Phase 7` 仍然以 `openai-agents-python` 作为长期推荐编排层,Rust runtime 作为唯一事实源与真执行面。**
> **本稿原始判断里,`openai-agents-python` 曾被写成长期推荐编排层;该口径现已失效。当前长期口径应以 `v4` 为准:`mnote-cli` 是唯一长期 agent 执行面Rust runtime 仍是唯一事实源与真执行面`openai-agents-python`、Hermes、Codex 都只是可插拔外置 agent。**
> **但当前 `Phase 7` 的第一交付物不再定义为“完整 AI 平台”或“完整结构化知识写链”,而是“文档页 AI 直接进入主编辑区,并沿 `page aggregate command family` 正式回写”。**
> **`Hermes` 可以继续作为过渡平台与实验平台存在,但不再作为文档页 AI 的长期语义中心。**
> **`Hermes` 可以继续作为过渡平台与实验平台存在,但不再作为文档页 AI 的长期语义中心。`openai-agents-python` 也只保留为外置 adapter。**
> **页面 AI 的模型真源固定为 `model_key``resolved_combo / resolved_runtime_model` 只作为运行时调试信息;`profile` 前端可设但由后端持有真源;tool registry 必须前端可见。**