diff --git a/README.md b/README.md index 3ee493c2..b07e7b13 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ ## 🔥 更新和安装 -**最新版本: v0.11.6** ([更新日志](changelogs/changelog.md)) +**最新版本: v0.12.0** ([更新日志](changelogs/changelog.md)) 可前往 [Release](https://github.com/MaiM-with-u/MaiBot/releases/) 页面下载最新版本 diff --git a/bot.py b/bot.py index 35e1ded1..612e0a17 100644 --- a/bot.py +++ b/bot.py @@ -59,6 +59,7 @@ def run_runner_process(): while True: logger.info(f"正在启动 {script_file}...") + logger.info("正在编译着色器:1/114514") # 启动子进程 (Worker) # 使用 sys.executable 确保使用相同的 Python 解释器 diff --git a/changelogs/changelog.md b/changelogs/changelog.md index 11545b58..f3bc52c4 100644 --- a/changelogs/changelog.md +++ b/changelogs/changelog.md @@ -1,6 +1,6 @@ # Changelog -## [0.12.0] - 2025-12-16 +## [0.12.0] - 2025-12-21 ### 🌟 重大更新 - 添加思考力度机制,动态控制回复时间和长度 - planner和replyer现在开启联动,更好的回复逻辑 @@ -9,12 +9,32 @@ - mcp插件作为内置插件加入,默认不启用 - 添加全局记忆配置项,现在可以选择让记忆为全局的 +### 🌟 WebUI 重大更新 +- **模型预设市场功能正式完善并发布**:现在可以将模型配置完整分享,分享按钮位于模型配置界面右上角 +- **全面安全加固**:为所有 WebUI API 和 WebSocket 端点添加身份认证保护,Cookie 添加 Secure 和 SameSite 属性,支持环境感知动态配置 +- **前端认证重构**:从 localStorage 迁移到 HttpOnly Cookie,新增 WebSocket 临时 token 认证机制,解决跨域开发环境下 Cookie 无法携带的问题 +- **增强插件配置管理**:支持原始 TOML 配置的加载和保存,前端支持查看和编辑插件配置文件源文件 + ### 细节功能更改 - 移除频率自动调整 - 移除情绪功能 - 优化记忆差许多呢超时设置 - 部分配置为0的bug +- 插件安装时可以主动选择克隆的分支 +- 首页中反馈问卷功能,可以提交反馈信息和建议信息 - 黑话和表达不再提取包含名称的内容 +- 模型界面支持编辑 extra params 额外字段 +- 模型界面中的任务分配子界面支持编辑慢请求检测阈值 +- 模型界面中支持对单个模型单独指定温度参数和 max tokens 参数 +- 首页所有数据卡片支持自动选择单位+显示详细信息功能 +- WebUI 聊天室表情包、图片、富文本消息支持 +- 麦麦适配器配置界面的工作模式支持折叠 +- WebUI 插件配置解析支持动态 list 表单 +- WebUI 插件配置中的动态 list 支持开关、滑块和下拉框类型 +- 在插件商场、插件配置详情界面增加了重启按钮 +- 加强安全性和隐私保护:添加登录接口速率限制,防止暴力破解攻击,收紧 CORS 配置(限制允许的 HTTP 方法和请求头),完善路径校验(validate_safe_path 防止目录穿越攻击),fetchWithAuth 支持 FormData 文件上传,新增 robots.txt 路由和 X-Robots-Tag 响应头防止搜索引擎索引,前端添加 meta noindex/nofollow 标签阻止爬虫收录 +- 修复并优化了聊天室、模型配置、日志查看器、黑话管理、WebUI 端口占用、配置向导、首页图表、聊天室消息重复、移动端日志不可见、模型提供商删除、主程序配置换行符、HTTP 警告横幅、重启界面、LPMM 配置、人物信息、插件端点安全认证、WebSocket token 等问题,提升整体稳定性与体验。 +- 完成主程序配置与模型配置界面重构、模型提供商与麦麦适配器配置重构(引入 TOML 校验)、WebSocket 认证逻辑抽取为共享模块统一 WS 端点,升级 React 到 19.2.1 并更新依赖,WebUI 配置与可视化全部迁移到主配置及模型配置中,优化配置更新提示、插件详情页面和路径安全校验,并增强模型与梦境等多项配置的可视化和自动检验。 ## [0.11.6] - 2025-12-2 ### 🌟 重大更新 diff --git a/plugins/hello_world_plugin/plugin.py b/plugins/hello_world_plugin/plugin.py index 3965ca97..ecf67cd9 100644 --- a/plugins/hello_world_plugin/plugin.py +++ b/plugins/hello_world_plugin/plugin.py @@ -1,5 +1,5 @@ import random -from typing import List, Tuple, Type, Any +from typing import List, Tuple, Type, Any, Optional from src.plugin_system import ( BasePlugin, register_plugin, @@ -17,6 +17,9 @@ from src.plugin_system import ( emoji_api, ) from src.config.config import global_config +from src.common.logger import get_logger + +logger = get_logger("hello_world_plugin") class CompareNumbersTool(BaseTool): @@ -217,6 +220,39 @@ class RandomEmojis(BaseCommand): return (True, "已发送随机表情包", True) if success else (False, "发送随机表情包失败", False) +class TestCommand(BaseCommand): + """响应/test命令""" + + command_name = "test" + command_description = "测试命令" + command_pattern = r"^/test$" + + async def execute(self) -> Tuple[bool, Optional[str], int]: + """执行测试命令""" + try: + from src.plugin_system.apis import generator_api + + reply_reason = "这是一条测试消息。" + logger.info(f"测试命令:{reply_reason}") + result_status, data = await generator_api.generate_reply( + chat_stream=self.message.chat_stream, + reply_reason=reply_reason, + enable_chinese_typo=False, + extra_info=f"{reply_reason}用于测试bot的功能是否正常。请你按设定的人设表达一句\"测试正常\"", + ) + if result_status: + # 发送生成的回复 + if data and data.reply_set and data.reply_set.reply_data: + for reply_seg in data.reply_set.reply_data: + send_data = reply_seg.content + await self.send_text(send_data, storage_message=True) + logger.info(f"已回复: {send_data}") + return True, "", 1 + except Exception as e: + logger.error(f"表达器生成失败:{e}") + return True, "", 1 + + # ===== 插件注册 ===== @@ -259,6 +295,7 @@ class HelloWorldPlugin(BasePlugin): (PrintMessage.get_handler_info(), PrintMessage), (ForwardMessages.get_handler_info(), ForwardMessages), (RandomEmojis.get_command_info(), RandomEmojis), + (TestCommand.get_command_info(), TestCommand), ] diff --git a/src/plugin_system/apis/generator_api.py b/src/plugin_system/apis/generator_api.py index 4f7b63fc..55242b2f 100644 --- a/src/plugin_system/apis/generator_api.py +++ b/src/plugin_system/apis/generator_api.py @@ -9,6 +9,7 @@ """ import traceback +import time from typing import Tuple, Any, Dict, List, Optional, TYPE_CHECKING from rich.traceback import install from src.common.logger import get_logger @@ -118,6 +119,10 @@ async def generate_reply( Tuple[bool, List[Tuple[str, Any]], Optional[str]]: (是否成功, 回复集合, 提示词) """ try: + # 如果 reply_time_point 未传入,设置为当前时间戳 + if reply_time_point is None: + reply_time_point = time.time() + # 获取回复器 logger.debug("[GeneratorAPI] 开始生成回复") replyer = get_replyer(chat_stream, chat_id, request_type=request_type) @@ -152,7 +157,7 @@ async def generate_reply( enable_tool=enable_tool, reply_message=reply_message, reply_reason=reply_reason, - unknown_words=unknown_words, + unknown_words=unknown_words, think_level=think_level, from_plugin=from_plugin, stream_id=chat_stream.stream_id if chat_stream else chat_id, diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 0731fd5b..c051c3c5 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -123,7 +123,7 @@ talk_value_rules = [ [memory] max_agent_iterations = 3 # 记忆思考深度(最低为1) -agent_timeout_seconds = 45.0 # 最长回忆时间(秒) +agent_timeout_seconds = 200.0 # 最长回忆时间(秒) enable_jargon_detection = true # 记忆检索过程中是否启用黑话识别 global_memory = false # 是否允许记忆检索进行全局查询