|
|
1d7e839b49
|
Merge branch 'dev-frontend-encrypt' into master
|
2026-04-23 18:42:42 +08:00 |
|
|
|
fa7babf13b
|
chore: 归档 fix-windows-desktop-packaging 变更
|
2026-04-23 18:40:23 +08:00 |
|
|
|
280099b89c
|
refactor: 后端日志系统重构
- 新增模块化日志器(pkg/logger/module.go)
- 新增 GORM 日志适配器
- 统一日志入口,移除所有 zap.L() 全局 logger 调用
- 字段标准化
- 启动阶段使用结构化日志
- 更新所有相关测试
|
2026-04-23 18:37:51 +08:00 |
|
|
|
0a92a25451
|
feat: 前端生产构建添加代码混淆
- 集成 vite-plugin-javascript-obfuscator 插件
- 配置中等偏高强度混淆策略(变量名、字符串、对象键、数字)
- 仅生产构建时启用,不影响开发体验
- 仅混淆业务代码,排除第三方库
- 不生成 Source Map
- 新增 frontend-obfuscation 规范
|
2026-04-23 18:23:07 +08:00 |
|
|
|
8c075194e5
|
fix: 修复合并后代码质量问题
- 修正 Makefile 迁移目录路径(sqlite3 → sqlite)
- 统一 database.go 日志风格(log.Printf → zapLogger)
- 修复 config.go validator 标签大小写
- 修复 database_test.go 测试使用 nil logger
- 移除未使用的 log 导入
|
2026-04-23 16:58:01 +08:00 |
|
|
|
53e477d383
|
Merge branch 'dev-mysql-support' into master
- 新增 MySQL 数据库驱动支持,支持跨设备数据同步
- 新增 MySQL 专项测试能力(并发、约束、迁移)
- 重构迁移目录结构:migrations/sqlite 和 migrations/mysql
- 修复 statsRepo 并发竞态条件,使用 upsert 保证原子性
- Makefile 合并:保留完整命令体系 + 新增 MySQL 测试命令
|
2026-04-23 16:31:29 +08:00 |
|
|
|
1522c87c74
|
fix: 修复 statsRepo 并发竞态条件,使用 upsert 保证原子性
- 使用 GORM clause.OnConflict 替代事务包装
- Record 和 BatchUpdate 方法改用 upsert 模式
- 修复 UsageStats 的 GORM struct tag,确保 AutoMigrate 创建正确的 UNIQUE 约束
- 更新 usage-statistics spec 以反映 upsert 操作
MySQL 并发测试验证:10 并发调用 → request_count = 10
|
2026-04-23 15:54:56 +08:00 |
|
|
|
e0d05c9869
|
refactor: Makefile 命名规范化,新增顶层便捷命令
统一命名规范为 <namespace>-<action>[-<variant>] 格式:
- 重命名 desktop-mac/win/linux → desktop-build-mac/win/linux
- 重命名 backend-migrate-* → backend-db-*
- 重命名 frontend-build-desktop → desktop-prepare-frontend
- 重命名 embedfs-prepare → desktop-prepare-embedfs
- 重命名 package-macos → desktop-package-mac
新增顶层便捷命令:
- dev: 并行启动开发环境
- build: 构建所有产物
- test: 运行所有测试
- lint: 检查所有代码
- clean: 清理所有构建产物
|
2026-04-23 12:30:02 +08:00 |
|
|
|
5b401e29cb
|
feat: 新增 MySQL 专项测试能力
- 新增 backend/tests/mysql/ 目录,包含 Docker Compose 配置和测试文件
- 新增 Makefile 命令: test-mysql, test-mysql-up, test-mysql-down, test-mysql-quick
- 使用 build tag 控制测试启用,默认不运行
- 测试覆盖: 迁移正确性、外键约束、UNIQUE 约束、并发写入
- 发现 statsRepo.Record 存在并发 bug(检查-然后-操作竞态条件)
|
2026-04-23 12:25:55 +08:00 |
|
|
|
65ac9f740a
|
refactor: 桌面应用对话框代码拆分为平台专用文件
- 新增 dialog_windows.go、dialog_darwin.go、dialog_linux.go
- 使用 Go 构建标签实现条件编译
- 修复跨平台编译错误(syscall.NewLazyDLL 在 macOS/Linux 未定义)
- 实现 Linux 多工具降级策略(zenity → kdialog → notify-send → xmessage → stderr)
- 实现 macOS AppleScript 字符转义
- 更新 messagebox_test.go 构建标签
- 更新 desktop-app spec 新增 Linux 降级策略和 macOS 字符转义规范
|
2026-04-23 11:47:48 +08:00 |
|
|
|
58ebcaa299
|
refactor(scripts): 开发分支初始化脚本从 bash 重构为 Python,增强跨平台支持和用户体验
|
2026-04-23 10:43:59 +08:00 |
|
|
|
5b765c8b5e
|
feat: 新增 MySQL 数据库驱动支持,支持跨设备数据同步
|
2026-04-23 00:43:23 +08:00 |
|
|
|
b3258e76df
|
perf: 前端打包产物优化——路由级懒加载和 vendor 分包
- 使用 React.lazy() + Suspense 实现路由级代码分割
- 配置 manualChunks 将 react/tdesign/recharts 拆分为独立 vendor chunk
- 页面组件改为 export default 以支持动态导入
- 新增 bundle-optimization 规范,更新 frontend 导航规范
|
2026-04-23 00:26:54 +08:00 |
|
|
|
64dc66afa6
|
fix: Windows 桌面应用打包问题修复
- 删除通用 desktop target,重命名 platform targets 为简短形式 (desktop-mac/win/linux)
- 构建产物文件名统一为 nex-{os}-{arch}[.exe] 格式
- Windows 托盘图标使用 .ico 格式(运行时按平台选择)
- Windows 原生对话框使用 user32.MessageBoxW 替代 msg * 命令
- 更新 README.md 和 package-macos.sh 中的引用
- 添加单元测试覆盖 MessageBoxW 封装和图标选择逻辑
- 同步更新 desktop-app spec 规范文档
|
2026-04-22 23:20:39 +08:00 |
|
|
|
15f08ee2ca
|
fix: 桌面应用跨平台编译和单实例锁
- 使用 gofrs/flock 替代 syscall.Flock 以支持 Windows
- 引入 SingletonLock 结构体,支持锁路径参数化(测试与生产隔离)
- 对齐服务初始化流程与 cmd/server(RoutingCache、StatsBuffer)
- 添加 gofrs/flock 依赖
- 重写单例测试,覆盖加锁/解锁/重复加锁场景
- 更新 desktop-app 规范,补充跨平台锁细节
- 新增 cross-platform-singleton 规范
|
2026-04-22 22:32:55 +08:00 |
|
|
|
380586afa6
|
Merge branch 'dev-update-readme'
|
2026-04-22 19:43:01 +08:00 |
|
|
|
ebb70809bf
|
Merge branch 'dev-app'
|
2026-04-22 19:38:29 +08:00 |
|
|
|
7399afbc5c
|
Merge branch 'dev-frontend-style-optimization'
|
2026-04-22 19:37:30 +08:00 |
|
|
|
c0669e4b07
|
Merge branch 'dev-database-write-optimization'
|
2026-04-22 19:36:38 +08:00 |
|
|
|
05c04091b3
|
Merge branch 'dev-add-review-prompt'
|
2026-04-22 19:35:47 +08:00 |
|
|
|
0b05e08705
|
feat: 新增桌面应用支持
- 新增 desktop 应用入口,将后端与前端打包为单一可执行文件
- 集成系统托盘功能(getlantern/systray)
- 支持单实例锁和端口冲突检测
- 启动时自动打开浏览器显示管理界面
- 新增 embedfs 模块嵌入静态资源
- 新增跨平台构建脚本(macOS/Windows/Linux)
- 新增 macOS .app 打包脚本
- 统一 Makefile,移除 backend/Makefile
- 更新 README 添加桌面应用使用说明
|
2026-04-22 19:27:27 +08:00 |
|
|
|
df253559a5
|
feat(cache): 实现 RoutingCache 和 StatsBuffer 优化数据库写入
- 新增 RoutingCache 组件,使用 sync.Map 缓存 Provider 和 Model
- 新增 StatsBuffer 组件,使用 sync.Map + atomic.Int64 缓冲统计数据
- 扩展 StatsRepository.BatchUpdate 支持批量增量更新
- 改造 RoutingService/StatsService/ProviderService/ModelService 集成缓存
- 更新 usage-statistics spec,新增 routing-cache 和 stats-buffer spec
- 新增单元测试覆盖缓存命中/失效/并发场景
|
2026-04-22 19:24:36 +08:00 |
|
|
|
669cbb8c51
|
feat(prompts): 添加 proposal-review 和 apply-review 审查提示词
|
2026-04-22 19:12:03 +08:00 |
|
|
|
5ae9d85272
|
style: 优化前端样式,提升现代化设计感
- ConfigProvider 注入全局配置(动画、表格尺寸)
- CSS Variables 主题微调(页面背景、圆角、字体栈)
- AppLayout Menu 支持 logo/operations/collapsed
- Statistic 组件增加 color/prefix/suffix/animation
- Card 组件启用 hoverShadow/headerBordered
- Table 组件启用 stripe 斑马纹
- Tag 组件使用 variant="light" + shape="round"
- Dialog 居中显示并设置固定宽度
- 布局样式硬编码颜色替换为 TDesign Token
- UsageChart 改用 AreaChart + 渐变填充
- 更新 frontend spec 同步样式体系要求
|
2026-04-22 18:09:22 +08:00 |
|
|
|
72aebef625
|
docs: 更新三份 README 文档以反映实际项目情况
|
2026-04-22 16:24:38 +08:00 |
|
|
|
f5e45d032e
|
refactor: 重命名提示词文件为英文 prompt-xxx 格式,优化智能合并提示词
|
2026-04-22 15:34:41 +08:00 |
|
|
|
b03e5f809f
|
Merge branch 'dev-initial-scritps' into master
|
2026-04-22 15:26:14 +08:00 |
|
|
|
ec563aaa16
|
docs: 优化 prompts 提示词,面向 AI 精简 token 并新增书写原则
|
2026-04-22 15:21:43 +08:00 |
|
|
|
873f09d3bf
|
refactor(scripts): 拆分脚本为 init/ 和 detect/ 子目录,优化 init-llm.sh
|
2026-04-22 14:57:14 +08:00 |
|
|
|
5e7267db07
|
fix(e2e): 修复 10 个被 skip 的 E2E 测试
- 将 playwright.config.ts 的 mkdtemp 替换为固定路径,解决主进程/worker 临时目录不一致问题
- 交换后端 WAL 与迁移执行顺序,确保 sql.js 能读取到完整 schema
- 修复 models.spec.ts 断言使用 exact:true 避免统一模型 ID 列干扰
- 移除全部 10 个 test.skip,26 个 E2E 测试全部通过
|
2026-04-22 14:32:12 +08:00 |
|
|
|
7b28cee7a1
|
Merge branch 'dev-frontend-optimization'
|
2026-04-22 13:31:37 +08:00 |
|
|
|
934c8dea77
|
Merge branch 'dev-testcase-analysis'
|
2026-04-22 13:23:32 +08:00 |
|
|
|
7d91fe345e
|
Merge branch 'dev-conversion-docs'
|
2026-04-22 13:23:15 +08:00 |
|
|
|
4e86adffb7
|
feat: 系统性改进后端测试体系
- 新增 6 个测试场景 (config load pipe, handler errors, service aggregation, engine degradation, openai decoder edges, negative tests)
- 更新测试工具规格 (mockgen, in-memory SQLite)
- 覆盖率目标从 >80% 提升至 >85%
- 新增 test-unit 和 test-integration Makefile 命令
- 新增死代码清理和 mockgen 需求
- 归档变更至 openspec/changes/archive/2026-04-22-improve-backend-testing/
|
2026-04-22 13:18:51 +08:00 |
|
|
|
5d58acf5a6
|
fix: 修复供应商管理弹窗交互问题并去掉 API Key 脱敏
- Dialog 设置 lazy={false} 修复首次打开编辑弹窗表单为空
- API Key 改为普通字段(前端去掉 password 类型,后端去掉掩码逻辑)
- 删除模型编辑弹窗中的统一模型 ID 字段
- 简化 ProviderService.Get 签名(去掉 maskKey 参数)
- 删除 domain 和 config 层的 MaskAPIKey() 方法
- 更新前后端测试(107 单元测试 + 16 E2E 全部通过)
- 同步 delta spec 到主 spec
|
2026-04-22 13:13:25 +08:00 |
|
|
|
81dcecb723
|
docs: 补充 bun 作为前端唯一包管理器的说明
|
2026-04-22 11:37:05 +08:00 |
|
|
|
141f5f886f
|
fix: 修复供应商管理弹窗交互问题
- 导入 TDesign react-19-adapter 修复 MessagePlugin 在 React 19 下的渲染错误
- Dialog 禁用蒙版点击和 ESC 键关闭,防止误操作丢失表单数据
- 重构弹窗关闭逻辑,使用 mutateAsync 替代 useEffect 监听 isSuccess
- 成功后自动关闭弹窗,失败后保持弹窗打开并显示错误提示
|
2026-04-22 11:36:16 +08:00 |
|
|
|
7fa5af483b
|
docs: 更新 conversion 设计文档以匹配代码实现
主要更新内容:
- 新增三车道数据流模型(透传/智能透传/完整转换)
- 补充 ProtocolAdapter 智能透传相关 4 个方法
- 更新 InterfaceType 枚举(移除 AUDIO/IMAGES,增加 PASSTHROUGH)
- 新增 HTTPRequestSpec/HTTPResponseSpec 类型定义
- 更新引擎方法签名(增加 modelOverride 和 interfaceType 参数)
- 明确接口类型分发策略和中间件应用范围
- 新增三种流式转换器变体
- 重写错误处理策略为分层宽容策略
- 标记多模态和扩展点为 Deferred
- 更新附录 B 接口速查和附录 D 协议适配清单
|
2026-04-22 10:54:30 +08:00 |
|
|
|
f488b9cc15
|
fix(e2e): 修复对话框关闭问题,完善 E2E 测试
- 修复 TDesign Dialog onConfirm 不自动关闭的问题
- 使用 useEffect 监听 mutation 状态自动关闭对话框
- 测试使用 waitForResponse 等待 API 响应
- 添加 clearDatabase 函数确保测试隔离
- 归档 e2e-real-backend 变更到 archive/2026-04-22
- 同步 e2e-testing spec 到主 specs
|
2026-04-22 10:32:57 +08:00 |
|
|
|
59179094ed
|
feat: E2E 测试集成真实后端
- Playwright 双 webServer 模式自动启动 Go 后端 + Vite 前端
- 后端使用临时 SQLite 数据库隔离,固定端口 19026
- vite.config.ts proxy target 动态读取环境变量
- 新增 sql.js 依赖用于 SQLite 统计数据 seed
- 新增 e2e/fixtures.ts 共享工具模块(API seed + SQLite seed)
- 拆分测试文件 5→7(providers/models/stats/navigation/validation)
- 删除旧文件 crud.spec.ts/sidebar.spec.ts/stats-cards.spec.ts
- E2E 测试尚有部分用例需调试修复
|
2026-04-22 00:31:35 +08:00 |
|
|
|
4fc5fb4764
|
Merge branch 'dev-openai-path-parse'
|
2026-04-21 20:50:52 +08:00 |
|
|
|
feff97acbd
|
feat: 前端适配后端新接口
适配后端统一模型 ID、协议字段、UUID 自动生成和结构化错误响应:
- 类型定义:Provider 新增 protocol 字段,Model 新增 unifiedId,CreateModelInput 移除 id
- API 客户端:提取结构化错误响应中的错误码
- 供应商管理:添加协议选择下拉框和表格列
- 模型管理:移除 ID 输入,显示统一模型 ID(只读)
- Hooks:错误码映射为友好中文消息
- 测试:所有组件测试通过,mock 数据适配新字段
- 文档:更新 README 说明协议字段和统一模型 ID
|
2026-04-21 20:49:37 +08:00 |
|
|
|
b7e205f4b6
|
refactor: 优化 URL 路径拼接,修复 /v1 重复问题
## 主要变更
**核心修改**:
- 路由定义:/:protocol/v1/*path → /:protocol/*path
- proxy_handler:nativePath 直接使用 path 参数,不添加 /v1 前缀
- OpenAI 适配器:DetectInterfaceType 和 BuildUrl 去掉 /v1 前缀
- Anthropic 适配器:保持 /v1 前缀(Claude Code 兼容)
**URL 格式变化**:
- OpenAI: /openai/v1/chat/completions → /openai/chat/completions
- Anthropic: /anthropic/v1/messages (保持不变)
**base_url 配置**:
- OpenAI: 配置到版本路径,如 https://api.openai.com/v1
- Anthropic: 不配置版本路径,如 https://api.anthropic.com
## 测试验证
- 所有单元测试通过
- 所有集成测试通过
- 真实 API 测试验证成功
- 跨协议转换正常工作
## 文档更新
- 更新 backend/README.md URL 格式说明
- 同步 OpenSpec 规范文件
|
2026-04-21 20:21:17 +08:00 |
|
|
|
24f03595a7
|
Merge branch 'scripts-test'
合并 API 兼容性检测脚本改进:
- 完善流式测试覆盖并精简用例
- 添加缺失的 parse_sse_events 函数到 core.py
- 补充 OpenAI 枚举参数和边界越界测试
- 完善 API 兼容性测试用例
- 优化兼容性检测脚本
|
2026-04-21 18:16:50 +08:00 |
|
|
|
395887667d
|
feat: 实现统一模型 ID 机制
实现统一模型 ID 格式 (provider_id/model_name),支持跨协议模型标识和 Smart Passthrough。
核心变更:
- 新增 pkg/modelid 包:解析、格式化、校验统一模型 ID
- 数据库迁移:models 表使用 UUID 主键 + UNIQUE(provider_id, model_name) 约束
- Repository 层:FindByProviderAndModelName、ListEnabled 方法
- Service 层:联合唯一校验、provider ID 字符集校验
- Conversion 层:ExtractModelName、RewriteRequestModelName/RewriteResponseModelName 方法
- Handler 层:统一模型 ID 路由、Smart Passthrough、Models API 本地聚合
- 新增 error-responses、unified-model-id 规范
测试覆盖:
- 单元测试:modelid、conversion、handler、service、repository
- 集成测试:统一模型 ID 路由、Smart Passthrough 保真性、跨协议转换
- 迁移测试:UUID 主键、UNIQUE 约束、级联删除
OpenSpec:
- 归档 unified-model-id 变更到 archive/2026-04-21-unified-model-id
- 同步 11 个 delta specs 到 main specs
- 新增 error-responses、unified-model-id 规范文件
|
2026-04-21 18:14:10 +08:00 |
|
|
|
44d6af026a
|
feat: 完善流式测试覆盖并精简用例
- 提取共享定义(tool_weather, image_url, json_schema_math)到功能块前
- 流式用例精简为代表子集:核心 6-8 个 + 扩展各 1-2 个 + 高级参数代表
- OpenAI: 15 个流式用例(核心 8 + vision/tools/logprobs/json_schema + 高级参数)
- Anthropic: 11 个流式用例(核心 6 + vision/tools/thinking + 高级参数)
- 更新 README:新增流式测试覆盖原则、parse_sse_events 函数说明
|
2026-04-21 17:18:35 +08:00 |
|
|
|
6e11ada42c
|
fix: 添加缺失的 parse_sse_events 函数到 core.py
|
2026-04-21 15:22:08 +08:00 |
|
|
|
da790db75b
|
feat: 补充 OpenAI 枚举参数和边界越界测试
- service_tier: 补充 flex, priority 测试
- reasoning_effort: 补充 none, minimal 测试
- verbosity: 补充 medium, high 测试
- 边界越界测试: frequency_penalty, presence_penalty, top_p, n
- core.py: http_stream_request 支持 method 参数
- Anthropic: 补充 content_block_start 事件验证
|
2026-04-21 14:15:27 +08:00 |
|
|
|
e1af978c56
|
feat: 完善 API 兼容性测试用例
- 修复 Anthropic Count Tokens 响应验证器,检查嵌套结构
- 补充 OpenAI service_tier: default 测试
- 补充 Anthropic output_config 带 effort 字段测试
- 补充 OpenAI reasoning_effort: low/high 测试
- 补充 Anthropic service_tier: standard_only 测试
- 修复流式响应 choices 数量验证逻辑,跳过空数组
|
2026-04-21 14:00:39 +08:00 |
|
|
|
980875ecf3
|
feat: 优化兼容性检测脚本
- 重命名脚本为 detect_xxx.py 格式
- 移除所有装饰线,精简输出格式
- 请求/响应输出增加 URL/Headers/入参/响应 标题标记
- 为所有正面用例添加响应验证器
- 补充 OpenAI 版缺失的负面测试(max_tokens 负数/0、temperature 越界)
- 移除未使用的 format_validation_errors 导入
- 新增 scripts/README.md 文档
|
2026-04-21 12:50:49 +08:00 |
|