Skip to content

Dev#1640

Merged
SengokuCola merged 16 commits into
mainfrom
dev
May 5, 2026
Merged

Dev#1640
SengokuCola merged 16 commits into
mainfrom
dev

Conversation

@SengokuCola
Copy link
Copy Markdown
Collaborator

@SengokuCola SengokuCola commented May 5, 2026

  • ✅ 接受:与main直接相关的Bug修复:提交到dev分支
  • 新增功能类pr需要经过issue提前讨论,否则不会被合并
  • 🌐 i18n 提醒:除 bootstrap 或紧急修复外,请不要把非 zh-CN 目标翻译作为常规 GitHub 编辑面;常规翻译以 Crowdin -> l10n_* PR 回流为准,详见 docs/i18n.md

请填写以下内容

(删除掉中括号内的空格,并替换为小写的x

    • main 分支 禁止修改,请确认本次提交的分支 不是 main 分支
    • 我确认我阅读了贡献指南
    • 本次更新类型为:BUG修复
    • 本次更新类型为:功能新增
    • 本次更新是否经过测试
    • 如果本次修改涉及 src/A_memorix,我确认已阅读 src/A_memorix/MODIFICATION_POLICY.md,不涉及则无需勾选
  1. 请填写破坏性更新的具体内容(如有):
  2. 请简要说明本次更新的内容和目的:

其他信息

  • 关联 Issue:Close #
  • 截图/GIF
  • 附加信息:

Summary by CodeRabbit

发布说明

  • 新功能

    • 新增日志配置部分和重启通知
    • 模型新增视觉能力、缓存计费等高级配置选项
    • 提示词支持高级过滤和元数据展示
    • 表达方式、聊天等配置项新增可折叠UI编辑器
    • 数值输入自动解析和规范化处理
  • 优化改进

    • 改进数据库消息字段结构
    • 优化日志级别过滤为"最小级别"模式
    • 完善插件来源标记(市场/本地)
    • 改进自动保存快照跟踪机制
  • 更新

    • 更新仪表板版本至 1.0.5
    • 更新提示词多语言元数据配置
    • 删除部分废弃知识提取相关提示词

SengokuCola and others added 16 commits May 4, 2026 22:52
…description

fix: 修复表情包替换时emoji_replace prompt模板缺失description参数
Treat blank OpenAI-compatible tool call arguments as an empty dict so parameterless tools such as finish can execute with providers that return an empty string. Also trim model identifiers during config normalization to avoid leading whitespace leaking into requests and snapshots.
fix: 修复工具空参数解析失败,并规范化模型标识符
@SengokuCola SengokuCola merged commit 55deb36 into main May 5, 2026
1 of 4 checks passed
@github-project-automation github-project-automation Bot moved this to 已完成 in MaiM to the GATE May 5, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 5, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5a70b38e-e82b-4c5f-9e71-4a3a8a7354d8

📥 Commits

Reviewing files that changed from the base of the PR and between e830978 and ab21f97.

⛔ Files ignored due to path filters (2)
  • dashboard/package-lock.json is excluded by !**/package-lock.json
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (119)
  • .dockerignore
  • AGENTS.md
  • dashboard/package.json
  • dashboard/src/components/dynamic-form/DynamicConfigForm.tsx
  • dashboard/src/components/dynamic-form/DynamicField.tsx
  • dashboard/src/components/dynamic-form/__tests__/DynamicField.test.tsx
  • dashboard/src/components/expression-reviewer.tsx
  • dashboard/src/i18n/locales/zh.json
  • dashboard/src/lib/config-api.ts
  • dashboard/src/lib/expression-api.ts
  • dashboard/src/lib/field-hooks.ts
  • dashboard/src/lib/plugin-api/marketplace.ts
  • dashboard/src/lib/prompt-api.ts
  • dashboard/src/lib/version.ts
  • dashboard/src/routes/config/bot.tsx
  • dashboard/src/routes/config/bot/hooks/ListItemEditorHookFactory.tsx
  • dashboard/src/routes/config/bot/hooks/complexFieldHooks.tsx
  • dashboard/src/routes/config/bot/hooks/index.ts
  • dashboard/src/routes/config/bot/hooks/useAutoSave.ts
  • dashboard/src/routes/config/bot/sections/BotInfoSection.tsx
  • dashboard/src/routes/config/bot/sections/FeaturesSection.tsx
  • dashboard/src/routes/config/bot/types.ts
  • dashboard/src/routes/config/model.tsx
  • dashboard/src/routes/config/model/components/ModelCardList.tsx
  • dashboard/src/routes/config/model/components/ModelTable.tsx
  • dashboard/src/routes/config/model/components/TaskConfigCard.tsx
  • dashboard/src/routes/config/model/constants.ts
  • dashboard/src/routes/config/model/hooks/useModelAutoSave.ts
  • dashboard/src/routes/config/model/hooks/useModelTour.ts
  • dashboard/src/routes/config/model/types.ts
  • dashboard/src/routes/config/modelProvider/index.tsx
  • dashboard/src/routes/config/prompts.tsx
  • dashboard/src/routes/logs.tsx
  • dashboard/src/routes/mcp-settings.tsx
  • dashboard/src/routes/plugins/MarketplaceTab.tsx
  • dashboard/src/routes/plugins/index.tsx
  • dashboard/src/routes/resource/emoji/index.tsx
  • dashboard/src/routes/resource/expression/ExpressionDialogs.tsx
  • dashboard/src/routes/resource/expression/ExpressionList.tsx
  • dashboard/src/routes/resource/expression/index.tsx
  • dashboard/src/routes/resource/jargon/index.tsx
  • dashboard/src/routes/setup/StepForms.tsx
  • dashboard/src/routes/setup/api.ts
  • dashboard/src/routes/setup/index.tsx
  • dashboard/src/routes/setup/types.ts
  • dashboard/src/types/config-schema.ts
  • dashboard/src/types/expression.ts
  • dashboard/src/types/plugin.ts
  • docker-compose.yml
  • locales/zh-CN/startup.json
  • prompts/en-US/.meta.toml
  • prompts/en-US/emoji_content_filtration.prompt
  • prompts/en-US/hippo_topic_analysis.prompt
  • prompts/en-US/hippo_topic_summary.prompt
  • prompts/en-US/maidairy_knowledge_category.prompt
  • prompts/en-US/maidairy_knowledge_extract.prompt
  • prompts/en-US/maidairy_knowledge_retrieve.prompt
  • prompts/en-US/maisaka_replyer.prompt
  • prompts/ja-JP/.meta.toml
  • prompts/ja-JP/emoji_content_filtration.prompt
  • prompts/ja-JP/hippo_topic_analysis.prompt
  • prompts/ja-JP/hippo_topic_summary.prompt
  • prompts/ja-JP/maidairy_knowledge_category.prompt
  • prompts/ja-JP/maidairy_knowledge_extract.prompt
  • prompts/ja-JP/maidairy_knowledge_retrieve.prompt
  • prompts/ja-JP/maisaka_replyer.prompt
  • prompts/zh-CN/.meta.toml
  • prompts/zh-CN/emoji_content_filtration.prompt
  • prompts/zh-CN/hippo_topic_analysis.prompt
  • prompts/zh-CN/hippo_topic_summary.prompt
  • prompts/zh-CN/maidairy_knowledge_category.prompt
  • prompts/zh-CN/maidairy_knowledge_extract.prompt
  • prompts/zh-CN/maidairy_knowledge_retrieve.prompt
  • pyproject.toml
  • pytests/A_memorix_test/test_chat_summary_writeback_integration.py
  • pytests/common_test/test_database_migration_foundation.py
  • pytests/config_test/test_model_info_normalization.py
  • pytests/image_sys_test/emoji_manager_test.py
  • pytests/prompt_test/test_prompt_i18n.py
  • pytests/test_maisaka_message_adapter.py
  • pytests/test_napcat_adapter_sdk.py
  • pytests/test_openai_client_toolless_request.py
  • pytests/test_plugin_message_utils_runtime.py
  • pytests/test_send_service.py
  • pytests/webui/test_expression_routes.py
  • requirements.txt
  • scripts/build_io_pairs.py
  • src/chat/message_receive/chat_manager.py
  • src/chat/replyer/maisaka_generator_base.py
  • src/chat/utils/utils.py
  • src/cli/maisaka_cli.py
  • src/common/data_models/mai_message_data_model.py
  • src/common/database/database_model.py
  • src/common/database/migrations/builtin.py
  • src/common/database/migrations/legacy_v1_to_v2.py
  • src/common/database/migrations/v3_to_v4.py
  • src/common/logger.py
  • src/common/prompt_i18n.py
  • src/config/config.py
  • src/config/config_base.py
  • src/config/legacy_migration.py
  • src/config/model_configs.py
  • src/config/official_configs.py
  • src/emoji_system/emoji_manager.py
  • src/llm_models/model_client/openai_client.py
  • src/maisaka/builtin_tool/reply.py
  • src/maisaka/builtin_tool/send_emoji.py
  • src/maisaka/reasoning_engine.py
  • src/plugin_runtime/capabilities/core.py
  • src/plugin_runtime/capabilities/data.py
  • src/plugin_runtime/host/message_utils.py
  • src/prompt/prompt_manager.py
  • src/services/message_service.py
  • src/services/send_service.py
  • src/webui/app.py
  • src/webui/config_schema.py
  • src/webui/routers/chat/service.py
  • src/webui/routers/config.py
  • src/webui/routers/expression.py

概览

该 PR 包含大规模的系统演进,涉及仪表板 UI 框架重构、消息数据模型迁移(移除 display_message 字段)、提示词系统元数据化、表达式审核系统增强,以及配置系统的版本更新和类型调整。

变更

消息模型与数据库迁移

层级 / 文件 摘要
数据模型定义
src/common/database/database_model.py, src/common/data_models/mai_message_data_model.py
MessagesMaiMessage 移除 display_message 字段;保留 processed_plain_textraw_message
数据库迁移
src/common/database/migrations/builtin.py, src/common/database/migrations/v3_to_v4.py
引入 v3→v4 迁移步骤,将 mai_messages 表重建以移除 display_message 列;更新版本检测器链。
遗留迁移更新
src/common/database/migrations/legacy_v1_to_v2.py
移除从遗留字段(interest_value, key_words, key_words_lite)到 additional_config 的映射。
消息服务/CLI/序列化
src/services/message_service.py, src/cli/maisaka_cli.py, scripts/build_io_pairs.py
更新所有消息构造和规范化代码,使用 processed_plain_text 代替 display_message;移除关联的兼容性回退逻辑。
测试更新
pytests/test_maisaka_message_adapter.py, pytests/test_napcat_adapter_sdk.py, pytests/test_plugin_message_utils_runtime.py, pytests/test_send_service.py, 等
更新消息构造和断言,改用 processed_plain_text;更新数据库迁移测试预期。

发送服务与消息处理管道重构

层级 / 文件 摘要
发送服务核心
src/services/send_service.py
_build_outbound_session_message 改为接收 processed_plain_text 参数代替 display_message;更新 custom_to_stream / custom_reply_set_to_stream 公共签名;修改发出日志预览生成逻辑。
消息序列化
src/plugin_runtime/host/message_utils.py
新增 include_binary_data 标志控制二进制数据序列化;移除 display_message 的反序列化处理;新增 _binary_component_to_base64 助手处理持久化媒体。
能力层
src/plugin_runtime/capabilities/core.py, src/plugin_runtime/capabilities/data.py
插件能力方法改为传递 processed_plain_text 代替 display_message;新增 include_binary_data 参数控制消息序列化。
内置工具
src/maisaka/builtin_tool/reply.py
更新内置回复工具以传递 processed_plain_text
Chat 历史
src/webui/routers/chat/service.py
消息历史序列化改为仅使用 processed_plain_text(不再回退到 display_message)。

提示词系统元数据化与演进

层级 / 文件 摘要
元数据数据结构
src/common/prompt_i18n.py
新增 PromptMetadataPromptTemplateInfo 数据类;实现 .meta.toml / .meta.json 元数据加载与合并逻辑;list_prompt_templates() 现返回 dict[str, PromptTemplateInfo] 包含路径和元数据。
提示词元数据文件
prompts/en-US/.meta.toml, prompts/ja-JP/.meta.toml, prompts/zh-CN/.meta.toml
为多个语言区域创建新的 .meta.toml 文件,定义提示模板的 display_nameadvanced 标志和 description
模板内容调整
prompts/*/emoji_content_filtration.prompt, prompts/*/hippo_topic_*.prompt, prompts/*/maidairy_knowledge_*.prompt, prompts/*/maisaka_replyer.prompt
更新或移除多个提示模板:固定 emoji 过滤条件、移除 hippo 话题分析/总结、移除 maidairy 知识提取、更新 replyer 自消息识别指引。
API 与管理层
src/prompt/prompt_manager.py, dashboard/src/lib/prompt-api.ts, src/webui/routers/config.py
更新提示词 API 与管理器以处理新的元数据结构;WebUI 配置路由新增元数据字段到 PromptFileInfo 响应。

仪表板 UI 框架与表单组件重构

层级 / 文件 摘要
配置架构类型
dashboard/src/types/config-schema.ts
扩展 FieldSchema 新增 'x-option-descriptions''x-row''x-textarea-min-height''x-textarea-rows' 元数据;从 ConfigSchema 移除 uiMergeChildren 字段。
动态字段组件
dashboard/src/components/dynamic-form/DynamicField.tsx
新增数值解析/规范化逻辑;实现字段级数值类型强制转换(slider、number、integer 输入);新增选项描述悬停 UI;扩展 textarea 配置(行数、最小高度);字段描述条件渲染。
动态表单结构
dashboard/src/components/dynamic-form/DynamicConfigForm.tsx
移除 uiMergeChildren 相关的字段合并逻辑;实现基于 x-row 的响应式网格布局;字段钩子组件新增 parentValues prop 传递;取消嵌套架构的自动合并。
列表项编辑器工厂
dashboard/src/routes/config/bot/hooks/ListItemEditorHookFactory.tsx
扩展 ListItemEditorOptions 支持字段行布局、架构覆盖、按钮放置、折叠行为;实现灵活的行分组和字段级架构定制。
复杂字段钩子
dashboard/src/routes/config/bot/hooks/complexFieldHooks.tsx
新增 ChatPromptsHookBotPlatformsHook 导出;增强 ChatTalkValueRulesHookExpressionLearningListHook 支持行布局和折叠;替换 ExpressionGroupsHook 为自定义 UI 组件(移除 JSON 编辑器)。
字段钩子类型
dashboard/src/lib/field-hooks.ts
FieldHookComponentProps 新增可选 parentValues 属性传递父级上下文值。
表单与自动保存
dashboard/src/routes/config/bot/hooks/useAutoSave.ts, dashboard/src/routes/config/model/hooks/useModelAutoSave.ts
引入快照比较机制以检测真实变更;仅在内容实际改变时触发自动保存(避免无关状态变化触发保存)。
组件与特性更新
dashboard/src/routes/config/bot.tsx, dashboard/src/routes/config/model.tsx, dashboard/src/routes/config/bot/sections/*, dashboard/src/routes/config/model/components/*
添加日志配置部分;实现配置重载与重启提示持久化;新增高级设置切换与折叠标签组;添加模型可视化字段;更新部分标题文案。
测试
dashboard/src/components/dynamic-form/__tests__/DynamicField.test.tsx
新增数值解析、slider 处理、numeric onChange 的测试用例。

配置与模型系统更新

层级 / 文件 摘要
配置版本
src/config/config.py
更新 MMC_VERSIONCONFIG_VERSIONMODEL_CONFIG_VERSION 至新版本号。
配置基类
src/config/config_base.py
移除 ConfigBase.__ui_merge_children__ 类变量。
模型配置
src/config/model_configs.py
ModelInfo.model_post_init 新增 model_identifier 空白符剔除;更新 TaskConfig.slow_thresholdModelTaskConfig.voice 为高级字段;重排字段声明。
官方配置
src/config/official_configs.py
新增 RULE_TYPE_OPTION_DESCRIPTIONSVISUAL_MODE_OPTION_DESCRIPTIONS;更新多个配置类的 UI 元数据(标签、图标、父级);为多个 rule_type 和选项字段添加选项描述;新增 regex 和规则验证逻辑。
遗留迁移
src/config/legacy_migration.py
更新 bot.qq_account 迁移:整数转字符串代替数字→0 转换。
设置向导
dashboard/src/routes/setup/*, dashboard/src/routes/setup/types.ts
BotBasicConfig.qq_accountnumber 改为 string;更新验证和数据初始化逻辑;重构 QQ 账号处理为字符串操作。

表达式审核系统增强

层级 / 文件 摘要
类型定义
dashboard/src/types/expression.ts, src/webui/routers/expression.py
Expression 接口新增可选 chat_name 字段;ExpressionResponse 新增 chat_name 返回字段。
聊天名称解析
src/webui/routers/expression.py
新增 get_chat_name_from_latest_messageget_chat_name_from_session_record 助手函数;增强 get_chat_name 支持基于 session 的多源解析。
审核列表 API
dashboard/src/lib/expression-api.ts
getReviewList 新增 orderexclude_ids 可选参数支持排序和排除特定表达方式。
快速审核模式
dashboard/src/components/expression-reviewer.tsx
维护 quickExpressionsRef 以在加载列表时排除已加载项;统一 getChatName 为接收完整 Expression 对象。
聊天列表与显示
dashboard/src/routes/resource/expression/ExpressionDialogs.tsx, dashboard/src/routes/resource/expression/ExpressionList.tsx
更新 getChatName 帮助函数签名和实现;从 Expression 对象而非 chat_id 解析聊天名称。
审核接口
src/webui/routers/expression.py
新增 apply_review_filtercount_expressions 函数统一审核过滤逻辑;/review/list 支持 orderexclude_ids 参数;批量审核移除冲突检查,直接设置审核状态。
测试
pytests/webui/test_expression_routes.py
更新表达式路由测试:改用依赖注入替代 mock 鉴权;更新 SQL 插入和断言以匹配新架构;扩展批量审核覆盖。

配置 API 与 WebUI 路由增强

层级 / 文件 摘要
配置 API
dashboard/src/lib/config-api.ts
所有配置读取操作(schema、config)新增 cache: 'no-store' 选项防止浏览器缓存。
数值类型强制转换
src/webui/routers/config.py
新增递归数值强制转换助手处理字符串→数字类型转换;配置保存前应用类型强制转换。
提示词 API 响应
src/webui/routers/config.py, dashboard/src/lib/prompt-api.ts
PromptFileInfo 新增 display_nameadvanceddescription 字段;列表端点从元数据文件填充这些字段。

插件与资源管理

层级 / 文件 摘要
插件源标记
src/plugin_runtime/capabilities/data.py, dashboard/src/lib/plugin-api/marketplace.ts, dashboard/src/routes/plugins/index.tsx, dashboard/src/routes/plugins/MarketplaceTab.tsx, dashboard/src/types/plugin.ts
PluginInfo 新增可选 source 字段标记插件来源('market' 或 'local');本地插件标记为 'local';市场标签页排除本地插件。
表情包管理
dashboard/src/routes/resource/emoji/index.tsx, dashboard/src/routes/config/bot/sections/FeaturesSection.tsx, dashboard/src/routes/config/bot/types.ts, src/emoji_system/emoji_manager.py
表情包页面默认显示已注册状态;移除 filtration_prompt 字段;更新 emoji 管理器路径计算和文件追踪机制。
提示词高级过滤
dashboard/src/routes/config/prompts.tsx
新增高级提示词可见性切换;搜索过滤改为作用于当前可见集合;文件列表显示 display_name、高级徽章、描述。
资源页面标题简化
dashboard/src/i18n/locales/zh.json, dashboard/src/routes/resource/expression/index.tsx, dashboard/src/routes/resource/jargon/index.tsx
简化菜单标题:移除"管理"后缀(如"表情包管理"→"表情包")。

基础设施与支持性变更

层级 / 文件 摘要
Docker 配置
.dockerignore, docker-compose.yml
添加 depends-data 目录的取反规则以重新包含;新增 depends-data 只读卷挂载。
依赖版本
pyproject.toml, requirements.txt, dashboard/package.json, dashboard/src/lib/version.ts
更新 maibot-dashboard 版本 ≥1.0.5;更新 dashboard 包版本 1.0.5;更新 APP_VERSION 至 1.0.5。
日志级别
src/common/logger.py, src/webui/app.py, src/chat/message_receive/chat_manager.py
多个启动日志从 info 降级为 debug;简化初始化日志输出。
启动消息
locales/zh-CN/startup.json
简化初始化完成提示;统一脚本启动消息;更新 WebUI token 标签文案。
工具与配置
AGENTS.md, src/maisaka/reasoning_engine.py, src/llm_models/model_client/openai_client.py, src/maisaka/builtin_tool/send_emoji.py, src/chat/replyer/maisaka_generator_base.py, src/chat/utils/utils.py
移除 TIMING_GATE_MAX_TOKENS 硬编码;增强 OpenAI 工具解析空参数处理;新增 VLM 配置检查;实现回复风格概率选择;移除 jieba 依赖。
测试
pytests/common_test/test_database_migration_foundation.py, pytests/config_test/test_model_info_normalization.py, pytests/image_sys_test/emoji_manager_test.py, pytests/prompt_test/test_prompt_i18n.py, pytests/test_openai_client_toolless_request.py
更新迁移测试预期;新增模型标识符规范化测试;更新 emoji 测试移除 filtration_prompt;扩展提示词元数据测试;新增 OpenAI 工具参数测试。

🎯 4 (Complex) | ⏱️ ~75 minutes

相关 PR

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

This was referenced May 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants