AskaEth
|
44048b333a
|
fix: 死锁修复、管理员权限集中管控、群聊频率控制、表情映射修复
thinker.go: 移除所有 defer t.muUnlock() 持锁跨阻塞调用的模式,消除8处死锁点
- performThink: defer→立即解锁,LLM调用不再持锁
- lightThinkLoop: defer在for循环内→第2次迭代自死锁
- resetSilenceTimer: defer持锁调performThink
- UpdatePresence: defer持锁调time.Sleep+performThink
- storeThought: defer+panic→锁泄露; 移除extractProactiveMessage嵌套锁
is_admin三层防御:
- synthesizer: 系统提示词注入管理员/非管理员身份标签
- iot_provider: 非管理员直接拒绝IoT操作
- plugin-manager: ToolDefinition.AdminOnly自动拦截,集中管控
群聊优化:
- group_ambient: 强化审查指令,【不发送】自审查标签
- 群聊间隔4s→3s,最多2条/轮
- 工具失败也推跟进消息,避免沉默
平台桥接:
- 日志文件名使用适配器唯一标识符(ConfigName)
- QQ表情映射替换为官方116条目数据
- CQ表情保留名称/ID
|
2026-06-28 20:22:09 +08:00 |
|
AskaEth
|
fd44b15d81
|
feat: 全链路优化 — 死锁修复、MD3主题、上下文持久化、群聊自然化、打字状态、知识库
**死锁根因修复**
- periodicThinkLoop:1015 orphaned lock → 删除(字段已原子化)
- RecordUserMessage 隔离为 recordMu
- atomic.Int64 替换 lastUserMessage/lastThinkTime 等
**MD3 / Android 17 主题**
- 毛玻璃卡片 (backdrop-filter)
- MD3 色彩令牌 (pink primary #f472b6)
- icons.js 独立矢量图标库 + 运行时 emoji 替换
- 无边框卡片、圆角按钮、阴影层次
**上下文持久化**
- AddMessage → saveToDB 异步写 PostgreSQL
- LoadFromDB 恢复 (admin-session-main + 懒加载)
- LLMMessage.Timestamp 字段
**群聊与适配器**
- group_ambient 模式: 非@消息让 LLM 自己判断是否插话
- 戳一戳动作消息总是回复
- NapCat 打字状态 (set_input_status, 最小3秒显示)
- HTTP API 配置 (http_url/http_token)
**知识库 & 防编造**
- knowledge.CanHandle 对 chat 意图也触发
- 关键词预筛选避免无关 embedding 调用
- persona + synthesizer 三重诚实规则
- 工具结果持久化到会话历史
**平台桥接器**
- detached:true Go进程独立存活
- ethend 重启自动接管已运行服务
- stop() 接管模式 taskkill/F/ PID
- Windows netstat 替代 fuser 获取 PID
- 重复适配器种子逻辑修复
- 失败转发日志 Direction: error
**崩溃诊断**
- crashlog 包 (Recover + WrapHTTP + LLMCall)
- /api/v1/debug/goroutines 端点
- thinker 操作日志 + 30s stats
- 日志写入 logs/ 目录持久化
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-28 11:29:29 +08:00 |
|
AskaEth
|
4733f9c02a
|
fix: 前端追踪时间 — 三处toISOString()全部替换为本地时间
- traceHopHtml 直接用后端格式化好的 timestamp
- llmCallToTrace 用前端 fmtLocal()
- 实时流事件用本地时间格式化
|
2026-06-23 19:45:16 +08:00 |
|
AskaEth
|
f7df659c85
|
fix: 还原系统时区方案 — 时间戳已自带+08:00
|
2026-06-23 19:43:43 +08:00 |
|
AskaEth
|
109d427971
|
fix: 追踪时间强制UTC+8 — 不依赖系统时区
|
2026-06-23 19:41:43 +08:00 |
|
AskaEth
|
71539b5520
|
fix: 追踪页面回退到平铺视图,管线聚合待后续优化
|
2026-06-23 19:34:39 +08:00 |
|
AskaEth
|
87e8f97c1f
|
fix: ethend OBv11配置界面字段丢失 — PLATFORM_FIELDS key qq→obv11
- 配置platform迁移后 PLATFORM_FIELDS['obv11'] 查不到返回空
- 新增 getPlatformFields() 归一化查找,兼容旧qq key
- PLATFORM_ICONS/LABELS/REAL 同步增加 obv11 key
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-23 19:28:12 +08:00 |
|
AskaEth
|
e433e94c89
|
fix: 全链路追踪时间显示 — UTC→UTC+8 本地时间
- 新增 formatLocalTime() 替换 toISOString()
- 追踪面板时间显示为北京时间
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-23 19:17:32 +08:00 |
|
AskaEth
|
a47eeab808
|
feat: 全链路追踪系统 — ai-core追踪事件 + ethend管道视图
ai-core:
- 新增 TraceEvent 内存环形缓冲区(200条)
- GET /api/v1/trace/events 端点(支持session_id过滤)
- 预置 trace.go 追踪事件定义
ethend:
- trace/recent 聚合 platform-bridge消息日志 + ai-core追踪事件
- 消息按管线分组: msg_received→llm_call→tool_call→msg_sent
- 前端管线卡片视图: 每条消息显示完整处理步骤
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-23 19:11:55 +08:00 |
|
AskaEth
|
a8fa64325d
|
feat: 全链路追踪增强 + 超时修复
- ethend /api/trace/recent: 新增消息收发事件(platform-bridge日志)
- 消息按管线聚合: msg_received → llm_call → tool_call → msg_sent
- platform-bridge→ai-core超时 120s→180s
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-23 19:08:16 +08:00 |
|
AskaEth
|
42793f9bba
|
chore: ethend QQ→OBv11 + config.js环境变量同步 + curQQ变量重命名
- ethend: QQ_BOT_PORT→OBV11_BOT_PORT, QQ_ADMIN_UID→OBV11_ADMIN_UID
- ethend UI: QQ→OBv11 标签, 企鹅图标→🔷, 对话框文案
- platform-bridge: curQQ→curAdapter 变量名
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-22 21:32:10 +08:00 |
|
AskaEth
|
6ef9e082a6
|
feat: 语音流式输入管线 + VAD前端集成 + 插件-工具合并清理
- 前端: VAD语音检测(@ricky0123/vad-web) + useVoiceInput双模式(流式WS/REST)
- Gateway: VoiceStreamManager代理WS流式STT到voice-service
- Voice-service: DashScope REST → Realtime WS → Whisper三级引擎 + ffmpeg转码
- 共享模块: pkg/audio(音频转换) + pkg/dashscope(ASR REST客户端)
- 清理: 移除旧plugin-manager和pkg/plugins,完成插件→工具合并
- 文档: 完善gateway-api.md和voice-service.md语音API文档
- 工具: scripts/voice/ 语音转换脚本集
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-06 11:50:40 +08:00 |
|
AskaEth
|
b085e58031
|
fix: 后台思考身份混淆 + 静默模式视觉理解 + QQ卡片解析 + 仪表盘状态修复
- 后台思考对话历史增加标签说明,严格区分群聊中不同发送者
- 静默观察模式传入图片URL并预处理,供后台思考参考
- 视觉+OCR双模型结果合并格式优化,避免LLM误认为多张图片
- QQ卡片消息(CQ:json)正确解析标题/类型,不再丢失为[JSON]
- 进程管理器stop()在进程为null时重置pid/startTime,消除矛盾状态
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-31 21:07:25 +08:00 |
|
AskaEth
|
a9c79d7887
|
feat: ASR语音转写管线 + 群聊身份混淆修复
- 新增ASR语音识别管线: QQ语音→下载音频→qwen3-asr-flash转录→注入用户消息
- 模型名称全部从models.json路由获取,无硬编码
- 修复群聊中AI将非管理员用户误称为管理员昵称(叶酱)的问题
- 助手回复缓存时标注[回复 昵称 (UID)],防止对话历史中身份混淆
- 群聊上下文指令改为肯定性表述,移除具体名称提及
- trace面板时间戳改为YYYY-MM-DD HH:MM:SS格式,耗时统一显示为秒
- 修复Go time.Duration纳秒值在前端显示问题(Duration/1e6转毫秒)
- 新增video_tool插件模板
- 优化OpenAI adapter reasoning_content处理
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-31 16:46:47 +08:00 |
|
AskaEth
|
3ad728406e
|
fix: 消息日志增强 + 历史消息抑制 + SSE实时追踪 + 群聊上下文优化
- 日志:收/发消息均显示群名称,管理员显示真实QQ昵称而非"开拓者"
- 历史消息:服务重启后NapCat回放的历史消息不再触发回复,静默注入上下文
- 消息时间戳:转发给AI时附带【消息时间: HH:MM:SS (XmXs前)】标记
- ♪ 分割符:QQ消息支持♪作为句子断点
- AI-Core SSE端点:全链路追踪实时推送,ethend不再5秒轮询
- 群聊上下文:AI-Core明确被告知消息来自群聊,以实际发送者为主语
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-31 11:49:36 +08:00 |
|
AskaEth
|
677385ec17
|
fix: 平台消息身份传递 — AI-Core 收到正确昵称而非永远 fallback 到管理员
- forwardToAICore 新增 nickname 字段,格式 "昵称 (QQ号)" 明确标识发送者
- 解决非管理员用户 @昔涟 时 AI 仍认为是管理员的身份污染问题
- 同时包含:管理员群聊插入抑制、markdown 粗体剥离、SearXNG 容器、ethend 窗口隐藏
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-31 10:17:27 +08:00 |
|
AskaEth
|
47dce276a4
|
fix: platform_silent记忆提取 + 群聊上下文整合 + 多QQ实例支持
- platform_silent模式接入Orchestrator记忆提取:被动观察群聊时提取值得记住的信息到对应命名空间
- post_chat后台思考注入平台观察:对话后思考也能看到群聊摘要
- QQ适配器:OneBot v11 self_id动态捕获、CQ图片URL提取、视觉+OCR并行处理
- Router解耦:ConfigName/PlatformName分离,支持多QQ实例独立连接
- 黑白名单功能:后端API + Ethend代理 + UI面板
- \n\n双换行断句:AI回复按双换行分割为多条消息按间隔发送
- @提及修复:bot自感知UID进行@检测
- 群聊上下文共享:channel-based userID避免记忆碎片化
- 消息日志显示处理后内容而非原始SSE数据
- platform-bridge Dockerfile + docker-compose.yml更新
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-31 09:37:18 +08:00 |
|
AskaEth
|
71f0a1abdb
|
feat: Go模块路径迁移 + Docker生产部署适配 + ethend Docker兼容
- 所有Go模块路径从 github.com/yourname/cyrene-ai 迁移到 git.yeij.top/AskaEth/Cyrene
- 5个Go Dockerfile添加 GOPROXY=https://goproxy.cn,direct 解决国内构建问题
- ai-core go.mod 添加 pkg/plugins replace 指令
- Caddyfile 简化为 http:// 通配 + handle 保留 /api 前缀
- ethend Dockerfile 适配 (npm install + 仅 COPY package.json)
- ethend 新增 RUNNING_IN_DOCKER 环境变量,健康检查改用Docker服务名
- ethend 数据库状态检查支持Docker hostname (postgres/redis/qdrant/minio)
- process-manager 新增 CONTAINER_SVC_MAP + Docker模式自动检测
- 统一 docker-compose.dev.db.yml 卷名 (pg_data/redis_data/qdrant_data/minio_data)
- docker-compose.yml ethend服务挂载docker.sock + 端口变量化
- 清理 .env 统一后的残留文件与提示信息
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-30 13:43:22 +08:00 |
|
AskaEth
|
46441335c0
|
refactor: 统一 .env 配置 — 合并 backend/.env + .docker.env 到根目录
- Go 服务 godotenv.Load("../.env") → godotenv.Load("../../.env")
- ethend.sh/config.js 读取路径改为根目录 .env
- 删除 .docker.env.example 和 backend/.env.example,统一为 .env.example
- Docker compose 默认读取根 .env,无需 --env-file
- 同步更新全部文档
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-30 10:12:54 +08:00 |
|
AskaEth
|
365f5ceb2f
|
refactor: DevTools → ethend 重命名 + 加入生产环境
- 目录 devtools/ → ethend/
- CLI 脚本 devtools.sh/.bat → ethend.sh/.bat
- 环境变量 DEVTOOLS_PORT → ETHEND_PORT
- docker-compose.yml 新增 ethend 服务(生产部署)
- 同步更新全部文档、注释和配置文件
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-30 09:32:36 +08:00 |
|