Commit Graph

269 Commits

Author SHA1 Message Date
digua 1f32d11941 fix: 兼容旧版dataSources升级新版数据结构导致的自动化页面白屏问题 2026-04-21 00:01:03 +08:00
digua 86cadc59d7 feat(api): 实现 Import API v1 完整协议与层级数据源管理 2026-04-19 21:49:10 +08:00
digua 0fb514fe90 feat: 对话列表支持排序和筛选 2026-04-17 23:44:23 +08:00
digua 0aa99af048 feat: 新增语言偏好Tab 2026-04-17 23:44:23 +08:00
digua 1c46600988 feat: 模型第三方服务支持自选接口类型 2026-04-17 23:44:23 +08:00
digua 769b80e2b2 feat: AI服务商支持 Anthropic 2026-04-17 23:44:23 +08:00
digua 165ae83ba2 fix: 修复词库刷新与合并ID碰撞等问题 2026-04-15 00:10:28 +08:00
digua 726396733a fix(llm): add runtime UA headers for openai-compatible requests 2026-04-15 00:10:28 +08:00
digua 65923982ac feat: AI日志文件写入文件原始路径 2026-04-15 00:10:28 +08:00
digua 35c9ac12e7 fix: 为词库下载增加 SHA256 完整性校验(resolve #137) 2026-04-15 00:10:28 +08:00
digua 7b93e89189 fix: 收紧远程配置拉取并强化更新安装确认(resolve #137) 2026-04-15 00:10:28 +08:00
digua 452deedb5d feat: 成员管理中支持成员消息合并 2026-04-15 00:10:28 +08:00
digua ad4afc77d7 feat: 不同平台的聊天数据支持合并(resolve #74) 2026-04-15 00:10:28 +08:00
digua c7ad09b2d5 feat: 话题迁移至洞察 2026-04-15 00:10:28 +08:00
digua 2b3f1fc04f refactor: lint format 2026-04-13 21:57:34 +08:00
digua e628390111 feat: 重构话题,话题新增话题卡片 2026-04-13 09:36:13 +08:00
digua 744e533ed3 feat: 查询缓存逻辑优化 2026-04-13 09:36:13 +08:00
digua 3557f07431 feat: 词云支持关键词过滤(resolve #126) 2026-04-13 09:36:13 +08:00
digua 17bb3d772e feat: 支持远程下载分词词库,并支持繁体中文词库 2026-04-13 09:36:13 +08:00
digua 8c91ff1c5a feat: 完善WhatsApp检测逻辑 2026-04-13 09:36:13 +08:00
digua 72e0e420f2 feat: WhatsApp V2 时间戳弹性解析器,自动适配各地区导出变体
将 V2 方括号正则从严格编码改为宽松捕获 + 弹性时间解析器,
自动处理多语言 AM/PM 标记(上午/下午、AM/PM、오전/오후、午前/午後)
和日期顺序推断(YYYY/MM/DD、DD/MM/YYYY、M/D/YY),
新增媒体类型识别(圖片已略去、image omitted 等)

Made-with: Cursor
2026-04-12 00:52:51 +08:00
digua ae975452cf fix: WhatsApp 时间解析正则与行匹配正则宽严一致性修复
- 逗号替换为空格而非删除,避免日期时间粘连导致解析失败
- AM/PM 前改为 \s* 与行匹配正则一致,支持无空格格式
- 移除冗余的 is12HourFormat 预检测变量

Made-with: Cursor
2026-04-11 17:49:39 +08:00
kongjy ffab2d3006 fix: 支持 WhatsApp 12小时制时间格式及NNBSP字符 2026-04-11 17:46:33 +08:00
digua 62b4816060 feat: 移除诊断建议,并新增提示 2026-04-10 21:18:20 +08:00
digua b8a0e9e8da feat: 新增指定格式导入 2026-04-10 20:58:00 +08:00
digua 96e21f7bd1 feat: 完善whatsApp聊天记录检测机制 2026-04-10 20:38:37 +08:00
digua cff15a3f8c feat: 优化语录下部分逻辑 2026-04-10 00:47:56 +08:00
digua 11e530e5d4 feat: 私聊下新增主动性分析视图 2026-04-10 00:47:56 +08:00
digua 0b89076e40 feat: 统一官网多语言链接规则 2026-04-10 00:47:56 +08:00
digua d7a02a10c2 fix: 第三方/本地服务编辑弹窗丢失多个自定义模型 2026-04-10 00:47:56 +08:00
digua a0661c0e0a fix(windows): align title bar overlay color with light theme background 2026-04-08 23:07:48 +08:00
digua 6103255815 feat: 重构模型配置逻辑 2026-04-08 23:07:48 +08:00
digua 53208de60e feat: 实验室新增基础工具用于调试 2026-04-07 23:43:01 +08:00
digua fa3282f625 feat: 移除旧版提示词 2026-04-07 23:43:01 +08:00
digua 7919929b94 feat: 增加查询缓存以加速访问 2026-04-07 23:43:01 +08:00
digua d49a094164 feat: 搜索工具自动携带上下文消息 2026-04-07 23:43:01 +08:00
digua 3189de3a6e style: 代码格式优化 2026-04-06 22:24:49 +08:00
digua bfc96a723d fix: 完善AI对话报错信息 2026-04-06 22:24:49 +08:00
digua a8c3b032a7 test: add reusable e2e launcher smoke framework and scripts 2026-04-06 22:24:49 +08:00
l17728 b532eeef42 feat: add E2E test framework for Electron applications with robust port management, instance isolation, and safety guards
## 功能
添加 Electron 应用的 E2E 测试启动框架,支持并行实例运行、CDP 调试、独立数据隔离、完善的故障检测和数据保护。

### 核心特性

#### 1. 可靠的端口扫描和预留机制
- 自动查找可用的 TCP 端口(默认从 9222 开始)
- **新增**:保持端口预留直到进程启动,防止 TOCTTOU 竞态
- 修复:递归逻辑中的 null + 1 bug
- 添加最大重试限制(100 次),防止无限递归
- 100ms 超时保护,快速检测端口占用
- 并发安全的 completed 标志和资源清理

#### 2. 正确的 CDP 端口配置
- 使用 --remote-debugging-port=<port> 命令行参数
- 移除无效的 REMOTE_DEBUGGING_PORT 环境变量
- 确保 E2E 客户端能正确连接调试器

#### 3. 完善的启动检测和错误处理
- 验证应用目录和 Electron 可执行文件存在性
- 捕获 spawn 错误事件并提供清晰错误信息
- 检测启动期间的早期退出(非零退出码)
- 检测信号终止的启动失败(SIGKILL、SIGTERM 等)
- 启动后立即抛出错误而不仅记录日志
- 避免连接到死进程,失败诊断清晰

#### 4. 并行实例隔离和数据保护
- 为每个 E2E 实例创建独立的用户数据目录
- 基于端口号生成唯一路径:`/tmp/chatlab-e2e-{port}`
- 通过环境变量 CHATLAB_E2E_USER_DATA_DIR 传递给主进程
- 主进程自动调用 app.setPath('userData', dir) 隔离存储
- **新增**:E2E 模式下跳过遗留数据迁移,保护用户真实数据
- 防止并发进程的状态泄漏、死锁、数据库冲突

#### 5. 优雅且高效的进程管理
- 防止多次调用 close() 导致的事件监听器泄漏
- 检查 proc.exitCode 和 proc.signalCode
- 已退出进程立即返回(无 5s 延迟)
- 使用 SIGTERM 允许进程正常清理资源
- 5 秒超时后强制 SIGKILL 防止僵尸进程
- 使用活力检查(proc.kill(0))替代 proc.killed
- 使用正确的 Node.js API signalCode(不是 signalDescription)
- 强制 SIGKILL 路径对 stubborn 进程有效
- 进程退出时立即清除超时定时器

#### 6. 并行实例支持
- 在主进程添加 TEST_MODE 环境变量检查
- 绕过单实例锁允许多个 Electron 实例
- 跳过遗留迁移保护用户数据
- 每个实例自动分配不同的 CDP 端口和数据目录

### 文件变更
- `electron/main/index.ts`:
  * 添加 TEST_MODE 检查,绕过单实例锁
  * 添加 CHATLAB_E2E_USER_DATA_DIR 读取和隔离
  * **新增**:跳过 E2E 模式下的遗留迁移
- `tests/e2e/helpers/app-launcher.js`: 完整的应用启动管理模块(260+ 行)
  * **新增**:port 预留机制,防止 TOCTTOU 竞态

### 使用示例
```javascript
const { launchApp } = require('./tests/e2e/helpers/app-launcher')

// 启动应用(自动查找可用端口和独立数据目录)
const app = await launchApp()
console.log('CDP 端口:', app.port)

// 运行测试...

// 关闭应用(已退出进程快速返回)
await app.close()
```

### 可配置选项
```javascript
await launchApp({
  port: 9222,                    // 指定端口,默认自动查找(带预留)
  userDataDir: '/custom/path',   // 自定义用户数据目录
  startupWaitTime: 2000          // 启动等待时间(毫秒),默认 2000
})
```

### 并行测试场景
 多个实例同时运行(每个实例独立端口和数据目录)
 自动端口分配(9222, 9223, 9224...)
 **端口预留防止竞态**(同时启动无冲突)
 自动数据隔离(/tmp/chatlab-e2e-9222, /tmp/chatlab-e2e-9223...)
 资源正确清理(无泄漏)
 启动失败快速失败(清晰诊断)
 进程强制清理(防止僵尸进程)
 慢速 CI 环境中不挂起
 Stubborn 进程能被正确杀死
 已退出进程快速检测和返回
 信号退出的进程也能快速返回
 无共享状态,支持真正的并行测试
 用户数据受保护,不会被测试污染

### 修复的关键问题
**P1 问题:**
- 端口扫描超时导致的无限挂起
- 进程强制杀死被 proc.killed 误导的竞态条件
- 启动期间的早期退出未被检测
- 并行 E2E 实例共享 userData 导致冲突
- **新增**:遗留迁移在 E2E 模式下可能删除用户数据
- **新增**:端口分配 TOCTTOU 竞态导致启动冲突

**P2 问题:**
- 慢速 CI 中的 listen 回调延迟
- close() 对已退出进程的 5 秒不必要延迟
- signalCode API 错误
- 信号终止的启动失败未被检测

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-06 17:37:33 +08:00
digua 59e6bdb9cb feat: 精简部分工具的搜索参数以节省token 2026-04-06 14:04:31 +08:00
digua 0a81238a0a feat: 支持 FTS5 全文搜索,并新增快速搜索工具 2026-04-06 14:04:31 +08:00
digua 88f1af08dd feat: 优化SQL对话模块交互逻辑 2026-04-02 23:29:06 +08:00
digua da3d7bccb4 feat: 新增部分AI工具 2026-04-02 23:29:06 +08:00
digua 346a38da5a feat: 重构 AI 工具分类体系 2026-04-02 23:29:06 +08:00
digua e099dde435 feat: 新增获取聊天概览工具 2026-04-02 23:29:06 +08:00
digua 211a8110b0 feat: 新增对话数据缓存管理模块,优化统计数据读取性能 2026-04-02 23:29:06 +08:00
digua bfca7ff133 fix: SQL Lab 和摘要生成的 AI 错误静默吞没问题
- llm:chatStream:正确处理 error/done 事件,防止终态重复发送
- llmComplete:检测 completeSimple 返回的 error stopReason 并抛出异常
- SessionTimeline:摘要生成失败时显示 toast 提示替代 console.log

Made-with: Cursor
2026-04-02 23:29:06 +08:00
digua b3d1171f71 feat: 废弃部分AI工具 2026-04-02 23:29:06 +08:00
digua 792cb0e1ee feat: API服务 UI优化 2026-03-28 00:10:29 +08:00