Repository navigation
Releases: w2018/dsh-qq-group-digest
Releases · w2018/dsh-qq-group-digest
Release list
v0.5.2
v0.5.1
- [修复] 设置面板点开一片空白:v0.5.0 新增的每秒重连倒计时 hook(
useLinkTick)写在if (loading || !form) return之后,首帧不调用、数据到位才调用,React 报「Rendered more hooks than during the previous render」导致整个设置面板渲染失败。已把该 hook 提到所有提前 return 之前;新增test/client-structure.test.js扫描每个组件的 hook 位置守住这条回归。 - [修复] 普通总结与 AI 精细版看起来一模一样:数据层一直有
entry.text(普通总结正文)与entry.md(精细版 Markdown)两份,但网页详情区只渲染item.md,item.text从未被使用。新增renderCurrent()按当前视图取对应字段,普通总结读text、AI 精细版读md(并追加参与成员表)。 - [新增] 总结记录页双视图 TAB:左侧筛选条上方新增「普通总结 / AI 精细版」两个 tab,复用既有
.qd-tabs / .qd-tab样式;默认选中普通总结,点击只改state.kind并重渲染详情区,不刷新、不改路由、不重拉列表、不清选中;某一视图内容为空时只在该屏给占位并提示切到另一视图,不影响另一项。 - [优化] AI 精细版提示词按信息量收紧:新增「内容取舍」「与上一轮对齐」「边界处理」三段,明确由模型自主判断、不依赖关键词黑白名单,剔除寒暄/语气词/口语化/常识性/重复表述,高频词条只收实质词(口语词与泛词一律不收,凑不满就少写),历史已覆盖的要点不再重复输出,全无有效内容时只写「无有效内容」不编造,信息不足标「不确定」不补全。
- [优化] 精细版长度口径:由「建议 800–1200 字」改为「硬上限 1200 字、建议按实际信息量 300–800 字」,并禁止为凑长度扩写;新增「每节可被独立读懂、关键实体不因精炼丢失、结构与字段保持不变」的一致性约束。
- [说明] 单元测试 326 例全绿。
v0.5.0 总结质量与连接健壮性
v0.5.0(2026-10-25)
- [修复] 参与成员表去重:正文 md 不再输出成员表,
## 三、投递状态上移为第三节;成员表唯一来源是网页详情页可滚动列表,导出 .md 时现场追加;旧数据读取时内存剥离,磁盘不回写。 - [修复] 总结被莫名截断:根因是
callOnce()忽略finish.reason.kind === 'max-tokens',截断输出被当成功落盘(实测某批只剩 74 字)。现在 max-tokens 视为失败走重试,第 2 次起 maxTokens 翻倍(上限 32000);精细版同样回退本地渲染。 - [优化] token 额度重算:
model.maxTokens默认 1200 → 2048(普通总结,中文 1 字≈1–1.5 token,昵称与【】占位多,推理 token 也计入);新增model.detailMaxTokens默认 4096(AI 精细版)。 - [优化] AI 精细版限 1200 字:提示词改为「全文不超过 1200 个汉字,建议 800–1200 字」;代码兜底不硬切,超 1600 字才在段落边界截断并追加「…(内容较长,已截断)」。
- [新增] 两套 system prompt:普通总结(
prompt.system)与 AI 精细版(prompt.detailSystem)各一套,均可编辑、可一键恢复默认;设置页与网页端改为「普通总结 / AI 精细版」两个 tab,切 tab 不丢草稿;/api/qq-digest/prompt与/api/prompt均支持?kind=summary|detail。 - [修复] 不再强制配置投递目标:删除「delivery.friends 为空就报错」校验(原来会让插件 startError、管线不启动)。现在总结照常生成并进网页端与历史记录,只是不发 QQ,界面显示「未配置投递目标」提示。
- [新增] WS 掉线重连 UI:
NapCatWsClient新增reconnectAttempt / nextRetryAt / retryInMs / lastConnectedAt / lastDisconnectAt / reconnecting与linkStatus();界面显示「协议端已断开,N 秒后重连(第 K 次)」,N 每秒递减,到 0 显示「正在重连…」。 - [修复] QQ 消息过滤复核:关键词(大小写不敏感/子串)、按成员排除、非监听群、非群消息四类过滤实测均正常计数,语义未改,本次补齐 11 条过滤链路测试覆盖。
- [说明] 全量测试 308 例全绿(原 241 例)。
v0.3.0 独立 HTTP 网页服务(配置 / 日志 / 总结记录)
- [新增] HTTP 网页服务:独立
http.createServer,默认关闭、默认端口 1213、默认监听 0.0.0.0、默认开启密钥验证(随机生成,仅存掩码);端口被占用只记错误不阻塞插件。关闭不影响 DSH 设置页与 WS 管线。 - [新增] 配置页:与 DSH 设置页功能对齐的九张卡片(运行状态 / 网页服务 / 监听 / 过滤 / 批次 / 模型 / 提示词 / 投递 / 存储),脏字段提交、保存即热生效、支持撤销与恢复初始配置。
- [新增] 日志页:级别 / 群号 / 关键字 / 时间范围筛选,SSE 实时推送,导出
.jsonl,分页加载;日志按天落盘logs/<日期>.jsonl,默认保留 7 天。 - [新增] 总结记录页:按群分组,每条记录渲染完整 Markdown 文档(标题 / 要点 / 参与成员表 / 投递状态),支持复制、下载
.md、看原始文本、上下条翻页。 - [新增] Markdown 渲染:零依赖本地渲染器
lib/summarize/markdown.js与前端static/md.js,先转义再渲染防 XSS,javascript:/data:链接被拦截。 - [新增] AI 精细版总结:
summary.aiDetail开关,打开后每批再调一次模型产出 800–2000 字长文;失败自动回退本地渲染,绝不影响投递。 - [新增] 提示词可编辑:
prompt.system支持界面改写与一键恢复默认;默认提示词抽成DEFAULT_SYSTEM_PROMPT常量(722 字符,与旧实现逐字一致)。 - [修复] 多群合并超长截断:原先把多个群的总结合并成一条 QQ 消息,容易撞上单条字数上限被截断。改为每群各自渲染、各自发送一条独立消息;单群超长才分段,某群失败不影响其它群,dryRun 与失败兜底也按群分文件。
- [优化] Markdown 标题去重:群名为空或等于群号时标题只显示一次群号,不再出现「# 123 · 123」。
- [优化] 投递结果按群回填:历史记录的
delivered/failed改为按群分别回填,不再用一个全局结果覆盖所有群。 - [优化] 设置页最近报告按群分块:每个群一块(群名 + 条数 + 成功/失败标记),不再拼成一整段长文本。
- [修复] settings.json 写错目录:
storage.dir为空时storageRoot回落到$DSH_HOME根目录,配置「保存成功」却读不回来。改为先resolveConfig再取路径。 - [修复] 勾选开启后端口不监听:通用
POST /settings只重建运行态、不重新 listen,而重启监听只写在/http专用端点里,于是网页端勾选「开启」显示已保存却始终连不上。改为httpServer段任一字段变化即restartHttp(),恢复初始配置同样触发停止监听。 - [修复] 静态目录存在后首页 404 用例失效:改为请求必然不存在的路径断言 404 与
cache-control: no-store。
v0.2.0 信息过滤(关键词 + 按成员排除)
- [新增] 关键词过滤:消息文本包含任一关键词(子串模糊匹配、不区分大小写)即丢弃,不进入总结批次。
- [新增] 按成员排除:分群维护排除成员名单,其发言不计入总结;设置页「信息过滤」卡片两步下拉(先选群拉成员列表,再搜索选择成员)。
- [新增] 成员选择:新增
GET /api/qq-digest/members?groupId=路由与groupMemberListaction,成员选择支持昵称 / 群名片 / QQ 号快速搜索。 - [优化] 成员列表布局:成员选择由原生下拉改为紧凑滚动列表(行高 28px、限高 180px 自适应宽度),消除大面积空白;空列表 / 搜索无匹配 / 拉取失败各有明确提示。
- [优化] 数据自动刷新:状态与最近报告改为 5 秒轮询自动刷新,不再需要切页重进;保存 / 忙碌期间暂停轮询并做在飞去重,避免重复请求。
- [优化] 过滤可观测:丢弃原因计入
dropReasons(keyword/excluded-sender),可在运行状态里看到过滤量。 - [修复] 关键词保存后丢失:
sanitizeOverride静默丢弃白名单外字段,旧后端不认listen.keywords导致「显示已保存其实没存」。改为 POST 返回droppedFields,前端有丢弃即报错而非假成功。 - [修复] 成员拉取 unknown route:
/members路由随插件载入,热重载只换 Runtime 不重载 index.js。新增BACKEND_VERSION与能力清单,版本不一致时页头直接提示重启 DSH;拉取失败也给出可操作文案。 - [修复] 关键词大小写被改写:配置层不再强制转小写,保留用户原始输入,匹配时才忽略大小写。
- [修复] 孤儿排除名单:不再监听的群,其成员排除名单自动丢弃,设置页不残留无效芯片。
v0.1.0
- [新增] 群消息采集:连 NapCat OneBot11 正向 WS,按群白名单采集,
(group_id, message_id)双层 LRU 去重、real_seq排序与缺口标注。 - [新增] 批次触发:每群独立状态机,
threshold/maxBuffer/maxWaitMs三条件任一满足即冻结,freezeGraceMs抗乱序抖动。 - [新增] 总结与降级:走
ctx.llm.stream,凭证/代理/路由全由 DSH 管理;路由三级回退,失败指数退避重试,耗尽后降级为原始摘录仍投递。 - [新增] 报告投递:多群按群名/群号编号成一份报告,超长按行分段,段间间隔防风控;全失败兜底写
outbox/failed-*.md。 - [新增] 设置界面:注册
settings.section,七张卡片;保存即校验→落盘→热重建运行态,不重启 DSH;折叠卡片仍显示启动/连接徽章。 - [新增] 群进度指示:群芯片前显示
[已累计/阈值],阈值优先取batch.perGroupOverride。 - [新增] 历史总结上下文:每群
summaries/<群号>.json存最近 20 条,每次总结附带此前historyCount条;先落历史再投递,投递结果回填。 - [新增] 侧边栏入口:
ui.sidebarEntry开关,注册main+sidebar.panellist,老宿主回退sidebar.footer.action,轮询跟随开关变化。 - [新增] 热重载:
lib/整树复制到generations/再import绕过 ESM 缓存,新一代起来才停旧的;未总结消息经snapshotPending/restorePending继承。 - [修复] 投递必然失败:
Pipeline早于 WS client 构造,actions一直为undefined,报Cannot read properties of undefined (reading 'sendPrivate');改由Runtime在createActions后回填。 - [修复] 保存配置丢 pending:热重建把缓冲区直接清空;新增快照/恢复,且恢复必须放在
start()的running = true之后,否则达阈值批次被静默丢弃。 - [优化] 发言人称谓:提示词硬约束昵称一律用【】包裹,降级摘录同步改格式。
- [优化] 精简代码:删除客户端不调用的
/config、/model、/outbox路由与outboxFiles、buildAndDeliver、oldestArrival、groupHistory、MessageStore.read、onAttempt等死代码;listen.ignoreTypes因post_type !== 'message'恒丢弃而移除;/settings去掉无人消费的overridden/overlayKeys/baseGroups/defaults。 - [说明] 单元测试 85 例全绿(
node --test "test/*.test.js");真实 DSH 内POST /api/qq-digest/reload需重启一次 DSH 才挂上新路由,之后改lib/**点按钮即可。