# dsh-web-relay 说明书 > 适用版本:dsh-web-relay 3.2.0 > 协议版本:v1.9(向下兼容 v1.5 / v1.6 / v1.7 / v1.8;v1.5 线性为默认,v1.6 / v1.7 / v1.8 / v1.9 均继承 DAG 并发调度) > 文档性质:基于当前实际源码与任务记录整理 --- ## 1. 总览 dsh-web-relay 是 dsh web profile 中的实验性插件,用于在 dsh 主 agent 与外部网页 AI 之间建立可追溯的协作通道。 核心能力: - 手动粘贴外部 AI 回答,或通过 Gemini Free API 提问 - 解析 `json:agent-action` 指令块 - 将复杂任务拆分为 Step List(v1.3) - 主 agent 逐步执行,外部 AI 逐步审核 - 所有过程写入 `web-relay/experiments/` 和 `web-relay/traces/` --- ## 2. 三方角色 | 角色 | 说明 | |---|---| | 用户 | 人类操作者,最终拍板方 | | 主 agent | 本机执行方,负责读写文件、运行命令、修改代码、收口 | | 外部 AI | 网页模型/外部 API,负责方案、规划、逐步审核 | --- ## 3. 协议规范(v1.3 起,含 v1.5 / v1.6 / v1.7 / v1.8) > 本章是 **dsh-web-relay 三方协作协议 v1.3(延伸至 v1.5 审核降级链、v1.6 并发调度、v1.7 多方案比较与步骤权重、v1.8 混合模式分工、v1.9 自动迭代与全角色降级)的正式规范文本**,属于协议层约定,独立于当前 3.2.0 具体实现。 ### 3.1 协议范围 本协议定义以下主体之间的协作规则: - 用户 - 主 agent - 外部 AI 并约定: - 任务如何分流 - 指令如何表达 - 复杂任务如何拆分为 Step List - 主 agent 如何逐步执行 - 外部 AI 如何逐步审核 - 过程如何写入轨迹与产出物 - 安全边界如何约束 ### 3.2 三方角色 | 角色 | 职责 | |---|---| | 用户 | 发起任务、提供上下文、确认执行、最终拍板 | | 主 agent | 读取上下文、执行文件/命令/代码改动、回写轨迹、收口 | | 外部 AI | 提供方案、规划 Step List、审核主 agent 每一步结果 | ### 3.3 Triage 分流(规则 8) - 小改动 / 可直接回答的问题:外部 AI 直接给结论,无需指令 Payload。 - 复杂任务(多步实现、设计分歧、接口未验证等):外部 AI 必须同时输出: 1. `json:agent-action` 指令块 2. 机器可读 `steps` 数组(Step List) 若外部 AI 未遵守,relay 粘贴端可提示一键补全格式;补全不改变内容实质。 ### 3.4 json:agent-action Payload `json:agent-action` 是外部 AI 与主 agent 之间的结构化指令载体,支持以下动作: - `write_file` - `run_cmd` - `plan` - `wake_agent` 示例: ```json [ { "action": "wake_agent", "reason": "复杂任务,请主 agent 接管", "targetWorkspace": "", "context": "<任务上下文>", "steps": [ { "id": 1, "title": "步骤一", "review": true, "acceptance": "验收标准" } ] } ] ``` ### 3.5 Step List 字段 | 字段 | 必填 | 说明 | |---|---|---| | `id` | 是 | 步骤序号 | | `title` | 是 | 步骤标题 | | `detail` | 否 | 步骤说明 | | `review` | 否 | 是否需外部 AI 审核,默认 `true` | | `acceptance` | 否 | 验收标准 | | `artifacts` | 否 | 预期产出物 | ### 3.6 逐步执行与审核循环 ```text 主 agent 执行 Step N → status = review → 外部 AI 审核 → approved:主 agent 继续 Step N+1 → rejected:主 agent 按意见修改后重新 review ``` 约束: - 主 agent 每次只执行一个 Step(v1.6 并发调度下,无依赖步骤可多步并行,见 3.13)。 - 每步完成后必须将结果写入三方轨迹。 - 未收到外部 AI `approved` 前,不得执行下一步。 - 主 agent 可提出落地方案变更,外部 AI 核实后更新或通过。 ### 3.7 状态机 | 状态 | 含义 | 可转换到 | |---|---|---| | `pending` | 待开始 | `executing` | | `blocked` | 前置依赖未满足(v1.6 依赖门控) | `executing`(依赖全部 approved 后可 start) | | `executing` | 执行中 | `review` | | `review` | 待审核 | `approved`、`rejected` | | `approved` | 已通过 | `reopen` 后可回 `pending` | | `rejected` | 已打回 | `reopen` 后回 `pending` | | `done` | 整体完成 | 最终态 | 整体 `done` 的条件: - 所有步骤均为 `approved`。 ### 3.8 轨迹与产出物约定 - 任务记录:`web-relay/experiments/dsh-web-relay-.md` - Step List 状态:`web-relay/experiments/expr-.steps.json` - 三方轨迹:`web-relay/traces/expr-.md` 轨迹必须包含三类条目: - `[用户]` - `[外部AI]` - `[主 agent]` ### 3.9 安全护栏 - 所有指令经用户确认后执行。 - 越界写文件、无 timeout 命令会被拒绝。 - `write_file` 目标必须解析在 workspace 内。 - 一键补全只补格式,不代行执行意图。 - 轨迹不写入 `side/`,与 side-window 解耦。 ### 3.10 协议版本 - 当前协议版本:`v1.9`(向下兼容 v1.5 / v1.6 / v1.7 / v1.8;**v1.5 线性为默认**,v1.6 / v1.7 / v1.8 / v1.9 均继承 DAG 并发调度,面板顶栏 Protocol Selector 切换,`localStorage` 记忆,见 5.11) - v1.5 新增(协议级):审核三级降级链(外部 AI → 对话模型 → 手动)、Step 字段 `artifact_required`、审核来源 `reviewedBy`、一键收口语义;与 v1.3 / v1.4 完全向下兼容。 - v1.6 新增(协议级):Step List 并发调度——steps 元素新增 `depends_on`(前置依赖)与 `parallel_group`(并发组标记)、依赖门控 + 多步并行状态机、唤醒并发清单(⚡ 可并行启动 / 🔒 等待中);与 v1.5 完全向下兼容。 - v1.7 新增(协议级):steps 元素新增 `alternatives`(候选方案数组)与 `importance`(high / medium / low 步骤权重)、planning 双向探讨、5 段式打包模板、artifacts 前置校验(详见 3.15);与 v1.5 / v1.6 完全向下兼容。 - v1.8 新增(协议级):**混合模式与执行/审核分工**——`importance` 从审核权重提示升级为分工契约(`low` 主 agent 直做免外部审 / `medium` 批量轻审 / `high` 三方严格审 / 缺省 `null` 普通步骤);`review:false` 硬开关与 `importance` 解耦(显式 `review:false` 无条件绕过审核,`review:true` 强制走审核);`reviewedBy` 新增 `mainagent` 自动豁免来源;三处边缘微调(Step List 重构状态隔离、批量审核原子打回、5 段式打包模板缺省对齐,详见 3.16);与 v1.5 / v1.6 / v1.7 完全向下兼容。 - **v1.5 兼容**:v1.5 模式下忽略 `depends_on` / `parallel_group`,按线性顺序执行;外部 AI 即使误带这两个字段也自动降级为顺序执行。 - 本协议是独立规范;实际插件实现可能逐步演进,但协议语义保持可追溯。 ### 3.11 Planning & Architect 模式(v1.4) v1.4 在 v1.3 Step List 执行之前引入可选的 planning 阶段。 - `phase: "planning"`:外部 AI 作为架构师,先探讨任务场景、边界与影响面。 - `context_requests`:外部 AI 可请求主 agent 做只读探路,例如读取文件或搜索代码。 - `phase: "executing"`:方案确认后,进入标准 Step List 执行。 - `phase: "finished"`:全部完成。 约束: - `context_requests` 仅允许只读操作,严禁修改代码。 - planning 阶段不应直接输出可执行步骤。 - 与 v1.3 Step List 完全向下兼容。 ### 3.12 审核降级链与容错(v1.5) v1.5 在 v1.3 Step List 与 v1.4 Planning 之上引入审核降级链与容错字段。 - 审核三级降级:每步进入 `review` 后,按 **外部 AI(Gemini)→ 对话模型(无工具,跟随主会话路由,如 deepseek-v4-flash)→ 用户手动** 的顺序自动降级审核。 - `reviewedBy` 字段:每步记录审核来源,取值 `external | dialog | manual`。 - `artifact_required` 字段:Step 可声明 `artifact_required: false`(纯分析/规划步骤不要求实体产物);校验器优先读 notes 与轨迹,避免误打回。 - 一键收口语义:全部 `approved` 后可发起收口,生成审核来源汇总并追加轨迹后置整体 `done`。 约束: - 降级链仅作用于审核环节,不改变执行与轨迹语义。 - 与 v1.3 Step List、v1.4 Planning 完全向下兼容。 ### 3.13 Step List 并发调度(v1.6) v1.6 在 v1.5 线性执行之上引入**并发调度**:steps 元素新增两个可选字段,后端按依赖关系做门控与就绪计算,多个步骤可同时处于 `executing` / `review`。 - **`depends_on`(前置依赖,可选)**:数组,元素为步骤 id;空数组 / 缺省 = 无依赖。v1.5 模式下忽略。 - **`parallel_group`(并发组标记,可选)**:同组且依赖满足 → 可并行;`null` / 缺省 = 串行。v1.5 模式下忽略。 示例: ```json { "id": 4, "title": "前端审核面板开发", "detail": "依赖后端状态锁接口", "review": true, "depends_on": [1], "parallel_group": "A" } ``` - **依赖门控**:`start` 某步时,若其 `depends_on` 中的前置步骤尚未全部 `approved` → 状态置为 `blocked`,并记录 `waitingFor`(未满足的前置步骤列表);前置全部 `approved` 后再 `start` 才进入 `executing`。 - **就绪计算(`readySteps`)**:所有前置已 `approved` 且未完成的步骤即为就绪;v1.6 下**多个 step 可同时处于 `executing` / `review`**(v1.5 下每次只允许一个执行中步骤)。 - **多步并行状态机**:每步独立走 `pending → executing → review → approved / rejected`;整体 `done` 仍需全部步骤 `approved`。 - **唤醒并发清单**:v1.6 下某步 `approved` 后,唤醒主 agent 时输出并发清单: ```text ⚡ 可并行启动:Step 1(组A)、Step 4(组A)→ 建议用 subagent 并发执行 🔒 等待中:Step 2(依赖 1,4)、Step 3(依赖 2) ``` ⚡ 项为依赖已满足、可立即并行启动的步骤;🔒 项为仍被前置依赖阻塞的步骤及其依赖说明。 - **审核独立**:并发组内**每步各自独立审核**,三级降级链(外部 AI → 对话模型 → 手动)与 `reviewedBy: external | dialog | manual` 记录保持不变,互不影响。 - **执行主体**:插件负责调度建议(并发清单)、状态机、依赖门控与唤醒升级;**实际并行由主 agent 用 dsh 原生 subagent 执行**(如同 v0.9.0 那次三路并发开发),插件给出建议与状态约束,主 agent 决定是否派发 subagent 并行执行。 - **外部 AI 文本规范**:计划文本中标注并发拓扑,例如: ```text [Step 1] (⚡ 可并发 · 组A) 后端状态锁实现 [Step 2] (🔒 串行 · 依赖 Step 1,4) 前端审核面板开发 ``` 约束: - v1.5 模式下 `depends_on` / `parallel_group` 被忽略,所有步骤按线性顺序执行(外部 AI 即使误带也自动降级为顺序)。 - 与 v1.5(及 v1.3 / v1.4)完全向下兼容。 ### 3.15 多方案比较与步骤权重(v1.7) v1.7 在 v1.6 并发调度之上引入**多方案比较**与**步骤权重**,并把 planning 从单向探路升级为**双向探讨**;同时给出 5 段式打包模板与 artifacts 前置校验,消除外部 AI 信息真空与打回重试。 **3.15.1 `alternatives` 多方案比较(P1)** - **字段**:steps 元素新增可选数组 `alternatives`,元素结构 `{ label, risk, reason }`: - `label`:候选方案名称 / 一句话描述 - `risk`:该方案的主要风险 - `reason`:选择依据(第一手文件依赖 / 运行时约束) - **提候选**:主 agent 在 planning / 打包阶段,依据**第一手文件依赖与运行时约束**提出 **2~3 套候选方案**,随打包上下文或双向探讨一并交给外部 AI。 - **择优**:外部 AI 评估候选方案择优,并可**在线重构 Step List**(增删改步骤、替换对应方案的步骤实现)。 - **意义**:把「方案分歧」显式建模为可比较数据,避免外部 AI 在信息真空下拍板。 **3.15.2 `importance` 步骤权重(P2)** - **字段**:steps 元素新增可选 `importance: high | medium | low`(缺省视为 `medium`)。 - **批量合并自动审核**:`low` / `medium` 步骤可**批量合并自动审核**——一次审核多个步骤(提交时附带多步 notes / artifacts / 轨迹摘要),显著减少审核 turn 数(见 5.12)。 - **折叠显示**:`low` 步骤默认折叠显示(面板仅显示标题行,展开可见 detail / acceptance / notes)。 - **联动**:`high` 步骤保持逐步独立审核;权重与批量审核、降本模型(见 6.8)联动。 **3.15.3 planning 双向探讨(P3)** - v1.4 的 planning 为**单向探路**(外部 AI 通过 `context_requests` 请求主 agent 只读探路);v1.7 升级为**双向探讨**: - 主 agent 在 planning 阶段**主动发问 / 探路对话**:提出候选方案(含 3.15.1 的 `alternatives`)、澄清约束、指出运行时限制。 - **复用打包通道**(📦 打包上下文)承载双向消息,不新增专用协议动作。 - 约束不变:planning 阶段仍仅允许只读探路,严禁修改代码。 **3.15.4 5 段式打包模板(P4)** - v1.7 起 `packContext` 注入 **5 段标准上下文**,由主 agent 依据第一手探查结果**预填**,消除外部 AI 信息真空: | 段 | 键 | 内容 | |---|---|---| | 1 | `data_schema` | 涉及的数据结构与文件格式(读到的实际 schema) | | 2 | `pricing_map` | 成本 / 价格映射(涉及定价或配额时) | | 3 | `mount_points` | 文件 / 目录挂载点与写入边界 | | 4 | `runtime_limits` | 运行时约束(超时、并发、资源限制) | | 5 | `history_trace` | 最近轨迹 / 决策历史摘要 | - 未涉及的段明确标注「无 / 未涉及」,外部 AI 无需盲猜。 **3.15.5 artifacts 前置校验(P5)** - v1.7 起,步骤进入 `review` **之前**强制校验:`artifacts` 非空且实体存在(文件 / 产物在磁盘上可读)。 - 校验不通过 → 后端返回 `artifactsWarning` 提示(打回前提醒主 agent 补齐产出物),避免「审核打回 → 补产物 → 重新 review」的来回 turn。 - `artifact_required: false`(v1.5)的纯分析 / 规划步骤仍不强制要求实体产物。 约束: - v1.5 / v1.6 模式下忽略 `alternatives` / `importance` 与双向探讨语义,行为不变;v1.7 下 `importance` 作为审核权重提示(批量合并自动审核),v1.8 起升级为执行与审核分工契约(见 3.16)。 - 与 v1.5(及 v1.3 / v1.4)完全向下兼容。 ### 3.16 混合模式与执行/审核分工(v1.8) v1.8 在 v1.7 多方案比较与步骤权重之上引入**混合模式**:`importance` 从「审核权重提示」升级为「执行与审核分工契约」,配合 `review` 硬开关与 `reviewedBy: 'mainagent'` 自动豁免来源,形成 low 免审、medium 批量轻审、high 三方严格审的分层协作,并落地三处边缘微调。 **3.16.1 `importance` 分工契约** | 取值 | 分工 | 审核路径 | |---|---|---| | `low` | 主 agent 直做,免外部审 | 主 agent `complete` 时系统自动置 `approved`,`reviewedBy: 'mainagent'`,留审计、不破坏 `pending → executing → approved` 状态机 | | `medium` | 批量轻审 | `batchStepIds` 一次提交多个步骤合并审核(沿用 3.15.2 / 5.12 批量通道) | | `high` | 三方严格审 | 单独提交,走外部 AI → 对话模型 → 手动三级降级链(见 3.12),逐步独立审核 | | `null`(缺省) | 普通步骤 | 按既有默认策略处理 | **3.16.2 `review:false` 硬开关(与 `importance` 解耦)** - `importance` 管**分工与默认审核策略**;`review`(Boolean)管**底层审核流水线硬开关**,两者解耦。 - 未显式指定 `review` 时,按 `importance` 自动映射:`low` → 自动 approved。 - 显式 `review: false` → **无条件绕过审核**:`complete` 即 `approved`(`reviewedBy: 'mainagent'`),即使 `importance: high` 也生效。 - 显式 `review: true` → **强制走审核**:即使 `importance: low` 也进入审核流水线。 **3.16.3 `reviewedBy` 新增 `mainagent` 来源** - `reviewedBy` 取值扩展为 `external | dialog | manual | mainagent`;`mainagent` 表示主 agent 自动豁免(low 免审 / `review: false` 直过)。 - 一键收口汇总审核来源时,`mainagent` **单列**,与 external / dialog / manual 区分展示。 **3.16.4 三处边缘微调** - **① Step List 重构状态隔离**:外部 AI 经 `alternatives` 择优后重构 Step List,**仅对未完成(`pending` / `rejected`)步骤生效**;已 `approved` 历史步骤与产物严禁清除/篡改。新增端点 `POST /dsh-web-relay/steps/restructure`,**合并式重构**,返回 `changes { updated, added, removed, untouchedApproved }`。 - **② 批量审核原子打回**:`batchStepIds` 批量审核按**原子操作**——任一步骤 `rejected` → 该 batch 内所有步骤统一退回 `rejected`;主 agent 分别补证据后重提。 - **③ 5 段式打包模板缺省对齐**:`data_schema` / `pricing_map` / `mount_points` / `runtime_limits` / `history_trace` 固定键名;某项不适用时**显式填 "N/A" 或 "none"**,严禁省略字段。 约束: - v1.5 / v1.6 / v1.7 模式下不启用混合分工语义(`importance` 仍按 v1.7 权重提示处理;`reviewedBy: 'mainagent'`、`restructure`、原子打回不生效),行为不变。 - 与 v1.5(及 v1.3 / v1.4 / v1.6 / v1.7)完全向下兼容。 **3.16.5 V1.8.1 澄清(协议级,版本号保持 v1.8)** 经三方协作双视角评估与外部 AI 评审定案(expr-2026-08-26_13-16-32 / 13-37-24 / 13-49-58),补充以下边界澄清: 1. `reviewSpecified` 判定:以 `typeof step.review === 'boolean'` 为准;`review: null` 或字段缺失一律视为未显式指定(`reviewSpecified = false`),按 `importance` 映射;外部 AI 严禁用 `review: null` 表达显式意图,必须输出 `boolean` 或直接省略该键。 2. 安全护栏优先:`review: false` 仅表示跳过三方/人类审核流(直接置 approved);主 agent 本地安全护栏(危险命令拦截、越界文件读写策略)为运行时最高级硬约束,优先级高于任何协议参数,不得因 `review: false` 解除。 3. 打回副作用:批量打回仅倒转步骤状态并清空 `reviewedBy`,不触发代码回滚;重提时针对拒收意见补证据/微调即可;被打回步骤的下游依赖自动闭锁。 4. 重构作用域:`restructure` 仅允许修改/删除 `pending` 与 `rejected` 步骤,`approved` 步骤与产物严禁篡改;被删除/替换步骤记录于 `changes.removed` 并写入 trace 留痕;物理中间产物清理属主 agent 执行纪律。 5. 拓扑继承:重构后的 `pending` 步骤允许在 `depends_on` 中引用历史 `approved` 步骤,门控按新拓扑计算,已有 `approved` 状态不受影响。 6. 悬空依赖校验:`restructure` 服务端校验所有 `depends_on` 引用,指向已删除步骤时返回 **400**(拒绝本次重构)。 7. `reviewedBy` 清空:步骤被打回(单步打回、自动审核打回、批量连带打回)时清空 `reviewedBy`(置 `null`),重新审核通过后再记录审核来源。 ### 3.17 自动迭代与全角色降级(v1.9) **3.17.1 AutoIteration 自动迭代** - 用户首次 prompt 可声明 `{"iterations": N, "finalAcceptance": "<验收标准>", "autoDecision": true}`(缺省 `iterations=1` 即现行单轮模式,向后兼容;`N` 限 1-10)。 - 每版循环 Vn(自动):外部 AI 评审 V(n-1) 的产出与审核反馈 → 输出 Vn 修正 Step List(importance 分工)→ 主 agent 源码层实施 + 验证 + commit + tag → 轨迹沉淀。 - **版间门**:仅当 Vn 全部 approved 才进入 Vn+1;达到 `iterations` 上限后收口 done 并唤醒用户最终验收(重启 + 端到端实测)。 - **熔断兜底**:任一步骤连续打回 ≥3 次 → 任务自动 `paused`(stopReason 记录原因)并唤醒用户介入,不无限重试。 - 状态字段:`iterations` / `currentIteration` / `finalAcceptance` / `autoDecision` / `rejectStreak`(steps.json)。 **3.17.2 全角色降级链(external → dialog → pause)** - 所有外部 AI 调用统一降级策略:`external(Gemini) → dialog(内部对话模型,无工具) → 失败报错由用户介入(pause)`。 - 覆盖:`/ask`(方案生成/评审/代决策,v1.9 补齐)与 `/steps/auto-review`(审核,v1.5 起已有)。 - 降级标注:`providerLabel` 显示「对话模型(降级)」、record `channel=dialog-fallback`、`reviewedBy=dialog`,审计可溯源。 - 质量约束:dialog 仅兜底不默认(无工具、指令遵循弱于 Gemini;复杂规划质量下降可接受,主要保流水线不因限流卡死)。 --- ## 4. 实际实现(3.2.0) > 以下内容来自当前安装源码。 ### 4.1 安装位置 ```text C:\Users\Administrator\.dsh\profiles\web\node_modules\dsh-web-relay ``` ### 4.2 关键文件 | 文件 | 作用 | |---|---| | `package.json` | 插件元数据,version 1.5.2 | | `lib/index.js` | 后端:协议常量、路由、Step List 状态机(含 v1.6 依赖门控与并发调度、v1.8 混合模式与 restructure)、trace 读写 | | `lib/client.js` | 前端:面板、Step List UI、审核操作、语言设置/i18n | | `cordis.patch.yml` | 插件装配声明 | ### 4.3 后端路由 ```text GET /dsh-web-relay/status POST /dsh-web-relay/ask GET /dsh-web-relay/context POST /dsh-web-relay/parse POST /dsh-web-relay/execute GET /dsh-web-relay/steps POST /dsh-web-relay/steps/update POST /dsh-web-relay/steps/auto-review POST /dsh-web-relay/steps/finalize (一键收口) POST /dsh-web-relay/steps/restructure (v1.8 合并式重构) POST /dsh-web-relay/trace GET /dsh-web-relay/traces GET /dsh-web-relay/record GET /dsh-web-relay/protocol ``` ### 4.4 核心函数 ```text extractBlocks extractSteps normalizeStep stepStateTarget readStepState writeStepState appendTrace traceEntry traceEntriesFrom ``` ### 4.5 数据文件 ```text web-relay/experiments/dsh-web-relay-.md 任务记录:frontmatter + Prompt/Answer/指令解析/执行结果/分步实施清单 web-relay/experiments/expr-.steps.json Step List 状态:exprId / currentStep / status / steps[] / updatedAt web-relay/traces/expr-.md 三方轨迹:[用户] / [外部AI] / [主 agent] 条目 ``` ### 4.6 界面布局(v0.8.0) v0.8.0 将面板从「浮动浮层」改为与 DSH 主页面**左右平铺**的停靠栏: - **停靠位置**:面板 `position: fixed; top: 60px; right: 0; bottom: 0`,宽度 `var(--dwr-panel-width)`(默认 360px) - **平铺机制**:打开面板时给 `` 挂 `data-dwr-docked`,CSS 通过 `body { padding-right: 面板宽 + 分割条宽 }` 让 DSH 主页面让出空间,形成左右平铺 - **可拖动分割条**:面板左缘 5px 分割条,拖拽调整宽度(最小 320px,最大 50% 视口),宽度存 `localStorage`(`dsh-web-relay:panel-width`)刷新自动恢复;分割条中央 3px×24px 半透明指示条,hover 变品牌色 - **折叠/展开**:标题栏「—」最小化 → 右侧 28px rail;点 rail 展开 - **样式统一**:全部使用 DSH design tokens(`--dsw-alias-*`)亮/暗主题自动跟随;状态性按钮为幽灵按钮(透明 + 细边框 + hover 浅色),主操作(提问/进入执行阶段/打包上下文)为品牌色实心 - **纯文字 Tab**:「协作对话 / 轨迹」为文字 tab,选中项品牌色 + 下划线 - **CSS 注入**:`apply` 时注入 `