Commit Graph

85 Commits

Author SHA1 Message Date
minecraft1024a
8f12dfd93c feat(sleep): 引入弹性睡眠机制
根据睡眠压力动态调整入睡延迟时间。

- 新增`enable_flexible_sleep`配置项,用于启用或禁用此功能。
- 当启用时,系统会检查当前的睡眠压力值。
- 如果睡眠压力低于预设阈值,将根据压力差计算出一个延迟入睡的时间,压力越低,延迟越长。
- 增加了当日总延迟时间的上限,避免无限期推迟睡眠。
- 如果睡眠压力高于阈值,或当日延迟额度已用完,则会进入一个较短的准备阶段后入睡。
- 如果无法获取睡眠压力,系统将回退到旧的随机延迟逻辑。
- 将`_total_delayed_minutes_today`的数据类型从`int`修改为`float`以支持更精确的计算。
2025-09-06 14:48:12 +08:00
minecraft1024a
614f8064ba feat(sleep): 引入多样化的失眠触发机制
重构了失眠系统,引入了两种新的失眠触发机制:
1.  **低睡眠压力失眠**:当睡后检查时睡眠压力低于设定阈值,将触发失眠。
2.  **随机失眠**:在睡眠压力正常的情况下,仍有一定概率随机触发失眠。

同时,移除了原有的 `post_sleep_insomnia` 特定情绪,并调整了相关配置项,使失眠原因的传递和处理更加灵活。
2025-09-06 13:55:57 +08:00
minecraft1024a
0b1d365fce docs(core): 完善睡眠与主动思考模块的文档注释
为 `ProactiveThinker`, `SleepManager`, 和 `SleepState` 核心类及其方法添加了详尽的中文文档字符串和内联注释。

本次更新旨在提高代码的可读性和可维护性,详细解释了以下关键组件的职责和工作流程:
- **ProactiveThinker**: 阐明了其作为主动事件处理中心的角色,以及如何与规划器和生成器协作。
- **SleepManager**: 详细描述了其作为睡眠状态机的核心逻辑,包括状态转换的条件和处理流程。
- **SleepState**: 解释了各个睡眠状态的含义以及序列化器的作用,确保状态持久化。

此外,对配置文件 `bot_config_template.toml` 中的相关配置项也补充了更清晰的注释。
2025-09-06 13:44:38 +08:00
minecraft1024a
36b9eae6c8 refactor(sleep): 重构睡眠系统以实现睡后失眠机制
重构了原有的睡眠管理状态机,将睡前失眠逻辑调整为更真实的“睡后失眠”模式。现在系统会在角色入睡一段时间后,根据当前的睡眠压力判断是否触发失眠状态。

主要变更:
- **状态机调整**: 移除了入睡前的失眠检查,改为在进入`SLEEPING`状态后,延迟一段时间再根据睡眠压力触发`INSOMNIA`状态。
- **通知系统重构**: `NotificationSender`被简化,现在通过触发主动思考事件 (`goodnight`, `post_sleep_insomnia`) 来发送通知,而不是直接调用生成器API。
- **配置更新**: 将固定的失眠持续时间改为一个随机范围,并增加了触发失眠判定的延迟时间配置。
- **代码解耦**: `EnergyManager`现在直接依赖新的`SleepManager`,不再通过旧的`schedule_manager`。
2025-09-06 13:34:53 +08:00
minecraft1024a
11ada53b0d rrrrrrrrrrrrrrrrruuuuuuuuuuuufffffffffffffffffffffffffffffffff x2 2025-09-06 12:25:36 +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
285fe8476a Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-06 10:43:10 +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
Windpicker-owo
6c042cc73f 迁移napcat插件至built_in 2025-09-06 03:38:43 +08:00
Windpicker-owo
90cbd5773e Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-06 00:11:31 +08:00
Windpicker-owo
c9b712d8fa refactor(prompt): 重构并统一提示词系统
- 删除旧的智能提示词系统(smart_prompt.py)和相关参数模块(prompt_parameters.py)
- 将 prompt_builder.py 重命名为 prompt.py 并精简功能
- 更新所有模块的导入路径从 `src.chat.utils.prompt_builder` 到 `src.chat.utils.prompt`
- 统一提示词构建接口,使用新的 PromptContext 替代 SmartPromptParameters
- 移除重复和冗余代码,简化系统架构

BREAKING CHANGE: 旧的 SmartPrompt 系统已被完全移除,所有相关模块需要改用新的统一 Prompt 系统
2025-09-06 00:10:54 +08:00
minecraft1024a
cb8a9e33fc docs(chat): 为HeartFChatting模块添加详细的函数文档
为 `_handle_proactive_monitor_completion`, `_proactive_monitor_loop`, `_should_enable_proactive_thinking`, `_get_dynamic_thinking_interval`, 和 `_format_duration` 等关键函数补充了详细的文档字符串。

这些文档字符串解释了每个函数的功能、参数和返回值,以提高代码的可读性和可维护性。
2025-09-05 21:57:13 +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
4b256721d3 refactor(chat): 重构聊天循环逻辑,简化CycleProcessor职责
将`no_reply`计数器管理、睡眠压力增加等逻辑从`CycleProcessor`上移至`HeartFChatting`主循环中,使其职责更清晰。`CycleProcessor.observe`现在直接返回执行的动作类型,简化了其内部状态管理。

主要变更:
- `CycleProcessor`不再处理回复生成、并行任务和最终循环信息的构建,这些复杂的逻辑被移除,极大地简化了该类。
- `HeartFChatting`现在负责根据`observe`返回的动作类型来管理`no_reply`计数器和睡眠压力。
- 删除了`CycleProcessor.execute_plan`方法,主动思考的回复流程被重构,直接调用`generator_api`和`response_handler.send_response`。
- 移除了`response_handler`中已废弃的`generate_response`方法。
2025-09-05 21:40:42 +08:00
minecraft1024a
e1fbdaad8c rrrrrrrrrrrrrruuuuuuuuuuuuuuuuuuuuffffffffffffffffffffffffff 2025-09-05 21:01:32 +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
minecraft1024a
488e959577 refactor(chat): 重构主动思考逻辑并将其集成到主聊天循环
将原有的 `ProactiveThinker` 类中的逻辑直接整合进 `HeartFChatting` 类中。此举简化了整体架构,减少了类之间的耦合,并使得主动思考的触发机制与主聊天循环的状态管理更加统一。

主要变更:
- 删除了独立的 `proactive_thinker.py` 文件。
- 将主动思考的监控循环、条件检查、动态间隔计算等功能实现为 `HeartFChatting` 的私有方法。
- 引入了 `ProactiveTriggerEvent` 事件,使触发源更加明确。
- 调整了相关模块的导入路径和配置项的调用方式,以适应新的结构。
2025-09-05 20:30:35 +08:00
minecraft1024a
55abedfbf0 Merge remote-tracking branch 'origin/master' into dev 2025-09-05 19:34:47 +08:00
minecraft1024a
420a7f0bef refactor(chat): 简化响应处理逻辑
- 移除 `send_response` 方法中多余的 `reply_to_str` 参数
- 调整 `text_to_stream` 调用,不再传递消息数据作为回复目标
- 确保 `handle_message_storage` 的 `reason` 参数始终为字符串
2025-09-05 18:36:49 +08:00
Windpicker-owo
f4b8bf5904 加入breaking启用配置 2025-09-04 00:09:43 +08:00
Windpicker-owo
498b57de13 删除无用函数 2025-09-03 23:56:03 +08:00
Windpicker-owo
efe81fa346 fix(chat): 优化breaking模式下的兴趣值累积逻辑
重构heartFC_chat中的消息处理机制,使用累积兴趣值替代最近三次记录来判断是否进入breaking模式。主要变更包括:

- 将breaking模式判断基于累积兴趣值而非最近3次记录
- 在消息成功处理时重置累积兴趣值
- 调整阈值计算方式,使用聊天频率进行动态调整
- 修复send_api中的消息查找函数,提高回复消息匹配准确性

这些改动提高了对话节奏控制的稳定性,使breaking模式触发更加合理。
2025-09-03 22:19:00 +08:00
Windpicker-owo
53e72ecbdb 迁移:1f91967(remove:移除willing系统,移除reply2,移除能量值,移除reply_to改为message) 2025-09-03 21:27:28 +08:00
Windpicker-owo
b7e042161f 优化s4u提示词结构,修复复读问题 2025-09-03 16:33:41 +08:00
Windpicker-owo
e29e9e563a 迁移:4b59eda(feat:修改focus value的用途) 2025-09-02 21:14:30 +08:00
Windpicker-owo
e361bf429f 迁移:1515cef(fix:必要性修复) 2025-09-02 17:24:27 +08:00
Windpicker-owo
ac143a1201 迁移:a247be0(ref:彻底合并normal和focus,完全基于planner决定target message) 2025-09-02 16:15:33 +08:00
Windpicker-owo
255e3627b4 feat(chat): refactor logging and integrate no_reply system action
将日志前缀管理集中到context,新增willing_manager依赖,并把no_reply提升为系统级可用动作

- CycleProcessor 统一改从 context 获取 log_prefix
- HeartFChatting 引入 willing_manager
- ResponseHandler _send_response -> send_response 去下划线统一对外接口
- ActionPlanner 将 no_reply 添加至 current_available_actions
2025-09-01 22:41:42 +08:00
Windpicker-owo
9f49a453da 迁移:3804124,9e9e796
(feat:将no_reply内置、fix:优化reply,填补缺失值)
2025-09-01 21:12:55 +08:00
Windpicker-owo
581c2dcb80 fix 2025-09-01 15:43:51 +08:00
Windpicker-owo
366dadeb15 迁移:69a855d(feat:保存关键词到message数据库) 2025-09-01 15:24:43 +08:00
Windpicker-owo
9e64806d08 迁移:685c759 (feat:将no_reply功能移动到主循环中) 2025-09-01 14:18:49 +08:00
Windpicker-owo
d49ad0ad01 增加注释 2025-09-01 13:13:56 +08:00
Windpicker-owo
6e50eb5929 添加动作修改计时 2025-09-01 12:57:57 +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
dcb78cd9b8 feat(chat): 在主动思考时默认选取最新消息作为目标
当主动思考的 `target_message` 为 `None` 时,系统现在会自动获取聊天流中的最新一条消息作为默认的目标消息。

这确保了即使在没有明确指定目标消息的情况下,主动思考也能够针对最近的上下文执行动作,从而提高了交互的连续性和相关性。
2025-08-31 13:45:21 +08:00
minecraft1024a
d19f211461 refactor(context): 将能量值和睡眠压力状态持久化到数据库
将HFC上下文中的能量值(energy_value)和睡眠压力(sleep_pressure)的状态管理从本地文件存储(local_storage)迁移到主数据库。

这一重构的主要改动包括:
- 在`ChatStreams`数据库模型中添加`energy_value`和`sleep_pressure`字段。
- 更新`ChatStream`类,使其能够加载和保存这两个新字段。
- 移除`HfcContext`中原有的基于`local_storage`的加载和保存逻辑,改为直接通过`ChatStream`实例进行状态读写。
- 在`EnergyManager`中,每当能量或睡眠压力发生变化时,调用`save_context_state()`方法,确保状态能够实时持久化。

此举统一了应用的状态管理方式,提高了数据的可靠性和一致性,并为后续在多实例或分布式环境下部署应用奠定了基础。
2025-08-31 13:32:05 +08:00
minecraft1024a
65fee5458a refactor(energy): 移除is_sleeping方法对wakeup_manager的依赖
将`schedule_manager.is_sleeping`的调用从`is_sleeping(self.context.wakeup_manager)`修改为`is_sleeping()`,以解耦对`wakeup_manager`的直接依赖。

同时,在`napcat_adapter_plugin`中将`enable_plugin`的默认值修改为`False`。
2025-08-29 20:04:05 +08:00
minecraft1024a
35db4c5d91 refactor(schedule): 将睡眠状态管理逻辑重构并迁移到SleepManager
将原先分散在 `ScheduleManager` 中的睡眠状态机逻辑(包括状态判断、转换、持久化等)抽取并封装到一个新的 `SleepManager` 类中。

这次重构的主要目的如下:
- **职责分离**: `ScheduleManager` 的核心职责是管理日程的生成和查询,而睡眠状态的管理是一个独立的、复杂的逻辑单元。将其分离可以使两个类的职责更单一、代码更清晰。
- **可维护性**: 将所有与睡眠相关的状态和逻辑集中到 `SleepManager` 中,使得未来对睡眠功能的修改和扩展更加容易,减少了对 `ScheduleManager` 的影响。
- **代码简化**: `ScheduleManager` 不再需要管理内部的睡眠状态变量(如 `_current_state`, `_sleep_buffer_end_time` 等),而是通过委托 `sleep_manager` 实例来处理,简化了其内部实现。

相应的,`HfcContext` 中冗余的睡眠相关状态(如 `is_in_insomnia`)也被移除,统一由 `SleepManager` 管理。其他模块(如 `HeartFChatting`, `WakeUpManager`)对睡眠状态的调用也已更新为通过 `schedule_manager.sleep_manager` 或其代理方法进行。
2025-08-29 18:17:16 +08:00
minecraft1024a
41565eb144 refactor(schedule): 重构睡眠系统为状态机模型
将原有的睡眠、失眠、唤醒等分散的布尔标记逻辑重构为一个统一的睡眠状态机(SleepState),以提高代码的可读性、可维护性和可扩展性。

主要变更:
- 引入 `SleepState` 枚举,包含 `AWAKE`, `INSOMNIA`, `PREPARING_SLEEP`, `SLEEPING`, `WOKEN_UP` 状态。
- 在 `ScheduleManager` 中实现 `_update_sleep_state` 作为核心状态机,统一管理所有状态转换。
- 将原有的失眠判断逻辑从 `WakeUpManager` 移至 `ScheduleManager` 的状态机内部,与弹性睡眠决策合并,简化了模块职责。
- `heartFC_chat.py` 中的聊天循环现在直接查询 `ScheduleManager` 的当前状态,而不是处理多个独立的布尔值,使逻辑更清晰。
- 删除了 `WakeUpManager` 中与失眠相关的配置和方法,因为它现在由 `ScheduleManager` 统一管理。
- 删除了配置中已废弃的 `enable_is_sleep` 选项。
2025-08-29 17:40:22 +08:00
minecraft1024a
a485aaf4ad refactor(config): rename wakeup_system to sleep_system for clarity
This commit refactors the entire "wakeup system" to be named "sleep system". This change provides a more intuitive and accurate name for the functionality, which manages the AI's sleep cycles, sleep pressure, and related behaviors like insomnia and flexible sleep schedules.

The renaming has been applied consistently across all relevant files, including:
- Configuration models (`WakeUpSystemConfig` -> `SleepSystemConfig`)
- Configuration files (`bot_config_template.toml`)
- Core application logic that references these configurations.

Additionally, flexible sleep and pre-sleep notification settings have been moved from the `ScheduleConfig` to the new `SleepSystemConfig` to centralize all sleep-related parameters.
2025-08-29 13:56:24 +08:00
minecraft1024a
eb1feeeb0b refactor(cache): 重构工具缓存机制并优化LLM请求重试逻辑
将工具缓存的实现从`ToolExecutor`的装饰器模式重构为直接集成。缓存逻辑被移出`cache_manager.py`并整合进`ToolExecutor.execute_tool_call`方法中,简化了代码结构并使其更易于维护。

主要变更:
- 从`cache_manager.py`中移除了`wrap_tool_executor`函数。
- 在`tool_use.py`中,`execute_tool_call`现在包含完整的缓存检查和设置逻辑。
- 调整了`llm_models/utils_model.py`中的LLM请求逻辑,为模型生成的空回复或截断响应增加了内部重试机制,增强了稳定性。
- 清理了项目中未使用的导入和过时的文档文件,以保持代码库的整洁。
2025-08-28 20:10:32 +08:00
Windpicker-owo
2e2fd90497 feat(plugin-system): 添加事件触发和订阅的白名单机制
为事件系统添加权限控制功能,包括:
- 在BaseEvent中新增allowed_subscribers和allowed_triggers白名单字段
- 事件管理器触发和订阅时进行白名单验证
- 为所有系统默认事件设置仅允许SYSTEM插件触发
- 在所有事件触发调用处显式传递plugin_name="SYSTEM"参数

确保只有授权插件可以触发特定事件和订阅处理器,增强系统安全性。
2025-08-28 18:25:33 +08:00
tt-P607
829ff4cd4f feat(sleep): 实现睡眠唤醒与重新入睡机制
引入了更完善的睡眠唤醒和重新入睡逻辑,以处理在睡眠期间被消息打扰的情况。

- **唤醒机制**: 当在睡眠时间内收到消息并达到唤醒阈值时,角色会被唤醒并进入愤怒状态。唤醒后,将保持清醒状态处理消息,而不是立即重新入睡。
- **状态持久化**: 新增 `_is_woken_up` 状态到 `schedule_manager`,并将其持久化,以确保在重启后能记住唤醒状态。
- **重新入睡**: 如果角色被吵醒后,在配置的一段时间内(`re_sleep_delay_minutes`)没有收到新消息,系统将自动尝试重新进入睡眠状态,以模拟更自然的行为。
- **上下文同步**: 在唤醒时,`wakeup_manager` 会通知 `schedule_manager` 更新其内部状态,确保系统各模块之间的睡眠状态一致。
2025-08-28 08:48:19 +08:00
tt-P607
910b0db5d2 feat(core): 实现HFC及睡眠状态的持久化
将HFC上下文、唤醒管理器和日程管理器的核心状态保存到本地存储,并在程序启动时加载。这确保了角色的能量、睡眠压力、唤醒度、失眠状态和弹性睡眠进度在重启后能够恢复,增强了长期运行的连续性和稳定性。

主要变更:
- **HfcContext**: 增加状态的加载与保存逻辑,持久化能量、睡眠压力和失眠状态。
- **WakeupManager**: 增加状态的加载与保存逻辑,持久化唤醒度及愤怒状态。
- **ScheduleManager**: 增加弹性睡眠状态的加载与保存逻辑,持久化“准备入睡”及延迟睡眠的状态。
- **HeartFChatting**: 在主循环中调用保存HFC上下文状态的方法。
- 调整了失眠和唤醒逻辑,以更好地与持久化状态和弹性睡眠机制协同工作。
2025-08-28 02:50:02 +08:00
tt-P607
f34be9728a feat(schedule): 引入弹性睡眠与睡前通知机制
新增了弹性睡眠功能,使AI的入睡行为更加自然。AI现在会根据睡眠压力决定是否延迟入睡,而不是严格按日程表时间立即休眠。

主要更新包括:
- **弹性睡眠逻辑**: 在进入理论睡眠时间时,会有一段5-10分钟的准备缓冲期。如果睡眠压力低于阈值,AI会推迟入睡,以增加互动时间。
- **睡前通知**: 在决定入睡后,AI可以自动向指定群组发送晚安消息。
- **配置选项**: 在配置文件中增加了相关选项,允许用户启用/禁用这些功能,并自定义睡眠压力阈值、最大延迟时间、通知群组和提示词。
- **代码重构**: 对 `is_sleeping` 方法进行了重构,将其拆分为理论睡眠时间判断和核心弹性逻辑,提高了代码的可读性和可维护性。
2025-08-28 00:45:30 +08:00
minecraft1024a
ecf2df27fa feat(chat): implement sleep pressure and insomnia system
This commit introduces a new sleep pressure and insomnia system to simulate more realistic character behavior.

Key features include:
- **Sleep Pressure**: A new metric that accumulates with each action the bot takes and decreases during scheduled sleep times.
- **Insomnia Mechanic**: When a sleep period begins, the system checks the current sleep pressure. Low pressure can lead to a higher chance of "insomnia," causing the bot to stay awake. There is also a small chance for random insomnia.
- **Insomnia State**: During insomnia, the bot enters a special state for a configurable duration. It can trigger unique proactive thoughts related to being unable to sleep, and its mood is adjusted accordingly.
- **Configuration**: All parameters, such as insomnia probability, duration, and pressure thresholds, are fully configurable.
2025-08-27 21:02:21 +08:00
minecraft1024a
d06cfe3a36 refactor(schedule): 重构日程与月度计划管理模块
将 `schedule_manager` 和 `monthly_plan_manager` 从 `src/manager` 移动到 `src/schedule` 目录,以更好地组织与日程和计划相关的功能。

主要变更:
- 将 `schedule_manager` 和 `monthly_plan_manager` 移动到新的 `src/schedule` 目录。
- 更新了所有对这两个模块的导入路径,以反映新的文件位置。
- 删除了旧的 `src/manager` 目录下的模块文件。
- `monthly_plan_manager` 内部实现被重构,取代了原有的 `plan_generator.py`,简化了计划生成逻辑。
2025-08-27 19:46:01 +08:00
Furina-1013-create
8afb5b545d 炸飞了一点石山,将主动思考的id配置修改为分群聊/私聊的两个id配置然后增加了区分平台的功能
顺手改了一个注释的位置,它在的位置错了
应该在主动思考上面而不是下面的
2025-08-25 19:52:18 +08:00