|
|
2180751a9b
|
fix: 修复前端侧边栏双重展开动画问题
移除条件渲染和 CSS animation 的冲突,改用纯 CSS transition 控制显示/隐藏。
**问题根源:**
- 组件使用 `if (!open) return null;` 条件渲染,导致挂载时立即出现
- CSS 同时使用 `animation: slideInLeft`,触发从 -100% 的二次滑入
- 两个独立显示机制叠加,造成双重动画闪烁
**修复方案:**
- SessionSidebar: 移除条件渲染,始终保持 DOM 存在,通过动态 className 控制状态
- App.css: 移除 `animation` 和 `@keyframes`,改用 `transition: transform`
- 新增 `.sidebar--collapsed` / `.sidebar--open` 类控制 `translateX`
- 新增 `.sidebar-backdrop--visible` 类控制背景遮罩淡入淡出
- 添加 `pointer-events: none` 确保隐藏状态不响应交互
影响范围:
- frontend/src/components/SessionSidebar/index.tsx
- frontend/src/App.css
|
2026-06-22 12:05:54 +08:00 |
|
|
|
dcd08d031c
|
Merge pull request 'fix: 修复前端侧边栏弹出异常问题' (#191) from fix/frontend into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/191
|
2026-06-22 11:19:34 +08:00 |
|
|
|
6bca4e0d47
|
fix: 修复前端侧边栏弹出异常问题
|
2026-06-22 11:15:41 +08:00 |
|
|
|
2881941be6
|
Merge pull request 'fix: 修复前端 TypeScript 编译错误' (#189) from fix/frontend into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/189
|
2026-06-22 00:29:42 +08:00 |
|
|
|
1b99d24fc1
|
fix: 修复前端 TypeScript 编译错误
- 移除 App.tsx 中未使用的 activeScenario 变量
- 修复 ChatPanel 中 ReactNode 的 type-only import
- 移除 ChatPanel 中未使用的 onSelectScenario 参数
修复 CI 构建失败问题
|
2026-06-22 00:28:59 +08:00 |
|
|
|
c58c6b59a5
|
Merge pull request 'refactor: 重构视频面板 UI,情景选择改为卡片网格,控制按钮改为 SVG 图标' (#187) from feat/stylechange into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/187
|
2026-06-22 00:13:44 +08:00 |
|
|
|
e24fb2cc19
|
refactor: 将情景图标和设备选择器的 emoji 统一替换为 SVG 图标
- 新增 scenarioIcons.tsx 提取情景图标渲染逻辑
- 情景芯片、设备选择器、警告提示等 emoji 全部改为 Feather-style SVG
- 调整 CSS 确保 SVG 图标居中对齐
|
2026-06-21 23:50:27 +08:00 |
|
|
|
583c33727a
|
Merge pull request 'feat: 实现日志追踪链路' (#185) from feature/log-track into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/185
|
2026-06-21 23:23:22 +08:00 |
|
|
|
6cbabb63bb
|
refactor: 情景选择从卡片网格改为横向滚动芯片条
- 将 scenario-picker 网格布局改为 scenario-strip 横向滚动芯片条
- 新增「新建情景」快捷入口芯片(+按钮)
- 新增 scenario.createChip 三语言翻译键
|
2026-06-21 23:23:22 +08:00 |
|
|
|
239f8f9877
|
docs: 同步限流和鉴权文档的日志实现说明
- 更新限流文档:limiter 内部使用 trace.FromContext 自动记录日志
- 更新鉴权文档:Redis 降级策略使用 trace-aware 日志
- 引用 13-日志追踪.md 作为详细说明
- 移除过时的手动 logger.Log 调用示例
|
2026-06-21 23:19:11 +08:00 |
|
|
|
d430e6e5b2
|
docs: 补充存储层和限流器日志实现说明
添加 PostgreSQL、Redis、限流器三个模块的日志实现文档:
- PostgreSQL 4 个 repository 的日志策略和代码示例
- Redis 会话存储、缓存装饰器、限流器的日志级别选择
- 存储层日志查询示例(数据库错误、Redis 降级)
- 更新架构图,添加存储层节点
|
2026-06-21 23:11:17 +08:00 |
|
|
|
edc66625ba
|
feat: 为 redis_bucket.go 添加限流日志
添加 trace-aware 日志:
- Error: Redis 限流检查失败(fail-open 降级)
- Warn: 限流触发,记录 key 和 retry_after_sec
|
2026-06-21 23:08:00 +08:00 |
|
|
|
9dce107a84
|
feat: 升级 cached_user.go 日志为 trace-aware
替换 logger.Log 为 trace.FromContext(ctx):
- SaveRefreshToken: Redis 缓存写入失败降级日志
- FindRefreshToken: Redis 缓存读取失败降级日志
- DeleteRefreshToken: Redis 缓存删除失败降级日志
- DeleteUserRefreshTokens: Redis 批量删除失败降级日志
|
2026-06-21 23:07:49 +08:00 |
|
|
|
1c7dd708a0
|
feat: 升级 session/redis.go 日志为 trace-aware
替换 logger.Log 为 trace.FromContext(ctx):
- CreateWithID: session 创建日志
- Get: session 获取日志(新增错误日志)
- UpdateConfig: 配置更新日志
- UpdateTitle: 标题更新日志
- GetHistory: 无效历史条目警告日志
- Destroy: session 销毁日志
|
2026-06-21 23:07:02 +08:00 |
|
|
|
d0e4bdaeec
|
feat: 为 PostgreSQL store 层添加 trace 日志
为 4 个 PostgreSQL repository 添加 trace-aware 日志:
- session_pg.go: Save/Find/Update/Delete 操作日志
- user_pg.go: 用户 CRUD 和 refresh token 管理日志
- message_pg.go: 消息存储和查询日志
- user_scenario_repository.go: 自定义情景 CRUD 日志
日志策略:
- Error: 数据库操作失败
- Debug: 操作成功(避免 Info 级别噪音)
- NotFound (ErrNoRows) 不记录错误日志
|
2026-06-21 23:06:50 +08:00 |
|
|
|
949a707e0f
|
refactor: 重构视频面板 UI,情景选择改为卡片网格,控制按钮改为 SVG 图标
- 情景选择从 ChatPanel header 下拉菜单迁移至视频面板下方卡片网格
- 摄像头/麦克风按钮改为圆形 SVG 图标按钮
- 识别/中断/停止按钮改为药丸形状 SVG 图标按钮
- 设备选择器改为水平布局,优化空间利用
- 移除 ChatPanel 空状态中重复的情景卡片
- .gitignore 忽略 .claudian/ 和笔记目录
|
2026-06-21 22:58:02 +08:00 |
|
|
|
55f7f183a7
|
docs: 完善日志追踪文档
|
2026-06-21 22:51:14 +08:00 |
|
|
|
6b4b033df3
|
feat: 日志级别优化(Phase 7)
- nodes_stt.go: STT 识别开始降为 Debug
- nodes_history.go: 历史组装完成降为 Debug
- nodes_tts.go: TTS 流中断降为 Debug
- 保持关键里程碑为 Info:query completed、tts synthesis started/completed
- 中间步骤详情降为 Debug,减少生产环境日志噪音
|
2026-06-21 22:37:23 +08:00 |
|
|
|
76d331c885
|
feat: Eino nodes 迁移到 trace 包(Phase 6.2)
- nodes_stt.go 使用 trace.FromContext 替换 logger.Log
- nodes_history.go 使用 trace.FromContext
- nodes_tts.go 使用 trace.FromContext
- nodes_done.go 使用 trace.FromContext
- 移除所有 nodes 中的 request_id 手动字段(自动附加)
- 所有日志消息改为英文
|
2026-06-21 22:36:15 +08:00 |
|
|
|
ad700743ef
|
feat: Eino adapter 和 callback 迁移到 trace 包(Phase 6.1)
- 移除 adapter.go 中的 ctxKeySessionID 定义
- 移除 callback.go 中的 ctxKeyRequestID 定义
- 统一使用 trace.WithSessionID/WithRequestID
- adapter.go 使用 trace.FromContext 替换 logger.Log
- callback.go 使用 trace.FromContext
- 移除双重日志,SetActiveRequest 失败直接返回错误
- 更新测试文件导入 trace 包
|
2026-06-21 22:33:49 +08:00 |
|
|
|
6ab4776e08
|
feat: WebSocket 追踪集成(Phase 5)
- 在 WebSocket 升级后生成连接级 trace_id
- 为每个 query 注入 request_id 到 context
- 使用 trace.FromContext 替换所有 logger.Log
- trace_id 贯穿整个 WebSocket 生命周期
- 自动附加 trace_id/session_id/request_id 到所有日志
|
2026-06-21 22:31:45 +08:00 |
|
|
|
c17798ec67
|
feat: 添加 HTTP 请求日志中间件(Phase 4)
实现内容:
- 创建 trace/gin_logger.go,实现 GinLogger 和 GinRecovery 中间件
- GinLogger 自动记录所有 HTTP 请求的 method/path/status/latency/client_ip
- GinRecovery 使用 zap 记录 panic 恢复信息,替代 gin.Recovery()
- 修改 main.go 注册三层中间件:TraceMiddleware -> GinLogger -> GinRecovery
- 所有日志自动附加 trace_id 和 request_id 字段
日志示例:
{
"level": "info",
"ts": "2026-06-21T22:26:07.610+0800",
"msg": "request completed",
"trace_id": "01KVN964KSY6BFDKB9S932NXB8",
"request_id": "01KVN964KSY6BFDKB9S932NXB8",
"method": "GET",
"path": "/api/health",
"status": 200,
"latency_ms": 0,
"client_ip": "::1"
}
测试:已验证健康检查接口日志正常输出
|
2026-06-21 22:26:43 +08:00 |
|
|
|
8a43f4406a
|
feat: 添加限流触发日志
|
2026-06-21 22:16:38 +08:00 |
|
|
|
065673fae2
|
feat: 添加会话接口日志(创建/销毁)
|
2026-06-21 22:15:53 +08:00 |
|
|
|
03c27e7790
|
feat: 添加对话接口错误日志(CRUD 操作)
|
2026-06-21 22:14:41 +08:00 |
|
|
|
0a59173476
|
feat: 添加 JWT 鉴权拒绝日志
|
2026-06-21 22:13:15 +08:00 |
|
|
|
939e43acd0
|
feat: 添加认证接口日志(登录/注册/刷新/登出)
|
2026-06-21 22:12:21 +08:00 |
|
|
|
87c3e7a8dd
|
refactor: OpenAI TTS 使用 trace.FromContext 支持追踪
|
2026-06-21 22:08:27 +08:00 |
|
|
|
d6e9555a97
|
refactor: MiMo TTS 使用 trace.FromContext 支持追踪
|
2026-06-21 22:08:00 +08:00 |
|
|
|
9c763ec12a
|
feat: Redis 会话历史解析错误日志截断保护
|
2026-06-21 22:06:10 +08:00 |
|
|
|
1bab02ae84
|
feat: OpenAI TTS 错误日志截断敏感文本
|
2026-06-21 22:05:35 +08:00 |
|
|
|
89d7b7c17c
|
feat: MiMo TTS 错误日志截断敏感文本
|
2026-06-21 22:05:13 +08:00 |
|
|
|
34d498510e
|
feat: STT 敏感文本降级为 Debug 并截断保护
|
2026-06-21 22:04:50 +08:00 |
|
|
|
104b28efd3
|
feat: 实现字符串截断工具函数用于敏感内容保护
|
2026-06-21 22:02:08 +08:00 |
|
|
|
a02a8bc374
|
feat: 实现 Gin trace 中间件生成并注入 trace ID
|
2026-06-21 22:01:50 +08:00 |
|
|
|
0d99d06f06
|
test: 验证 Eino Graph 正确传递 context.Value
|
2026-06-21 22:01:27 +08:00 |
|
|
|
8b18953010
|
feat: 实现 context-aware logger 自动附加 trace 字段
|
2026-06-21 22:00:32 +08:00 |
|
|
|
0108ef2064
|
feat: 实现 trace context 注入与提取功能
|
2026-06-21 22:00:12 +08:00 |
|
|
|
e0dc8272a5
|
feat: 实现并发安全的 ULID trace ID 生成器
|
2026-06-21 21:59:43 +08:00 |
|
|
|
11c3955bd6
|
feat: 添加 ULID 依赖用于 trace ID 生成
|
2026-06-21 21:59:16 +08:00 |
|
|
|
a66ab764d9
|
docs: 统一文档风格
|
2026-06-21 19:31:17 +08:00 |
|
|
|
51117b43f6
|
fix: 修复 handler_test.go 中 ServeWS 缺少参数
|
2026-06-21 18:44:03 +08:00 |
|
|
|
492fb06c08
|
merge: 合并 feat/tokentime 到 develop,解决 limiter/scenarioRepo 参数冲突
|
2026-06-21 17:42:48 +08:00 |
|
|
|
6967dd7b2e
|
feat: 实现摄像头和麦克风设备选择功能
- 新增 useDeviceList hook,枚举音视频输入设备并监听热插拔
- CameraManager/MicManager 的 startCamera/startMic 支持可选 deviceId 参数
- useVisionSession 集成设备选择:授权后自动枚举、切换设备时热重启
- 连接后显示设备下拉选择器,未连接时隐藏(避免未授权时空列表)
- SessionConfig 新增 cameraDeviceId/micDeviceId 持久化到 localStorage
|
2026-06-21 16:49:48 +08:00 |
|
|
|
eea5c07eaa
|
refactor: 删除实时分析/按需识别/纯聊天三种模式切换
三种模式仅为前端 UI 区分,后端无感知,实际使用中价值不大:
- 纯聊天模式名不副实(VAD 仍附带摄像头帧)
- 实时分析增加 API 成本且体验不佳
- 按需识别已是默认且最自然的交互方式
删除后保留按需识别行为:语音带图 + 手动识别按钮,UI 更简洁。
|
2026-06-21 16:24:09 +08:00 |
|
|
|
1079e22699
|
feat: 实现自建情景功能
## 功能概述
- 用户可创建、编辑、删除自定义情景
- 支持自定义情景名称、图标、描述、Prompt、首句引导
- 完整的权限隔离,用户只能管理自己的情景
- 深度集成 Eino 框架,动态加载自建情景 Prompt
## 后端实现
### 数据库
- 新增 user_scenarios 表
- 支持用户配额(最多 20 个)
- 字段验证:description 可选,prompt 最小 10 字符
### API
- GET /api/scenarios - 获取用户情景列表
- POST /api/scenarios - 创建情景
- GET /api/scenarios/:id - 获取详情
- PATCH /api/scenarios/:id - 更新情景
- DELETE /api/scenarios/:id - 删除情景
### Eino 集成
- PipelineState 添加 UserID 字段
- nodes_history 动态加载用户自建情景
- GetScenarioPrompt 支持自建情景优先级
## 前端实现
### 组件
- CreateScenarioModal - 创建情景对话框
- EditScenarioModal - 编辑情景对话框
- ConfigPanel 改造 - 分组显示系统预置和自建情景
### Hook
- useScenarios - 合并系统和自建情景,提供 CRUD 接口
### 国际化
- 中文、英文、日文翻译支持
## 问题修复
- 修复 CORS 问题:使用 Vite 代理
- 统一验证规则:description 可选,prompt 最小 10 字符
- 修复数据库约束:使用 NULLIF 处理空字符串
## 文件变更
新增文件: 13 个
修改文件: 14 个
详见文档: docs/自建情景功能完整文档.md
|
2026-06-21 15:38:28 +08:00 |
|
|
|
c094fe0867
|
Merge pull request 'docs: 重构文档结构,规范编号并整合冗余内容' (#181) from docs/sync-docs into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/181
|
2026-06-21 14:50:59 +08:00 |
|
|
|
032de796c8
|
docs: 重构文档结构,规范编号并整合冗余内容
## 主要变更
### 文档重构(减少 1199 行,-23%)
- 01-架构设计.md: 503→369 行 (-27%),删除 DDL/配置示例,精简鉴权/存储描述
- 02-接口文档.md: 1313→570 行 (-57%),删除 Go 接口/Orchestrator 实现/配置管理
- 07-成本控制.md: 65→59 行 (-9%),代码块替换为文件引用
### 文档编号规范化
- 08-功能创意.md → 删除(内容整合到 README.md "功能扩展方向")
- 10-Eino框架与编排设计.md → 08-Eino框架与编排设计.md
- 情景切换.md → 09-情景切换.md
- 12-鉴权体系.md → 10-鉴权体系.md
- 13-令牌桶限流.md → 11-令牌桶限流.md
### 交叉引用更新
- 01-架构设计.md: 更新对鉴权体系/令牌桶限流的引用为新编号
- README.md: 更新文档索引表、推荐阅读顺序、新增功能扩展方向
### 删除过时文档
- 09-技术名词解释.md(内容已整合到 03-技术选型.md)
- 10-Eino重构方案.md(历史记录,已完成)
- 11-Eino框架技术文档.md(已合并到 08)
- 情景切换功能完整文档.md(已规范化为 09)
## 重构原则
- 架构文档聚焦系统结构,移除实现细节
- 接口文档保留纯契约,删除内部实现
- 编号连续(01-11),语义清晰
- 通过交叉引用连接相关文档,避免重复
|
2026-06-21 14:48:03 +08:00 |
|
|
|
9e5f691056
|
Merge pull request 'docs: 统一更新配置文件路径引用' (#179) from feature/ratelimit into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/179
|
2026-06-21 13:32:03 +08:00 |
|
|
|
03127aa01a
|
docs: 统一更新配置文件路径引用
将文档中所有 config.yaml 的路径引用更新为 backend/config/config.yaml,
与实际的配置文件组织结构保持一致。
变更文件:
- README.md: 更新配置文件位置说明
- docs/02-接口文档.md: 更新配置文件路径
- docs/13-令牌桶限流设计.md: 更新配置示例路径
|
2026-06-21 13:31:11 +08:00 |
|