Skip to content

Commit 8b8118e

Browse files
authored
Merge pull request #1726 from Mai-with-u/dev
Dev
2 parents 072772c + 2848a6e commit 8b8118e

98 files changed

Lines changed: 8060 additions & 1741 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
# 配置文件修改
4444
如果你需要改动配置文件,不需要修改实际的bot_config.toml或者model_config.toml,只需要修改配置文件模版,并新增一个版本号即可,也不必要为配置改动创建测试文件。
45+
除非明确说明,否则不要擅自新增 ConfigUpgradeHook
4546

4647
# Webui规范
4748
涉及显示聊天流信息的,优先显示聊天流实际名称(群名称或 xxx的私聊),而不是session_id

changelogs/changelog.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,69 @@
1+
# 1.0.0-pre.24
2+
3+
## 用户感知功能侧
4+
5+
### WebUI / 人设与 Prompt
6+
- 新增人设生成器(测试功能)页面,可选择已配置模型,把文段、角色卡或人设说明生成可注入的麦麦人格、表达风格和聊天提示词配置块。
7+
- 人设生成器支持复制、下载、单块注入和全部注入,并在写入前校验目标字段,减少手动改 `bot_config.toml` 的成本。
8+
- 优化人设生成器提示词,加入固定默认人设参考和字段职责约束,降低生成模板化句式、过度攻击性表达或重复配置内容的概率。
9+
10+
### WebUI / 系统与缓存
11+
- 本地缓存管理增强,支持查看数据库、图片缓存、表情包缓存和日志占用,并展示数据库表大小统计。
12+
- 图片缓存与表情包缓存支持分页浏览、预览、按日期筛选、单个删除、按日期区间批量删除和保留最近若干天。
13+
- 日志缓存支持按目录查看和清理,便于只删除指定推理日志或运行日志。
14+
- Dashboard 升级到 1.2.0。
15+
16+
### WebUI / 资源管理
17+
- 表情包管理优化为“认识 / 不认识 / 据为己用 / 丢弃”状态视角,支持按状态和图片格式筛选。
18+
- 表情包上传、注册、删除与批量删除流程增强:重复上传可恢复已有记录并注册,删除会同步清理文件、缩略图缓存和运行时内存。
19+
- 表情包替换逻辑由删除旧文件改为取消注册旧表情,保留识别结果和文件;维护任务也会避免误删未注册的新文件。
20+
- 黑话管理支持手动创建、多聊天流归属和全局黑话,并展示真实聊天流名称、创建来源、创建时间和更新时间。
21+
- 旧版表达方式导入兼容缺少 `account_id` 的历史聊天流,历史数据更容易自动匹配到真实聊天流。
22+
23+
### WebUI / 推理过程
24+
- 推理过程页面突出 timing gate、planner、replyer 等主流程类型,其它类型改为更紧凑的辅助列表。
25+
- 推理过程搜索增强,支持搜索 replyer 完整输出、planner / timing gate 动作摘要、真实会话名和文件名。
26+
- 推理过程列表新增 replyer 回复预览与 planner / timing gate 动作预览,下拉会话列表会解析当前类型下的全部真实会话名称。
27+
28+
### Maisaka / 聊天上下文
29+
- 新增 Maisaka 中期聊天摘要:短期上下文被裁切时,可用 utils 模型把被移出的聊天记录压缩成可展开的复杂消息,保留话题脉络、参与人物、关键词和摘要。
30+
- 中期聊天摘要默认开启,并支持配置保留数量;摘要可被复杂消息工具展开,帮助长对话在压缩后继续恢复关键上下文。
31+
- 优化上下文裁切与工具历史折叠,折叠后的工具结果媒体消息会继续保留,避免图片类工具结果在后续上下文中丢失。
32+
- 展开转发消息等复杂消息时,会补充识别内部图片和表情包,减少复杂消息里图片内容不可见的问题。
33+
34+
### 图片与多模态
35+
- 入站图片新增过大图片处理,默认按视觉配置压缩超过限制的图片,也可配置为丢弃,降低超大图片带来的内存和请求压力。
36+
- 待识别图片在消息内容中保持为空,由渲染层展示占位,避免把占位文本误认为已经完成识图。
37+
- 优化 `send_image` 工具参数和说明,模型通过上下文消息或工具媒体索引发送图片时更稳定。
38+
39+
## 开发侧 / 修复 / SDK 与 API 改动
40+
41+
### Maisaka / Hook 与模型调用
42+
- 新增 `maisaka.replyer.before_request` Hook,插件可在 replyer 发起模型请求前修改任务名、指定模型、追加额外提示词或改写 `reply_tool_args`
43+
- `maisaka.replyer.after_response` Hook 补充实际任务名、指定模型名和 `reply_tool_args`,便于插件根据本次模型调用上下文做后处理。
44+
- LLM 编排器支持通过 `LLMGenerationOptions.model_name` 指定单次请求模型,指定模型失败时不再继续尝试其它模型。
45+
46+
### WebUI API
47+
- 新增人设生成器生成与注入接口,包含模型选择校验、JSON 输出解析、配置块规范化、TOML 预览和写入前配置校验。
48+
- 本地缓存 API 增加图片列表、图片预览、单文件删除、批量删除、日志目录列表、日志目录清理和数据库表大小统计能力。
49+
- 推理过程 API 增加动作摘要、完整 replyer 输出搜索、全部会话名称解析,并补充对应路由测试。
50+
51+
### 数据库与资源归属
52+
- 黑话数据库迁移新增创建时间、更新时间和创建来源字段,移除不再持久化的推理缓存字段,并补充索引。
53+
- 黑话接口从单聊天归属扩展为多聊天流与全局归属,手动黑话会替换作用域重叠的 AI 学习结果,避免重复记录。
54+
- 资源归属继续收敛到真实 `ChatSession.session_id`,WebUI 黑话、表达方式等链路减少自行计算 fallback 会话 ID 的情况。
55+
56+
### 表情包与图片处理
57+
- 表情包注册前内容审核逻辑复用到 WebUI 注册入口,封禁或取消注册会同步更新运行时内存。
58+
- 表情包维护流程补充测试,区分“曾被追踪但记录消失的孤儿文件”和“尚未注册的新文件”。
59+
- 图片接收链路新增压缩工具与测试覆盖,支持转发消息内图片的递归处理。
60+
61+
### 依赖、测试与清理
62+
- 主程序版本提升到 `1.0.0-pre.24`,配置版本提升到 `8.12.16`,Dashboard 依赖提升到 `1.2.0`,插件 SDK 依赖提升到 `2.5.1`
63+
- 补充 Maisaka 中期摘要、工具媒体保留、回复器 Hook、黑话迁移与路由、推理过程路由、图片压缩和表情包维护等测试。
64+
- 移除旧 prompt 构建和记忆检索实验脚本,补充配置升级 Hook 约束说明。
65+
66+
167
# 1.0.0-pre.23
268

369
## 用户感知功能侧

dashboard/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "maibot-dashboard",
33
"private": true,
4-
"version": "1.1.6",
4+
"version": "1.2.0",
55
"type": "module",
66
"main": "./out/main/index.js",
77
"scripts": {

dashboard/src/components/layout/constants.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Activity, Boxes, BrainCircuit, Database, FileSearch, FileText, Hash, Home, MessageSquare, Network, Package, ScrollText, Settings, Sliders, Smile } from 'lucide-react'
1+
import { Activity, Boxes, BrainCircuit, Database, FileSearch, FileText, Hash, Home, MessageSquare, Network, Package, ScrollText, Settings, Sliders, Smile, Sparkles } from 'lucide-react'
22

33
import type { MenuSection } from './types'
44

@@ -16,6 +16,7 @@ export const menuSections: MenuSection[] = [
1616
{ icon: FileText, label: 'sidebar.menu.botMainConfig', path: '/config/bot', searchDescription: 'search.items.botConfigDesc' },
1717
{ icon: Boxes, label: 'sidebar.menu.modelManagement', path: '/config/model', searchDescription: 'search.items.modelDesc', tourId: 'sidebar-model-management' },
1818
{ icon: ScrollText, label: 'sidebar.menu.promptManagement', path: '/config/prompts' },
19+
{ icon: Sparkles, label: 'sidebar.menu.promptGenerator', path: '/config/prompt-generator', searchDescription: 'search.items.promptGeneratorDesc' },
1920
],
2021
},
2122
{

dashboard/src/i18n/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"aiModelProvider": "AI Model Providers",
2929
"modelManagement": "Model Management",
3030
"promptManagement": "Prompt Management",
31+
"promptGenerator": "Persona Generator (Experimental)",
3132
"adapterConfig": "Adapter Config",
3233
"emojiManagement": "Emoji Management",
3334
"expressionManagement": "Expression Management",
@@ -788,6 +789,7 @@
788789
"modelProviderDesc": "Configure model providers",
789790
"model": "Model Config",
790791
"modelDesc": "Configure model parameters",
792+
"promptGeneratorDesc": "Generate injectable persona config blocks from text",
791793
"emoji": "Emoji Management",
792794
"emojiDesc": "Manage bot emoji",
793795
"expression": "Expression Management",

dashboard/src/i18n/locales/ja.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"aiModelProvider": "AIモデルプロバイダー",
2929
"modelManagement": "モデル管理",
3030
"promptManagement": "Prompt 管理",
31+
"promptGenerator": "人格生成器(テスト機能)",
3132
"adapterConfig": "アダプター設定",
3233
"emojiManagement": "絵文字管理",
3334
"expressionManagement": "表現管理",
@@ -788,6 +789,7 @@
788789
"modelProviderDesc": "モデルプロバイダーを設定",
789790
"model": "モデル設定",
790791
"modelDesc": "モデルパラメーターを設定",
792+
"promptGeneratorDesc": "文章から注入可能な人格設定ブロックを生成",
791793
"emoji": "絵文字管理",
792794
"emojiDesc": "ボットの絵文字を管理",
793795
"expression": "表現管理",

dashboard/src/i18n/locales/ko.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"aiModelProvider": "AI 모델 공급자",
2929
"modelManagement": "모델 관리",
3030
"promptManagement": "Prompt 관리",
31+
"promptGenerator": "페르소나 생성기 (테스트 기능)",
3132
"adapterConfig": "어댑터 설정",
3233
"emojiManagement": "이모티콘 관리",
3334
"expressionManagement": "표현 관리",
@@ -780,6 +781,7 @@
780781
"modelProviderDesc": "모델 공급자 구성",
781782
"model": "모델 설정",
782783
"modelDesc": "모델 매개변수 구성",
784+
"promptGeneratorDesc": "문장에서 주입 가능한 페르소나 설정 블록 생성",
783785
"emoji": "이모티콘 관리",
784786
"emojiDesc": "속 이모티콘 관리",
785787
"expression": "표현 관리",

dashboard/src/i18n/locales/zh.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"aiModelProvider": "模型厂商设置",
2929
"modelManagement": "模型管理",
3030
"promptManagement": "Prompt 管理",
31+
"promptGenerator": "人设生成器(测试功能)",
3132
"adapterConfig": "麦麦适配器配置",
3233
"emojiManagement": "表情包",
3334
"expressionManagement": "表达方式",
@@ -788,6 +789,7 @@
788789
"modelProviderDesc": "配置模型提供商",
789790
"model": "麦麦模型配置",
790791
"modelDesc": "配置模型参数",
792+
"promptGeneratorDesc": "将文段或人设生成可注入配置的人设块",
791793
"emoji": "表情包",
792794
"emojiDesc": "管理麦麦的表情包",
793795
"expression": "表达方式",

dashboard/src/lib/emoji-api.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type {
99
EmojiUpdateRequest,
1010
EmojiUpdateResponse,
1111
EmojiDeleteResponse,
12+
EmojiStatus,
1213
EmojiStatsResponse,
1314
} from '@/types/emoji'
1415

@@ -23,6 +24,7 @@ export async function getEmojiList(params: {
2324
search?: string
2425
is_registered?: boolean
2526
is_banned?: boolean
27+
status?: EmojiStatus
2628
format?: string
2729
sort_by?: string
2830
sort_order?: 'asc' | 'desc'
@@ -33,6 +35,7 @@ export async function getEmojiList(params: {
3335
if (params.search) query.append('search', params.search)
3436
if (params.is_registered !== undefined) query.append('is_registered', params.is_registered.toString())
3537
if (params.is_banned !== undefined) query.append('is_banned', params.is_banned.toString())
38+
if (params.status) query.append('status', params.status)
3639
if (params.format) query.append('format', params.format)
3740
if (params.sort_by) query.append('sort_by', params.sort_by)
3841
if (params.sort_order) query.append('sort_order', params.sort_order)
@@ -281,4 +284,4 @@ export async function clearAllThumbnailCache(): Promise<ThumbnailCleanupResponse
281284
}
282285

283286
return response.json()
284-
}
287+
}

dashboard/src/lib/jargon-api.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,13 @@ const API_BASE = '/api/webui/jargon'
1919
/**
2020
* 获取聊天列表(有黑话记录的聊天)
2121
*/
22-
export async function getJargonChatList(): Promise<JargonChatListResponse> {
23-
const response = await fetchWithAuth(`${API_BASE}/chats`, {})
22+
export async function getJargonChatList(params: { include_empty?: boolean } = {}): Promise<JargonChatListResponse> {
23+
const queryParams = new URLSearchParams()
24+
if (params.include_empty !== undefined) {
25+
queryParams.append('include_empty', params.include_empty.toString())
26+
}
27+
const queryString = queryParams.toString()
28+
const response = await fetchWithAuth(`${API_BASE}/chats${queryString ? `?${queryString}` : ''}`, {})
2429

2530
if (!response.ok) {
2631
const error = await response.json()
@@ -37,7 +42,7 @@ export async function getJargonList(params: {
3742
page?: number
3843
page_size?: number
3944
search?: string
40-
chat_id?: string
45+
session_id?: string
4146
is_jargon?: boolean | null
4247
is_global?: boolean
4348
}): Promise<JargonListResponse> {
@@ -46,7 +51,7 @@ export async function getJargonList(params: {
4651
if (params.page) queryParams.append('page', params.page.toString())
4752
if (params.page_size) queryParams.append('page_size', params.page_size.toString())
4853
if (params.search) queryParams.append('search', params.search)
49-
if (params.chat_id) queryParams.append('chat_id', params.chat_id)
54+
if (params.session_id) queryParams.append('session_id', params.session_id)
5055
if (params.is_jargon !== undefined && params.is_jargon !== null) {
5156
queryParams.append('is_jargon', params.is_jargon.toString())
5257
}

0 commit comments

Comments
 (0)