Skip to content

轻语v0.8.9

Choose a tag to compare

@GUAPIXIA GUAPIXIA released this 28 Jul 19:29
· 426 commits to main since this release

夸克网盘链接
https://pan.quark.cn/s/a9853284d260

更新日志

[0.8.9] - 2026-07-29

新功能

  • 字体自定义功能:
    • 新增对话字体选择功能,支持 6 种内置字体(系统默认、Arial、微软雅黑、宋体、黑体、楷体),每种字体均带预览效果
    • 支持用户上传自定义字体文件(TTF/OTF 格式),字体文件存储在本地用户数据目录,上传时校验文件格式(magic number)和大小限制(10MB)
    • 字体变更通过 CSS font-display: swap 异步加载,避免页面卡顿;切换后所有对话历史记录实时生效
    • 设置页新增字体管理区域:上传、预览、应用、删除自定义字体
  • 群聊引用回复:
    • 群聊消息支持引用回复,hover 消息显示回复按钮,点击后输入框显示引用预览条
    • 发送消息时引用块显示在气泡顶部,含被引用消息的角色名和内容预览
  • 群聊 @提及高亮:
    • 用户消息中 @角色名 自动检测并以高亮样式显示(accent 色背景 + 圆角)
    • 基于群成员名动态匹配,避免误匹配邮箱/URL 中的 @ 符号
  • 群聊用户消息发送状态:
    • 用户消息发送时显示「发送中」旋转图标,AI 回复完成后变为「已发送」勾选图标
  • 群聊消息气泡不透明度调节:
    • 群聊设置面板新增「气泡不透明度」滑块(0%-100%),支持拖动实时预览、松手保存
    • 角色气泡通过 color-mix 动态混合背景色与透明度,配合聊天背景使用效果更佳
    • 用户气泡保持固定样式不受影响
  • 单元测试框架:
    • 引入 Vitest + @testing-library/react + jsdom 测试框架
    • 编写 128 个单元测试,覆盖核心工具函数(对话解析器、消息后处理、默认值)、设置 Store、群聊 Store 和群聊消息组件

改进功能

  • 群聊消息 UI 全面对齐单聊:
    • 布局重构:新增 mx-auto 居中容器,使用 settings.messageWidth 限制最大宽度,消息不再紧贴左边缘
    • 头像升级:添加渐变背景(bg-gradient-to-br)和环形光效(ring-2),与单聊 MessageBubble 风格统一
    • 名称行升级:字号从 text-[10px] 提升至 text-xs,名称使用 font-medium text-tavern-text-soft,时间和发送状态移至头部行
    • 气泡升级:内边距从 px-4 py-2.5 增大为 px-5 py-3.5,添加阴影,支持 settings.bubbleStyle 圆角设置
    • 用户气泡使用与单聊相同的暖色渐变(from-amber-100 to-orange-50),角色气泡保留彩色左边框 + shadow-sm
    • 消息间距改用 settings.messageSpacing 内联样式
    • 新增 .mention-highlight 和 .reply-quote CSS 样式类
  • 群聊背景层 z-index 修复:
    • 背景层添加 z-0,顶栏/消息区/输入区/成员栏添加 relative z-10,修复聊天背景遮盖菜单栏的问题
  • 角色卡页面性能优化:
    • CharacterCard 包裹 React.memo,配合 useCallback 稳定回调引用,避免父组件重渲染时所有卡片跟着重渲染
    • 搜索输入使用 useDeferredValue 防抖,输入时不再逐字符触发全量过滤
    • 封面图片添加 loading="lazy" 懒加载,视口外图片延迟加载减少初始解码压力
    • CharacterCard 的 store 订阅从全量解构改为 4 个独立选择器,避免导入进度等无关状态变更触发卡片重渲染
    • 尺寸配置对象 SIZE_CONFIG 从组件内部提取为模块级常量,减少每次渲染的对象创建
  • 群聊默认预设:
    • 新建群聊默认应用「默认通用」内置预设,无需手动在设置面板中选择
  • 群聊上下文与世界书引用优化:
    • 世界书扫描文本加入角色名前缀(【角色名】内容),以角色名为关键词的世界书条目现在可被正确触发
    • 后历史指令(postHistoryInstructions)纳入 token 预算裁剪计算,避免裁剪后注入导致实际上下文超出 maxContext

已知问题

  • 自定义字体仅当前设备可用,不随角色卡导出(与现有纯本地存储策略一致)
  • 内置字体(SimSun/SimHei/KaiTi)依赖系统已安装,若用户系统未安装则浏览器自动 fallback

[0.8.8] - 2026-07-28

改进功能

  • 预设上下文长度跟随模型:所有内置预设的 maxContext 改为 0(跟随模型默认),不再硬编码 8192/16384 限制模型实际能力。用户选 GPT-4o 即可用 128K 上下文,选 Claude 即可用 200K,预设不再拖模型后腿
  • 越狱预设输出长度提升:越狱-温和/标准/强力的 maxTokens 从 1024 提升到 2048,修复 Claude 思考模型(thinking budget = max(1024, maxTokens/3))下思考预算吃满全部输出额度导致实际回复为空的问题
  • 快捷设置自定义 Token 输入:快捷设置面板的最大 Token 除 4 个固定档位按钮外,新增自定义数字输入框,支持输入任意值
  • 快捷设置字体放大:快捷设置面板内所有文字字号统一调大(原 9px/10px/11px 提升至 11px/12px),改善可读性
  • 角色卡页面全面优化:
    • 卡片尺寸可调:搜索栏新增小/中/大三档尺寸切换,小卡 1:1 方形紧凑排列(一屏 ~20 张),中卡 3:4 竖卡(一屏 ~12 张),大卡 2:3 宽卡展示更多信息;尺寸偏好自动记忆
    • 卡片信息增强:新增性格特征碎片标签(柔和圆角色彩)、场景设定预览(斜体一行)、创作者名称(@作者名);卡片信息密度翻倍,所有字段随尺寸自适应显示
    • 角色详情面板:点击卡片任意位置打开右侧滑出只读详情面板,分区展示角色全部设定(基本信息/标签/角色设定/对话设定/高级设定/绑定设置),无需进入编辑模式即可浏览
    • 首条消息预览:卡片信息区展示首条消息原文/翻译(替代原先难以辨认的角色描述),中/大卡显示 2 行,悬浮封面也可预览
    • 排序功能:搜索栏新增排序下拉,支持按最近更新/创建时间/名称排序
    • 首条消息一键翻译:卡片左下角新增翻译按钮,无需打开编辑器即可翻译首条消息;支持多张卡片同时翻译,互不阻塞

Bug 修复

  • 继续续写功能无效:修复"继续续写"按钮未向 AI 传达续写意图的问题。原先仅创建新气泡走普通生成流程,AI 无法感知续写需求导致内容不连贯。现新增续写指令注入上下文末尾,并将原消息内容作为 preContent 传入流式输出,新气泡完整显示"原内容 + 续写内容"
  • 预设 maxContext 被强制覆盖:修复 getActiveProfile() 中 profile.maxContext || 8192 导致预设的 maxContext 永远不生效的问题(profile 始终返回 >= 8192 覆盖了预设值),现已改为 || 0 让 0 表示"跟随模型"
  • Token 用量显示不准确:修复 ChatHeader 和 ChatInput 中 maxContext 为 0 时显示硬编码 8192 的问题,改为根据当前模型动态推断默认上下文长度
  • 侧边栏无法滚动:修复字体设置过大时侧边栏导航项溢出但无法滚动的问题,导航区域添加 overflow-y-auto
  • 对话解析器正则全面重构 (B-07/B-08):
    • 粗体文本误渲染为黑点:修复 AI 输出 **粗体** 时解析器误将 *粗体* 匹配为动作、残留外层两个 *在 CJK 字体下显示为黑色实心点的问题。新增 **...**、***...***、__...__、___...___、~~...~~ markdown 语法保护
    • 反引号破坏行内代码:移除反引号\...``→双引号的强制转换,该转换会将 markdown 行内代码误转为"对话"样式;改为直接保护行内代码
    • 动作内容支持内含 *:动作正则从 [^*]+ 改为 [\s\S]+? 非贪婪匹配,*does *this* too*可正确整体解析为动作
    • 说话人名 Unicode 扩展:支持带重音拉丁字母(José)、西里尔字母(俄语)、数字(Player1)、连字符(AI-chan)等角色名
    • 新增单引号对话支持:Speaker: 'text'和Speaker:'text'可正确识别为对话
    • 英文缩写保护:don't、can't、it's 等不再被单引号对话正则误匹配
    • 中文引号全面覆盖:新增 CJK 双引号〝〞(U+301D/E)、直角引号变体﹁﹃﹂﹄(U+FE41-44)归一化;修复中文弯引号""(U+201C/D)此前未生效的问题
    • 多 thought 块提取:GroupChatMessage 改用 while+exec 循环提取全部思考块,与 MessageBubble 行为一致
    • 冗余 thought 剥离:MessageBubble 非翻译场景不再对已剥离文本重复执行 thought 标签处理
    • 占位符健壮性:占位符标记从空字节\x00改为 Unicode 私用区字符,避免渲染管道破坏;restore 改为循环替换以处理嵌套保护
    • 快速预检优化:新增预检正则,不含任何对话/动作标记字符时直接返回纯文本,跳过后续 10+ 步保护与解析