Merge pull request '添加计时器,麦克风,摄像头开关' (#45) from develop-frontend8 into develop 33分钟前 #46

Merged
huanghaosheng merged 60 commits from develop into main 2026-06-13 20:43:07 +08:00
No description provided.
huanghaosheng added 60 commits 2026-06-13 20:43:03 +08:00
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/26
- 新增 TTSPlayer:收集流式 tts_audio 片段,is_last 时拼接解码播放
- useVisionSession 接入 TTS 播放器,interrupt/stopSession 时停止播放
- App 显示 '🔊 正在播放...' 指示器
- MVP P0 四个用户故事前端全部实现(US-01 ~ US-04)

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/27
- 02-系统架构: 部署架构改为 Nginx 同源反代模型,新增完整 Nginx 配置和 Vite proxy 配置
- 03-接口文档: 连接管理新增跨域处理小节(生产 Nginx / 开发 Vite proxy / CheckOrigin 策略)
feat: 实现会话配置与多轮上下文
All checks were successful
Backend CI / ci (pull_request) Successful in 1m0s
Frontend CI / ci (pull_request) Successful in 1m0s
7e3762b589
- 新增 ConfigPanel 组件:TTS 开关、detail level、语言选择
- 新增 storage.ts:配置持久化到 localStorage
- useVisionSession:连接后自动发送 config,维护最近 10 轮对话历史
- App:齿轮按钮展开配置面板,HD 角标,TTS 播放联动 ttsEnabled

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/29
- EdgeProcessor:sampleFrame 降采样 160x120 + compareFrames 像素差异对比
- 重复画面跳过:similarity > 0.9 时不发送 query
- 混合采样策略:静默 5s / 用户说话 1s(docs/08-成本控制.md)
- 请求统计:queryCount + totalTokens 实时显示
- App 状态栏显示成本统计

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/30
- 新增 useObservationMode Hook:定时 5s 采帧,similarity < 0.85 触发变化回调
- useVisionSession 新增 dialogue/observation 模式切换
- App Footer 加观察模式切换按钮(激活时蓝色脉冲)
- 视频区左上角显示'👁️ 观察中'绿色角标
- 观察模式下画面变化自动发送 query

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/31
从基础设施到集成测试的完整实施路线图,涵盖 Session Manager、AI 服务层、
Orchestrator 编排、WS Handler 接入、REST API、Rate Limiter 等模块。
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/32
- 新增 internal/logger/logger.go
- 提供 Init(level, format) 初始化全局 SugaredLogger
- 支持 json/console 两种格式
- 提供 Sync() 刷新缓冲区
- 新增 internal/errors/codes.go
- 定义 10 个错误码常量(与接口文档一致)
- 提供 SendWSError 工具函数
- 新增 internal/config/config.go,定义完整配置结构体
- 支持 YAML 文件 + 环境变量覆盖(CAMTALK_ 前缀)
- 新增 config.yaml 默认配置文件
- main.go: 接入 config.Load() 替换硬编码 :8080
- main.go: 添加 signal.NotifyContext + http.Server.Shutdown(10s drain)
- main.go: 初始化 Zap 日志,prod 环境切换 Gin release 模式
- ws/handler.go: 所有 log.Printf 替换为 logger.Log 结构化日志
- 修复 .gitignore 排除规则(/server 仅匹配根目录二进制)
- 新增 zap、viper 依赖
- CORS 由 Nginx 反向代理统一处理,不在后端实现
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/33
feat: WS handler 接入 SessionManager,main.go 注入依赖 + 健康检查获取活跃会话数
Some checks failed
Backend CI / ci (pull_request) Failing after 15s
Frontend CI / ci (pull_request) Has been cancelled
fe4dedec71
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/35
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/36
- 实现 Orchestrator 接口(4.1)
- 实现 Sender 接口(4.2)
- 实现 STT → LLM → TTS 流式并行管道(4.3)
- 实现句子切分器(4.4)
- 实现错误降级处理(4.5)
- 实现 Interrupt 支持(4.6)
- 编写完整的单元测试(4.7)
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/37
- 扩展 Client 结构体,添加 sessionManager、orchestrator、cancelFuncs 字段
- 创建 WSClient 适配器实现 orchestrator.Sender 接口
- 更新 ServeWS 函数签名,接收 orchestrator 参数
- 在 main.go 中初始化 AI 服务和 Orchestrator
- 创建可取消的 context 并存储 cancel func
- 获取对话历史并传递给 orchestrator
- 启动 orchestrator.ProcessQuery goroutine 处理查询
- 请求完成后自动清理 cancel func 和活跃请求标记
- 重构 App.tsx 为双栏布局:左侧视频面板 + 右侧聊天面板
- 左侧 340px 固定宽度视频区(4:3 比例)
- 右侧对话区 flex:1 占满剩余空间
- Header 改为导航栏风格:标题+副标题+状态标签+设置按钮
- 视频下方控制栏:观察模式/打断/结束对话按钮
- 优化间距、字号、配色,适配桌面端

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/38
- backend/server:Go 编译二进制
- .playwright-mcp/:浏览器测试临时日志
- *.png:调试截图

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/39
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/41
使用 Gin test server + gorilla/websocket client 验证完整 WebSocket 流程:
- connected 连接建立、ping/pong 心跳
- 完整 query→stt_result→llm_chunk→tts_audio→llm_done 流程
- interrupt 中断、disconnect 断开清理
- 无效 JSON、未知消息类型错误处理
- 多次查询、无图片查询、TTS 未启用等场景
- 每次连接创建独立会话
修正文档与代码的偏差:
- SessionManager → Manager,补充 GetActiveRequestID/ActiveCount 方法
- Orchestrator 更新为接口 + Sender 抽象模式
- POST /api/sessions 移除未实现的 user_id 字段
- STT 移除未实现的 RecognizeStream 方法
- LLM/TTS 接口名更新为 Service/Request/Chunk/Options
- Message 模型移除 ImageURL/TokensUsed(代码未使用)
- 内存实现 MemoryManager 名称对齐
- WebSocket Handler 集成伪代码更新 ProcessQuery 签名
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/42
- ConfigPanel 重写为 Drawer:右侧 320px 滑入面板 + 半透明遮罩
- 设置按钮始终可见,不依赖连接状态
- 抽屉不推挤主布局,点击遮罩或✕关闭
- 设置项分组显示,带功能描述文案

Co-Authored-By: Claude <noreply@anthropic.com>
- types 新增 Theme 类型(dark/light)
- storage 新增 loadTheme/saveTheme 持久化主题偏好
- ConfigPanel 新增外观分组,主题下拉选择
- App.tsx 通过 data-theme 属性挂载到 html 元素
- App.css 新增 [data-theme=light] 亮色变量覆盖

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/43
- 视频区左上角显示 LIVE 绿色圆点 + 连接时长计时器
- Header 添加中文/EN/日 语言按钮组,一键切换语言
- live-badge、lang-group 样式

Co-Authored-By: Claude <noreply@anthropic.com>
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/44
- useVisionSession 新增 isCameraOn/isMicOn 状态 + toggleCamera/toggleMic
- 底部控制栏添加 📷🎤 图标按钮,开启绿色/关闭红色
- 说话时麦克风按钮绿色脉冲缩放动画(micPulse)
- 按钮样式优化:nowrap 防换行,flex-wrap 自适应

Co-Authored-By: Claude <noreply@anthropic.com>
Merge pull request '添加计时器,麦克风,摄像头开关' (#45) from develop-frontend8 into develop
Some checks failed
Frontend CI / ci (pull_request) Successful in 55s
Backend CI / ci (pull_request) Failing after 1m21s
836a61dfd2
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/45
huanghaosheng merged commit 5eeb592bf0 into main 2026-06-13 20:43:07 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: XEngineers/CamTalk#46