Repository navigation
夸克网盘链接
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 通过