Commit Graph

64 Commits

Author SHA1 Message Date
minecraft1024a
ac4c592590 refactor(scheduler): 将统一调度器移动至插件系统API
将统一调度器模块从 `src/schedule/` 目录重构至 `src/plugin_system/apis/` 目录下。

这次调整旨在将调度器明确地定位为插件系统的核心API之一,从而改善代码的组织结构和架构清晰度。所有引用该模块的内部导入路径均已同步更新。
2025-11-12 13:47:00 +08:00
minecraft1024a
0e1e9935b2 style: 统一代码风格并采用现代化类型注解
对整个代码库进行了一次全面的代码风格清理和现代化改造,主要包括:

- 移除了所有文件中多余的行尾空格。
- 将类型提示更新为 PEP 585 和 PEP 604 引入的现代语法(例如,使用 `list` 代替 `List`,使用 `|` 代替 `Optional`)。
- 清理了多个模块中未被使用的导入语句。
- 移除了不含插值变量的冗余 f-string。
- 调整了部分 `__init__.py` 文件中的 `__all__` 导出顺序,以保持一致性。

这些改动旨在提升代码的可读性和可维护性,使其与现代 Python 最佳实践保持一致,但未修改任何核心逻辑。
2025-11-12 12:49:40 +08:00
minecraft1024a
2edc049524 style(schedule): 统一调度器代码格式与风格
对 `unified_scheduler.py` 文件进行全面的代码格式化。

唉,真是的,之前的代码格式简直乱七八糟,到处都是多余的空行和不一致的换行,看着就让人头大。

本次改动包括:
- 移除类定义、函数定义和逻辑块之间不必要的空行,使代码更紧凑。
- 统一函数调用和实例化的参数换行风格,增强可读性。
- 调整了注释的间距,使其更加清晰。

哼,这次可没有改动任何核心逻辑哦,纯粹是代码美容,主人你可别搞错了。
2025-11-12 11:13:20 +08:00
Windpicker-owo
58b746f217 feat(deadlock): 增加死锁检测阈值,优化死锁处理逻辑 2025-11-09 19:52:02 +08:00
Windpicker-owo
0e9ccc9d4b refactor(scheduler): 采用无锁设计,对统一调度器进行全面改造
- 用完全异步、无锁的架构替换传统的调度器
- 通过独立的执行上下文实现任务隔离
- 增加具有多级超时保护的全面死锁检测功能
- 引入健康评分和自动恢复机制
- 增加资源管理功能,并自动清理已完成的任务
- 实现可配置的并发控制和优雅降级
- 通过详细的执行历史记录,增强任务状态跟踪
- 通过适当的参数注入来改进事件处理
- 增加全面的统计和监控功能
- 保持与系统管理插件中状态字段的向后兼容性

重构后的调度器利用asyncio的单线程特性,消除了所有锁定机制,从而彻底防止死锁。每个任务都在完全隔离的状态下运行,确保故障不会影响其他任务。新架构包括多级超时保护、自动资源清理和全面的健康监测。
2025-11-09 18:06:06 +08:00
Windpicker-owo
04c6c204e8 fix(cache-manager): 修复并行获取缓存统计信息和内存使用,避免死锁和重复计数
fix(scheduler): 改进调度任务的多阶段取消机制,彻底避免死锁风险
2025-11-08 22:17:12 +08:00
Windpicker-owo
98bfa05b96 feat(scheduler): 新增死锁检测器,改进任务取消机制,优化异步通知 2025-11-08 18:20:00 +08:00
Windpicker-owo
78a3a192bf refactor: 更新调度器以使用任务名称替代调度ID,增强任务管理和清理无效记录功能 2025-11-08 09:12:46 +08:00
Windpicker-owo
6042a604c0 refactor: 移除锁机制,优化统一调度器的并发执行设计 2025-11-07 22:28:27 +08:00
Windpicker-owo
0cf7f87b66 refactor: 优化兴趣值管理器和统一调度器,增强任务执行的并发控制 2025-11-07 22:13:00 +08:00
明天好像没什么
c8d7c09625 ruff 2025-11-07 21:01:45 +08:00
Windpicker-owo
0e580ab3f7 fix: 等待最多3秒以确保取消正在执行的任务,避免潜在的阻塞 2025-11-07 18:52:38 +08:00
Windpicker-owo
6a34cbae79 fix: 等待取消正在执行的任务以确保任务正确终止 2025-11-07 17:41:33 +08:00
Windpicker-owo
ba30a52e32 chore: 更新项目版本至0.12.0,添加aiofiles依赖;优化调度器任务执行逻辑,避免重复触发 2025-11-07 17:38:50 +08:00
Windpicker-owo
ca70ae1563 refactor: 将流循环管理器替换为调度器分发器以处理消息
- 引入SchedulerDispatcher以通过统一调度器管理消息分发。
- 更新了MessageManager以使用新的调度器,移除了旧的流循环管理功能。
- 增强了 add_message 方法,以便在接收消息时通知调度器。
- 已移除废弃的中断处理方法,将其逻辑整合至调度器中。
- 修改了action_manager,改为等待数据库操作而非使用asyncio.create_task以实现更精细的控制。
- 优化了统一调度器,支持并发任务执行及运行中任务的取消。
- 为重构流程和新架构添加了全面的文档说明。
2025-11-04 23:13:52 +08:00
明天好像没什么
cb97b2d8d3 rufffffff 2025-11-01 21:10:01 +08:00
Windpicker-owo
ce1c3288fd fix: 修复数据库导入错误
- 修复12处从错误位置导入get_db_session/get_engine的问题
- 函数应从core导入,模型应从core.models导入
- 修复bot.py使用check_and_migrate_database代替不存在的initialize_database

影响文件:
- bot.py: 使用正确的初始化函数
- schedule_manager.py: 修复get_db_session导入
- relationship_service.py: 修复get_db_session导入
- schedule_api.py: 修复get_db_session导入
- utils.py (llm_models): 修复get_db_session导入
- utils_image.py: 修复get_db_session导入
- utils_video.py: 修复get_db_session导入
- user_ban.py: 修复get_db_session导入
- statistics.py: 修复get_db_session导入
- storage.py: 修复get_db_session导入
- anti_injector.py: 修复2处get_db_session导入
- permission_manager.py: 修复get_engine导入
2025-11-01 14:44:13 +08:00
Windpicker-owo
f6318fdb65 refactor: 清理旧数据库文件并完成导入更新
- 将6个旧数据库文件移动到 old/ 目录归档
  * sqlalchemy_models.py
  * sqlalchemy_database_api.py
  * database.py
  * db_migration.py
  * db_batch_scheduler.py
  * sqlalchemy_init.py
- 更新剩余2个文件的导入路径
  * src/schedule/database.py
  * src/plugins/built_in/napcat_adapter_plugin/src/database.py
- 数据库重构基本完成,系统使用新的6层架构
2025-11-01 14:29:22 +08:00
Windpicker-owo
a1dc03cacc refactor: 完成数据库重构 - 批量更新导入路径
- 更新35个文件的导入路径 (共65处修改)
- sqlalchemy_models  core.models (模型类)
- sqlalchemy_database_api  compatibility (兼容函数)
- database.database  core (初始化/关闭函数)
- 添加自动化导入更新工具 (scripts/update_database_imports.py)
- 所有兼容性层测试通过 (26/26)
- 数据库核心功能测试通过 (18/21)
2025-11-01 14:22:54 +08:00
minecraft1024a
5b1cbb49b0 refactor(schedule): centralize schedule and monthly plan prompts
Extracts the prompt templates for daily schedule and monthly plan generation from `llm_generator.py` into a new `prompts.py` module. This change centralizes prompt management and improves code readability and maintainability by separating prompt logic from the generation workflow.

The `ScheduleLLMGenerator` and `MonthlyPlanLLMGenerator` classes now use the `global_prompt_manager` to format and retrieve the necessary prompts, simplifying the generator code.
2025-11-01 11:21:53 +08:00
minecraft1024a
14f5334fb5 feat(schedule): 自动删除两月前的月份计划 2025-11-01 11:21:40 +08:00
minecraft1024a
b8e790a764 ruff 2025-11-01 10:59:38 +08:00
minecraft1024a
f2332eeb43 docs(schedule): 日程表管理器补上了注释 2025-11-01 10:55:41 +08:00
Windpicker-owo
69ee822ef7 refactor(logging): 将多个info日志级别的记录更改为debug级别,以减少日志输出 2025-11-01 00:44:50 +08:00
明天好像没什么
0e129d385e refactor: 统一类型注解风格并优化代码结构
- 将裸 except 改为显式 Exception 捕获
- 用列表推导式替换冗余 for 循环
- 为类属性添加 ClassVar 注解
- 统一 Union/Optional 写法为 |
- 移除未使用的导入
- 修复 SQLAlchemy 空值比较语法
- 优化字符串拼接与字典更新逻辑
- 补充缺失的 noqa 注释与异常链

BREAKING CHANGE: 所有插件基类的类级字段现要求显式 ClassVar 注解,自定义插件需同步更新
2025-10-31 22:42:39 +08:00
minecraft1024a
a29be48091 refactor(core): 优化类型提示与代码风格
本次提交对项目代码进行了广泛的重构,主要集中在以下几个方面:

1.  **类型提示现代化**:
    -   将 `typing` 模块中的 `Optional[T]`、`List[T]`、`Dict[K, V]` 等旧式类型提示更新为现代的 `T | None`、`list[T]`、`dict[K, V]` 语法。
    -   这提高了代码的可读性,并与较新 Python 版本的风格保持一致。

2.  **代码风格统一**:
    -   移除了多余的空行和不必要的空格,使代码更加紧凑和规范。
    -   统一了部分日志输出的格式,增强了日志的可读性。

3.  **导入语句优化**:
    -   调整了部分模块的 `import` 语句顺序,使其符合 PEP 8 规范。

这些更改不涉及任何功能性变动,旨在提升代码库的整体质量、可维护性和开发体验。
2025-10-31 20:56:17 +08:00
Windpicker-owo
373ca48a4d refactor(event): 优化AFTER_SEND事件的异步触发逻辑并增强日志记录 2025-10-31 14:25:40 +08:00
Windpicker-owo
033e1fecb4 feat(scheduler): 添加统一调度器集成支持
- 在系统启动和关闭流程中集成统一调度器
- 为事件管理器添加调度器回调注册机制
- 调整兴趣评分系统阈值配置
- 增强系统模块化架构,支持调度器事件通知
2025-10-28 12:41:29 +08:00
minecraft1024a
86ab01996d feat(schedule): 优化日程提示并增加时间感知能力
日程系统现在可以更详细地描述当前活动,包括计划的起止时间、已进行时间和剩余时间,为AI角色提供更强的时间感知和情境感。

主要变更:
- `schedule_manager`的`get_current_activity`现在返回包含活动和时间范围的字典,而不仅仅是活动名称。
- 在`default_generator`中,重构了日程提示的生成逻辑,使其能够计算并展示活动的详细时间信息。
- 修复了多处可能因变量为空(如`msg_content`、`user_nickname`)或事件处理结果为`None`而引发的潜在错误。
- 统一了各处对日程信息的调用方式。
2025-10-12 12:57:48 +08:00
minecraft1024a
4db6a532fd refactor(schedule): 优化日程生成日志输出
将月度计划的日志记录逻辑从 `plan_manager` 迁移到 `schedule_manager` 中,使其仅在生成日程并实际使用到月度计划时才打印相关信息,避免了不必要的日志输出。

- 从 `plan_manager` 中移除了获取月度计划后的日志打印。
- 在 `schedule_manager` 的日志函数中增加了对参考月度计划的展示,使日志内容更具上下文。
2025-10-11 18:52:15 +08:00
John Richard
047105e5e8 更改部分类型注解 2025-10-02 21:10:36 +08:00
John Richard
7923eafef3 re-style: 格式化代码 2025-10-02 20:26:01 +08:00
John Richard
ecb02cae31 style: 格式化代码 2025-10-02 19:38:39 +08:00
tt-P607
c71d91b2a8 refactor(schedule): 使计划管理器适配异步数据库操作
底层的计划数据访问函数已更改为异步实现。为确保正确的异步执行流程,本次提交对 PlanManager 中的所有相关调用进行了更新,添加了 await 关键字,并将 get_plans_for_schedule 方法声明为 async。
2025-10-01 00:44:44 +08:00
Windpicker-owo
ff24bd8148 Merge afc branch into dev, prioritizing afc changes and migrating database async modifications from dev 2025-09-27 23:37:40 +08:00
minecraft1024a
b7fba5c8ed fix(schedule): 修复日程生成在连续失败时无限重试的问题
先前的日程生成逻辑使用无限循环进行重试。在 LLM 服务持续失败或返回无效数据的情况下,这可能导致程序陷入死循环。

本次修改将重试机制改为有固定上限(3次)的循环。如果所有尝试均失败,将记录错误并返回 None,从而确保程序的健壮性。
2025-09-23 14:13:44 +08:00
Windpicker-owo
444f1ca315 ruff,私聊视为提及了bot 2025-09-20 22:34:22 +08:00
雅诺狐
832743249d refactor(db): 修正SQLAlchemy异步操作调用方式
移除session.add()方法的不必要await调用,修正异步数据库操作模式。主要变更包括:

- 将 `await session.add()` 统一改为 `session.add()`
- 修正部分函数调用为异步版本(如消息查询函数)
- 重构SQLAlchemyTransaction为完全异步实现
- 重写napcat_adapter_plugin数据库层以符合异步规范
- 添加aiomysql和aiosqlite依赖支持
2025-09-20 17:26:28 +08:00
雅诺狐
55717669dd refactor(db): 将数据库操作异步化
- 将所有 session.add() 改为 await session.add()
- 将所有 session.commit() 改为 await session.commit()
- 将 session.refresh() 改为 await session.refresh()
2025-09-20 14:35:31 +08:00
雅诺狐
898208f425 perf(methods): 通过移除不必要的 self 参数优化方法签名
在包括 chat、plugin_system、schedule 和 mais4u 在内的多个模块中,消除冗余的实例引用。此次改动将无需访问实例状态的实用函数转换为静态方法,从而提升了内存效率,并使方法依赖关系更加清晰。
2025-09-20 10:55:06 +08:00
tt-P607
0cc4f5bb27 三次修改 2025-09-20 02:21:53 +08:00
minecraft1024a
1e2eb977bb refactor(sleep): 解耦SleepManagerScheduleManager的依赖关系
将日程表获取的逻辑从`SleepManager`转移到`TimeChecker`中,并使其直接从全局的`schedule_manager`实例获取日程,消除了`SleepManager`对日程表的直接管理责任。

这一重构简化了`SleepManager`的职责,使其更专注于睡眠状态的管理,同时提高了模块间的独立性。

- `SleepManager`不再持有`today_schedule`状态。
- `TimeChecker`现在直接从`schedule_manager`获取日程,不再依赖于`SleepManager`传递。
- 移除了`ScheduleManager`中对`sleep_manager`的引用和更新操作。
2025-09-07 12:28:15 +08:00
minecraft1024a
8e21502c31 refactor(sleep): 重构睡眠管理系统,移除桥接模式
将 `SleepManager` 从 `schedule_bridge` 中独立出来,使其成为一个自包含的组件。现在由 `HeartFChatting` 和 `ScheduleManager` 直接实例化和使用 `SleepManager`,移除了原有的全局单例桥接器。

主要变更:
- 删除了 `schedule_bridge.py`,其功能被直接整合到 `SleepManager` 和调用方中。
- `SleepManager` 内部逻辑被拆分为更小的模块,如 `TimeChecker`、`NotificationSender` 和 `SleepStateSerializer`,以提高内聚性和可测试性。
- `HeartFChatting` 现在直接创建并管理 `SleepManager` 实例,并通过 `HfcContext` 传递给其他需要的组件(如 `WakeUpManager`)。
- `ScheduleManager` 也创建自己的 `SleepManager` 实例来更新日程,简化了依赖关系。
- 简化了 `WakeUpManager` 中获取睡眠状态和重置状态的逻辑,直接通过上下文访问 `SleepManager`。
2025-09-06 12:16:11 +08:00
minecraft1024a
9bbf801bd9 feat(规划): 引入统一的规划系统并重构组件
本次提交引入了一个全新的统一规划系统,取代了独立的日程和月度计划模块。这一变更集中了配置并解耦了职责,以提高可维护性和清晰度。

核心逻辑现在被分解为专门的组件:

- PlanManager: 处理日常日程和月度目标的所有数据库交互,取代了已-删除的 monthly_plan_db.py。
- ScheduleLLMGenerator: 封装了与 LLM 交互以生成日程的逻辑,将此职责从 ScheduleManager 中移除。
- MonthlyPlanManager: 现在作为核心 PlanManager 的简化接口。
这次架构性的大修通过将数据持久化和 LLM 生成逻辑从主调度逻辑中抽象出来,简化了整体设计。

重大变更: bot_config.toml 中的配置已被迁移。移除了 [schedule] 和 [monthly_plan_system] 部分。所有相关设置现在必须在新的 [planning_system] 部分下进行配置。
2025-09-06 11:41:42 +08:00
minecraft1024a
f9b95c8881 refactor(sleep): 解耦ScheduleManager与SleepManager,引入桥接模式
为了降低模块间的耦合度并提升代码的可维护性,对睡眠管理系统进行了重构。

引入了`schedule_sleep_bridge`作为`ScheduleManager`和`SleepManager`之间的桥梁。`ScheduleManager`不再直接持有`SleepManager`的实例,而是通过桥接器更新其日程数据。`SleepManager`则通过桥接器获取所需的日程信息,实现了二者的解耦。

- **`ScheduleManager`**: 移除了所有与`SleepManager`直接交互的代码,现在只负责生成日程并通过桥接器发布。
- **`SleepManager`**: 构造函数和内部逻辑修改为依赖桥接器接口,而不是`ScheduleManager`实例。
- **`HeartFChatting`**: 更新了所有对睡眠状态管理的调用,使其通过新的`schedule_sleep_bridge`进行。
- **`DefaultReplyer`**: 采用了延迟导入的方式获取`schedule_manager`,减少了不必要的模块加载。
2025-09-06 10:08:31 +08:00
minecraft1024a
8074a1b082 refactor(sleep): 将睡眠和唤醒管理逻辑重构到独立的sleep_manager模块
将原先分散在 `chat/chat_loop` 和 `schedule` 目录下的 `WakeUpManager` 和 `SleepManager` 相关逻辑,统一移动并整合到新的 `src/chat/chat_loop/sleep_manager` 模块中。

这次重构旨在提高代码的模块化和内聚性,使睡眠相关的功能更加集中和易于管理。同时更新了所有相关的导入路径,以反映新的文件结构。
2025-09-05 21:51:55 +08:00
minecraft1024a
513757a8ee chore: format code and remove redundant blank lines
This commit applies automated code formatting across the project. The changes primarily involve removing unnecessary blank lines and ensuring consistent code style, improving readability and maintainability without altering functionality.
2025-09-05 20:58:03 +08:00
Windpicker-owo
30e66d5938 Merge branch 'master' of https://github.com/MoFox-Studio/MoFox_Bot 2025-08-31 20:56:35 +08:00
Windpicker-owo
8149731925 修复代码格式和文件名大小写问题 2025-08-31 20:50:17 +08:00
minecraft1024a
0427d5cac1 refactor(schedule): 将日程生成转为后台异步任务
将即时日程生成的操作从直接调用修改为提交到异步任务管理器执行。这避免了在主流程中等待耗时较长的日程生成过程,改善了请求响应速度。

为此,新增了 `OnDemandScheduleGenerationTask` 类来封装按需生成日程的后台任务逻辑。
2025-08-31 13:11:45 +08:00