Commit Graph

235 Commits

Author SHA1 Message Date
AskaEth 6490c341e5 fix: 主动消息频控从30分钟降到5分钟 + 拦截后清除标记防止LLM幻觉 2026-06-28 16:34:47 +08:00
AskaEth d196a22f42 fix: 所有muLock改为defer unlock防止panic孤儿锁 2026-06-28 16:27:40 +08:00
AskaEth 24d7722ef9 fix: storeThought orphaned lock → defer unlock 2026-06-28 16:16:35 +08:00
AskaEth dc410c1cff debug: 死锁监控+DebugMutex+ChSend+GoStart 调试工具 2026-06-28 13:01:54 +08:00
AskaEth 537e4ed550 feat: 群聊非@消息走审查模式—值得插话才回 2026-06-28 12:17:03 +08:00
AskaEth 9224633986 fix: 管理员群聊消息不再静默,始终正常处理 2026-06-28 12:15:44 +08:00
AskaEth bebacf805b fix: 使用Data字段返回权限拒绝提示给LLM 2026-06-28 12:13:13 +08:00
AskaEth ca43604eba fix: IoT权限拒绝改为LLM生成自然回复 2026-06-28 12:12:33 +08:00
AskaEth 56b105a1dc fix: IoT控制双层权限 — LLM先行判断 + 代码兜底拦截 2026-06-28 12:10:53 +08:00
AskaEth 310a8733c8 fix: IoT设备控制仅限管理员 2026-06-28 12:06:09 +08:00
AskaEth 1e652b5f32 fix: 主动消息禁止编造场景 + 同步推送到QQ 2026-06-28 11:53:46 +08:00
AskaEth a47c8be77b fix: 主动消息同步推送到平台适配器(QQ) 2026-06-28 11:52:43 +08:00
AskaEth 2b3aa45547 fix: saveToDB 改为同步写,防止进程被杀时消息丢失 2026-06-28 11:44:42 +08:00
AskaEth dfd6ccbd41 fix: 移除 DuckDuckGo 回退,web_search 仅用 SearXNG 2026-06-28 11:42:14 +08:00
AskaEth 6553656c9a fix: web_search 走本地 SearXNG 而非 DuckDuckGo 2026-06-28 11:41:12 +08:00
AskaEth 9b20f14ab9 fix: emitToolProgress recover on closed channel 2026-06-28 11:36:27 +08:00
AskaEth 5725075a31 fix: LoadFromDB Timestamp 赋值 + restoreContext 查20条消息 2026-06-28 11:32:17 +08:00
AskaEth 29f24b3036 fix: restoreContext 从会话历史取最近活动时间,不再用记忆条目时间 2026-06-28 11:30:15 +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 0d6970a2d3 fix: halo_publish 插件 — runtime.Caller 解析config.json绝对路径 2026-06-26 12:57:50 +08:00
AskaEth 839522e1d4 fix: web_search nil pointer崩溃 — 零值struct→构造函数
- WebSearchPlugin/HTTPPlugin/WebFetchPlugin/FilePlugin
  全部改用构造函数创建,避免内部http.Client为nil
- 根因: executeAsyncAndStore异步执行时零值struct导致panic
- ai-core频繁崩溃的直接原因

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 12:51:33 +08:00
AskaEth 2d79126d36 docs: 插件README+开发文档更新 — 反映自动发现流程(扫描go.mod+plugin.json) 2026-06-25 21:55:44 +08:00
AskaEth 4424c09759 docs: 插件README修正 — 写明三步注册流程 + go:generate指令 2026-06-25 20:48:15 +08:00
AskaEth 27e7bd0649 docs: ToolProgress 补全 Error + Result 字段 2026-06-24 19:39:10 +08:00
AskaEth 1f633608db docs: 插件开发文档补全 — Stop/Health/Complexity/ComplexTool/ToolDefinition全字段 2026-06-24 19:37:10 +08:00
AskaEth 65ff530ce4 docs: 插件注册方式更新 — plugins.json代码生成替代硬编码 2026-06-24 19:31:49 +08:00
AskaEth cfebf5480e feat: 插件自动发现 — plugins.json + 代码生成器
- plugins.json 配置文件列出所有插件及其import路径
- gen_plugins.go 读取配置生成 plugins_gen.go
- main.go 调用 registerPlugins() 替代硬编码列表
- 新增 backend/plugins/ 第三方插件目录
- 插件开发文档: docs/api/plugin-development.md

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-24 19:30:52 +08:00
AskaEth 2e94e7b0bf docs: 插件开发指南 + README清理dev_must_read和pg-backup引用 2026-06-24 19:14:51 +08:00
AskaEth ebd6f40425 feat: 后台思考可被前台消息中断 — 用户发消息时cancel运行中的思考 2026-06-24 18:21:36 +08:00
AskaEth fab934fb12 feat: performThink 10s休闲检查 + IsUserRecentlyActive — 后台让步前台 2026-06-23 21:52:02 +08:00
AskaEth e83bd6febb feat: 后台思考让步前台 — 用户10s内有活动则跳过非post_chat思考 2026-06-23 21:44:31 +08:00
AskaEth cdfe440044 feat: send-proactive 消息记入平台日志 — ethend可见 2026-06-23 21:42:23 +08:00
AskaEth 3a5591833f fix: INSERT VALUES 列数不匹配 — 补齐platform字段 2026-06-23 21:29:41 +08:00
AskaEth 7e0268a884 fix: reminder platform 改用 AdapterName(唯一标识符),不再硬编码 obv11
- ProcessParams/SynthesizeParams 新增 AdapterName
- main.go 传递 req.Source.AdapterName
- reminder_create 自动注入使用 adapter 名而非平台类型

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 21:27:02 +08:00
AskaEth c75ddc13ea fix: SynthesizeParams 加 ChannelID 2026-06-23 21:24:19 +08:00
AskaEth f7c41f3e23 fix: LLM提醒触发加2次重试 — 避免ai-core繁忙时超时 2026-06-23 21:21:46 +08:00
AskaEth 049332312b fix: reminder LLM触发超时 15s→30s 2026-06-23 21:18:37 +08:00
AskaEth 27a497e397 feat: 群聊提醒 — 提醒关联平台/频道/适配器,到期发回原群聊
- reminder_create 新增 platform/channel_type/channel_id/adapter_name 参数
- Gateway Reminder 模型 + DB 迁移 + CRUD 全部支持新字段
- 提醒到期时:群聊提醒 → platform-bridge 发回原群聊
- 非群聊提醒 → 走 Web 端推送
- Thinker 新增 PushPlatformMessage 方法

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:57:58 +08:00
AskaEth 680696e2c4 fix: 工具结果推送 userID为空→回退adminUserID 2026-06-23 20:50:33 +08:00
AskaEth 01feb16262 feat: 异步工具结果主动推送 — 通用回调机制
- Synthesizer 新增 resultPusher 回调字段
- executeAsyncAndStore 完成后自动推送结果
- Orchestrator.SetToolResultPusher 透传
- 回调通用设计,不绑定特定工具

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:42:55 +08:00
AskaEth 30d5b9b464 fix: 重新应用工具异步执行 (被git checkout丢失) 2026-06-23 20:39:51 +08:00
AskaEth a3bdeba63a feat: 工具调用全部异步,不再阻塞主会话
- 去掉8s超时同步执行,工具一律走 executeAsyncAndStore
- LLM立即收到[后台执行中]提示,继续生成回复
- 工具结果在下一轮对话中返回

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:35:11 +08:00
AskaEth 2ec49f0779 fix: ListReminders JSON解析 — Gateway返{reminders:[...]}而非裸数组 2026-06-23 20:32:10 +08:00
AskaEth edc2e77d2f fix: internal reminder路由+user_id支持 — 修复401/404
- Gateway新增 POST/GET/DELETE /api/v1/internal/reminders
- CreateReminderRequest新增UserID字段,JWT为空时回退
- GatewayClient URL改为 /api/v1/internal/reminders

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:24:09 +08:00
AskaEth fea67d05eb fix: reminder工具401认证 — 路由从JWT组迁到internal组
- Gateway新增 /api/v1/internal/reminders (GET/POST/DELETE)
- 使用 X-Internal-Token 认证,不再需要JWT
- GatewayClient URL改为 /api/v1/internal/reminders

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:19:23 +08:00
AskaEth d38b92568b feat: 自主思考可按需查看群聊上下文 — 【查看群聊:适配器名:群号】
- 思者可在反思中输出【查看群聊:obv11-main:531082168】主动获取群聊记录
- 查找平台频道表确认adapter名称对应的platform类型
- 通过 memory-service 拉取最近5条频道记忆注入思考
- 自动追加【继续思考】以处理获取到的上下文
- 分析结果保留在思考链中

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:12:20 +08:00
AskaEth a2078b6662 feat: 主动消息写回对话历史 — 防止短期重复提问
- storeThought 推送主动消息后写入 convStore
- 轻量思考话题发起后也写入
- 配合提示词规则: 两小时内不重复问同类话题

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 20:01:43 +08:00
AskaEth 1eb22f5d06 fix: blocklist提前到消息处理最前端 — 拦截消息不浪费任何资源
- 移到 logging/enrichment/routing 之前
- 被拦截消息只记一条 [blocked] 日志,不调ai-core
- 时间戳/群名/昵称等富化处理不再对blocked消息执行

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 19:53:23 +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