Files
mnote/design/07-ai/process/7-66-opencode-native-page-ai-ui-v1.md
T
2026-06-25 21:08:17 +08:00

88 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 7-66 [process] Page AI opencode-native UI v1
> 创建时间:2026-06-24
>
> 当前状态:`RECYCLED / 失败方向,仅保留为反例`
>
> Owner07-ai / Page AI / opencode-native UI
## 1. 结论
本稿提出的 MNote-native opencode UI 方向已废弃。用户确认目标应参考 `opencode-chat`**MNote 薄宿主壳 + 官方 opencode WebUI iframe + 最小 host bridge**,而不是在 MNote 内复刻 opencode 消息流、tool UI、permission UI。
因此 `7-66` 只作为反例保留:native message timeline / composer / permission cards 可以临时作为 debug receipt,但不得成为 Page AI 主 UI,也不继续扩写。当前主线回到 `7-65`
```text
MNote Page AI = MNote host chrome + opencode 官方 WebUI iframe + MNote open/refresh/changed files receipt
opencode = 官方聊天 UI、session、tool、permission、diff、model/provider
```
## 2. 参考结论
### 2.1 opencode 官方 VSCode 插件
官方 VSCode 插件 `sst-dev.opencode` 的公开说明更偏 IDE 集成而不是完整 WebUI 复刻:
- 快捷键启动/聚焦 opencode terminal session。
- 新建 opencode terminal session。
- 自动共享当前 selection/tab。
- 支持 `@File#L37-42` 文件引用。
这说明官方 IDE 路线不是“把 WebUI 完整 iframe 到 IDE”,而是让宿主 IDE 负责上下文、入口和文件引用,opencode runtime 负责 agent。
### 2.2 社区 VSCode WebUI 插件
社区方案集中在两类:
- sidebar chat + diff viewer + multi-session tabs;自动启动 `opencode serve`,通过 HTTP/SSE 通信。
- React webview 渲染 session、message parts、tool cards、permission、diff、provider/model。
对 MNote 的启发:不要再塞 iframe;应该使用 opencode API/SSE 重渲染 MNote-native UI,并保留 MNote 打开文件/刷新编辑器。
## 3. 必须覆盖的 opencode 功能
### Phase A:可用会话壳
- [ ] session list / create / resume / current binding。
- [ ] 当前 session 状态:agent、model/provider、token/cost、idle/running/error。
- [ ] composer:发送 prompt、排队/运行状态、abort。
- [ ] context bar:当前页、真实 Markdown 路径、selection、allowed roots。
### Phase B:消息与 parts
- [ ] user / assistant / system / synthetic 区分展示。
- [ ] 隐藏 MNote context envelope 噪声,但保留“上下文已注入”状态。
- [ ] text part 正文渲染。
- [ ] reasoning part 折叠展示。
- [ ] tool part 卡片:tool 名、状态、输入/输出摘要。
- [ ] patch part / file part / shell part / agent/subtask part 以卡片展示。
- [ ] message error、finish、tokens/cost 展示。
### Phase C:权限、问题、diff
- [ ] permission.asked 列表:allow once / always / reject。
- [ ] question request:文本输入回复 / reject。
- [ ] changed files chips:点击用 MNote 打开。
- [ ] diff summary:新增/修改/删除数量;当前页命中后刷新编辑器。
- [ ] abort / revert / unrevert 留出按钮,但 MVP 可先只接 abort。
### Phase D:事件驱动刷新
- [ ] 订阅 `/api/page-ai/opencode/events`
- [ ] 处理 `message.updated``message.part.updated``message.part.delta``session.next.*``permission.v2.asked/replied``session.diff``session.error`
- [ ] 不高频轮询;事件只触发有界 refreshmessages / permissions / diff。
## 4. MNote 特有集成
- changed file click`window.__mnoteDocumentPaneRuntime.openResourceInActiveTab()`
- 当前页被修改:`refreshPrimaryDocument({ reason: 'page-ai-opencode-event' })`
- selection/current page/allowed roots 由现有 Page AI target runtime 计算。
- iframe 反代只保留 `debug fallback`,默认 UI 不使用 iframe。
## 5. 第一版验收
- 打开 Page AI 看到 MNote-native opencode 面板,不出现 iframe 空壳。
- 能创建/恢复 session。
- 能发送真实消息,看到 user message 和 assistant/text/tool/reasoning/patch 卡片之一。
- 能看到 session list、model/provider、changed files、permission 区域。
- 如 opencode/provider 出错,UI 显示真实错误,不伪装成功。
- 浏览器截图自检通过后再汇报。