Repository navigation
Releases: GUAPIXIA/qingyu
Release list
轻语v0.21.0
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
更新日志
[0.21.0] - 2026-11-01
修复(输入续写:四档长度控制与用户视角)
- 问题(单角色 100 轮实测暴露):①严格落档率仅 58%(短句 96% / 小段 76% / 展开 40% / 长篇 20%),展开与长篇系统性写不到下限;②11% 的回合因「长度修复后仍不合格」被放弃、只保留原输入;③16% 的续写替角色行动/说话(沉浸式下应只写用户侧)。
- 提示词(
shared/chat-core/aiInputHelper.ts):续写长度指令加入硬性下限(未达到下限前不得收尾)、分段配额(展开每段约 90–140 字、长篇每段约 110–160 字),并把「自然完成即收尾」改为「达到下限后才允许收尾」;长度修复指令给出缺口字数并要求至少写到下限。 - 补足链路(
src/components/chat/useChatInputState.ts):先接缝去重再补足,避免补足结果被接缝裁剪到下限以下;新增「近下限补足」——完整但低于下限时,用 assistant 预填 + 继续指令最多补写三次,超过上限时按句边界收束,必要时二次压缩;修复失败但原文可用时保留原文交给补足,补足后仍不完整才保留原输入并提示。 - 用户视角守卫(
shared/chat-core/aiInputHelper.ts+useChatInputState.ts):续写提示词显式加入「只写用户自己的动作、对白、观察和感受,不得以角色名或她/他为主语展开角色行为」;新增detectCharacterVoiceViolation/buildVoiceRepairInstruction/stripCharacterVoiceSentences,沉浸式续写检测到越权时以低温最多重写两次,仍越权则按句删除角色侧叙述兜底。 - 实测(修复后,同口径 100 回合 / deepseek-v4.1-flash):四档严格落档 100% / 100% / 100% / 100%(各 25/25,综合 100%),放弃 0 次、替角色行动 0 次、截断 0 次;修复前基线为 58%、11 次、16 次。补写共 32 次、视角重写 0 次;续写平均耗时 3.0 / 4.0 / 6.6 / 11.6 s(档位越高越慢,含补写调用)。
- 验证:
pnpm check、pnpm exec eslint(改动文件)、pnpm exec vitest run(aiInputHelper/useChatInputState87 项、chat-core golden 34 项)全绿;chat-core golden fixture 已按新提示词/修复文案重新生成。
变更(PC/安卓解绑 · 第一批:工程外围)
- 分支策略落定:新建
android-compat分支冻结解绑前的完整安卓兼容状态(含跨端同步链路);main开始移除对安卓端的兼容。第一批只处理工程外围(子模块/CI/版本线/公告服务/联验脚本/文档与矩阵),跨端同步链路(electron/bridge、配对与同步中心、relay-server)作为第二批单独提交;clientKind等跨端契约类型位于 shared 子模块仓,另行处置。 - 子模块解绑:移除
android子模块与.gitmodules条目;本地android/目录保留为qingyu-android独立仓工作区并加入.gitignore(不再进入git status)。 - CI:删除
ci.yml的 Android 作业(单测/lint/assembleDebug)与release.yml的 APK 发布作业;版本单源门禁改为只校验 PCpackage.json与CHANGELOG.md。 - 版本线:
scripts/version.mjs收敛为 PC 单端(删除 Android TOML/README/CHANGELOG 读写、android命令与--sync-android),package.json删除version:android。 - 公告服务:
/api/version与后台版本面板不再包含androidVersion/androidChangelog/androidDownloadUrl,app_config默认值不再写入android_*(存量库历史行保留但不读写)。 - 联验脚本:删除 MuMu/ADB 相关脚本(
mumu-*.cjs、diag-lan-inject.cjs、lan-mumu-e2e.ts、lan-hold.ts)、parity 矩阵生成器(refresh-parity-matrix.mjs、_gen-parity-md.mjs)与已无清单文档的s9-07-legacy-purge-check.mjs;regenerate-roleplay-fixture.ts不再跨仓写 android 副本;g2-progress.ts删除--android-ok;clean.ps1移除 Gradle 产物条目。 - 文档:移除安卓独立客户端方案族(阶段 0–9 执行文档与 S9-* 清单)、13 份
Android独立客户端重构阶段*报告、阶段 2–9 验收报告、能力矩阵三件套、ADR-001/002/007、规范/模拟器环境-备忘录.md与 2 份 compose 阶段收口(phase0/phase3);仓库拓扑文档重写为「PC + shared」双仓,同步修正文档索引与失效链接。历史归档、报告/LAN联调取证-*与降级为历史参考的安卓重构总方案保留。
变更(PC/安卓解绑 · 第二批:跨端同步链路)
- 桥接层移除:删除
electron/bridge/(安卓伴侣端 REST/WS 桥接、/sync/v1路由、配对与 mDNS 服务身份);主进程不再注册 bridge/syncLan/syncCenter IPC,preload 不再暴露bridge/syncLan/syncCenter,设置页「同步中心」分区(QR 配对、授权窗、冲突与设备管理)整体退场。 - 同步链路模块:删除
electron/ipc/{syncCenter,syncLan}.ts、electron/domain/{syncLanAuth,firstSyncPlan,serverTransport,syncSummary,upgradePrecheck}.ts及其单测;设置变更总线删除android:<deviceId>来源标记(原为桥接层防回环),只保留 PC 本地保存来源。 - relay-server 退场:删除
relay-server/整包(HTTPS/WSS 中转、Postgres 迁移与 RLS 跨租户门禁)及其 pnpm workspace 条目、CIrelay-lint-and-unit作业与锁文件条目。 - 依赖收敛:移除仅桥接层使用的
bonjour-service/express/express-rate-limit/qrcode/ws与对应@types/*(pnpm-lock.yaml同步刷新)。 - 文档:ADR-005/006/009/010 与
报告/LAN联调取证-*、报告/MuMu真机LAN联调取证-*退场;ADR 索引(现行 4 条:003/004/008/011)、文档索引、推送/更新/门禁规范与仓库结构表同步。 - 边界说明:
shared子模块内的跨端契约(ExposedAPI.bridge/syncLan/syncCenter、sync-core/sync-crypto、clientKind)与tools/gen-sync-crypto-fixtures.ts属 shared 独立仓范围,本次未改动;PC 内核写路径(syncDomainService/syncMeta/syncHealth/deviceIdentity)与/sync/v1之外的本地同步域行为保持不变。
验证:pnpm check / lint(0 error)/ test(含覆盖率门禁)/ check:gates / check:contracts / check:docs-index / check:pc-agent 全绿;公告服务测试通过;pnpm install --frozen-lockfile 与 CI 工作流 YAML 解析通过
变更(PC 端移除费用提醒)
- 移除设置「生成规划」的「费用提醒」开关卡片与
WalletCards图标;固定区保留思考强度/连续性保护/自动补全结尾。 - 移除快捷设置「回复长度」中的预算提醒分支(原「本轮回复预算较充足…」文案);硬上限安全校验
riskMessage与默认篇幅文案保持不变。 - 移除 settings 迁移中的
costReminderEnabled归一化及对应测试断言,PC 代码不再读写该字段。 - 边界:
costReminderEnabled仍声明于shared/types.ts并在shared/defaults.ts默认为true(shared 子模块属独立仓,本次未改动),新建设置文件中仍会带该键但已无读取方;如需彻底清理需在 shared 仓提交并 bump 子模块指针。 - 文档:PC 生成入口冻结清单 同步(费用提醒条目退场)。
验证:pnpm check / lint(0 error)/ test(296 文件 3780 用例,0 失败)/ check:gates / check:contracts / check:docs-index / check:pc-agent 全绿
修复(依赖安全:CI 审计门禁转绿 + spatial-board CI 修复)
- 修复前
pnpm audit --registry=https://registry.npmjs.org:4 critical / 56 high / 31 moderate / 3 low(94 项);修复后:0 critical / 1 high(登记豁免)/ 2 moderate。 - 直接依赖:
electron^43.4.0 → ^43.8.0(沙箱不继承、协议处理器跨源读、preload 代码缓存投毒 3 条 high);adm-zip^0.6.0 → ^0.6.1(解压炸弹绕过、保留 SUID/SGID 提权等 4 条 high,备份导入入口);vitest/@vitest/coverage-v8^3.2.7 → ^4.1.12(vitest 4 不再依赖 tinypool,消除 2 条 critical RCE)。 - 传递依赖(
pnpm-workspace.yamloverrides 统一抬升,全部同大版本内):sharp0.35.5、js-yaml4.3.2、proxy-addr2.0.8、shell-quote1.11.0、fast-uri3.1.8、@xmldom/xmldom0.8.15/0.9.12、axios1.20.0、undici6.28.1、joi17.13.8、browserslist4.28.7、source-map-js1.2.2、http-cache-semantics4.3.0、brace-expansion1.1.21/2.1.7/5.0.12、ejs3.1.10、qs6.16.0、ip-address10.7.1、postcss8.5.23。 - 登记豁免/保留:
braces<=3.0.3(GHSA-vfj7-8cjw-p6xm)写入auditConfig.ignoreGhsas——npm 官方最新仅 3.0.3(公告要求的 3.0.4 未发布),仅 dev 构建链tailwindcss > chokidar使用、无运行时暴露面,上游发版后应移除;sprintf-js、postcss-selector-parser(需跨大版本 6→7)保留为 moderate。 - spatial-board CI 修复:该工作流
npm test在 Linux CI 必然失败(TS2307 node:fs/TS2304 __dirname)——根因是spatial-board未声明@types/node,本地靠父目录node_modules/@types兜住、CI 只在该目录npm ci故缺失;已补@types/node并刷新其package-lock.json。 - 测试框架适配:
electron/ipc/__tests__/tts.test.ts的用例内vi.unmock提升到文件级(vitest 4 告警、vitest 5 起报错)。 - 验证:
pnpm check/lint(0 error)/test:coverage(296 文件 3780 用例,vitest 4)/build/electron-build/各门禁/公告服务测试全绿;pnpm install --frozen-lockfile通过;本地复现 CI 两条审计命令(critical 与 high)均 exit 0。
变更(清理:一次性排障脚本 / 无引用依赖 / 文档对齐)
- 删除 11 个一次性排障文件:
tools/debug-{aad,b64,cross,cross2,entity,gcm,gcm2,gcm3,gcm4,gcm-tag}.ts与tools/gcm-vector.json。它们是 2026-09 跨端同步加密(AES-256-GCM/ECDH/AAD/Base64 差异)的排障材料,只打印诊断信息、无测试与构建消费者,且其排障对象已随 2026-10-14「移除安卓端兼容」第二批整体退场;处置依据与取回方式见 tools/README.md(归档方案 C03 登记的「登记用途 → 验证消费者 → 归档或清理」,本次按清理执行,跨端契约样本仍在 shared 仓,文件可从 git 历史取回)。 - 移除 2 个无引用依赖:
rehype-raw(原始 HTML 渲染已按 XSS 修复刻意移除,README 却仍宣称启用)、@testing-library/user-event(全仓 0 引用)。 - 纠正审计启发式的两处误判(经核证保留,未删):
@xyflow/react是根 vite 多入口构建spatial-board/index.html的必需依赖(CI 的 build-windows 作业在无 board node_modules 的情况下正是靠它构建成功);babel-plugin-react-dev-locator由vite.config.ts以 Babel 插件名'react-dev-locator'字符串引用(QINGYU_DEV_LOCATOR=1时启用),源码里搜不到包名并非未使用。 - 文档对齐:README 技术栈的 Markdown 行不再宣称
rehype-raw,并注明原始 HTML 不渲染;目录树删除已退场的electron/bridge/,domain/描述改为「逐域写入口、事务、恢复与写路径收口」;server/.env.example 补登记 4 个此前只出现在代码里的变量(DB_DATA_DIR/DB_PATH/UPDATES_DIR/TRUST_PROXY)及其默认值。 - 去悬挂 TODO:
electron/chat/compaction.ts中自 0.12.1 挂到 0.20.0 的TODO(0.12.1)改写为显式「已知限制」说明(终态任务记录可能先于引用它的消息被保留期清理;若要收口需先为 messages 建generationTaskId索引)。
验证:pnpm check / lint(0 error)/ test(296 文件 3780 用例,0 失败)/ build / electron-build / check:gates / contracts / docs-index / pc-agent 全绿;pnpm install --frozen-lockfile 通过
轻语v0.20.0
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
更新日志
[0.20.0] - 2026-10-05
新增
- 外部 Agent 调用/测试工具包(
tools/pc-agent):让终端 CLI 与外部 MCP 都能真实驱动、测试轻语 PC 功能。动作目录以shared/ipc-api.ts为单一真源(254 个契约成员登记齐全、unregistered=0),Session Host 常驻持有 Playwright/Electron 句柄并经 Windows 命名管道服务,CLI 与 MCP 共用同一执行路径(双入口逐项等价)。内置 19 条测试旅程(单聊/角色/群聊/世界书/预设/用量/日志/正则/快捷回复/画板 iframe/真实本地向量模型与取消路径/环境探测等),配套pnpm check:pc-agent契约漂移门禁(CI 独立步骤)与生成式能力矩阵。 - 真实模型与真实生图/语音验证:本地向量模型(推理、异步索引、语义检索与取消索引)、小米 MiMo
mimo-v2.6-pro真实生成(终态/用量/消息归属/事件分页/取消生成)、ComfyUI 真实出图、edge TTS 真实合成,均已跑通并留证。 - 导出/导入支持显式路径(免系统对话框):角色卡(JSON/PNG/封面/批量)、世界书、预设、快捷回复、备份(zip/json)的导出与导入新增可选路径参数(导出
targetPath、导入sourcePath);传入路径时不弹系统对话框,直接读写该路径,供外部 Agent / 自动化端到端调用。不传路径时行为完全不变(仍弹对话框,保持原有交互)。exportCover与preset/quickReply导出现在同样回传path。file.selectImage与font.select故意不提供路径参数——它们是「仅允许读取对话框选择过的路径」的白名单闸门,加参数会打开任意文件读取面。 - TTS 新增小米 MiMo 提供商:设置 → API → TTS 新增「小米 MiMo TTS」提供商,可直接用小米 MiMo 语音合成朗读。与既有 OpenAI 兼容 TTS 不同,小米走
POST {baseUrl}/chat/completions(文本在messages[role=assistant].content,音频参数在audio:{format,voice},音频数据在响应choices[0].message.audio.data),因此实现为独立适配器而不是复用/audio/speech。内置 9 个官方音色(mimo_default、冰糖、茉莉、苏打、白桦、Mia、Chloe、Milo、Dean),默认端点https://api.xiaomimimo.com/v1、默认模型mimo-v2.5-tts;「测试连接」改为真实合成一句短语音(同时验证 Key、端点与音色)。消息朗读、试听、音色下拉与配置列表标签均已接入该提供商。参考小米 MiMo TTS 接口文档。
修复
- 外部 IPC 写入的设置不再被渲染层旧值覆盖(F1):应用退出前无条件
flushSettings(),会把渲染层内存里的旧设置整份写回磁盘,覆盖由外部 Agent 经 IPC 写入的更新(实测theme=light在重启后被改回dark)。现引入本地脏标记_dirty:只有用户操作产生的改动才在退出前写盘,落盘成功后清除。 - 外部 IPC 写入的数据不再要求重启才能看到(F3):主进程侧的写入(外部 Agent / 导入)此前不触发任何界面刷新。现新增
character:changed/settings:changed广播(与既有session:updated同一套机制),并在会话新建/改名/删除后广播;渲染层订阅后重新拉取角色、会话与设置(设置在本地有未保存改动时不重载,避免与 F1 竞争)。 - 消息缺字段不再击穿整页(F4):不完整消息(缺
timestamp/images/isEditing)会让date-fns.format(undefined)抛RangeError: Invalid time value,触发整页「页面渲染异常」。现双层加固:写入边界补齐三个字段,格式化入口(formatTime/formatDateTime/formatRelativeTime与书签调试面板)对无效时间戳一律降级为空串。 - 重命名不存在的会话不再静默成功(F2):
renameSession此前if (session)无 else,外部调用方会拿到“成功”却什么都没发生。现与updateSession一致地抛「会话不存在」,并对非字符串标题报参数错误。 - 会话切换器下拉项可被可靠定位与点击(F5):下拉项与触发器同为
button且名称都可能是当前会话标题,无障碍与自动化都无法区分;且条目名称带(N条)后缀,按标题精确匹配必然失败(实测真实鼠标序列下点击超时)。现面板加role="menu"+ 名称、条目改role="menuitem"并用aria-label提供干净标题(条数后缀标记aria-hidden),当前项带aria-current。 - Edge TTS 配置不再被静默改写成系统语音:
loadSettings每次加载都会把已有 TTS 模型的provider: 'edge'无条件改写为'system',而edge在 3.2-A 之后已是正式提供商(设置界面可选、edgeSpeak有实现与测试、消息朗读按 edge 分支播放),因此用户配好的 Edge TTS 会在下次启动后被改写、并随任意一次保存落盘。现改为只在旧单字段ttsProvider: 'edge'(3.2-A 时代edge仅作系统引擎占位值)时迁移为system,已有模型数组不再改写;历史数据的一次性迁移仍由主进程版本化迁移链负责。
轻语v0.18.0
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
本次涉及安卓端重构,所有此版本不提供给安卓安装包,请待后续版本更新
更新日志
[0.18.0] - 2026-09-20
新增
-
PC 界面动效体系统一:新增
--motion-fast/--motion-base/--motion-slow三档时长与标准、出场、弹性三组缓动曲线,按钮、弹层、侧栏、页签与本地模型任务中心改用 GPU 友好的过渡属性(只过渡颜色、背景、边框、透明度与位移),短反馈更快、面板稍缓,减少界面切换的生硬感。 -
世界书语义索引收口:世界书条目按「标题 + 别名 + 摘要 + 正文」构造稳定检索文档并分块向量化,禁用条目、常驻条目与仅关键词模式不进入索引;条目保存后自动比对语义字段变化、统一失效旧向量并调度重建(不再以远程索引是否存在作为是否失效的前置条件)。语义阈值判定(自动 / 手动)下沉为两端共享的纯逻辑(
shared/chat-core/embeddingPolicy),桌面设置页与 Android 使用同一套阈值决策。 -
发送前语义预取并行化:单聊发送前的世界书语义命中与记忆事实检索改为并行发起(两者互不依赖),不再把两次嵌入往返串行压在主请求之前。
-
跨端共享导出与候选语义:会话导出(Markdown / JSON)与消息候选(swipe)语义提取为
shared/chat-core纯逻辑,PC 与 Android 以同一份生产实现作为黄金 fixture 的 oracle,避免两端导出文件内容与消息数量、顺序出现差异。 -
PC 动态上下文 W10 设置、预设迁移与诊断:默认回复长度移入对话快捷设置;设置中心“生成规划”保留思考强度、连续性保护、自动补全结尾与费用提醒,高级区提供按连接启用的输入/输出能力覆盖、能力来源/置信度、门控探测重置、分类用量及最后一轮 reasoning/body 计划与实际对照。快捷设置删除重复的只读采样区、最大 Token 档位/输入框及完整端点展示,输出硬上限集中到预设高级参数;行为设置对正常数据不再显示“新版管线”说明,只在检测到 legacy 数据时提供一次性恢复入口。诊断 IPC 不暴露 API Key、完整端点、requestId、正文或磁盘路径。settings 唯一迁移链升至 v4:
maxTokens=0保持自动,用户正数硬上限完整保留,只有内置旧快捷值映射篇幅偏好,旧maxContext默认只能收紧、显式启用能力覆盖后才可放大,旧世界书比例仅留迁移记录;legacy 与 8192 通用安全阀继续保留。详见 W10 实施报告。 -
生成链路重构前遗留清理·C 线(提示词与观测基线):① 主对话「本轮回应范围」补连续性约束——不得与最近对话的既有事实、已完成动作或已说过的信息矛盾或重复(
buildMainChatOutputPrompt,对应 S10 单聊连续性 3/11 问题);② 群聊点名/轮询人称表述澄清——对白必须是该角色自己的第一人称、动作/神态可用第三人称叙述(shared/groupChatPrompt与buildGroupNarrativeModePrompt群聊叙事边界),评测 focus 与结构化判据同步,消除「全篇第一人称」歧义;③ thought 评测口径与thoughtContract.ts强契约对齐——每轮缺失或多组<thought>由 warn 改为 fail,LLM 评审thought_ok同步「缺失视为 false」;④ 基线口径冻结:shared/generationBaseline.ts固化 G2「500 次有效生成」分母(主对话 + 供应商有响应,排除 aux/后台任务/error),scripts/generation-baseline.ts扩展 terminationCause/attempts/token 分位与 provider×model×task 分组报告。真实模型复测(C1 三用例 / C3 出现率)待模型额度后执行。 -
方案文档:推理门控与降级闭环(对话输出弹性约束·阶段8,待实施):针对真实使用中残留的「推理已占满模型输出硬上限」失败模式,新增阶段8方案——把现行"猜测式推理余量"改为四个机制:① 统一
ReasoningGate档位(off/low/standard/full)翻译为各供应商的推理控制参数(thinking:disabled/reasoning_effort/budget_tokens/thinkingConfig),让推理上限由服务端强制执行;② (provider+model) 级运行时能力探测与持久化(参数 400 降级表、聚合端静默忽略 disable 的流级标记、未知模型出现 reasoning 即自动建档);③ 流式提前中止——正文未出现且推理越过观测线即止损,不再等满输出上限;④ 空正文降档重试闭环——仅在可见正文为空时自动降一档重试至多一次,有正文的length仍走既有收尾器。同时修复现状缺口:recentReasoningTokensP90 估计从未接线(contextBuilder 未传参)、Gemini 未下发任何 thinkingConfig、o 系硬编码'medium'、ClaudemaxTok/3比例猜测。本期仅方案与索引落档,未改动代码。 -
统一异常终止链路与跨端收口(对话输出弹性约束·阶段7.1–7.3):① 新增应用层终止原因
GenerationTerminationCause与统一终止结果(shared/types.ts/shared/generationTermination.ts),与供应商finishReason分离、互不覆盖;finalizeGenerationTerminalResult成为所有异常终止的唯一收口入口——桌面单聊空闲超时与普通ai:error、群聊点名/轮询/自由发言错误、Bridge partial error 的半截正文一律先经统一最终处理管线(稳定边界收束)才允许保存,错误与超时提示只写generationError/generationNotice(⚠️文案写进正文的旧行为全面移除),无可用正文一律不创建空 AI 消息;新增requestId + terminalState一次性终止状态机(含claimUserStop/claimGroupUserStop):迟到 chunk/done/error 全部忽略、同一 requestId 最多落盘一次,用户停止保留已显示正文,停止字符串命中不再误标“已停止生成”。② thought 角色第一人称心理语义固化为唯一共享来源shared/thoughtContract.ts(单聊与群聊上下文共同消费,禁止模型推理/规则分析/上下文复述);新增 PC/Android 共享语义分块契约shared/fixtures/roleplay-blocks.json(31 样本)与 Kotlin 等价移植RoleplayBlocks.kt,两端测试读取同一 fixture 逐条比对;Android 单聊与群聊气泡正式按contentRenderMode='blocks'渲染语义分块(@提及高亮保留),旧消息安全回退 Markdown。③ 后台结构化生成接入BackgroundGenerationProfile(memory / compression / title / direction):压缩与标题触顶或结构残缺时丢弃结果且不破坏原数据、方向保持一次“只补结构”短修复、长记忆摘要与事实提案分别判断完整性;观测记录新增taskType与terminationCause(默认不落正文与提示词);自动补尾只对provider_length开放且每条消息至多一次,补尾期间用户停止立即取消并保留稳定前缀,同一模型连续失败两次本次会话关闭自动补尾。详见阶段7实施报告。 -
S10 真实模型复测(thought 修复后):评测脚本新增
group(点名 / 轮询 / 自由发言)与stream(流式推理隔离)批次、S10 检查项(thought 第一人称与无计划/规则复述、供应商推理隔离、全局叙事第三人称)、按模型名选择适配器并适配阶段3AICompletion契约;按复测清单用deepseek/deepseek-v4-pro实测单聊 5+5、群聊 3×5、流式 2、续写 4×2 与 14 项确定性检查——四项新增检查全部通过(thought 出现即合规 3/3、推理在 chunk/正文/TTS/记忆上下文 0 泄漏、旁白第三人称 5/5、群聊结构 15/15)。同时发现:低用户硬上限 + 推理共享模型会整轮空响应(riskNotice已计算但无界面消费)、thought 出现率降至 3/28、单聊连续性 3/11 与续写 2/8 属模型质量问题。详见 S10 真实模型复测报告。 -
用户篇幅意图与场景系数接入(S5):新增
detectUserLengthIntent(只识别“简短回答 / 一句话 / 详细说说 / 展开讲”等明确词组,普通叙述不误触发)与resolveSceneFactor(首轮开场 1.15、明确转场 1.25、短问句 0.85,其余 1),接入resolveChatRequestPlan——本轮软区间与请求预算随用户意图/场景同步变化(“一句话回答”优先于会话的“展开”设置),ResponsePolicy.source新增user;识别结果写入阶段0观测(responseIntent/sceneFactor)便于核对误判。 -
Android 消费结构化收尾状态(S6):移动端 Message / GroupMessage DTO 新增
generationNotice/generationError/contentRenderMode(缺省 null,兼容旧 PC 返回与旧缓存),Room 缓存升到 v7(仅 ALTERcached_messages三列,outbox 与 task_cursors 不动);单聊与群聊气泡下方按 PC 同义文案展示“⚠️ 生成中断:… / ℹ️ …”,超时与收尾状态在两端语义一致;Bridge 落盘时同步写入收尾提示字段。语义分块在移动端明确降级为 Markdown 兼容渲染(渲染文本一致,仅样式差异),字段先落库保证跨端协议一致。 -
群聊语义分块支持 @提及高亮(S7):把提及识别抽成
splitMentionSegments纯文本分段(长名优先,正则特殊字符按字面量处理),Markdown AST 插件与 blocks 渲染路径共用同一规则,新消息与旧消息的提及显示一致,且不恢复原始 HTML 注入。 -
灰度开关与契约清理(对话输出弹性约束·阶段六):设置页新增「生成管线」开关(
Settings.generationPipeline,默认 unified)——legacy 一键回退旧链路:预设maxTokens直用、注入旧【正文排版协议】、跳过收尾器与补尾、新消息不标记语义分块并恢复说话人前缀补齐;回退不删除任何新设置与会话数据。旧链路的固定 8192 特判与旧格式协议已在前序阶段删除,本阶段移除失效的ChatParams.allowTruncatedOutput字段(length 不再抛错后无消费方)及其全部调用点;评测脚本新增v-pipeline-flag用例(unified/legacy 预算与标记断言),文档索引新增实施报告。 -
群聊与 Bridge 收尾对齐(对话输出弹性约束·阶段四):群聊三条生成链路(点名/轮询/自由发言)与 Bridge 单聊生成全部接入与桌面单聊相同的结构化完成事件与 shared 收尾器——结束原因随完成事件透传,残缺正文回退稳定句界、必要时至多一次短补尾;错误分支与单聊 R2 对齐(正文保留在 content、失败原因记
generationError,不再把⚠️ 拼进正文;超时保留稳定前缀);收尾提示走中性generationNotice展示。所有入口的结束状态与收尾行为一致,正文后处理不再有各端复制的实现。 -
语义分块渲染(对话输出弹性约束·阶段五):新增
src/utils/roleplayBlocks.ts确定性分块——纯引号行为对白(可带说话人前缀,单字角色名不误判)、整段*动作*剥离星号归叙述、引号与叙述混写行归 mixed 保持原文、<thought>归思考;气泡按语义块以 CSS 呈现样式(叙述沿用动作段斜体弱化样式),不再依赖模型手写星号与说话人前缀。新落盘消息标记contentRenderMode: 'blocks',旧消息缺省继续走 Markdown 渲染,不做批量迁移;单聊、群聊与 Bridge 的新正文停止调用normalizeRoleplayDialoguePrefixes(该函数保留为旧内容兼容工具);Message.content继续保存可复制的原始正文,分块仅在渲染时即时计算。 -
结构化完成事件与统一收尾(对话输出弹性约束·阶段三):适配器契约升级为返回
AICompletion(正文 + finishReason + usage),finish_reason=length不再抛错而是作为完成状态下发——ai:done事件携带结构化元数据(新增onComplete回调,旧onDone兼容保留),桌面单聊所有结束路径(正常/触顶/网络中断保留正文)统一进入shared/assistantOutputFinalizer收尾器:stop 且结构完整直接接受;length 恰好完整不提示;尾部残缺回退到最后稳定句界并剥离未闭合引号/星号/<thought>;稳定正文过短或无边界时自动发起一次短补尾(仅末段上下文,复用重叠去重合并后复检,失败则保留稳定前缀)。网络中断但已有正文时主进程降级为network_error完成结果,正文不再整条丢失。收尾状态区分展示:中性提示(已在完整句处收束/已自动补全结尾/已停止生成)走新增的generationNotice,失败提示(生成中断,已保留完整部分)继续走generationError。 -
语义回合约束取代机械排版协议(对话输出弹性约束·阶段二):主对话提示词以「本轮回应范围」+「正文结构」两段语义规则,取代旧「正文排版协议」的固定 2–6 段、每轮必有对白、动作必加星号、对白必带角色名等机械要求——只完成一个自然互动回合(最多推进一个主要事件,展开档最多两个),推进到需要用户回应的位置即停止,接近篇幅上限时停止引入新信息并完成当前句;篇幅数字由阶段一的 ResponsePolicy 按模式/会话节奏动态给出(软目标,不为凑字数重复),短回应可以只有一个段落。展示样式不再要求模型手写,为阶段五语义块渲染铺路。
-
生成基线观测(对话输出弹性约束·阶段0):每次 AI 请求在主进程落一条 JSONL 观测记录(
data/diagnostics/generation-observations.jsonl,超 5MB 自动轮转),包含模型、来源(单聊/群聊/桥接/辅助)、篇幅模式与硬保护线、正文可见字符、completion/reasoning token、结束原因、尝试次数与格式闭合诊断(引号/星号/<thought>),正文只落尾部采样不落全文;取不到 reasoning token 的上游记unknown不填 0。四家适配器在完成或抛错前透出归一化结束原因(OpenAIfinish_reason、Claudestop_reason、GeminifinishReason、Ollamadone_reason),OpenAI/Gemini 同时解析 reasoning token 计数;chatWithRetry汇总为完成/触顶/用户停止/错误四类终局,取消请求携带原因(用户停止/看门狗超时/停止字符串)供区分。新增基线分析脚本scripts/generation-baseline.ts:输出 P50/P90 正文长度、触顶率及"正文过长 vs 推理占满"细分、未闭合格式率、用户手动继续率与观测完整性。阶段0记录为离线观测,不改变任何请求行为与界面表现。 -
回复篇幅与请求预算解耦(对话输出弹性约束·阶段一):新增
ResponseLengthMode(自动/简短/适中/展开)与ResponsePolicy(字符软区间 + 硬保护线),预设增加responseLengthHint、会话预留responseLengthMode字段;新增模型能力档案(shared/modelOutputProfile),正文预算与推理余量分别估算后合并为请求上限,移除 DeepSeek V4 固定 8192 下限——"适中"回合在该模型上通常请求约 4000–5000 Token 而非固定上限,短/适中/展开正文目标不同但推理余量保持充足;上下文输出预留与实际请求max_tokens改为同一次计算结果(单聊、Bridge、预设测试生成共用),用户在高级设置中的输出硬上限始终生效,低于推理所需时在预算明细中给出风险提示;内置预设全部迁移到篇幅提示,maxTokens语义改为"模型输出硬上限",预设编辑器新增"回复篇幅"选择。 -
下一步方向跟随叙事模式与待办状态:方向视角改为跟随当前会话模式(点选后以该模式发送),切换模式后只为最新一条已有方向的消息重新生成,旧方向在新结果到达前保持可见;用户发送消息后自动清空上一轮方向(含持久化与在途请求取消),避免旧方向既不再是“下一步”又污染新一轮输入。
-
下一步方向(阶段 C:群聊与跨端):群聊仅在自动接力结束、轮到用户时生成 3 个方向,中间轮次不产生无效请求;群聊消息气泡下方展示方向卡片,点选回填群聊输入框,草稿非空时先确认,仅最新一条可换一批。桥接端新增方向生成服务与
POST /sessions/:sid/messages/:mid/directions接口,回复落盘后按会话开关异步补齐方向;Android 端新增方向卡片(点选回填、覆盖确认、换一批、失败提示)并读取会话开关。 -
续写长度稳定化(阶段 B):续写长度改为“本次新增内容”语义,四档给出可验收的字数区间(短句 20–60 字 / 小段 80–180 / 展开 220–420 / 长篇 500–900)与结构目标,输出预算同步调整为 128 / 384 / 768 / 1536 token;生成后做长度校验,截断或明显偏短时补足、明显超长时压缩,越界修复最多一次,修复失败保留原输入并给出反馈。剧情变化温度收窄为 0.45–0.75,档位文案改为「延续 / 波澜 / 转折 / 剧变」,长度档位改为「短句 / 小段 / 展开 / 长篇」;续写设置面板移除隐形滑块,只保留分段按钮。
-
下一步方向(阶段 A):以会话级「下一步方向」取代「游戏主持格式」。AI 回复完成后由独立轻量请求生成 3 个方向(稳妥 / 探索 / 冒险),以气泡外的卡片展示;点选只回填输入框,不自动发送,草稿非空时先内联确认;支持「换一批」。方向随消息持久化,重生成、Swipe、编辑正文或删除消息时失效,会话切换与消息删除会取消在途请求。开关位于对话快捷设置(单聊与群聊共用入口),主回复提示词不再注入「【判定】」与「【可选行动】」;旧会话的
gameMasterMode在兼容期内映射为新字段。 -
生图构图与角色入镜控制:重做
/imagine生图选项,新增「剧情瞬间 / 对方近景 / 对方全身 / 互动构图 / 环境空镜」画面重点,以及「不出现 / 仅轮廓 / 半透明 / 第一人称」我方入镜方式;生成提示词会优先描述对方角色的神态、视线、姿势、动作、手部、穿着状态与材质,并结合镜头、光线和最近剧情组织画面。 -
角色封面导出图片:角色卡「更多 → 导出」菜单新增「封面图片」,按封面真实格式(PNG/JPG/WebP 等)弹出保存对话框导出为独立图片文件。
修复
- 低输出硬上限导致推理模型整轮空响应:预设
maxTokens=0改为“自动预算”,内置与新建预设默认不再施加用户硬上限;单聊、群聊与 Bridge 共用“正文预算 + 推理余量”请求上限。保留用户正数硬上限的严格语义,但当其低于推理余量加最小可用正文空间时,在设置界面警告并在发送前拦截,不再用盲目重试浪费请求;若上游仍返回length + reasoning≈completion + 空正文,显示可操作的“推理已占满模型输出硬上限”错误并单独记录观测分类。 - 统一收尾顺序(S1):新增共享管线
runGeneratedReplyPipeline(供应商推理清理 → output 正则 → 停止字符串 → shared 收尾器 → 至多一次短补尾),桌面单聊、群聊三模式、消息续写与 Bridge 的 sendMessage / regenerate 全部走同一入口,正则每条消息只执行一次;Bridge regenerate 此前完全跳过正则与停止字符串、用户停止(cancelled)可能被收尾器改写正文,两者均已对齐;无稳定边界时按收尾器契约补尾,失败不保存半句。同时恢复streamGroupAI(点名 / 轮询)丢失的 AI 请求派发——该回归会让群聊除自由发言外完全不发起生成。 - 群聊超时统一收尾(S2):初始超时与收到 chunk 后的续期超时、点名 / 轮询 / 自由发言三种模式全部走
handleGroupStreamTimeout——部分正文经统一管线收尾后停在稳定句界,错误原因只写generationError(不再把“⚠️ 请求超时”拼进正文,也不会进入复制 / TTS / 上下文 / 记忆摘要);无稳定边界时不落盘半句;手动停止改用generationNotice: '已停止生成'。 - 长记忆输出预算动态化(S3):单聊与群聊长记忆不再固定 6144 / 2048(取代 R1 中的固定值说明),改为按模型能力档案计算请求上限(正文约 2500 字 + 推理余量),非推理模型不再无条件请求 8192;
finishReason=length且事实提案被截断时明确记录“摘要已保存、事实未更新”,不再静默当作完...
轻语0.17.0
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
更新日志
[Unreleased]
[0.17.0] - 2026-09-01
新增
- 局域网 / Relay 双通道:PC 可在不开放入站端口的情况下通过 HTTPS/WSS Relay 连接 Android,与原 LAN Bridge 独立启停。
- Relay 服务 0.1.0:新增 Ed25519 Access Token、轮换 Refresh Token、一次性配对票据、租户 RLS、设备吊销、在线 RPC 网关和 Docker 部署骨架。
变更
- Bridge 生成业务改为共享
MobileFacade/BridgeRuntime,LAN 与 Relay 复用同一业务实现和取消注册表。 - PC 设置页将局域网连接与服务器连接整合为统一的“双通道连接”面板,并为服务器地址预填
https://cjbtj.xyz。 - Android 连接页同时提供“局域网连接”和“服务器连接”,服务器地址默认使用
https://cjbtj.xyz,旧连接记录自动按 LAN 读取。 - README 将更新日志前移至项目简介下方,并把仓库结构调整到界面截图之后。
修复
- 修复创建 Relay 配对码时无请求体的 JSON POST 未发送
Content-Type,导致服务器返回 400 的问题。 - Android 翻译结果现在直接替代消息正文,并在翻译期间显示明确的处理中状态。
[0.16.8] - 2026-08-31
新增
- Windows 防火墙排查指引:PC“设置 → 手机连接”移除自动修改防火墙的按钮,改为提示前往“设置 → 隐私与安全性 → 防火墙与网络保护”手动检查专用/公用网络防火墙,并明确提醒关闭防火墙的安全风险。
变更
- 桌面与 Android 独立版本:PC 版本定为 0.16.8,Android 版本独立为 0.2.0;版本门禁分别校验 Android Gradle、README 与 Android 更新日志,不再强制两端版本号相同。
修复
- Android 局域网连接探测:兼容性探测移至 IO 线程,修复手机浏览器能访问 PC 接口、但 Android App 在进入配对前即连接失败的问题
- 真机连接可靠性:Android 扫描含多个局域网地址的二维码时逐个探测并自动选择可达端点,不再因第一个网卡地址不可用而直接失败。
- 连接错误提示:Android 配对失败会区分断网、超时、端口不可达、DNS、TLS、服务不匹配、配对码失效、审批超时与请求过频,并给出对应处理建议。
Android 0.2.0 摘要
- 修复发送消息在对方回复后暂时消失、重新打开对话才恢复的问题。
- 对话页时间与操作栏合并为一排,“回到最新”改为淡色半透明;收紧顶栏、消息操作区和输入区,为正文留出更多空间。
- 增加状态栏安全区,修复真机系统图标与应用顶栏重叠;聊天底栏明确消费 IME inset,使输入框在 edge-to-edge 真机窗口中随软键盘上移。
- 全局会话名称改为“角色名-对话名”,并移除摘要中重复显示的角色名。
[0.16.6] - 2026-08-29
本版本为安卓端(伴侣端 App)优化专项,对齐实施文档阶段 A–D;PC 端配套变更集中在移动桥接层(设置同步快照端点、WS 广播、配对二维码 v2、mDNS 发现字段)。
新增
- 安卓已配对启动直达:冷启动先经本地快照启动决策——已配对用户直达会话区,不再闪现配对页;活跃 PC 丢失时进入设备选择页(不自动代选),配对令牌损坏时标记“需要修复连接”且不删除数据;通知点击回会话(deep link)仅在启动决策完成后消费,未配对时不会被误跳。
- 安卓连接协调与诊断(阶段 B):连接状态机统一由协调器收敛——指数退避自动重连(0–30s ±20% 抖动)、断网监听去抖后自动探测恢复、候选端点并发探测并优先上次成功地址、最近 100 次连接尝试环形指标(JSON-lines 私有目录);设置页新增“连接诊断”卡片。REST/WS/图片/朗读共享同一网络栈,WS 按 generation+deviceId 隔离并发连接,A/B PC 快切不串台。新增 47 项单测。
- PC 设置同步 v2(阶段 C):PC 新增
GET/PATCH /api/v1/settings/snapshot(移动端 15 字段白名单、revision 乐观锁、409 冲突返回 PC 当前值、applied/rejectedFields)与settings:updatedWS 广播(本机来源防回环);安卓侧快照/补丁仓库(v2/legacy 能力协商、按 deviceId 隔离缓存、断线失败不排队、切机清内存)、逐行四态同步 UI(保存中/已同步/失败重试/冲突对比)、滑块合并与“仅本机”分组;安卓容器已接线共享仓库与 WS 事件分发。 - 配对二维码 v2(阶段 D):二维码载荷升级 version:2(serverId、能力集、一次性配对码与 5 分钟过期、多端点),PC UI 默认 v2 并保留“旧版兼容”输出;安卓扫码接入双格式纯解析(逐项校验,失败收敛 Invalid);mDNS TXT 增补 serverId/apiVersion 等发现字段。
变更
- 版本单源门禁:
scripts/version.mjs扩展status/android/release,以 PC package.json 为唯一权威同步 Android versionName/versionCode(严格单调递增)与 README/CHANGELOG 版本行,CI 挂一致性校验(当前 0.16.6 / build 7)。 - 安卓端点规范化与明文策略:IPv4 私网/CGNAT/localhost、IPv6 回环/ULA/link-local(zone id 编码)与
.local端点统一规范化(IPv6 URL 自动加方括号),公网地址拒绝明文 HTTP 构造;重定向拦截器拒绝跨安全级跳转并剥离跨主机 Bearer。 - 安卓通知权限延迟申请:移除启动即申请 POST_NOTIFICATIONS;改为在设置页开启“任务通知”时先用途说明再申请,永久拒绝提供“前往系统设置”入口,首次后台生成给一次性非阻塞提示;系统权限与 App 内开关统一门控投递。
修复
- 安卓主题选择:主题/字体/间距切换改用统一的底部选择面板,选择立即生效并持久化,冷启动后保持(此前选择项失效不生效)。
轻语v0.15.1
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
更新日志
[Unreleased]
[0.15.1] - 2026-08-25
新增
- 在线更新:集成
electron-updater双通道更新(自托管镜像源优先、GitHub Releases 兜底),设置页将「软件更新」置顶,支持检查、下载进度、重启安装、镜像源配置,并提供服务器、GitHub 与夸克网盘三种手动下载入口;NSIS 开启增量更新(blockMap);推送v*标签自动构建并发版到 GitHub Releases;公告服务端新增/update静态托管目录用于镜像分发。
修复
- 在线更新可靠性与安全性:区分“无更新”和检查失败,开发模式不再误报最新;版本判断改用
electron-updater标准 SemVer 结果;正式版默认使用官方 HTTPS 镜像并强制安全协议,镜像保存失败显示原因;发布工作流新增版本一致性、类型、Lint 与全量测试门禁。
[0.14.0] - 2026-08-25
新增
- ComfyUI 文生图兼容:生图模型新增
ComfyUI后端,支持本地8188服务、远程代理鉴权、内置基础文生图工作流和自定义 API 工作流 JSON;可自动映射提示词、负面提示词、尺寸、随机种子、步数、CFG、采样器、调度器与 Checkpoint,并通过队列、历史和图片接口完成生成结果回收。 - 新对话默认长记忆:设置页“显示与行为”新增“新建对话默认开启长记忆”,开启后新建单聊与群聊默认使用自动模式,每 10 条消息总结一次;已有会话不受影响,角色卡自身的长记忆配置仍优先。
- 关键事实手动维护:长记忆面板允许添加纯文本事实,并支持行内编辑纯文本或“主体 / 属性 / 内容”结构化事实;结构化事实编辑时保留 ID、重要性、置信度与来源记录,单聊和群聊均可持久化。
变更
- 长记忆面板重构:面板改为分区式记忆控制台,直接展示启用状态、手动/自动模式、6/10/20/30 条快捷间隔、对话统计、当前摘要、关键事实和历史归档;增加窗口内滚动、空状态、回复中禁用提示、
Esc关闭与无障碍状态属性。 - 快捷设置图标统一:关闭、刷新模型、连接测试、搜索清除、世界书增删和说明按钮统一尺寸、边框、悬停、危险色与焦点样式,并补齐
aria-label/title。 - 预设列表扁平化:取消预设分组、折叠状态和编辑页分组字段,所有预设直接在统一网格中展示。
- 用户身份语义简化:移除身份页“当前 vs 默认”提示及“当前”状态,身份卡点击直接进入编辑,仅保留对新会话有明确作用的“默认”标记。
- 角色卡主操作精简:“开始对话”改为仅显示图标,保留悬停标题与无障碍名称。
- 对话分支命名调整:新分支继承原会话标题并追加“· 分支”,不再截取消息正文作为分支名称。
修复
- 手动事实的语义检索一致性:添加或编辑关键事实后递增记忆版本、清除旧事实向量和语义命中缓存;向量版本不一致时安全回退完整事实注入,避免继续检索到修改前的内容。
- 长记忆并发与检索正确性:单聊、群聊的摘要提交、手动事实编辑和消息派生记忆失效改为主进程版本条件写入,过期结果不再覆盖新数据;群聊等待落盘后才更新界面,保存失败会明确提示。
- 长记忆事实维护:事实达到 30 条后按重要性、置信度与更新时间淘汰,保留新事实;历史归档限制为最近 200 条,兼容旧数据缺失作用域及“本会话/本群聊”等模型表述,并把事实来源关联到实际证据消息。
- 长记忆预算与漂移:摘要输入预算根据模型上下文、提示词开销和输出预留动态计算;超长单条消息保留首尾后安全推进游标;时间线改为最多 8 条稳定事件,降低反复递归摘要造成的信息漂移。
- 事实语义分数透传:向量检索返回真实相似度并贯穿单聊、群聊排序和上下文预算,不再为所有命中项写死相同分数;置信度正式参与事实保留与注入排序。
[0.13.0] - 2026-08-25
新增
- Backup V2 全量备份:
zip容器 +manifest.json(版本/应用版本/时间/数量/哈希/未包含项)+sha256逐文件校验 +safeId路径遍历防护 + 原子写入与快照回滚;覆盖settings/characters(含头像/封面)/lorebooks/presets/personas/regex/quickReplies/mcp/usage/chats/groups全量,敏感apiKey默认剥离并在结果页明示;兼容V1 JSON导入;新增scripts/verify-backup.mjs(--self-test导出→清空→导入哈希比对)。 - 群聊默认选中:进入群聊页自动恢复上次选中,无则选中第一个,消除空状态多余点击;
localStorage:group-last-selected持久化。 - 身份搜索与导入导出:身份页新增搜索(名称/描述/性格)、
导入/导出 JSON(合并去重)、当前 vs 默认区分说明。 - 世界书搜索:左栏书级搜索(名称/描述)、右栏条目搜索(关键词/内容)+ 无匹配提示。
- 公告未读与刷新:未读蓝点(
localStorage:announcement-read)、手动刷新、最后更新时间、离线缓存徽章(WifiOff)。 - 独立预览模式:
window.api缺失时注入typed mock(src/lib/preview.ts),?preview=1顶部横幅,避免Vite直开白屏,支撑前端独立预览与视觉回归。
修复
- F-02/F-03 导入反馈:
settings:exportBackup/importBackup返回{status:'canceled'|'success'}结构化结果,取消不再误报成功;导入后全量重载settings/character/persona/groupStore。 - F-04 MCP SSE:表单禁用
SSE选项并标注“暂未支持”。 - 角色卡导入兼容性(
tags脏格式):部分社区卡tags为字符串导致visibleTags.map is not a function白屏,现已在导入归一化、落盘自愈、前端三层兜底,已入库脏数据自动修复。 - 弹窗可访问性:
Modal补role=dialog/aria-modal/aria-labelledby、焦点圈定、初始焦点、焦点恢复、body overflow锁定。 - 用量与备份文案:用量页明确“字符统计(精确 Token 开发中)”,备份说明与 README 同步为 V2 全量口径。
- 页面返回一致性:用量页移除同级返回箭头(
BarChart3标题)。
变更
- F-05/MCP/备份文案与导流:
H0先改文案止损,S1再落地代码,避免误导。 - 角色卡导入改为严格校验:
tags/alternate_greetings/group_only_greetings必须为string[],description等必须为字符串,否则拒绝导入并提示字段;历史脏数据仍由normalizeStoredTags兜底。 - 侧栏分组:14 个平级入口重构为核心/资源/服务/系统四分组,默认仅核心展开,保证
900×600下核心入口无需滚动;localStorage:sidebar-groups-collapsed记忆。 - 聊天页收敛:顶部收敛为
Token + 更多下拉(上下文/快捷设置/背景/生图历史/导出/清空),正文限宽780px提升阅读舒适度。 - 角色卡常驻主操作:网格卡常驻“开始对话”胶囊按钮,其余收进
⋯菜单,删除危险色分隔。 - 设置页分区:左侧目录(API/外观/行为/手机连接/语义/网络/数据管理)+ 滚动高亮 + 顶栏保存状态(保存中/已保存)。
- Tooltip:
group-hover升级为group-hover + group-focus-within,补role=tooltip与focus-visible。
轻语 v0.12.1
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
轻语 QingYu v0.12.1
本次更新
- 修复新对话链路双写导致的消息重影和 beta 流式显示异常。
- 完成长记忆分层预算、历史归档、游标感知检查点重算与群聊检查点同步。
- 语义触发改为复用已有 AI 连接档案,避免重复配置。
- Android 伴侣端更新至
0.1.5(build 6),补充通知、草稿、错误处理、搜索和安全存储等能力。
安装包
- Windows x64:
QingYu-PC-v0.12.1-x64-Setup.exe - Android 8.0+:
QingYu-Android-v0.1.5-build6.apk
Windows 安装包未配置商业代码签名证书,系统首次运行时可能显示安全提示。
Android APK 使用开发密钥签名,可直接安装;它不适合作为应用商店正式签名包。
SHA-256
ADDCB83741A83B6A8C1A6EE9AD608FDAEAC9C67DD8D8EC1FA72BBC1DF3C309C1 QingYu-PC-v0.12.1-x64-Setup.exe
846CB7D0E6506C87AE9813A3D7892C2FAC673D102DDE126578B65AE450B476A6 QingYu-Android-v0.1.5-build6.apk
验证
- TypeScript 检查通过
- ESLint 通过
- PC:141 个测试文件、1232 项测试全部通过
- Android:单元测试、Lint、APK 构建通过
轻语v0.11.27
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
🍶 轻语 QingYu v0.11.27
🐛 Bug 修复(12 项)
| 编号 | 问题 | 修复 |
|---|---|---|
| H-1/H-2/H-3 | 写操作 fire-and-forget | safeSave/safeFire 错误处理 |
| H-4 | 懒加载页面无 ErrorBoundary | 双层 ErrorBoundary(路由+消息级) |
| H-5 | Promise.all 无 try-catch | 改用 Promise.allSettled 容错 |
| M-1 | WS 心跳无 pong 检测 | 双向心跳 + 超时断开 + 连接上限 |
| M-3 | 角色列表 N+1 查询 | existsSync 文件存在性检查 |
| M-4 | replaceVariables 跨层导入 | 移至 electron/utils/ |
| M-5 | CSP connect-src 过于宽松 | 去除 http:/ws: |
| M-6 | setTimeout 未清理 | 5 处 cleanup 修复 |
| M-9 | 退出流程无日志 | MCP 超时 warn 日志 |
| L-6 | 版本号硬编码 | app.getVersion() 动态读取 |
| L-7 | Claude API 版本号 | 提取为常量 |
| L-8 | 正则每次重新编译 | 模块级预编译 |
🏗️ 仓库管理
- 清理 android/ 和 server/ 路径追踪(独立仓库)
- README 更新仓库结构说明
🧪 测试覆盖
- 新增 19 个测试文件,53 个测试用例
- 覆盖率:34.49% → 39.06%(+4.57%)
- 新增模块:electron/ipc、src/hooks、src/pages、streamController 深度测试
📦 依赖
- Electron 43.4.0
- React 18.3.1
- TypeScript 5.8.3
轻语v0.11.25
夸克网盘链接
https://pan.quark.cn/s/a9853284d260
[0.11.25] - 2026-08-17
依赖升级 + 代码质量修复
依赖升级
- Electron 32.0.0 → 43.4.0(修复 EOL 版本安全问题,Chromium 152 + Node.js 24)
TypeScript 编译修复
- bridge/ttsHandler.ts: 添加缺失的 restoreSecrets 导入(H-5 补完)
- bridge/routes.ts: pairingCode 类型安全处理(string | undefined → string)
ESLint 修复(17 项 → 0 项)
- 清理未使用的导入:ipcMain、readRules、QuickReply、ContextSettingsSnapshot、Preset 等
- remark-audio.ts: 添加 AudioNode 接口替代 any 类型
- ESLint 配置: 测试文件添加 argsIgnorePattern、vitest.config.js 解析修复
公告服务端
- 安装缺失的 jsonwebtoken 依赖
轻语v0.11.23
- 新功能
- 世界书(Lorebook)增强:at_depth 深度注入(v0.9.1)、语义触发向量 RAG(v0.9.4,嵌入服务 + 向量索引 + 余弦检索)、导入时智能推荐绑定(v0.11.11,CJK 感知匹配算法重写)
- 上下文与记忆:上下文模板 10 种内置(v0.9.3)、作者注释两级配置(v0.9.2)、长记忆升级为摘要+关键事实双段(v0.9.4)、上下文溢出 AI 压缩 + 记忆事实向量检索注入(v0.11.3)、上下文上限预警条(v0.11.4)
- 正则系统:触发器、停止字符串、text/markdown 双阶段、分组管理、引擎纯函数化(v0.9.5)
- 预设管理三批优化:导出/复制/分组(v0.11.5)→ 参数模板/Token 预算预览(v0.11.6)→ AI 生成预设 + 预设测试器(v0.11.7)
- TTS 双引擎扩展:OpenAI 兼容 TTS(v0.11.8)+ Edge TTS 免费 14 音色(v0.11.9)
- 快捷回复 + 宏系统:全局/角色级快捷回复、10 个内置宏、宏注册表(v0.11.2)
- 制作角色卡向导:三步流程(概念 → 封面 → 预览)、AI 一句话扩展、单字段帮我写、备选开场白、草稿持久化(v0.11.12)
- API 提供商扩展:OpenRouter/vLLM/LM Studio/TabbyAPI + 适配器注册表(v0.11.0);协议精简为 4 个真协议 + OpenCode Go 订阅接入(24 模型逐一实测,18 个兼容)(v0.11.10)
- 对话体验:单聊引用回复、会话标题自动生成(v0.11.4);用户人设注入规则可配置、群聊自由发言视角切换(v0.10.2)
2. 安全加固
- 纵深防御(v0.11.11):页面导航防护、生产 CSP 注入、公告 HTML 消毒、危险协议链接降级、日志 API Key 脱敏
- 26 项审查修复(v0.11.15):IPv4-mapped IPv6 SSRF 绕过、MCP 命令执行白名单、公告下载重定向校验、会话删除竞态等
- 凭据加密(v0.11.16):API Key 不再明文落盘,safeStorage 加密凭据库,备份自动剥离/迁移;服务端弱密码拒绝启动
- 依赖审计(v0.11.14):vitest 2→3、electron 31→32、electron-builder 24→26,63 漏洞降至 29,CI 新增审计门禁
- 早期基线(v0.8.2,区间前):JWT 密钥/管理员密码强制环境变量、登录限流、IPC safeId、SSRF 防护
3. 性能优化
- 流式渲染热路径拆分选择性订阅、字符统计增量缓存(v0.11.16)
- 群聊批量保存 IPC、GroupChatPage 23 个选择性订阅(v0.11.18)
- 路由懒加载 14 页、生产去 sourcemap(v0.11.17)
- 消息读取 LRU 缓存、流式 chunk 累积器节流(v0.11.23)
4. 架构与工程治理
- 大文件拆分:useChatStore(v0.11.20)→ MessageBubble 操作栏(v0.11.21)→ 五个超大文件按职责拆分,净删约 2100 行(v0.11.23)
- IPC 契约收口:事件通道常量化、注册器清单化、死代码清理(v0.11.17/v0.11.19)
- 测试基建:server 纳入 workspace 真实执行测试(v0.11.18)、角色卡模块覆盖率 95%+(v0.11.13)、CI 覆盖率门禁生效(v0.11.16)
- 文档治理:功能状态审计修正 README 失实宣称(v0.9.0)、路线图校准(v0.11.14)、帮助页新手指引完善(v0.11.22)
轻语v0.8.9
夸克网盘链接
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-quoteCSS 样式类
- 布局重构:新增
- 群聊背景层 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+ 步保护与解析
- 粗体文本误渲染为黑点:修复 AI 输出