|
|
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 |
|
|
|
99fcd6bc29
|
fix: 修复 Dockerfile 配置文件路径
|
2026-06-21 13:27:29 +08:00 |
|
|
|
361c5d07d3
|
Merge pull request 'docs: 规范文档对跨域处理的介绍' (#177) from feature/ratelimit into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/177
|
2026-06-21 13:11:16 +08:00 |
|
|
|
910e71b6f0
|
docs: 规范文档对跨域处理的介绍
|
2026-06-21 13:10:48 +08:00 |
|
|
|
19645be04e
|
Merge pull request 'feat: 集成限流器到服务' (#176) from feature/ratelimit into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/176
|
2026-06-21 12:48:04 +08:00 |
|
|
|
d53265755a
|
refactor: 移除生产环境配置文件中 CORS 配置
|
2026-06-21 12:39:33 +08:00 |
|
|
|
252cdcc8e7
|
refactor: 开发环境使用与生产环境相同的 AI 模型配置
- config.dev.yaml 补全 AI 服务配置(provider、model、endpoint)
- 保持开发环境超时时间较长(方便调试)
- 确保开发和生产环境使用相同的模型,避免环境差异导致的问题
|
2026-06-21 12:24:20 +08:00 |
|
|
|
515d7ae034
|
docs: 完善配置环境切换机制
- docker-compose.yml 添加 APP_ENV=prod 强制生产环境
- 更新 .env.example 的 APP_ENV 注释说明(开发/生产差异)
- CLAUDE.md 补充"配置环境切换"章节,说明本地开发和生产部署的配置切换方式
- 明确配置优先级:环境变量 > config.{env}.yaml > config.yaml > 默认值
配置差异:
- 开发环境:debug 日志、关闭限流、允许所有 CORS
- 生产环境:info/json 日志、启用限流、严格 CORS 白名单
验证通过:
- 本地开发:默认加载 config.dev.yaml(env=dev, debug 日志)
- 生产配置:APP_ENV=prod 加载 config.prod.yaml(env=prod, info 日志)
|
2026-06-21 01:14:29 +08:00 |
|
|
|
311330cea1
|
refactor: 重组配置文件到 config 目录
- 创建 backend/config/ 目录统一管理配置文件
- 移动 config.yaml 到 config/config.yaml
- 新增 config.dev.yaml 开发环境配置(debug 日志、关闭限流)
- 新增 config.prod.yaml 生产环境配置(info 日志、启用限流、严格 CORS)
- 更新配置加载逻辑,优先从 config/ 目录读取,兼容旧路径
- 更新 .gitignore,仅排除 .env,配置文件纳入版本控制
|
2026-06-21 01:07:47 +08:00 |
|
|
|
7adf81c6e5
|
feat: 集成限流器到服务
- main.go 初始化限流器(根据 Redis 可用性选择内存/Redis 实现)
- WebSocket handler 添加 query 消息限流(按 userID)
- Auth API 添加登录/注册限流(按 IP)
- refresh 和 logout 不限流(避免影响正常用户操作)
- 修复所有测试(传递 nil limiter 参数)
- 所有测试通过(包括 ws 和 api 集成测试)
|
2026-06-21 00:00:24 +08:00 |
|
|
|
ea00939c13
|
feat: 实现 Gin 限流中间件
- Middleware 函数返回 Gin 中间件
- keyFunc 参数支持灵活提取限流 key(IP/用户 ID 等)
- 限流触发时返回 HTTP 429 + Retry-After header
- 支持 nil limiter(跳过限流)和空 key(跳过限流)
- 完整单元测试(6 个测试用例,全部通过)
- 测试覆盖:允许、拒绝、nil limiter、空 key、keyFunc、Retry-After 舍入
|
2026-06-20 23:56:44 +08:00 |
|
|
|
b74fb3564d
|
feat: 实现 Redis 令牌桶限流器
- RedisLimiter 基于 Lua 脚本保证原子性
- Lua 脚本实现完整令牌桶算法(填充、消耗、TTL)
- fail-open 策略:Redis 故障时允许请求通过
- FormatKey 辅助函数格式化限流 key
- 完整单元测试(10 个测试用例,使用 miniredis)
- 测试覆盖:首次请求、耗尽、不同用户、补充、容量上限、零速率、TTL、故障降级
|
2026-06-20 23:55:37 +08:00 |
|
|
|
3b6226394b
|
feat: 实现内存令牌桶限流器
- Limiter 接口定义(Allow + Stop 方法)
- TokenBucket 实现(容量、填充速率、并发安全)
- MemoryLimiter 管理多用户令牌桶
- 后台 goroutine 定期清理不活跃桶(10 分钟)
- 完整单元测试覆盖(11 个测试用例,全部通过)
- 边界情况处理(rate=0、capacity=0、并发安全)
|
2026-06-20 23:53:36 +08:00 |
|
|
|
a6df8c9131
|
feat: 添加限流配置层
- Config 结构体新增 RateLimit 字段
- 新增 RateLimitConfig 和 BucketConfig 结构体定义
- config.yaml 新增 ratelimit 配置段(默认关闭)
- 设置默认值:query(10/0.2)、login(5/0.1)、register(3/0.05)
|
2026-06-20 23:51:45 +08:00 |
|
|
|
3e00e39e8a
|
Merge pull request 'feat:部署修改' (#174) from feat/tokentime into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/174
|
2026-06-20 23:36:33 +08:00 |
|
|
|
9ad486d117
|
feat:部署修改
|
2026-06-20 23:35:13 +08:00 |
|
|
|
7ee6918015
|
Merge pull request 'feat: 优化情景切换功能' (#172) from feat/tokentime into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/172
|
2026-06-20 23:26:28 +08:00 |
|
|
|
2fb23852ef
|
feat: 优化情景切换功能
|
2026-06-20 23:24:32 +08:00 |
|
|
|
ed95ce56a8
|
fix: 关闭摄像头后文本输入不再发送图像数据
修复了用户关闭摄像头后,使用文本输入时 AI 仍会分析黑色画面的问题。
变更:
- sendTextMessage: 只在摄像头开启时捕获画面
- 待发消息队列: 根据摄像头状态决定是否携带画面
效果:
- 摄像头关闭时纯文本对话,不提及画面
- 节省 token 消耗和网络带宽
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 22:21:03 +08:00 |
|
|
|
dffd8bd4a5
|
Merge pull request 'fix: apk 使用阿里云镜像 mirrors.aliyun.com 加速下载' (#170) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/170
|
2026-06-20 22:03:49 +08:00 |
|
|
|
3140a660e4
|
fix: apk 使用阿里云镜像 mirrors.aliyun.com 加速下载
|
2026-06-20 22:02:30 +08:00 |
|
|
|
ba7c5ed5ea
|
Merge pull request 'fix: CI 环境安装 rsync + docker-cli + docker-cli-compose' (#168) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/168
|
2026-06-20 21:47:45 +08:00 |
|
|
|
cc7a333b6d
|
fix: CI 环境安装 rsync + docker-cli + docker-cli-compose
|
2026-06-20 21:46:25 +08:00 |
|
|
|
d6059ae397
|
Merge pull request 'fix: git clone 前清理残留的 /tmp/camtalk-deploy 目录' (#166) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/166
|
2026-06-20 21:39:02 +08:00 |
|
|
|
d4398e55fe
|
fix: git clone 前清理残留的 /tmp/camtalk-deploy 目录
|
2026-06-20 21:38:30 +08:00 |
|
|
|
190f40908f
|
Merge pull request 'fix: 添加 rsync 安装,避免首次部署时 command not found' (#164) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/164
|
2026-06-20 21:33:23 +08:00 |
|
|
|
ddb90c58ef
|
fix: 添加 rsync 安装,避免首次部署时 command not found
|
2026-06-20 21:32:57 +08:00 |
|
|
|
ca07188eda
|
Merge pull request 'fix: 统一使用 /opt/camtalk/.env 路径,act_runner 挂载宿主机目录后直接读取' (#162) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/162
|
2026-06-20 21:31:49 +08:00 |
|
|
|
15a50f855b
|
fix: 统一使用 /opt/camtalk/.env 路径,act_runner 挂载宿主机目录后直接读取
|
2026-06-20 21:30:21 +08:00 |
|
|
|
e37dc7074d
|
chore: 首页代码仓库链接改为 Gitea 地址
|
2026-06-20 21:12:06 +08:00 |
|
|
|
90c5ad7724
|
Merge pull request 'fix: env_file 使用绝对路径 /root/camtalk/.env,确保 CI 容器内 docker compose 正确解析' (#160) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/160
|
2026-06-20 20:58:34 +08:00 |
|
|
|
45e2c4f37b
|
fix: env_file 使用绝对路径 /root/camtalk/.env,确保 CI 容器内 docker compose 正确解析
|
2026-06-20 20:57:34 +08:00 |
|
|
|
159bf278e6
|
Merge pull request 'docs: 添加令牌桶限流模块设计文档' (#158) from feature/ratelimite into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/158
|
2026-06-20 20:36:21 +08:00 |
|
|
|
542126df90
|
Merge pull request 'docs:更新文档' (#157) from feat/historychat into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/157
|
2026-06-20 20:20:59 +08:00 |
|
|
|
e56600e408
|
docs:更新文档
|
2026-06-20 20:17:16 +08:00 |
|
|
|
9ba4eb4825
|
Merge pull request 'feat: 优化对话历史功能、增加首页登录页面' (#155) from feat/historychat into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/155
|
2026-06-20 20:06:39 +08:00 |
|
|
|
0a8a20f3f8
|
Merge pull request 'fix: 通过 docker run -v 桥接同步 /opt/camtalk/.env,每次部署自动获取最新配置' (#153) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/153
|
2026-06-20 20:05:11 +08:00 |
|
|
|
e20f58b4ae
|
fix: 通过 docker run -v 桥接同步 /opt/camtalk/.env,每次部署自动获取最新配置
|
2026-06-20 20:04:46 +08:00 |
|
|
|
ab07e01adf
|
feat: 优化对话历史功能
|
2026-06-20 19:57:36 +08:00 |
|
|
|
12cf59f1e8
|
Merge pull request 'fix: git fetch 改用公网 URL 而非 origin,避免 Docker 内网地址不可达导致卡死' (#150) from fix/actions into develop
Reviewed-on: http://8.161.227.145:3000/XEngineers/CamTalk/pulls/150
|
2026-06-20 19:47:28 +08:00 |
|