跳转至
DRAFT

D4 · Frontend-Vue3 · XiStudio 完整实现总计划(v1.0)

路线选择:方案 A · Vue 组件路线(用户 2026-05-19 确认)

  • 4 stage 保持 Vue 内部业务形态(不引入 iframe)
  • v4.3 demo 的 12 类 postMessage 协议 → 改造为 Pinia store + EventBus(语义保留,传输层换为同进程 store action)
  • mode-switcher / stageToolbar / engine-toggle 全部用 Vue 组件 + Pinia 实现
  • XiForge 业务深度融合 master TuningTool 后端(MC 骨架)
  • v4.3 demo(docs/02-products/P1-xistudio/layout-demo/)作为视觉与交互参考,不做 1:1 移植

理论依据(架构契约)v1.2-ide-architecture.md §13 顶栏五段动态注入架构

e2e 策略:保留并扩充现有 4 个 spec(integration-profile / source-sink / unittest-mixer / unittest-sst),并按 phase 增量补充


0. 当前基线(2026-05-19 · subagent 3 轮调研结论)

0.1 已完成(不需重写)

模块 完成度 关键证据
Vite + Vue 3 + TS strict + Pinia + Router 脚手架 100% package.json / vite.config.ts / tsconfig.json 完整
codex.css 接入 100% src/styles/xistudio-codex.css · main.ts import
Shell 容器组件树 95% XiStudioShell.vue + 9 子组件齐全(MenuBar / StageBar / DrawerLeft / DrawerRight / BottomPanel / StatusBar / ActivityBarLeft / ActivityBarRight / DrawerHeader / ToastContainer / AIDrawer)
4 Stage 入口 Vue 化形态已建 src/stages/{xilink,xitune,xiforge,xitest}/index.vue,dynamic import 接入 router
XiLink 业务原型 ~50% LinkEditor 主画布 + 十余种 TuningDialog(GainTuning / GEQTuning / MDRC / Limiter / VirtualBass / AtmosEngine / CommonEQ / Delay / Source / Sink / SourceDevice / Module / Generic 等)
WebSocket → ASP.NET Core 8 后端 通道已联通 src/types/communication.ts 10 类 CommandType(set_param / get_params / write_link / read_link / enable_module / reset_dsp / heartbeat / error
Pinia 持久化 已配置 pinia-plugin-persistedstate
Playwright e2e 4 spec 已写 integration-profile / source-sink / unittest-mixer / unittest-sst
layout/ 7 文档(v3.x 改造手册) 已交付 00-overview / 10-architecture-mapping / 20-shell-component-tree / 30-stage-iframe-strategy / 40-postmessage-protocol / 50-state-management / 60-codex-css-strategy / 70-migration-checklist / 80-handoff-to-agent

0.2 待补强(v4.3 增量 + master 业务融合)

缺口 方案 A 应对 关联 phase
顶栏 mode-switcher 段(chip 注入) Vue 组件 <ModeSwitcher> + Pinia useTopbarStore 维护 chips Phase 2
顶栏 stageToolbar 动态按钮(按 stage+mode 切换) Vue 组件 <StageToolbar> + 同 store 的 buttons 数组 + toggle:true 引擎按钮 Phase 2
Shell 全局单例引擎(▶/■ 共享 _engineRunning) Pinia useEngineStore · 取代 v4.3 demo 的局部 var Phase 3
postMessage 12 类协议 → Pinia store + EventBus 不再走 postMessage,改造为 store action 或 event-bus;保留语义事件名 Phase 1(设计) + 各 phase 接入
XiTune mode-switcher 4 chips(link 手动 / 自动 / 兼容 / 反向) 注入到 ModeSwitcher · 主区暂不切换(仅 chip 高亮) Phase 7
XiTune Preset chip popover(v3-full-xitune-chain.html 风格) <MrPresetChip> 组件挂在 module-renderer 右上角 + Pinia usePresetStore Phase 8
XiForge mode-switcher 3 chips(layout/code/simulation)+ 动态 stageToolbar 切 mode 时通过 store action 重设 buttons[] Phase 10
XiForge 调音工具搭建器(MC 骨架融合) 复用 backend_csharp WebSocket 通道 · 实现拖拽控件 + 参数绑定 + 生成 JSON Phase 11-12
XiTest mode-switcher 5 chips(SMOKE/INTEG/ELEC/ACOU/LIVE) 同 ModeSwitcher 注入 Phase 13
集成测试架构(start_integration_test / test_result) 扩展 communication.ts + Pinia useTestStore Phase 14
Project 管理(多 .xilink 工程) XiLink 左 Drawer L1 · useProjectStore Phase 15
Profile 管理(场景 Preset 集合) XiTune 左 Drawer xt-profile · useProfileStore Phase 9
RMS / Freq / Phase Dock(v3.x R1-R4) XiTune/XiTest 右 Drawer · 复用 ECharts Phase 15
多源播放联调(source_v1 → mixer_v2 → sink_v1) 后端已实现 · 前端串通 set_param + start_audio_engine Phase 6
e2e 扩充至覆盖 v4.3 + 业务全链路 在现有 4 spec 基础上加 mode-switcher / stageToolbar / preset / project / profile 各 1-2 spec Phase 16

1. Phase 路线图(17 phase · 6-8 周)

1.1 总览矩阵

Phase 标题 工作日 依赖 验收里程碑 文档位置
0 基线对齐 + 协议改造设计 1d 协议契约文档定稿;Pinia + EventBus 类型完整 00-baseline-alignment.md(本目录)
1 Shell 顶栏五段架构 Vue 化骨架 2d 0 五段插槽 DOM 完整 · 视觉对齐 v4.3 demo shell/10-topbar-5-segments.md
2 mode-switcher + stageToolbar 组件 2d 1 任意 stage 切换时 mode-switcher / stageToolbar 内容跟随刷新 shell/20-mode-switcher-stage-toolbar.md
3 全局单例引擎按钮 + Shell 通用按钮组 1d 2 XL 启动 ▶ → 切 XT 显示 ■ · 跨 stage 共享 shell/30-engine-singleton.md
4 XiLink Stage 业务收尾(LinkEditor 巩固) 3d 3 主画布 8 节点拖拽 · 选中 / 双击 / 删除 · undo/redo xilink/10-link-editor.md
5 XiLink 左右 Drawer 注入(dock-pane) 2d 4 左 5 dock + 右 4 dock 内容齐全 · 切换互斥 xilink/20-dock-injection.md
6 多源播放联调(source → mixer → sink) 3d 3, 5 拖出 Src-Mix-Snk → ▶ → 听到声音;切 sine/noise/sweep 各正常 xilink/30-multi-source-playback.md
7 XiTune mode-switcher 4 chips 1d 2 4 chip 切换 + toast · 主区不变 xitune/10-mode-switcher.md
8 XiTune Preset chip popover 2d 7 module-renderer 右上角 ⭐ Default ▾ · popover 列表 · 新建/保存/删除 xitune/20-preset-chip.md
9 XiTune Profile 管理 + 左 Drawer xt-profile 2d 8 5 个 profile(夜间/影院/驾驶等)切换 · 持久化 xitune/30-profile-management.md
10 XiForge mode-switcher 3 chips + 动态 stageToolbar 2d 2 layout/code → 4 按钮;simulation → 0 按钮(toolbar 自动清空) xiforge/10-mode-switcher-dynamic-toolbar.md
11 XiForge 调音工具搭建器 - 控件库 + 画布 3d 10 控件库(TTSlider/TTKnob/TTToggle/TTLabel)拖入画布;属性面板编辑 xiforge/20-toolbox-canvas.md
12 XiForge 调音工具搭建器 - MC 骨架融合 + 源码生成 3d 11 从画布生成 .json + 调用 backend_csharp WebSocket · 仿真验证 mode 跑通 xiforge/30-mc-integration.md
13 XiTest mode-switcher 5 chips(SMOKE/INTEG/ELEC/ACOU/LIVE) 1d 2 5 chip 切换 + 主区切(参考 v4.0 PLAN 设计) xitest/10-mode-switcher.md
14 XiTest 集成测试架构(start_integration_test / test_result) 3d 13 UnitTest_Mixer / source-sink case 跑通 + UI 显示 pass/fail xitest/20-integration-test.md
15 Project 管理 + RMS/Freq/Phase Dock 3d 6, 9 多 .xilink 切换 · 右 Drawer R1-R4 实时刷新 integration/10-project-and-meter-docks.md
16 e2e 扩充 + 全链路回归 2d 1-15 Playwright 14 spec 全绿 · CI 集成 integration/20-e2e-extension.md
17 最终验收 + 文档收口 1d 16 验收清单 13 项全勾 · ChangeLog 更新 · v1.0 标签 integration/99-acceptance.md

总工作量:~33 工作日 · 单人 6-8 周(含 buffer / review / bugfix)。

1.2 依赖图(DAG)

              ┌─────────┐
              │ Phase 0 │
              └────┬────┘
              ┌─────────┐
              │ Phase 1 │ ◀─── Shell 五段骨架
              └────┬────┘
              ┌─────────┐
              │ Phase 2 │ ◀─── mode-switcher + stageToolbar
              └─┬──┬──┬─┘
          ┌─────┘  │  └──────────────────┐
          ▼        ▼                     ▼
    ┌─────────┐ ┌─────────┐        ┌─────────┐
    │ Phase 3 │ │ Phase 7 │        │ Phase 10│ ◀─── XiForge mode-switcher
    │ 引擎单例 │ │XiTune md│        │XiForge  │
    └────┬────┘ └────┬────┘        └────┬────┘
         ▼           ▼                  ▼
    ┌─────────┐ ┌─────────┐        ┌─────────┐
    │ Phase 4 │ │ Phase 8 │        │ Phase 11│
    │XL 编辑器│ │XT Preset│        │XF 控件箱│
    └────┬────┘ └────┬────┘        └────┬────┘
         ▼           ▼                  ▼
    ┌─────────┐ ┌─────────┐        ┌─────────┐
    │ Phase 5 │ │ Phase 9 │        │ Phase 12│
    │XL Dock  │ │XT Profile│        │XF MC融合│
    └────┬────┘ └─────────┘        └─────────┘
    ┌─────────┐         ┌─────────┐
    │ Phase 6 │ ─┐      │ Phase 13│ ◀─── XiTest mode-switcher
    │ 多源播放 │  │      └────┬────┘
    └────┬────┘  │           ▼
         │       │      ┌─────────┐
         │       │      │ Phase 14│
         │       │      │XT 集成测试│
         │       │      └────┬────┘
         │       │           │
         └───────┼───────────┘
            ┌─────────┐
            │ Phase 15│ ◀─── Project + RMS/Freq Dock
            └────┬────┘
            ┌─────────┐
            │ Phase 16│ ◀─── e2e 扩充
            └────┬────┘
            ┌─────────┐
            │ Phase 17│ ◀─── 最终验收
            └─────────┘

关键路径(CPM):Phase 0 → 1 → 2 → 3 → 4 → 5 → 6 → 15 → 16 → 17,共 ~21 工作日;XiTune(7-9)/ XiForge(10-12)/ XiTest(13-14)三条支路可并行。


2. 文档目录结构(新增)

按 Q5 用户决策细颗粒度,每个 stage 一个子目录:

docs/08-implementation/30-frontend-vue3/
├── index.md                           ← 已存在(auto-index)
├── 00-master-plan.md                  ← 本文档(总计划 + 依赖图 + 验收总览)
├── 00-baseline-alignment.md           ← Phase 0:基线评估 + Pinia/EventBus 协议设计
├── layout/                            ← 已存在 9 文档(v3.x Shell 改造手册 · 保留)
│   ├── 00-overview.md
│   ├── ...
│   └── 80-handoff-to-agent.md
├── shell/                             ← 新建 · Shell 顶栏五段补强
│   ├── 10-topbar-5-segments.md        ← Phase 1
│   ├── 20-mode-switcher-stage-toolbar.md ← Phase 2
│   └── 30-engine-singleton.md         ← Phase 3
├── xilink/                            ← 新建 · XiLink Stage
│   ├── 10-link-editor.md              ← Phase 4
│   ├── 20-dock-injection.md           ← Phase 5
│   └── 30-multi-source-playback.md    ← Phase 6
├── xitune/                            ← 新建 · XiTune Stage
│   ├── 10-mode-switcher.md            ← Phase 7
│   ├── 20-preset-chip.md              ← Phase 8(含 v3-full-xitune-chain.html 移植细节)
│   └── 30-profile-management.md       ← Phase 9
├── xiforge/                           ← 新建 · XiForge Stage(MC 骨架融合)
│   ├── 10-mode-switcher-dynamic-toolbar.md ← Phase 10
│   ├── 20-toolbox-canvas.md           ← Phase 11
│   └── 30-mc-integration.md           ← Phase 12
├── xitest/                            ← 新建 · XiTest Stage
│   ├── 10-mode-switcher.md            ← Phase 13
│   └── 20-integration-test.md         ← Phase 14
└── integration/                       ← 新建 · 横切关注点
    ├── 10-project-and-meter-docks.md  ← Phase 15
    ├── 20-e2e-extension.md            ← Phase 16
    └── 99-acceptance.md               ← Phase 17 最终验收清单

每个 phase 文档遵循统一模板:

1. 目标(一句话)
2. 前置条件(依赖的 phase)
3. 任务清单(细分 sub-task · 每个含工作量估计)
4. 接口契约(涉及哪些 Pinia store / TS 类型 / WebSocket 消息)
5. 验收标准(functional / visual / 性能 / 兼容性)
6. 验收脚本(手动验证步骤 + 自动 e2e spec 列表)
7. 风险与回滚点
8. 关联文档(v4.3 demo 章节 / 架构契约 §13 / 兄弟 phase)

3. 协议改造(v4.3 postMessage 12 类 → Pinia + EventBus)

3.1 改造原则

保留语义 · 替换传输层

v4.3 原 postMessage 类型 Vue 路线改造方案 实现位置
stage-ready(↑) 路由 onMounted 钩子 + useStageReady() composable src/composables/useStageReady.ts
toolbar-inject(↓) useTopbarStore.setToolbar(buttons) src/stores/topbar.ts
toolbar-click(↑) EventBus emit toolbar:click src/utils/eventBus.ts
mode-switcher-inject(↓) useTopbarStore.setModes(chips, activeKey) 同上
mode-switch-click(↑) EventBus emit mode-switch:click 同上
engine-control(↑) useEngineStore.toggle/start/stop() src/stores/engine.ts
engine-state-changed(→) useEngineStore.state reactive watch 同上
dock-inject(↓) useDockStore.setLeft(panes) / setRight(panes) src/stores/dock.ts
inspector-inject(↓) useInspectorStore.setHtml(html, module) src/stores/inspector.ts
module-properties-inject(↓) useBottomStore.setModuleHtml(html, module) src/stores/bottom.ts
select-node(↑) EventBus emit node:selected + useInspectorStore 联动 EventBus + store
tuning-dialog(↑) EventBus emit dialog:open + useDialogStore.open() src/stores/dialog.ts
show-toast(↑) useToastStore.show(message) src/stores/toast.ts
stage-status(↓) useStatusBarStore.setStageHtml(html) src/stores/statusbar.ts
stage-hint(↓) useBottomStore.setHint(html) 同 bottom
doc-tabs-inject(↓) useTopbarStore.setDocTabs(tabs, activeKey) 同 topbar
doc-tab-click/close/new(↑) EventBus emit doc-tab:{click/close/new} EventBus

3.2 EventBus 实现

// src/utils/eventBus.ts
import mitt from 'mitt'

export type AppEvents = {
  'toolbar:click':       { stage: string; id: string }
  'mode-switch:click':   { stage: string; key: string }
  'doc-tab:click':       { stage: string; key: string }
  'doc-tab:close':       { stage: string; key: string }
  'doc-tab:new':         { stage: string }
  'node:selected':       { stage: string; node: string; label: string }
  'dialog:open':         { stage: string; module: string; label: string }
}

export const eventBus = mitt<AppEvents>()

3.3 Pinia store 总清单(新增 / 复用)

Store 状态字段 主要 action 是否 persisted
useTopbarStore(新) modes / activeMode / toolbar / docTabs / activeDocTab setModes / setToolbar / setDocTabs
useEngineStore(新) running / sampleRate / bufferSize / latencyMs toggle / start / stop / restart 否(运行状态不持久)
useDockStore(新) left[] / right[] / activeLeftKey / activeRightKey setLeft / setRight / activate 否(dock 内容由 stage 注入,但 activeKey 持久)
useInspectorStore(新) html / moduleName setHtml / clear
useBottomStore(新) activeTab / moduleHtml / hint / panes activate / setModuleHtml / setHint activeTab 持久
useDialogStore(新) dialogs[] open / close / focus
useToastStore(新) queue[] show / dismiss
useStatusBarStore(新) stageHtml / engineLed / connections setStageHtml
useProjectStore(新) projects[] / activeProject open / close / save / new
useProfileStore(新) profiles[] / activeProfile switch / save / new / delete
usePresetStore(新) presets[module][] / activePreset[module] load / save / new / delete
useTestStore(新) cases / results / running run / cancel / report
useLayoutStore(已有) locked / drawer / bottom 各种状态 各种 toggle
useThemeStore(已有) activeTheme setTheme

4. 最终验收标准(13 项 · Phase 17 验收清单的镜像)

完成时所有 13 项必须通过:

# 验收项 验收方式
1 启动 frontend_vue3 dev → 看到 Shell 容器 + 4 Pill 浏览器目检
2 点 XiLink Pill → 顶栏右段 stageToolbar 显示 5 按钮(保存/新建/链路更新/节点对齐/▶引擎) 浏览器目检
3 点 XiForge Pill → mode-switcher 显示 3 chips(layout/code/simulation);切到 simulation 时 stageToolbar 自动清空 浏览器目检 + e2e
4 点 XiTune Pill → mode-switcher 4 chips;module-renderer 右上角 Preset chip ⭐ Default ▾ 浏览器目检
5 XiLink 拖出 Source-Mixer-Sink 链路 → 点 ▶ → 听到声音(sine 1kHz) 人工听感 + e2e(断言扬声器有信号)
6 切到 XiTune → ▶ 状态保持(共享单例引擎)+ Sink RMS Dock 显示电平 e2e + ECharts 截图比对
7 XiTune 切换 5 个 Profile(夜间/影院/驾驶等)→ 算法链路参数随之改变 + 持久化 e2e
8 XiTune Preset chip popover:新建 / 保存 / 删除 / 切换 5 个 preset → 模块参数同步 e2e
9 XiForge layout 模式拖入 4 个控件 → simulation mode 通过 backend_csharp 仿真出图 e2e + WebSocket trace
10 XiTest 4 case(UnitTest_Mixer / source-sink / unittest-mixer / unittest-sst)跑通 → pass/fail e2e + 测试报告
11 Project 管理:打开 / 保存 / 新建 .xilink → 多 project tab 切换 e2e
12 Drawer 操作:dock 位置切换(left/right/top/bottom)+ 比例(½/⅓/¼)+ 横纵分屏 + locked/float 模式 + 持久化 e2e
13 Playwright 14+ spec 全部绿色 + CI 集成 npm run e2e --reporter=html

5. 风险与缓解

5.1 高风险

# 风险 触发概率 缓解
R1 XiForge MC 融合时 backend_csharp 接口变化 Phase 0 时 freeze 后端 API 版本;Phase 12 前与后端约定 contract test
R2 Pinia + EventBus 改造导致 v4.3 协议语义偏移 Phase 0 写完整对照表(§3.1)→ code review · 不允许跳过
R3 LinkEditor 内 SVG 渲染性能在 100+ 节点时下降 Phase 4 加 viewport culling;Phase 17 加 perf budget 检查
R4 Preset 管理与 Profile 管理职责混淆 Phase 8 / 9 分别完成 + 写明数据结构差异(preset 是模块级,profile 是场景级)
R5 e2e 在 CI 不稳定(headless 渲染差异) Phase 16 加 npx playwright install 锁版本 + 重试机制

5.2 中风险

  • 持久化数据迁移:现有 frontend_vue3 已有持久化数据,新增 store 时要兼容(migrate 钩子)
  • 主题切换在 v4.3 五段架构下是否破坏:Phase 1 验证 6 主题在新顶栏布局下视觉无破损

6. 与既有文档的关系

6.1 上层(架构契约)

6.2 同层(D4 子文档)

6.3 下层(业务后端)

  • master AlgoDepartment/05_system_integration/SYSTEM_ARCHITECTURE.md — 四层架构总图(Vue3 / ASP.NET Core 8 / DSP DLL / pysidecar)
  • master work-{agent}/backend_csharp/ — WebSocket 后端实现(Phase 12 / 14 直接复用

7. 决策记录(ADR · 本计划锁定)

ADR 决策 触发原因 替代方案
ADR-D4-01 Vue 路线(A)· 不引入 iframe frontend_vue3 已有大量 Vue 业务投入 · 废弃成本巨大 B 混合 / C 推倒重来
ADR-D4-02 postMessage 协议改造为 Pinia store + EventBus 同进程通信 · 不需要跨域 / 跨 frame 保留 postMessage(无意义)
ADR-D4-03 MC 骨架仅融入 XiForge 用户 Q2 明确决策 全 stage 融合(工作量大)
ADR-D4-04 Preset 实现参考 v3-full-xitune-chain.html 用户 Q4 明确指向 自创实现(视觉不一致)
ADR-D4-05 17 phase 细颗粒度 + 6 stage 子目录 用户 Q5 明确选细颗粒度 粗 / 中颗粒度
ADR-D4-06 e2e 保留 4 + 扩充至 14+ 用户 Q-extra-1 明确决策 重新设计 e2e 矩阵
ADR-D4-07 理论依据用 §13 架构契约 + demo 视觉参考 用户 Q-extra-2 明确决策 仅用 demo / 仅用契约

8. 启动清单(Phase 0 即将做的事)

下一步:

  • 创建 00-baseline-alignment.md(Phase 0 文档)· 含 Pinia + EventBus 完整对照表 + TS 类型定义草案
  • 创建 6 个 stage 子目录骨架(每个目录先放 README.md + 计划中的 NN-xxx.md 占位)
  • 与前端智能体同步本总 plan → 让其按 phase 顺序执行
  • 建立 Phase 进度跟踪表(GitHub Project / TODOLIST.md / 等)

9. AIOS 调度机制(2026-05-19 新增 · v3 修订)

本 17 phase 路线图的执行调度由 AIOS(AI Operating System)5 角色协作框架 v3接管,详见 ../40-aios/

v3 核心架构(2026-05-19 傍晚晚 修订 · 跨栈职能解耦):

  • AIOS / Cline 10% · Cline 插件作为调度内核的化身 · 派任务 / 仲裁 / 写 ADR / 维护 KANBAN · 不直接写业务代码
  • ClaudeA 50% · Claude Code CLI 终端 #1 · frontend_vue3/ 全程独占 · 17 phase 全部前端实施
  • ClaudeB 30% · Claude Code CLI 终端 #2 · backend_csharp/ + dsp_algo/ + contracts/ 全程独占 · 写 contracts/protocol-v1.md + 后端 + DSP + XiForge MC 融合
  • Continue 5% · 异步同步 commit 到 KANBAN.md + 备份分支 + 周复盘
  • Copilot 5% · IDE 内联补全(被动)

跨栈职能解耦原则(v3 关键 · 修正 v2 串行错误):

  • frontend_vue3/ = ClaudeA 全程独占 · 17 phase 由 ClaudeA 一人跑完
  • backend_csharp/ + dsp_algo/ + contracts/ = ClaudeB 全程独占 · 提前为 ClaudeA 铺路
  • Day 1 起即并行 · 双 CLI 同时启动 · 目录天然隔离 · 零 commit 冲突
  • phase 16-17(Week 6-7) = ClaudeA(前端 e2e 验收) + ClaudeB(后端跨栈联调) 同时在线协作 · 仍在各自目录内
  • ClaudeB 横切任务 contracts/protocol-v1.md 必须 Day 5 freeze + tag(否则 ClaudeA phase 6-7 阻塞)

关键交叉引用:

本文档(00-master-plan.md)定义做什么 + 顺序;AIOS 文档体系定义谁来做 + 怎么协作


Frontend-Vue3 Master Plan v1.0 · 2026-05-19 · 基于 v1.2-ide-architecture §13 架构契约 + frontend_vue3 现状基线 + master TuningTool MC 骨架(XiForge 融合) · 17 phase / 6-8 周 / Vue 路线(ADR-D4-01) · 调度由 AIOS / Cline + 双 Claude Code CLI(ClaudeA 全程独占前端 / ClaudeB 全程独占后端+DSP+契约 · 跨栈职能解耦 · Day 1 起真正并行) 接管