0.1.14 上线前更改
This commit is contained in:
@@ -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_jump(v2)
|
||||
- `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 Registry(Tool/ToolSet) | ✅ | `wolai-frontend/src/lib/ai-agent/tools/registry.ts` + `wolai-frontend/src/lib/ai-agent/tools/builtins/registryBuiltins.ts` |
|
||||
| M0 | Agent Runtime(step 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 | UI:Cline 风格工具栏 + 侧边栏内切页 | ✅ | 文档/思维导图 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 “改写成更简洁版本并保留要点”,结果直接落入文档(不是生成一段文本)。
|
||||
|
||||
### M3(OnlyOffice):文档驱动导图 + 可跳转引用
|
||||
### M3(OnlyOffice):插件端实时改文档 + 文档驱动导图
|
||||
|
||||
- [ ] `asset_extract_outline`:PDF 优先,Word/PPT 先降级(至少按标题层级)
|
||||
- [ ] `asset_to_mindmap`:从文档大纲生成 mindmap(章→节→要点)
|
||||
- [ ] 引用:节点 refs(page/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(章→节→要点)并落盘
|
||||
- [ ] 引用:节点 refs(page/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)
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- `app.aichem.dpdns.org` → `wolai-frontend`(Next 3000:页面 + /api/*)
|
||||
- `supabase.aichem.dpdns.org` → `Supabase Kong`(示例 18000)
|
||||
- `backend.aichem.dpdns.org` → `wolai-backend`(示例 8000,可选)
|
||||
- `onlyoffice.aichem.dpdns.org` → `OnlyOffice Document Server`(示例 8081)
|
||||
- `lightrag.aichem.dpdns.org` → `LightRAG`(示例 7777,建议加 Access)
|
||||
- `mineru.aichem.dpdns.org` → `MinerU`(示例 18888,建议加 Access)
|
||||
|
||||
@@ -35,6 +36,8 @@
|
||||
- `NEXT_PUBLIC_SUPABASE_URL=https://supabase.aichem.dpdns.org`
|
||||
- `NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon key>`
|
||||
- `NEXT_PUBLIC_BACKEND_URL=https://backend.aichem.dpdns.org`(可选)
|
||||
- `NEXT_PUBLIC_ONLYOFFICE_BASE_URL=https://onlyoffice.aichem.dpdns.org`(OnlyOffice)
|
||||
- `NEXT_PUBLIC_ONLYOFFICE_STORAGE_HOST_OVERRIDE=supabase.aichem.dpdns.org`(可选:仅当你的 signedUrl 里仍出现 127.0.0.1/host.docker.internal 时用)
|
||||
|
||||
服务端内网(仅 Next 服务器用,不暴露给浏览器):
|
||||
- `SUPABASE_INTERNAL_URL=http://127.0.0.1:18000`
|
||||
|
||||
Reference in New Issue
Block a user