Commit Graph
103 Commits
Author SHA1 Message Date
SXP-Simon f2b4c16919 fix(ruff) 2026-03-12 18:05:01 +08:00
SXP-Simon bd991e9c16 feat(trace): 实现语义化 Trace ID 机制并美化报告展现
- [TraceContext] 重构 ID 生成算法,支持包含群名和时间(如 manual_技术交流群_1733),极大提升日志调试效率。
 - [视觉美化] 从用户可见消息(初始提示及图片 Caption)中彻底移除技术性的 [ID: xxx] 字符串。
 - [去重增强] 在报告 Caption 中引入基于秒级时间戳的“隐式指纹”,配合共享正则匹配,确保精准去重。
 - [自动分析] 优化自动调度器逻辑,引入群名缓存,使服务端定时任务日志更具业务可读性。
 - [逻辑精简] 利用插件现有的任务并发锁,移除了 Trace ID 中冗余的 4 位随机后缀,进一步精简长度。
2026-03-12 18:03:23 +08:00
SXP-Simon b4abee55d4 fix: 修复 TraceContext 兼容性与服务返回结果缺失导致的崩溃问题
【链路追踪系统】
- 在 TraceContext 中补全 generate()、set() 和 get() 兼容性接口,确保旧代码无缝迁移。
- 重新实现 TraceLogFilter 日志过滤器,恢复日志流中的 TraceID 显示。
- 统一全插件 import 路径至 src/shared/trace_context.py,并删除冗余的旧文件。

【应用服务层】
- 修复 KeyError: 'group_id':在 execute_daily_analysis 和 execute_incremental_final_report 的返回结果中补全 group_id 和 platform_id。
- 完善 execute_incremental_analysis 的返回字段,保持 API 返回格式的一致性。

【基础设施与工具】
- 在 AutoScheduler 中增加对适配器获取失败的防御性检查。
- 修复 uto_scheduler.py 和 dispatcher.py 中的静态类型检查报错。
2026-03-12 14:51:59 +08:00
SXP-Simon 059d6ea68d feat: 全面重构主插件架构,解决并发竞态、资源泄露并优化代码健壮性
【并发与生命周期规范化】
- 引入 asyncio.Lock (_init_lock) 保护初始化流程,确保多入口(Reload/Init/Loaded)触发时维持单例运行,消除重复注册风险。
- 重构初始化任务创建逻辑,增加对当前协程 Loop 的状态检查,预防 Python 3.10+ 环境下常见的运行时异常。
- 引入 _background_tasks 集合统一追踪异步任务生命周期,实现透明的任务注册与自动移除。
【资源清理与加固】
- 增强 terminate() 析构逻辑:在卸载时主动取消所有追踪的后台任务(包括正在进行的分析、渲染或依赖安装),并使用 asyncio.gather 确保安全释放。
- 采用 type: ignore 配合非 Optional 类型声明,在保证 terminate() 能够置空引用的前提下,消除了 Pylance 对全局 50+ 处属性访问的“可能为 None”误报。
【业务流程健壮性】
- 提取超长逻辑:将分析报告的渲染与多格式分发逻辑抽离至 _send_analysis_report 异步生成器,显著降低单一函数圈复杂度。
- 优化图片上传服务:
  * 引入 MAX_PAYLOAD_SIZE (20MB) 机制,拦截超大 Base64/数据,隔离内存风险。
  * 弃用固定路径,改用 tempfile.mkstemp 生成线程安全的唯一临时文件。
  * 完善 finally 块清理逻辑,确保物理文件在上传成功或失败后都能被即时删除。
【指令系统重构】
- 采用子命令模式优化 /分析设置 (analysis_settings),将启用/禁用逻辑下沉至私有处理方法,提升代码可读性。
- 修复 /群分析 异步迭代漏洞,确保分析结果流能正确通过 AsyncGenerator 协议回传。
- 移除所有业务校验中的 assert 断言,替换为更安全的条件分支与错误消息返回。
2026-03-11 23:18:09 +08:00
SXP-Simon 0b90a8b9ac fix(analysis): 修复可选参数 days 以支持自定义分析天数 2026-03-10 12:33:12 +08:00
SXP-Simon a05959b60e fix(pre-commit) 2026-03-06 17:49:20 +08:00
SXP-Simon f627a2d8e1 fix: 引入任务生命周期管理,强制退出保护 2026-03-06 17:45:08 +08:00
SXP-Simon f47af8cb99 [v4.8.1] - feat(traceability): 实现全链路 TraceID 追踪,增强初始化韧性与去重拦截 2026-03-06 17:37:54 +08:00
SXP-Simon aa92a7087a feat(TraceID): 主要通过引入全链路追踪,增强了日志的可观测性,并加固了去重拦截逻辑 2026-03-06 16:39:51 +08:00
SXP-Simon 7850697f1a refactor(perf): 建立三级资源防线并优化并发限流配置
- 【异常处理优化】引入自定义任务重复异常,精准区分“因重复运行而跳过”与“实际分析取消”两种不同语义,提升调度健壮性。
- 【三级并发控制架构】针对不同层级的资源消耗,建立了完整的限流保护体系:
    - 入口层:控制同时处于活跃状态的任务总数,防止瞬时加载大量消息导致服务器内存溢出 (OOM);
    - 接口层:全局限制 LLM API 并发请求数,确保严格遵守服务商的频率限制 (RPM);
    - 渲染层:全局限制浏览器图片生成进程,保护物理 CPU 与内存不被高能耗渲染任务耗尽。
- 【配置体验升级】新增「并发限流设置」配置组,统一收纳核心性能参数,并提供面向普通用户的防坑说明与更稳健的默认值。
- 【代码清理】移除陈旧的兼容逻辑与冗余参数,统一配置命名规范。
- 【功能精化】重排增量分析逻辑,确保在任务入口与分段处理流程中均有可靠的信号量保护。
- 【细节完善】优化群文件及群相册上传设置的文案描述,明确功能支持范围与权限要求。
2026-03-03 21:07:51 +08:00
SXP-Simon ee0bf037b8 feat: 实现群聊分析任务锁及全局资源并发限流控制
1. 任务锁定机制 (Group Task Locking):
   - 在应用服务层实现基于群组和任务类型的异步锁,使用 asynccontextmanager 生成器函数确保同一群聊在同一时间只能执行一个分析任务。
   - 使用弱引用字典 (WeakValueDictionary) 管理锁实例,防止长期的内存占用。
   - 在指令入口增加对 CancelledError 的捕获,当任务冲突时向用户反馈“任务正在执行中”的友好提示。

2. 全局并发限流重构 (Resource-level Throttling):
   - 资源层限流下沉:将并发控制中心从调度层迁移至具体的资源处理层(T2I/LLM)。
   - T2I 渲染保护:在报告生成器中引入全局信号量,严格控制 T2I 引擎的瞬时负载。
   - LLM API 保护:在应用服务层引入全局信号量,平滑所有分析请求对 LLM 提供商接口的请求频率。
   - 调度逻辑简化:移除调度器内部冗余的信号量,使其仅专注于分发逻辑与 Stagger(交错启动)平滑。

3. 调度与反馈优化:
   - 自动分析调度器增加对“跳过”任务的独立统计,并在执行报告中清晰展示“成功、跳过、失败”的具体数量。
   - 优化了管理测试指令和增量分析指令的异常处理逻辑。

4. 消息重复发送防护:
   - 在重试组件中增加基于消息历史记录的探活逻辑。在重试发送前先核实记录,确认是否已因网络抖动导致“假失败”但已实达,有效拦截重复消息。
2026-03-03 21:07:51 +08:00
SXP-Simon 544458aadd fix(retry): 增强重试管理器,尝试避免重试地狱和重复发送 2026-02-23 00:34:55 +08:00
SXP-Simon e4819c866d fix(image): 处理绝对路径和相对路径的文件路径转换 2026-02-22 15:33:01 +08:00
SXP-Simon d8f28ecf84 fix(pre-commit) 2026-02-21 23:36:46 +08:00
SXP-Simon bceb27d00e fix(image): 优化图片发送 2026-02-21 23:34:22 +08:00
Helian Nuitsandsourcery-ai[bot] 45511a2a70 fix(terminate): 回退为原本的逻辑
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-02-21 19:30:51 +08:00
SXP-Simon 66c9e3f611 fix(群文件上传): 构造一个更友好的文件名 2026-02-21 19:30:51 +08:00
SXP-Simon 0750ce5121 fix: 优化消息拉取负载并修复群相册上传兼容性
- 修复: 重构 OneBot 消息拉取逻辑,采用分页回溯策略并废除错误的页长度限制,尝试解决拉取 24h 消息不足及 NapCat 瞬时 CPU 过高问题。
- 功能: 参考 qun_album 插件,重构群相册上传逻辑,新增对 `upload_image_to_qun_album` 等多种扩展 API 的自动探测与多级回退机制。
- 优化: 为 [upload_group_album] 接口补充 [album_name] 参数透传,提升在不同 OneBot 增强版环境下的兼容性。
- 重构: 完成核心分析器类的参数命名对齐,消除 Pylance `reportIncompatibleMethodOverride` 相关的全部静态类型报错。
- 稳健性: 在分页拉取中引入锚点变化校验,防止在请求异常时进入死循环。
2026-02-21 19:30:51 +08:00
SXP-Simon de3c189d4f feat: 增强图片上传能力并完成核心架构类型重构
- 重构: 优化主类命名逻辑,提升多平台架构的可读性与通用性。
- 功能: 新增分析报告同步上传至群文件和群相册的功能,支持自动化文件管理与清理。
- 类型: 全面修正静态类型错误,确保各分析器模块与基类接口签名严格对齐。
- 优化: 改进内部类成员标注,解决可选参数与类型推断在透传过程中的不匹配问题。
- 稳健性: 完善网络请求超时处理、临时资源管理以及可选依赖项的动态加载逻辑。
- 配置: 扩展配置管理项,支持自定义上传开关、目标目录以及 PDF 渲染参数。
2026-02-21 19:30:51 +08:00
SXP-Simon dd69a68b0f fix(code-review): 参考建议修改 2026-02-20 23:40:20 +08:00
clown145andSXP-Simon 00863ff979 feat: 模板预览路由化并增强 Telegram 按钮交互稳定性 (#83)
* feat: 路由化模板预览并完善Telegram交互回退

* fix: 忽略模板预览文档回退的重复编辑异常

* fix: 在回调阶段主动清理并校验模板预览会话过期

* fix: 处理Telegram回调注册在平台热替换场景的重绑与清理

* fix(set_report_template): 删除冗余的检查

---------

Co-authored-by: SXP-Simon <sxp20061207@163.com>
2026-02-12 19:02:46 +08:00
clown145 727da8025d fix: 清理TelegramAdapter无用变量并通过lint 2026-02-12 15:41:07 +08:00
SXP-Simon b4eec978fe refactor(Telegram): 重构 Telegram 逻辑并提取消息处理与注册表服务
- 提取消息处理服务及 Telegram 注册表,显著精简主插件逻辑。
- Telegram 群组获取回退逻辑下沉至适配器,移除调度中心硬编码。
- 优化依赖注入机制,使适配器层级可访问插件 KV 存储。
- 修正消息内容定义兼容性并清理冗余代码。
2026-02-12 15:41:07 +08:00
SXP-Simon f4039ea776 fix(_resolve_template_preview_path): 删除多余的路径 2026-02-12 15:41:07 +08:00
clown145 25c49164bc chore: 移除Telegram临时调试日志 2026-02-12 15:41:07 +08:00
clown145 cb0f4e0faf fix: 修复TG分页取数与话题白名单匹配 2026-02-12 15:41:07 +08:00
clown145 7a79cb7b3e fix: 修复模板目录与预览图路径解析 2026-02-12 15:41:07 +08:00
clown145 02051a5f54 refactor: 清理重复异常分支并统一分析失败提示 2026-02-12 15:41:07 +08:00
clown145 66f198d4f0 fix: 修复TG注册并发写覆盖并优化消息分页拉取 2026-02-12 15:41:07 +08:00
clown145 aa5752d179 fix: TG通过KV回退群列表并增加临时调试日志 2026-02-12 15:41:07 +08:00
clown145 926e0df095 fix: 统一test权限判定并支持TG话题父级匹配 2026-02-12 15:41:07 +08:00
clown145 bd46b932e6 fix: 对齐QQ逻辑并去重Telegram文本中的@ 2026-02-12 15:41:07 +08:00
clown145 ce65350d60 fix: 修复 Telegram 昵称解析与@消息入库 2026-02-12 15:41:07 +08:00
SXP-Simon 8401283314 style(pre-commit) 2026-02-11 13:33:43 +08:00
SXP-Simon 5969f9bad0 fix(_run_initialization): 确保无论是在“Bot 启动”还是“插件热重载”时任务都能准时挂载 2026-02-11 13:21:48 +08:00
SXP-Simon ced38e6a9e fix: 修复了导致增量分析报告发送失败的几个核心问题:
修复报告分发器初始化错误:
在 AutoScheduler 中,初始化 ReportDispatcher 时漏传了 report_generator,导致在尝试生成报告(图片或文本)时出现 'NoneType' object has no attribute 'generate_image_report' 错误。
已更新 AutoScheduler 的构造函数并正确传递 report_generator。
修复 LLM 分析器在增量模式下的数据结构错误:UserTitleAnalyzer 报错:在增量模式下,用户活动数据被简化存储,导致 UserTitleAnalyzer 找不到 'hours' 键(Error: 'hours')。
补全数据维度:更新了 AnalysisApplicationService 的增量数据转换逻辑,保留了完整的每小时活跃分布 (hours) 和回复数 (reply_count)。
统一字段名:增量模式下使用了 nickname 字段以匹配分析器的预期(之前被错误转为了 name)。
增强容错性:优化了 UserTitleAnalyzer 的逻辑,现在它能安全地处理 hours 缺失或旧版本数据 schema,不再会因为找不到键而崩溃。
修复增量数据合并逻辑:
更新了 IncrementalMergeService,现在它能正确合并多个批次中的每小时发言统计和回复数统计,确保最终生成的报告数据准确。
2026-02-11 12:54:02 +08:00
SXP-Simon 43c42722ec fix: 白名单使用 UMO 无法分析 2026-02-11 00:40:39 +08:00
SXP-Simon 2cd97a73b7 fix(debug): 增加每次增量分析完成后发送的配置,用于调试 2026-02-10 23:16:07 +08:00
SXP-Simon 9d4b925400 fix: 获取名称逻辑 2026-02-10 23:00:48 +08:00
SXP-Simon 83b82de2bb refactor(增量分析): 从按天存储改为滑动窗口批次架构
- IncrementalBatch: 独立批次实体,每次增量分析产生一个,按批次独立存储到KV
- IncrementalState: 聚合视图,不再持久化,报告时由merge_batches合并产生
- IncrementalStore: 批次索引+数据KV持久化,支持按时间窗口查询和过期清理
- IncrementalMergeService: 新增merge_batches方法,负责批次合并和话题/金句去重
- AnalysisApplicationService: 增量分析存独立批次,最终报告按窗口查询合并
- AutoScheduler: 报告发送后清理2×窗口外的过期批次
- main.py: /增量状态命令改为滑动窗口查询展示
- 消除天然日期隔离问题,24h图表展示完整数据
2026-02-10 18:15:46 +08:00
SXP-Simon 8d1cfb24e4 feat(增量分析): 接线增量组件到main.py并添加增量状态命令 2026-02-10 15:21:15 +08:00
SXP-Simon 64d768c972 feat: 利用 AstrBot context 尝试实现 telegram 接入 2026-02-09 21:56:31 +08:00
SXP-Simon f8412559ef fix: 分析器和消息处理 2026-02-09 14:15:43 +08:00
SXP-Simon 2005f0633f refactor(DDD): 整理架构 2026-02-09 12:47:43 +08:00
SXP-Simon 0b096351d5 fix(docs): 完善注释 2026-02-09 02:14:43 +08:00
SXP-Simon 80d74577e7 fix(pre-commit): style 2026-02-09 01:39:13 +08:00
SXP-Simon b8ea7adf5a feat: 使用 Adapter 进行规范抽象,优先使用 Adapter 接口,方便后期扩展 2026-02-08 23:18:08 +08:00
SXP-Simon cbfb1cc844 fix(AnalysisConfig): 创建编排器时没有正确配置 max_messages 2026-02-08 21:33:53 +08:00
SXP-Simon c3cc2fd1f4 fix: complete the migration of the group_list configuration to use AstrBot Unified Message Origins (UMOs).
Changes Implemented:
Configuration: group_list now supports UMOs (e.g., qq_123456:GroupMessage:123456) while maintaining backward compatibility for simple group IDs.
Logic: ConfigManager and AutoScheduler were updated to handle UMOs for permission checking and group fetching.
Commands: The /分析设置 command now uses the full UMO when enabling/disabling analysis for a group.
2026-02-08 20:19:07 +08:00
SXP-Simon 94fdc42abb fix: 报告生成器硬编码了 QQ 头像 API (qlogo.cn),导致 Discord 用户显示默认/错误的 QQ 头像。
修复:

修改 ReportGenerator,允许传入自定义的 avatar_getter 回调。
2026-02-08 20:02:46 +08:00