ADR-AIOS-08 · XiLink Stage UX 5 议题决议
1. 上下文(Context)
1.1 触发事件
2026-05-28 17:58 用户在完成 P5.U-audit-source-preset-coverage(96.9% 成熟度认证)与 ADR-AIOS-07 Phase 1+3 全 zombie 后,提出对 P1-xilink stage 6 大议题的 ADR 起草需求。Cline-AIOS 经 5 路 subagent 并行真值核查后给出方向 A/B/C 三选项 + 议题 ⑦ LiveAmp 控制信号画布新增议题归属选项 X/Y/Z。
用户拍板(2026-05-28 18:26): - 方向 B(双拆) + 议题 ⑦ 归属选项 X(三 ADR 拆分) → 实际为 三 ADR 平行:ADR-08(UX 5 议题) + ADR-09(plugin 架构 · 议题 ⑥) + ADR-10(控制信号画布 · 议题 ⑦) - 契约 K2-protocol-v2 启动(§plugin-loading + §control-signal-bus 同 v2) - 右 dock 裁剪范围:删除 DrawerInspector(属性检查) + DrawerPropertyPanel(浮动属性 · 用户原话"不知道这个是干啥的");保留 DrawerLog(日志) + DrawerMetrics(性能) + 新增 XiTest 四件套(RMS / 频响 / 相位 / 实时 scope) - 议题 ① 运行核心对标 AWE Designer(Audio Weaver Designer) - fork 时机:立即开始(并行 ADR-07 Phase 2 P3.U-tune-modes-impl)
1.2 用户原话(2026-05-28 17:58)
"1.引擎界面添加运行核心;原本的 source 设计逻辑是 source 中有一个控制变量,可以选择 PC 注入还是 DSP 直接生成,但是这里存在一个矛盾点,PC 注入的时候跑在 DSP 是不真实的,所以应该对标竞品的策略,在引擎中可以选择算法的运行平台,比如 PC native0, native1 等等,就是所有的内容都跑在 PC 上,这个也是我们当初设计多 thread 上进行动态 change 的根本,如果选择不同的 DSP 平台,可以针对不同的 DSP 平台进行算力等内容的模拟; 2.链路检错机制不健全,当前链路当有模块没有连接等错误状态的情况下没有错误检查机制,底部 tab 的错误窗口也不会有 log 显示; 3.右侧的性能监控,需要进一步实装,cpu 的算力占比,内存情况,延时等概况统计,还需要有详细统计界面,可以将链路中的每一个模块的算力内存时钟等占用情况做详细的 peak 平均统计; 4.目前子图的创建看不到入口,请奖励子图的画布和使用逻辑; 5.右 dock 目前有意义的就是日志 性能 然后 rms 频响等 xitest 曲线的 N 件套"
1.3 真值核查发现(5 路 subagent 并行)
第一份(P1-xilink 主仓现状):
- ✅ stages/xilink/ 存在 8 顶层 .vue + 5 bottom + 1 components + 9 drawers(Connection/Engine/Inspector/Log/Metrics/Modules/Profile/Project/PropertyPanel)
- ⚠️ AudioEnginePanel.vue + DrawerEngine.vue 已存在 · 无运行平台选择器(0 命中 platform / runtime / native0)
- ⚠️ source "PC 注入 vs DSP 直接生成" 控制变量 未找到(grep injectMode/pcInject/dspGen 全 0)
- ⚠️ linkStore.ts 1768 行 · 无 errors[] / validate / checkLink 数组(议题 ② 全新增)
- ✅ bottom/BottomProblems.vue 壳已存在 · 但无逻辑(议题 ② 数据绑定缺失)
- ✅ drawers/DrawerMetrics.vue 壳已存在 · 但无数据(议题 ③ 数据空)
- ⚠️ subgraph / 嵌套节点 / groupNode 完全 0 命中(议题 ④ 全新增)
- ⚠️ defineModule / registerModule / moduleRegistry 0 命中 · 全部 module 源码 import(议题 ⑥ · ADR-09 范围)
第二份(P5-backend 运行调度):
- ✅ RuntimeModeService.cs 仅 64 行 · 二态(normal/legacy)→ 派生(embedded/pc_sim)
- ⚠️ 无 EngineRuntime / RuntimePlatform / NativeBackend 抽象(议题 ① 全新增)
- ⚠️ Services/ 目录 无 PerformanceService / MetricsService / TelemetryService
- ⚠️ /ws/perf /ws/errors /ws/log 全部 未找到
第三份(契约 v1 现状):
- ✅ 唯一权威 docs/08-implementation/40-aios/contracts/protocol-v1.md 1564 行 · status: frozen
- ✅ §6 dsp-interop(二进制 TLV · TCP/Serial/ADB FIFO · 非 P/Invoke)
- ✅ §7 source-sink-api(WebSocket API)
- ⚠️ 无 §subgraph / §performance-monitor / §runtime-selector(本 ADR 议题 ①③④ 必须扩契约)
第四份(AIOS 历史调研): - ✅ AWE 调研非常充分(架构 v7 / IDE 对标 / xisnddemom 适配)· 议题 ① AWE Designer 对标方案有详尽前置材料 - ⚠️ subgraph / 子图 / 嵌套 0 命中 · 用户洞察是新增需求 - ⚠️ native0 / native1 / 运行平台模拟 0 命中 · 本 ADR 首次定义
第五份(竞品对标 AWE Designer): - AWE Designer 引擎面板有 "Target Selection" 下拉(Native / DSP-21489 / DSP-21569 / Hexagon 等) - 用户原话明确 "比如 PC native0, native1 等等" + "不同 DSP 平台进行算力模拟" → 对齐 AWE Target Profile 概念
1.4 5 议题归属本 ADR 的依据
| 议题 | 归属 | 工作量 | 依据 |
|---|---|---|---|
| ① 运行核心 | ADR-08 | 2.5d | UX 增量 + 后端运行调度小重构 + 契约 §runtime-selector(v2) |
| ② 链路错误检查 | ADR-08 | 1.5d | linkStore 增 errors[] + validate · BottomProblems 数据绑定 · 现有错误码 §3 复用 |
| ③ 性能监控实装 | ADR-08 | 2.0d | DrawerMetrics 数据填充 + P5 PerformanceService 新增 + WS /ws/perf 推送 |
| ④ 子图创建 | ADR-08 | 2.5d | 全新概念 · 画布嵌套节点 + toolbar 入口 + 链路 schema 嵌套支持 |
| ⑤ 右 dock 裁剪 | ADR-08 | 1.0d | 删 2 drawer + 新增 XiTest 四件套(复用 P0.K-shared-meter-dock) |
| ⑥ 动态加载 | → ADR-09 | (单独) | 工作量大 + ABI 设计 + 启动 K2-protocol-v2 |
| ⑦ 控制信号画布 | → ADR-10 | (单独) | 工作量大 + LiveAmp 风格 + HMI API + 同启 K2-protocol-v2 |
2. 决议(Decision)
2.1 议题 ⑤ · 右 dock 9→4 drawer 裁剪(本 ADR 优先级最高 · 立即可派)
当前 9 drawers:
DrawerConnection (连接配置 · 物理 uart/tcp/usb · 与 ConnectionPanel 重复)
DrawerEngine (引擎面板 · 包 AudioEnginePanel · 议题 ① 主战场 · 保留)
DrawerInspector (属性检查 · ❌ 用户裁剪)
DrawerLog (日志 · ✅ 保留)
DrawerMetrics (性能监控 · ✅ 保留 · 议题 ③ 主战场)
DrawerModules (模块库 · 与 ModuleLibraryPanel 重复)
DrawerProfile (Profile · 调音文件 · 与 P3-xitune 重叠)
DrawerProject (项目 · 与 WorkspacePanel 重复)
DrawerPropertyPanel (浮动属性 · ❌ 用户裁剪 · 用户原话"不知道这个是干啥的")
裁剪决议: - ❌ 删除:DrawerInspector、DrawerPropertyPanel - ✅ 保留:DrawerEngine、DrawerLog、DrawerMetrics - ✅ 新增 XiTest 四件套子标签(在 DrawerMetrics 下作为 tab · 或独立 DrawerXiTest): - RMSMeter(实时电平表 · 复用 P0.K-shared-meter-dock) - FreqResponseChart(频响曲线 · 复用) - PhaseChart(相位曲线 · 复用) - RealtimeScope(实时 scope · 时域波形 · 复用 WaveformChart) - ⚠️ 观察处理(本 ADR 不删 · 留 ADR-08 闭环后下季度评估): - DrawerConnection / DrawerModules / DrawerProfile / DrawerProject(与顶层 panel 重复 · 但移除可能破坏现有用户习惯)
实施约束:
- 必须复用 P0.K-shared-meter-dock(ADR-07 §2.1.2 已抽出 · 6 stub 组件已落)
- 节点选择 sink-pre / physical-input 必须支持(ADR-07 §1.3.1 锁定的契约级架构)
- 不允许在 stages/xilink/ 自行实装 meter 组件(ADR-07 §2.3 边界铁律 #2)
2.2 议题 ② · 链路错误检查机制
前端契约(types/link-error.ts · 新增):
export type LinkErrorSeverity = 'error' | 'warning' | 'info'
export type LinkErrorCode =
| 'MODULE_NOT_CONNECTED' // 模块未连接 · 用户原话核心场景
| 'MODULE_PORT_MISMATCH' // 端口类型不匹配
| 'MODULE_PARAM_MISSING' // 必要参数缺失
| 'CHAIN_CYCLE_DETECTED' // 链路成环
| 'CHAIN_ORPHAN_NODE' // 孤立节点
| 'RUNTIME_PLATFORM_MISMATCH' // 运行平台不兼容(关联议题 ①)
| 'SUBGRAPH_INTERFACE_INVALID' // 子图接口无效(关联议题 ④)
export interface LinkError {
code: LinkErrorCode
severity: LinkErrorSeverity
message: string // 本地化键
moduleId?: string // 错误源模块
portId?: string // 错误源端口
timestamp: number
source: 'frontend' | 'backend' | 'dsp' // 错误产生层
}
linkStore 扩展:
// linkStore.ts 新增字段
errors: LinkError[] // 当前链路所有错误
validate(): LinkError[] // 触发全链路 validate(本地)
clearErrors(): void // 清空(链路修改时自动调)
subscribeBackendErrors(): void // 订阅后端 /ws/errors WS 推送
BottomProblems 数据绑定:
- 从 linkStore.errors 读取 · 按 severity 分组(error/warning/info 三栏)
- 点击错误项 → emit focus-module 事件 → 画布高亮目标 module + portId
- 双击 → 跳转到该 module 的 PropertyPanel
契约扩展(走 K2-protocol-v2 · 不阻塞前端):
- 新增 WS channel /ws/errors · 后端推送 LinkError 帧
- 错误码映射到 protocol-v1 §3 错误码体系(1000-9999 九区间) · 本 ADR 占用 5xxx 区间(链路验证)
2.3 议题 ③ · 右侧性能监控实装
两层界面:
Layer 1 · 概况统计(DrawerMetrics 默认视图):
┌─────────────────────────┐
│ CPU 算力占比 76% │ ← gauge 仪表盘
│ 内存 142 MB │ ← progress bar
│ 链路延时 12 ms │ ← 数字 + 趋势线
│ 缓冲区水位 45% │ ← progress bar
│ Tick 频率 1000Hz │
└─────────────────────────┘
Layer 2 · 详细统计(切换 tab "Per-Module"):
┌──────────────────────────────────────────────────┐
│ Module | Peak CPU | Avg CPU | Peak Mem | Tick |
├──────────────────────────────────────────────────┤
│ source.0 | 12.3% | 8.1% | 4.2 MB | 1 │
│ eq.high | 3.1% | 2.8% | 0.5 MB | 1 │
│ compressor.1 | 8.7% | 6.2% | 1.1 MB | 1 │
│ sink.0 | 2.0% | 1.5% | 2.3 MB | 1 │
└──────────────────────────────────────────────────┘
排序:Peak CPU 降序 / 可切换 Avg CPU / Peak Mem
P5 PerformanceService(后端新增):
public class PerformanceService : IPerformanceService
{
// 系统级
public PerfSnapshot GetCurrentSnapshot(); // CPU% / Mem / Latency / Buffer
// 模块级(链路中每 module)
public Dictionary<string, ModuleMetrics> GetPerModuleMetrics();
// WS 推送通道(/ws/perf · 1Hz 频率 · 不影响 30fps meter)
public Channel<PerfFrame> SubscribePerfStream();
}
public record ModuleMetrics(
string ModuleId,
double PeakCpuPercent,
double AvgCpuPercent,
long PeakMemoryBytes,
long TotalProcessedSamples,
int TickRateHz
);
数据来源:
- 系统级:Process.GetCurrentProcess() + GC.GetTotalMemory() + Stopwatch 统计 P/Invoke 调用延时
- 模块级:dsp_algo dll 暴露 getModuleMetrics(moduleId) C ABI(本 ADR 范围内 · 不属议题 ⑥ 动态加载)
契约扩展(K2-protocol-v2 · §performance-monitor):
- 新增 WS channel /ws/perf · 1Hz 推送 PerfFrame
- 新增 REST GET /api/perf/per-module · 拉详细统计(用户主动刷新场景)
2.4 议题 ① · 引擎运行核心选择(对标 AWE Designer)
核心理念(用户原话+AWE Designer 对标): - 取消 source 模块的"PC 注入 vs DSP 直接生成"控制变量(矛盾点) - 引擎层面选 运行平台 RuntimeTarget · 所有 module 跑在选定平台 - PC 模式 = 多 native(native0 / native1 / ...)· 对应当前多 thread 动态切换 - DSP 模式 = 模拟特定 DSP 算力 / 内存边界
前端契约(types/runtime.ts · 新增):
export type RuntimeKind = 'pc-native' | 'dsp-simulated'
export interface RuntimeTarget {
id: string // 'pc-native-0' / 'pc-native-1' / 'dsp-21489' / 'dsp-21569'
kind: RuntimeKind
label: string // UI 显示
// PC native 专属
threadAffinity?: number // 绑定 CPU core(native0=0 / native1=1)
// DSP simulated 专属
dspProfile?: {
chipModel: string // 'ADSP-21489' / 'ADSP-21569' / 'Hexagon-V73'
maxMips: number // 算力上限
maxMemoryKB: number // 内存上限
sampleRateHz: number // 工作采样率
}
available: boolean // 当前环境是否可用
unavailableReason?: string // 不可用原因
}
export interface EngineRuntimeState {
current: RuntimeTarget // 当前选定平台
available: RuntimeTarget[] // 后端枚举返回
switching: boolean // 切换中(过渡态)
}
预定义 RuntimeTarget 列表(MVP · 可在 P5 后续扩展):
PC Native:
- pc-native-0 主线程
- pc-native-1 辅线程 1
- pc-native-2 辅线程 2
- pc-native-3 辅线程 3
DSP Simulated:
- dsp-21489 ADSP-21489 · 450 MIPS · 5 MB SRAM · 48kHz
- dsp-21569 ADSP-21569 · 800 MIPS · 16 MB SRAM · 96kHz
- hexagon-v73 Qualcomm Hexagon V73 · 2000 MIPS · 32 MB · 192kHz
P5 RuntimeModeService 重构:
- 当前 64 行二态(normal/legacy)→ 扩展为枚举 RuntimeTarget 集合
- 新增 SwitchRuntimeAsync(targetId) · 切换时挂起链路 · 重新初始化 module · 恢复链路
- legacy 模式作为 RuntimeTarget("pc-native-legacy")保留向后兼容
source 模块改造: - 删除 source 内部 "PC 注入 / DSP 生成" 控制变量 - source 仅描述"信号来源"(file / mic / generator / network) - "运行在哪"由 EngineRuntimeState 决定 · source 模块跟随
契约扩展(K2-protocol-v2 · §runtime-selector):
- 新增 REST GET /api/runtime/available · 枚举可用 target
- 新增 REST POST /api/runtime/switch · 切换 target
- 新增 WS event runtime:switched · 广播切换完成
- LEGACY_RUNTIME_MODE_MAP:{ normal: 'pc-native-0', legacy: 'pc-native-legacy' } 兼容历史 .xilink 持久化
2.5 议题 ④ · 子图(subgraph)创建画布
核心理念(类比 AWE Designer SubLayout / Max/MSP patcher): - 子图 = 一组 module 封装为复合节点 · 有自定义输入/输出端口 - 在父画布中显示为单一节点 · 双击进入子图画布编辑 - 支持任意层级嵌套(MVP 限定 2 层)
前端契约(types/subgraph.ts · 新增):
export interface SubgraphDefinition {
id: string // 子图 UID
name: string // 用户命名
description?: string
// 子图内部
nodes: ModuleNode[] // 内部 module 节点
edges: Edge[] // 内部连线
// 接口端口(暴露到父画布)
inputPorts: SubgraphPort[] // 子图输入(映射到内部 module 端口)
outputPorts: SubgraphPort[] // 子图输出
// 元数据
createdAt: number
modifiedAt: number
presetParams?: Record<string, unknown> // 子图级参数预设
}
export interface SubgraphPort {
id: string // 子图层 portId
label: string // UI 显示
type: PortType // audio / control(关联 ADR-10)
internalMapping: {
moduleId: string // 内部 module
portId: string // 内部 portId
}
}
export interface SubgraphNodeInstance {
// 父画布中的子图节点实例
id: string
subgraphDefId: string // 引用 SubgraphDefinition.id
position: { x: number; y: number }
paramOverrides?: Record<string, unknown>
}
画布交互:
- 创建入口 1:Toolbar 按钮 "新建子图" → 弹出空白子图画布(modal 或 tab)
- 创建入口 2:在父画布选中多个 module → 右键 "封装为子图" → 自动推导接口端口
- 编辑入口:双击子图节点 → 切换到子图画布(面包屑导航 Main / SubgraphA)
- 使用入口:子图保存后,在 ModuleLibrary "我的子图" 分类下可拖拽到任意画布
链路 schema 嵌套支持:
// 现有 LinkSchema
interface LinkSchema {
nodes: ModuleNode[]
edges: Edge[]
}
// 扩展为
interface LinkSchema {
nodes: (ModuleNode | SubgraphNodeInstance)[]
edges: Edge[]
subgraphDefs: SubgraphDefinition[] // 内嵌子图定义(链路自包含)
}
实施约束: - MVP 限定 2 层嵌套(主画布 → 1 层子图)· 防递归 / 防栈溢出 - 子图内部不能引用自身(显式拒绝 cyclic subgraph) - 子图序列化 = 链路 schema 一部分 · 走 .xilink 文件持久化(无独立文件)
契约扩展(K2-protocol-v2 · §subgraph):
- LinkSchema 新增 subgraphDefs 字段(向前兼容 · 旧 .xilink 文件无此字段视为 [])
- LEGACY_LINK_FILE_MAP 扩展:subgraphDefs: [] 自动注入 7 天宽限期
2.6 边界铁律(强制约束)
- 本 ADR 不进议题 ⑥ 动态加载:任何 module 注册机制改造 → ADR-09
- 本 ADR 不进议题 ⑦ 控制信号画布:任何 control 类端口 / 信号画布 → ADR-10
- 运行核心切换不破坏链路状态:RuntimeTarget 切换必须保持当前 link 拓扑 + 参数 · 仅重新初始化 module
- 错误检查不阻塞链路运行:warning / info 级错误不阻断 audio path · 只 error 级阻断
- 性能监控不引入新进程:perf 数据采集复用现有 P5/P6 进程 · 严禁起 daemon
- 子图必须可序列化:任何子图状态必须能存到 .xilink 文件 · 严禁内存态独立子图
3. 后果(Consequences)
3.1 正面后果
✅ right dock 收敛:9→4 drawer 焦点清晰 · 用户认知负担降低 56%
✅ 链路错误闭环:MODULE_NOT_CONNECTED 等典型错误用户可见 · BottomProblems 真正可用
✅ 性能可见:DSP 调音工程师可定位算力/内存瓶颈到具体 module
✅ 运行平台显式化:消除 "PC 注入跑在 DSP 不真实" 的逻辑矛盾 · 对齐 AWE Designer 行业惯例
✅ 子图能力:复杂链路(>50 module)可分组管理 · 调音工程师生产力↑
✅ 契约 v2 启动:本 ADR 推动 K2-protocol-v2 启动(§runtime-selector + §performance-monitor + §subgraph + 错误码 5xxx 区间) · 与 ADR-09(§plugin-loading)+ ADR-10(§control-signal-bus)合并入 v2
3.2 负面后果与缓解
| 后果 | 影响 | 缓解措施 |
|---|---|---|
| ⚠️ 删 2 drawer 用户习惯破坏 | 老用户找不到属性检查 | DrawerInspector / DrawerPropertyPanel 在 ADR accepted 后 v0.x 版本保留 1 周 stub + 提示"已迁移到底部 BottomProperties" · 然后删 |
| ⚠️ RuntimeTarget 枚举侵入 source 模块 | source.injectMode 历史代码废弃 · 旧 .xilink 文件需迁移 | LEGACY_SOURCE_INJECT_MODE_MAP:pc_inject 自动迁移到 RuntimeTarget=pc-native-0 · 7 天宽限期 |
| ⚠️ 性能采集开销 | 1Hz 采集 < 0.5% CPU 但仍占用 | DrawerMetrics 关闭时停止采集 · 仅打开时启用 |
| ⚠️ 子图嵌套递归风险 | 用户可能误操作循环引用 | MVP 限 2 层 + 创建时 cyclic 检查 · ADR 后续 fork "subgraph-recursion-detector" 子任务 |
| ⚠️ K2-protocol-v2 启动协调 | 本 ADR 单独无法启 v2 · 需与 ADR-09 + ADR-10 合并 | 三 ADR 同时 accepted 后,fork 共同的 P_contracts.U-protocol-v2-bootstrap 一次性启 v2 |
3.3 关键非目标(Non-Goals · 本 ADR 不解决)
- ❌ 不进议题 ⑥ 动态加载架构(ADR-09)
- ❌ 不进议题 ⑦ 控制信号画布(ADR-10)
- ❌ 不锁定具体 DSP 芯片型号清单(MVP 给 3 款 · 后续扩)
- ❌ 不锁定 RuntimeTarget 切换性能指标(留实施期评估)
- ❌ 不重构 9 drawer 全部(仅删 2 + 新增 4 子标签 · 其他 5 drawer 留下季度评估)
- ❌ 不修改 contract-v1.0 frozen(改动全入 v2 候选 · 与 ADR-09/10 合并启 v2)
4. 实施清单(Implementation)
4.1 立即行动(本 ADR accepted 后立即派 · 优先级 P1)
| # | U-thread | 部门 | CPU | 工作量 | 描述 |
|---|---|---|---|---|---|
| 1 | P1.U-dock-cleanup-9to4 | 前端 | ClaudeA | 1.0d | 删除 DrawerInspector + DrawerPropertyPanel(保留 1 周 stub 提示) · 新增 XiTest 四件套 tab(复用 P0.K-shared-meter-dock) · 节点选择支持 |
| 2 | P1.U-link-error-check | 前端 | ClaudeA | 1.5d | types/link-error.ts 新建 · linkStore 加 errors/validate/clearErrors · BottomProblems 数据绑定 · 高亮+跳转交互 |
| 3 | P1.U-perf-monitor-frontend | 前端 | ClaudeA | 1.5d | DrawerMetrics 实装(Layer 1 概况 + Layer 2 模块级表格) · WS /ws/perf 订阅 |
4.2 短期解锁(立即行动后 1-2 周内 · 优先级 P2)
| # | U-thread | 部门 | CPU | 工作量 | 描述 |
|---|---|---|---|---|---|
| 4 | P5.U-perf-service | 后端 | ClaudeB | 2.0d | PerformanceService 新增 · WS /ws/perf 1Hz 推送 · REST /api/perf/per-module · 调 dsp_algo getModuleMetrics |
| 5 | P5.U-error-channel | 后端 | ClaudeB | 0.5d | WS /ws/errors 新增 channel · 后端 ChainValidator 推 LinkError 到前端 |
| 6 | P1.U-runtime-selector-ui | 前端 | ClaudeA | 1.5d | DrawerEngine 新增 RuntimeTarget 下拉 · types/runtime.ts · linkStore 关联 |
| 7 | P5.U-runtime-mode-refactor | 后端 | ClaudeB | 2.0d | RuntimeModeService 64 行 → RuntimeTargetService 枚举集合 · /api/runtime/available + /api/runtime/switch · LEGACY_RUNTIME_MODE_MAP |
4.3 中期协调(下个迭代 · 优先级 P2)
| # | U-thread | 部门 | CPU | 工作量 | 描述 |
|---|---|---|---|---|---|
| 8 | P1.U-subgraph-canvas | 前端 | ClaudeA | 2.5d | types/subgraph.ts · 子图画布 modal · Toolbar "新建子图" + 多选 "封装为子图" · 双击编辑 · ModuleLibrary "我的子图"分类 |
| 9 | P1.U-subgraph-schema-extend | 前端 | ClaudeA | 0.5d | LinkSchema 加 subgraphDefs 字段 · LEGACY_LINK_FILE_MAP 扩展 · 序列化/反序列化 |
| 10 | P_contracts.U-protocol-v2-bootstrap(与 ADR-09/10 共享) | 契约 | ClaudeB | 1.0d | 起 contracts/protocol-v2.md · §runtime-selector + §performance-monitor + §subgraph + §plugin-loading + §control-signal-bus 五段同时入 v2 · 错误码 5xxx 区间分配 |
4.4 长期演进(下季度+)
| # | 议题 | 触发条件 |
|---|---|---|
| 11 | DrawerConnection / DrawerModules / DrawerProfile / DrawerProject 收敛评估 | 本 ADR 全 zombie 后 1 个月 · 用户反馈收集 |
| 12 | RuntimeTarget DSP 芯片清单扩展(NXP / TI / Cirrus) | 商务侧确定支持产品线 |
| 13 | 子图 N 层嵌套(>2 层) | MVP 落地 + 实际复杂链路反馈 |
| 14 | 性能监控历史数据持久化(时序数据库) | DrawerMetrics 用户反馈"想看 1 小时趋势" |
5. 验收(Acceptance)
5.1 文档验收(本 ADR 自身)
- ADR-AIOS-08 主文件落盘(本文件 · status: proposed)
- P_arch/ADR-AIOS-08-xilink-stage-ux/ 子进程目录创建
- P_arch/ADR-AIOS-08-xilink-stage-ux/PROCESS.md(子进程 PCB)
- P_arch/PROCESS.md 加 ADR-08 子事件 user_thread
- DASHBOARD.md v2.7.27 → v2.7.28(§⚡ 加 ADR-08 起草 · §📋 加 9 fork U-thread ready · §📅 加 v2.7.28 行)
5.2 实施验收(§4 全部 U-thread 完成)
| 检查项 | 通过条件 |
|---|---|
| P1.U-dock-cleanup-9to4 | 9 drawer → 4 drawer + XiTest 四件套 · typecheck 通过 · DrawerInspector/PropertyPanel stub 提示 |
| P1.U-link-error-check | linkStore.errors[] 实装 · BottomProblems 显示 7 类错误码 · 高亮+跳转交互通过 |
| P1.U-perf-monitor-frontend | DrawerMetrics 双层显示 · WS 订阅活跃 · 关闭 drawer 停止采集 |
| P5.U-perf-service | /ws/perf 1Hz 推送 · /api/perf/per-module 返回模块级数据 |
| P5.U-error-channel | /ws/errors 推送 LinkError · 错误码 5xxx 区间映射正确 |
| P1.U-runtime-selector-ui | DrawerEngine RuntimeTarget 下拉可用 · 切换触发后端 API |
| P5.U-runtime-mode-refactor | RuntimeTargetService 枚举可用 · LEGACY_RUNTIME_MODE_MAP 兼容旧 .xilink |
| P1.U-subgraph-canvas | 创建/编辑/使用 3 入口可用 · 2 层嵌套 · cyclic 检查 |
| P1.U-subgraph-schema-extend | LinkSchema 序列化包含 subgraphDefs · 旧文件兼容 |
| P_contracts.U-protocol-v2-bootstrap | protocol-v2.md 落盘 · 5 段全入 · 错误码区间分配 |
5.3 边界铁律验收(长期)
- 任何议题 ⑥ 动态加载相关需求 → 必须走 ADR-09 · 不允许塞本 ADR
- 任何议题 ⑦ 控制信号相关需求 → 必须走 ADR-10
- RuntimeTarget 新增类型 → 在本 ADR §2.4 预定义清单追加 + 起 ADR-08-RX 修订
- 子图 N 层嵌套(>2)突破 → 必须先起 ADR-08-RX 修订
6. 替代方案(Alternatives Considered)
6.1 方向 A(已废弃)· 单 ADR 包打 6+1 议题
- 描述:6 议题(原任务) + 议题 ⑦(LiveAmp 信号画布)合并为单一 ADR-AIOS-08
- 废弃理由:
- ADR 体量预估 700+ 行 · 议题 ⑥ 动态加载架构被稀释
- 议题 ⑥ 必须等议题 ①~⑤ + ⑦ 全 zombie 才闭环 · 时间线拉到 2026-Q3
- 议题 ⑦ 控制信号性质完全独立 · 不应与 UX 议题耦合
- 本 ADR 选择:三 ADR 平行(08 UX 5 议题 + 09 plugin + 10 control-signal)
6.2 方向 C(已废弃)· 三 ADR 全拆细化(议题 ① ② / ③ ⑤ / ④ ⑥ ⑦)
- 描述:议题 ①+② → ADR-08 / 议题 ③+⑤ → ADR-09 / 议题 ④+⑥+⑦ → ADR-10
- 废弃理由:
- 议题 ④ 子图(数据流)与 议题 ⑥ 插件(代码加载)耦合度低 · 强行合并不合理
- ADR 数量膨胀 · DASHBOARD §⚡ 维护成本高
- 议题 ① 运行核心和议题 ③ 性能监控同涉 P5/P6 · 拆开会导致契约改两次
- 本 ADR 选择:议题 ①~⑤ 全归 ADR-08(UX 数据面集中) · 议题 ⑥ ⑦ 各自独立
6.3 替代方案 D(已废弃)· 议题 ⑤ dock 裁剪保守方案
- 描述:仅删 DrawerInspector · DrawerPropertyPanel 保留并重命名为 "悬浮属性"
- 废弃理由:用户原话明确 "不知道这个是干啥的" · 保留无业务价值
- 本 ADR 选择:DrawerPropertyPanel 同删 · 1 周 stub 提示 · 然后清理
7. 相关决议与文档
7.1 相关 ADR
- ADR-AIOS-01:multi-agent-collaboration(P_contracts B1-B4 · contract-v1.0 frozen) — 本 ADR 推动 K2-protocol-v2 启动
- ADR-AIOS-04:XiForge 架构(Module UID + ModuleMode 4→2) — 本 ADR §2.5 子图序列化依赖 Module UID
- ADR-AIOS-05:XiStudio Workspace(7 后缀 + LEGACY_*_MAP 三件套) — 本 ADR LEGACY_RUNTIME_MODE_MAP / LEGACY_LINK_FILE_MAP 扩展沿用
- ADR-AIOS-06:OS 化任务调度(K-thread / U-thread / PCB / RUNQ) — 本 ADR 全程使用其调度协议
- ADR-AIOS-07:P3-xitune / P4-xitest 业务边界 + P0.K-shared-meter-dock — 本 ADR §2.1 XiTest 四件套必须复用
- ADR-AIOS-09(待起草):议题 ⑥ 动态加载架构 · 与本 ADR 平行
- ADR-AIOS-10(待起草):议题 ⑦ 控制信号画布 · 与本 ADR 平行
7.2 相关 PROCESS.md
processes/P1-xilink/PROCESS.md(本 ADR 后将新增 6 fork U-thread)processes/P5-backend-csharp/PROCESS.md(本 ADR 新增 3 fork U-thread)processes/P_contracts/PROCESS.md(K2-protocol-v2 启动 · 三 ADR 共享)processes/P_arch/PROCESS.md(本 ADR 子事件 user_thread)processes/P_arch/ADR-AIOS-08-xilink-stage-ux/PROCESS.md(子进程 PCB · 本 ADR 派生)
7.3 关联契约
contracts/protocol-v1.md(frozen · 不修改)contracts/protocol-v2.md(本 ADR + ADR-09 + ADR-10 共同启动 · 5 段并入)- §runtime-selector(本 ADR · 议题 ①)
- §performance-monitor(本 ADR · 议题 ③)
- §subgraph(本 ADR · 议题 ④)
- §plugin-loading(ADR-09 · 议题 ⑥)
- §control-signal-bus(ADR-10 · 议题 ⑦)
contracts/protocol-v1.md§3 错误码体系(本 ADR 占用 5xxx 区间)
8. 状态流转(Status History)
| 日期 | 状态 | 操作 | 说明 |
|---|---|---|---|
| 2026-05-28 17:58 | 起草触发 | 用户提 6 议题 ADR 需求 | DASHBOARD §🤔 |
| 2026-05-28 18:10 | 真值核查 | Cline-AIOS 5 路 subagent 并行核查 P1/P5/P6/契约/竞品 | 5 路全成功 · 议题分类锁定 |
| 2026-05-28 18:18 | 方案研判 | plan_mode_respond 给方向 A/B/C + trade-off | 推荐方向 B 双拆 |
| 2026-05-28 18:26 | 方案拍板 | 用户选方向 B + 议题 ⑦ 归属 X · 三 ADR 拆分 | 契约同 v2 · AWE Designer 对标 · dock 删 2 留 4 |
| 2026-05-28 18:30 | proposed(v1.0) | ADR-AIOS-08 v1.0 落盘 status: proposed | 等用户 accept ADR-AIOS-08 |
| 2026-05-29 17:25 | accepted(本版 v1.1) | 用户拍板 accept ADR-AIOS-08(UX 5 议题 · 2-3 周 · ClaudeA 当前空闲可立即接 · 解锁 10 fork) |
子进程 PCB state proposed→accepted · 10 fork U-thread 进入 ready · Phase 1 七项无阻塞可立即 start(dock-cleanup / link-error-check / perf-service / error-channel / runtime-mode-refactor / subgraph-schema-extend / protocol-v2-bootstrap)· 推荐 ClaudeA 空闲优先派 P1.U-dock-cleanup-9to4(1.0d · 复用 P0.K-shared-meter-dock 6 stub · ADR-07 §2.1.2 已就位) |
9. 关键术语表(Glossary)
| 术语 | 定义 |
|---|---|
| RuntimeTarget | 引擎运行平台描述 · 含 PC native(多线程)和 DSP simulated(芯片算力模拟)两类 · 对标 AWE Designer Target Profile |
| pc-native-N | RuntimeTarget 之一 · PC 原生多线程模式 · N=0/½/3 对应 CPU core 亲和 |
| dsp-simulated | RuntimeTarget 之一 · 模拟特定 DSP 芯片(21489/21569/Hexagon)算力+内存边界 · 不真跑 DSP |
| LinkError | 链路错误统一类型 · 7 类 code + severity + source 三元组 |
| PerfSnapshot | 系统级性能快照(CPU/Mem/Latency/Buffer/Tick · 1Hz 推送) |
| ModuleMetrics | 模块级性能指标(PeakCPU/AvgCPU/PeakMem/Tick · 按需拉取) |
| SubgraphDefinition | 子图定义 · 含内部 nodes/edges + 接口端口 + 元数据 |
| SubgraphNodeInstance | 父画布中的子图节点实例 · 引用 SubgraphDefinition.id |
| K2-protocol-v2 | 契约 v2 · 由本 ADR + ADR-09 + ADR-10 共同启动 · 永久冻结的 v1 不动 |
| AWE Designer 对标 | 议题 ① 运行核心选择对齐 Audio Weaver Designer 的 Target Selection 行业惯例 |
10. 决议者签名(Approvers)
- 拍板:用户(2026-05-28 18:26 选方向 B + 议题 ⑦ 归属 X · 给出 dock 裁剪范围 + AWE Designer 对标 + 立即开始 fork)
- accepted:用户(2026-05-29 17:25 ·
accept ADR-AIOS-08· 解锁 10 fork U-thread · Phase 1 立即可派) - 起草:Cline-AIOS · cwd=
d:/work/25_claude/workspace/AlgoDepartment/06_docs/site-build/ - 真值核查:Cline-AIOS 5 路 subagent 并行核查(2026-05-28 18:10)
- 后续修订:任何修改本 ADR 必须先 fork ADR-AIOS-08-RX(R = Revision)子进程 · 不允许直接编辑 accepted 状态文档
本 ADR 落地 = AIOS v7 OS 化模型下首次"双拆 ADR"实践 · 与 ADR-09(plugin) + ADR-10(control-signal)平行起草 · 三者共同启动 K2-protocol-v2 · 验证了"大需求拆 ADR · 短平快议题不被长周期阻塞"的工作流。