# 编辑器 Roadmap

编辑器核心定位：**图谱可视化 + 实时预览测试**。场景字段由创作者在 VS Code 中直接写 JSON，编辑器不做 GUI 表单。

---

## 已完成

| 功能 | 完成 |
|------|:--:|
| 场景节点图（Vue Flow） | ✅ |
| JSON 导入/导出 | ✅ |
| 视频预览 | ✅ |
| Pinia 状态管理（editorStore） | ✅ |
| 纯函数数据层（GraphService） | ✅ |
| 图谱/预览切换 | ✅ |
| 节点右键测试（新标签页） | ✅ |
| 节点拖拽位置记忆 | ✅ |

---

## E10: 内嵌快速测试 ✅ 部分完成

- [x] 节点右键菜单 → "从此场景开始测试"
- [x] 新标签页打开游戏
- [x] Engine 支持 `?startScene=` URL 参数
- [ ] PreviewPanel 内嵌 iframe 游戏播放器（远期）

## E11: 场景列表 + 搜索

- [ ] 左侧可折叠场景列表面板（`SceneList.vue`）
- [ ] 按名称搜索/筛选场景节点
- [ ] 点击列表项 → 画布跳转到对应节点并选中

## E12: JSON 校验器

- [ ] 导出/保存前实时检查
- [ ] 引用完整性：targetScene 指向不存在的场景 ID
- [ ] 死路检测：无 choices / 无 nextScene / 无 qte / 无 hotspots
- [ ] 变量引用：conditions 中的 variable 未在 `variables` 声明

## E13: 撤销/重做

- [ ] 操作历史栈（add/delete/update/move node & edge）
- [ ] Ctrl+Z 撤销 / Ctrl+Shift+Z 重做

## E16: NodeEditor → JSON 编辑器 ✅ 已完成

- [x] 删除现有 GUI 表单，改为 `<textarea>` + 等宽字体 + 深色背景
- [x] 初始值 `JSON.stringify(scene, null, 2)`
- [x] `@blur` → JSON.parse → `store.updateScene(id, parsed)`
- [x] 解析失败 → 红色边框 + 错误提示

## E17: AI 编码助手 — opencode + DeepSeek 集成

目标：编辑器内嵌 AI 对话面板。JSON 模式填充 textarea 供用户审查后接受；代码模式直接修改 Vue 组件/CSS，Vite HMR 实时预览。

详见 [E17_AI_ASSISTANT_PROPOSAL.md](../E17_AI_ASSISTANT_PROPOSAL.md)

- [x] `vite.config.ts` — `POST /api/ai` 中间件（spawn opencode）
- [x] `editor/composables/useAI.ts` — DeepSeek API 调用封装
- [x] `editor/components/AIPanel.vue` — AI 对话面板
- [x] `editor/components/NodeEditor.vue` — `aiResult` prop + [接受]/[撤销]
- [x] `editor/stores/editorStore.ts` — `deepseekKey` + `showAIPanel` + `aiResult`
- [x] `editor/App.vue` — "AI 助手" 按钮 + API Key 设置

**优先级建议：**

| 优先级 | 编号 | 说明 |
|:--:|------|------|
| **P0** | E17 | AI 编码助手 — DeepSeek 集成 ✅ 核心已完成 |
| **P0** | E16 | JSON 编辑器 ✅ 已完成 |
| **P0** | E10 | 内嵌快速测试 |
| **P1** | E12 | JSON 校验 |
| **P1** | E11 | 场景列表搜索 |
| **P2** | E13 | 撤销/重做 |

---

## 废弃项

E1~E9、E14 废弃。编辑器不再做 NodeEditor GUI 表单，场景字段由创作者在 JSON 中直接编写。
