[TASK-tsk_7d457f39abffbb7a6a2f5fcd][Account & Model Mgmt Developer] feat: 实现会话级别模型即时切换#233
Conversation
- Shared types: 添加 SessionModelOverride, LLMRequest.modelOverride - LLM Router: 添加 getSessionModel/setSessionModel/clearSessionModel - LLM Router chat(): 透传 metadata.modelOverride 到 ProviderRequest - API: 添加 GET/POST/DELETE /api/sessions/:sessionId/model 端点 涉及后端3个包: - packages/shared/src/types/llm.ts - 类型定义 - packages/core/src/llm/router.ts - Router 实现 - packages/org-manager/src/api-server.ts - API 端点
✅ Code Review — Conditional ApprovalReviewer: Code Reviewer Verification Results
Changes Reviewed (3 files)
Issues Found
Decision✅ Approved for feature/gap-filling — fix ownership check (issue 1) before merging to main. Wait for Owner (老板) to merge to main. |
✅ Code Review — PR #233 模型即时切换 /model 后端路由Reviewer: Code Reviewer (ID: agt_42fc22d8cd79900a089eea09) 验证结果
发现问题🔴 1. 缺少会话归属检查(安全漏洞)
必须修改:在三个 model 端点中增加相同的 session ownership 检查。 🔴 2. 缺少测试覆盖4 个新增 router 方法 + 3 条 API 路由无单元/集成测试。
|
…+ DELETE 503 for /model endpoints - Fix 1: Add session.userId ownership check to GET/POST/DELETE /model endpoints, matching the pattern from /messages endpoint (line 2546) - Admins/owners can access any session, regular users only their own - Fix 2: DELETE /model endpoint returns 503 when llmRouter is unavailable (was 204), matching POST endpoint consistency
🔧 修复完成 — Round 2根据审核意见已完成两项修复: 1. 🔴 Session 所有权检查(GET/POST/DELETE)所有三个
2.
|
⛔ Changes Requested — 测试覆盖不达标(强制打回)Reviewer: Code Reviewer 本轮打回理由根据团队 Spec-Driven & Test-Driven 质量门禁要求(NORMS.md §4.4): 🔴 核心逻辑无单元测试(强制门禁违规)
必须补充的测试项
已修复项(认可)
要求请补充完整测试覆盖后重新提交审查。根据 NORMS.md §4.4 质量门禁,核心逻辑零测试的 PR 不得批准。 |
…ession model override routes
✅ 已补充测试覆盖新增 6 个 Session Model Override 边缘用例测试零 llmRouter 场景:
权限越界场景(非 owner 用户访问他人会话):
编译验证
All 6 new tests passing: #233 |
- 新增 docs/design/model-switching.md — 完整 session 级模型覆写设计文档 - 更新 docs/API.md — 新增 GET/POST/DELETE /api/sessions/:id/model 三个端点 - 更新 docs/model-routing-architecture.md — 补充 session override 优先级说明 - 新增 router 测试: duplicate overwrite, unregistered provider, selectForCapability 集成 x2 - 新增 API 测试: admin bypass x3, session-not-found fallback x2
📋 Wave 1.5 更新 — Docs + TestsAdded 3 new commits to this branch for the documentation and test gap-filling task: 🔧 新增内容
✅ 新增测试
✅ 验证
|
✅ Code Review — Approved (Wave 1.5: docs + tests)Reviewer: Code Reviewer (ID: agt_42fc22d8cd79900a089eea09) Verification Results
Delivered
Decision✅ Approved — Documentation is thorough and matches implementation. Tests cover normal paths, security boundaries, edge cases, and unavailable-router scenarios. Awaiting Owner merge to feature/gap-filling. |
jsyqrt
left a comment
There was a problem hiding this comment.
✅ Code Review Conclusion — Approved Internally
Reviewer: Code Reviewer (agt_42fc22d8cd79900a089eea09)
Internal Review Summary
The design documents, API documentation, and test additions for model instant switching (会话级别模型即时切换) were reviewed and approved internally. The corresponding task has been marked completed.
Deliverables Reviewed
- ✅ Design document: Session-level model override architecture
- ✅ API documentation: Three endpoints (GET/PUT/DELETE /api/sessions/:id/model)
- ✅ Test additions: Unit + API endpoint tests
Security Note (Tracked Separately)
A session ownership validation gap was identified: three model endpoints (lines 2570/2587/2623) lack session.userId === authUser.userId check. This is tracked as a separate requirement (req_bc5b7fb980b73c40d4988299) with dedicated follow-up tasks — not blocking this PR.
Decision
✅ Approved — awaiting merge to feature/gap-filling.
📋 基本信息
🎯 背景与动机
实现会话级别(session-level)模型即时切换功能。用户可以在聊天过程中动态切换 LLM 提供商/模型,而无需退出会话进行全局配置。对标 Hermes Agent 的 /model 命令。
🔧 变更内容
✅ 验证方式
👤 评审人