合并受阻
变更摘要
本 PR 针对 Issue #97「会话内切换模型仅对当前会话生效且无提示」的问题,在交互层补充作用域可见性提示,不改动底层配置结构。核心是在 ModelPicker 弹层中加入作用域说明,并在模型切换成功写入后通过 Toast 反馈用户:切换仅对当前会话生效,新会话会回到项目或系统默认模型。为此 updateSessionSettings 的返回值由 void 改为 boolean,由真实写入结果驱动 Toast,避免在禁用、运行中或请求失败时误报成功。同时新增纯函数 modelSwitchNotice 及中英文双语文案。
主要改动
- 切换器作用域提示:
ModelPicker.tsx在弹层标题下方新增<p className="model-picker-scope-note">,展示composer.modelPicker.scopeHint文案,使用户在选择前即可读到作用域说明。 - 切换成功 Toast 反馈:
App.tsx中updateSessionSettings返回boolean,模型切换仅在写入成功后调用modelSwitchNotice并pushToast,失败或未写入时不提示。 - 新增纯函数与类型:
model.tsx新增ModelSwitchNotice接口与modelSwitchNotice(modelName, t)函数,返回success语气及标题/详情文案,并从App.tsx导出。 - 双语文案新增:
messages.ts在en与zhCN中新增composer.modelPicker.scopeHint、composer.modelSwitch.title、composer.modelSwitch.detail三个键。 - 样式与测试:
conversation.css新增专用类.model-picker-scope-note;ModelPicker.test.tsx新增针对modelSwitchNotice文案与弹层提示时机(打开前无、打开后出现)的断言。


The pipeline(pipeline number:150) is running. Please wait a moment...


AI 自动检视,仅供参考,问题都需要人工评估分析.
变更摘要
单提交 185f5641(xuke),对接 Issue #97:会话内模型胶囊看起来像全局设置,实际只写当前 Session 覆盖,新建会话会静默回落到默认模型。本 PR 在不改配置形状的前提下把作用域说清楚——ModelPicker 弹出层增加 composer.modelPicker.scopeHint(样式 .model-picker-scope-note),切换成功后用 Toast 点名模型并说明仅当前会话生效;updateSessionSettings 改为返回是否真正写入,失败/禁用/运行中不弹成功提示。en / zh-CN 三组文案齐全,并抽出纯函数 modelSwitchNotice 与 picker 打开时机的单测。相对 origin/main(fcd96908)ahead 1、behind 0;改动面仅 web composer / i18n / 样式 / ModelPicker 测试,无无关文件。
做法是否合理
路径对症:选模型当下就能读到「仅当前会话」,成功后再用 Toast 复述并指向项目/系统默认设置入口;刻意不做「设为全局默认」快捷入口,与 Issue 增强项延后一致。Toast 用返回值门控,避免 disabled / archived / running / API 失败时误报成功。提示用普通 <p className="model-picker-scope-note">,没有挂 role="note",不会和既有 composer-thinking-notice 的 note 角色抢查询。测试体量与改动匹配:notice 文案双边断言 + 关闭态不渲染、打开后才出现 scope note。
可合


✅ 流水线 19f5677b776b45068a33493bbad67ad5 执行成功。
可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/150/check 查看完整构建日志。
在 PR 评论中发送 rerun 可重新触发 CI 流水线。
| 任务名称 | 子任务 | 状态 | 详情 |
|---|---|---|---|
| 代码检查 | SCA(开源合规) | PASSED | 点此跳转 |
| Anti-poison(防投毒) | PASSED | 点此跳转 | |
| CodeCheck(静态检查) | PASSED | 点此跳转 | |
| Blacklist(禁用词) | PASSED | 点此跳转 | |
| UT | host tier | PASSED | 公开日志 |
| guest tier (QEMU TCG sandbox) | PASSED | 公开日志 | |
| ST | - | PASSED | 公开日志 |
| Binary | x86_64 debug package | PASSED | binary · SHA256SUMS |
| aarch64 debug package | PASSED | binary · SHA256SUMS |


What type of PR is this?
/kind feature
What does this PR do / why do we need it:
修复 Issue #97:会话内切换模型仅对当前会话生效且无提示,新会话又回到全局默认。
问题分析:
Composer 底部的模型胶囊点击后的切换只写入当前会话的
settingsOverrides.modelId(updateSessionSettings),但入口外观与全局设置无异,界面上没有说明作用域;用户下一天新建会话时模型回到项目/系统默认,反复困惑「我明明换过模型」。底层配置结构本身正确,缺的是作用域可见性,因此按 Issue 的「设计思路」只在交互层补提示,不动配置结构。实现:
ModelPicker弹层在标题下方新增提示(composer.modelPicker.scopeHint)——「此处的切换仅对当前会话生效;新会话使用项目或系统默认模型。」用户在选择前就能读到作用域,直接对治「入口看起来像全局设置」。样式用专用.model-picker-scope-note(不与其他提示复用类名,避免与思考提示混淆)。updateSessionSettings现在返回是否写入,禁用/运行中/请求失败都不会误报成功)推送composer.modelSwitch.title/detail——「已将当前会话模型切换为 {model};仅对当前会话生效;新会话将继续使用默认模型,可在项目设置或系统设置中修改。」文案指向默认值的正确修改位置。modelSwitchNotice(modelName, t)放在既有 composer 辅助函数旁,便于测试且无需渲染 App。范围说明(增强项未实现):Issue 中「把 X 设为全局默认」的快捷动作标注为「可作为增强项评估」,且需要跨作用域写全局设置与相应确认交互,本 PR 不实现,留待方案评审后单独评估;本 PR 只交付 Issue 明确的「作用域提示」可观察结果。
Which issue(s) this PR fixes:
Fixes #97
Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.):
验证提交:185f564(6 files, +93/-6,单 commit,基于最新 upstream/main fcd9690)
modelSwitchNotice测试断言标题包含所选模型名、详情说明「仅对当前会话生效 / 新会话继续用默认 / 可在项目设置或系统设置修改」(en + zh-CN 两语言各断言)。model-picker-scope-note且文案为中文作用域说明。updateSessionSettings返回值驱动 Toast,仅真实写入成功后提示(禁用/运行中/archived/请求异常均不提示)。pnpm architecture:check:通过(275 个包源文件);pnpm ci:catalog:check:通过(UT host=9 / guest=1)journey-provider-model-catalog.spec.ts(含getByRole("note")唯一性断言——新提示刻意不占用role="note",改为专用 class)与journey-first-run.spec.ts(模型选中文案断言在触发器上,不受弹层提示影响);新增 Toast 为右上角、success 自动消失,不遮挡侧边栏设置入口与弹层内选项/停止按钮。Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)