0.1.14 上线前更改

This commit is contained in:
liaibo
2026-01-11 12:35:53 +08:00
parent be71849aa5
commit 725a60d3aa
44 changed files with 3427 additions and 310 deletions
+40 -13
View File
@@ -109,7 +109,9 @@
- Client Tools 先不做“由 AI 主动触发”,而是通过 attachments 提前把必要上下文注入(@selection@currentFile@mindmapSelection)。
执行方式(v2 目标):
- 引入“前端工具宿主”:当服务端解析到 `<client_tool>` 时,通过 SSE 向前端发起请求,前端执行后再回传结果(类似 VSCode extension host / Cline host provider)。
- 引入“前端工具宿主”:当服务端需要执行 Client Tool 时,通过 SSE 向前端发起请求,前端执行后再回传结果(类似 VSCode extension host / Cline host provider)。
- 现状:已在 OnlyOffice 场景落地(SSE 事件 `client_tool_call` → 前端调用 OnlyOffice 插件 API → 回调 `/api/ai-agent/client-tool-result`)。
- 后续:把该机制抽象成通用 Client Tool Host,复用到 BlockNote/思维导图的“选区/选中节点”等能力。
---
@@ -178,14 +180,18 @@
#### D. OnlyOffice(文档阅读/编辑)
v1 只做“可落地”的
- `asset_get`:读取文件树中的 asset 元信息(类型/URL/页数等
- `asset_extract_outline`:从 PDF/Word/PPT 提取大纲(复用现有 PDF 逻辑,Word/PPT 先降级
- `asset_to_mindmap`:从 asset 生成 mindmap(返回 ops 或完整树,再由 `mindmap_apply_ops` 落盘
v1(先做最基础的增/删/改/查 + 可落地的“文档驱动导图”)
- `oo_get_selection`:读取当前选区(查
- `oo_replace_selection`:替换当前选区(改/删;删=传空字符串
- `oo_insert_text` / `oo_insert_html`:插入内容(增
- `oo_insert_image`:插入图片(增)
- `asset_extract_outline`:附件(PDF 优先)→结构化大纲(含页码)
- `asset_to_mindmap`:附件大纲→思维导图落盘(含 refs/hyperlink
v2 再做:
- `onlyoffice_jump`:跳转到某页/某段(依赖 OnlyOffice API 能力)
- `onlyoffice_insert_comment`:插入批注/引用锚点
- `onlyoffice_forcesave`:强制保存/落盘(用于“编辑中→解析/索引→生成”闭环)
### 4.2 ToolSet(便于 UI 一键勾选)
@@ -194,7 +200,8 @@ v2 再做:
- `toolset.readonly`search_web、rag_query、asset_get、mindmap_get(只读)
- `toolset.mindmap_write`mindmap_apply_ops、mindmap_expand_node
- `toolset.doc_write`doc_insert_blocks、doc_replace_range
- `toolset.onlyoffice`asset_extract_outline、asset_to_mindmap、onlyoffice_jumpv2
- `toolset.onlyoffice_editor`oo_get_selection、oo_replace_selection、oo_insert_*(选区增删改查
- `toolset.onlyoffice_read`/`toolset.onlyoffice_write`asset_extract_outline / asset_to_mindmap(文档驱动导图)
---
@@ -228,7 +235,7 @@ v2 再做:
## 6. 里程碑计划(慢慢实现,但每一步都可验收)
### 完成进度(截至 2026-01-10
### 完成进度(截至 2026-01-11
> 说明:本节用于记录“已经落地到代码”的进度,避免只停留在规划层。
> ✅=已完成;🟡=部分完成/已打通但仍需扩展;⬜=未开始
@@ -240,7 +247,7 @@ v2 再做:
| M0 | Tool RegistryTool/ToolSet | ✅ | `wolai-frontend/src/lib/ai-agent/tools/registry.ts` + `wolai-frontend/src/lib/ai-agent/tools/builtins/registryBuiltins.ts` |
| M0 | Agent Runtimestep budget + 工具日志) | ✅ | `wolai-frontend/src/lib/ai-agent/runtime/runAgent.ts` |
| M0 | SSE 输出(assistant/tool_call/tool_result/completion | ✅ | `/api/ai-agent/run` 已支持 SSE |
| M0 | 前端 AI 面板(可复用) | 🟡 | 目前已在 dev 面板 + 思维导图面板接入;BlockNote/OnlyOffice 仍需继续推进 |
| M0 | 前端 AI 面板(可复用) | 🟡 | 已在 dev + 思维导图 + OnlyOffice 接入;BlockNote 仍需继续推进 |
| M1 | mindmap 读写工具(增量 ops + 细粒度工具) | ✅ | `wolai-frontend/src/lib/ai-agent/tools/builtins/mindmap/mindmapServerTools.ts` |
| M1 | `mindmap_expand_node`(检索→生成→落盘) | ✅ | 同上(支持可选 `search_web` 证据) |
| M1 | UI:选中节点上下文注入(给 AI) | ✅ | 思维导图面板通过 `context.selectedUids` 注入;并对用户显示纯文本节点内容 |
@@ -251,6 +258,14 @@ v2 再做:
| M2 | 跨页面文档工具(docs_* | ✅ | `docs_search` + `docs_read`(按 title/raw_text |
| M2 | 图片读取工具(OCR) | ✅ | `image_read`(读取 `media_assets.ocr_text` |
| M2 | 斜杠命令工具 | ✅ | `slash_run`/new 创建文档、/rename 重命名) |
| M2 | UICline 风格工具栏 + 侧边栏内切页 | ✅ | 文档/思维导图 AI 面板统一顶部工具栏(工具/历史/账户/设置),不再使用居中弹窗 |
| M2 | UI:工具日志可折叠 | ✅ | tool_call/tool_result 支持折叠展开,便于长日志查看 |
| M3 | OnlyOffice 作用域(scope=onlyoffice+ ToolSet | ✅ | `/api/ai-agent/run/route.ts` 支持 onlyoffice scope,并允许 `toolset.onlyoffice_*`(含 `toolset.onlyoffice_editor` |
| M3 | OnlyOffice 客户端工具桥接(SSE↔回调) | ✅ | `wolai-frontend/src/lib/ai-agent/runtime/clientToolBridge.ts` + `/api/ai-agent/client-tool-result` + SSE `client_tool_call` |
| M3 | oo_* 工具(选区增/删/改/查) | ✅ | `registryBuiltins.ts` 注册 + OnlyOffice 插件 `wolai-frontend/public/onlyoffice/plugins/agent-tools/*` |
| M3 | OnlyOffice AI 面板接入(浮层) | ✅ | `wolai-frontend/src/app/onlyoffice/page.tsx` + `wolai-frontend/src/components/onlyoffice/OnlyOfficeAiAgentPanel.tsx` |
| M3 | `asset_extract_outline`PDF→大纲,含页码) | 🟡 | `wolai-frontend/src/lib/ai-agent/tools/builtins/onlyoffice/onlyofficeServerTools.ts`MinerU content_list |
| M3 | `asset_to_mindmap`(附件→导图落盘) | 🟡 | 同上(把大纲转成 mindmap ops + refs + hyperlink |
### M0(基础设施):统一 Agent Runtime + 工具协议 + 日志
@@ -281,18 +296,30 @@ v2 再做:
验收(pw-tests):
- 选中一段文本,让 AI “改写成更简洁版本并保留要点”,结果直接落入文档(不是生成一段文本)。
### M3OnlyOffice):文档驱动导图 + 可跳转引用
### M3OnlyOffice):插件端实时改文档 + 文档驱动导图
- [ ] `asset_extract_outline`PDF 优先,Word/PPT 先降级(至少按标题层级
- [ ] `asset_to_mindmap`:从文档大纲生成 mindmap(章→节→要点)
- [ ] 引用:节点 refspage/slide+ hyperlink`#page=`
- [x] OnlyOffice 插件注入(autostart + pluginsData + CORS
- [x] oo_* 工具(选区增/删/改/查):`oo_get_selection` / `oo_replace_selection` / `oo_insert_*`
- [x] 前端工具宿主(OnlyOffice 版):SSE `client_tool_call` ↔ 回调 `/api/ai-agent/client-tool-result`
- [x] `asset_extract_outline`PDF 优先(基于 MinerU 的 content_list 提取 text_level + page_idx
- [x] `asset_to_mindmap`:从文档大纲生成 mindmap(章→节→要点)并落盘
- [ ] 引用:节点 refspage/slide+ hyperlink`#page=`)在 OnlyOffice/PDF 预览器中可稳定跳转(仍需实测与兼容)
补充说明(OnlyOffice “能否穿透拿到信息”):
1) **常规集成(不做插件)**OnlyOffice Docs 集成侧主要通过 `editorConfig.callbackUrl` 回传保存/状态;外部并不会天然得到“当前文档全文/选区文本”。
2) **要拿到编辑器内信息**:需要(A)保证文档已落盘(callback + 保存/forcesave)后从存储侧读取,或(B)开发 OnlyOffice 插件/宏(在编辑器内执行 Office API,再把结果回传到宿主)。
3) **M3 v1 策略(双通道)**
- **实时编辑(Word/PPT/Excel 的基础增删改查)**:走 OnlyOffice 插件(编辑器内执行)→ 通过前端工具宿主把结果回传给服务端 Agent。
- **结构化理解/导图生成**:走“附件/存储→MinerU 结构化解析→导图写入”,不依赖编辑器能直接吐出全文/层级信息。
- 后续再补:`onlyoffice_forcesave`(保证拿到最新落盘版本)+ 更强的“书签/页码/定位”跳转能力。
验收(pw-tests):
- 对指定 PDF 生成“章→节→内容”层级导图,点击节点跳到对应页(至少 URL 含 `#page=`)。
### M4(v2):前端工具宿主 + MCP 工具 + 类“技能”系统
- [ ] 前端工具宿主:允许 AI 请求 client tool(读取当前选区、OnlyOffice 当前页)
- [ ] 前端工具宿主(通用版):允许 AI 请求 client tool(读取 BlockNote 选区、思维导图当前选中节点、OnlyOffice 当前页
- [ ] MCP:把 supabase_local / searxng / 未来自定义 MCP 作为工具源(像 cline)
- [ ] skills:把“工作流说明”做成可加载的技能文件,AI 可按需激活(类似你现在的 Codex skills