Skip to content

Releases: QWQcool/dsh-trivium

0.8.4 — 设置页重构

Choose a tag to compare

@QWQcool QWQcool released this 03 Nov 04:26

0.8.4 — Settings surface rebuild

2026-11-03. Presentation only: server behaviour, default switches, database format, model tools, token budgets and the supersede rules are unchanged.

What changed

The settings card used to be one long page with two tabs (memory / recall). It is now four pages, still behind the single host entry Settings → Trivium memory.

Page Holds Was
Memory (default) Workspace picker, type filter, search, expired / replaced switches, entry list and inline editing, archive / delete / merge, replace and undo the list tab
Context “Sent this turn” (real delivery ledger + budget) and a read-only probe (candidates, real drop reasons, the text that would be sent) first half of the recall tab
Activity Run diagnostics (last extraction, stuck, recovered, last map injection), revision-chain check, pending corrections, recovery state, change log, recall traces second half of the recall tab + diagnostics that had no home
Settings Memory behaviour (injection strategy + configuration fold), display (plugin language), data (export / import / external), vector (embedding), about (update check) the always-visible tail of the old page

Also:

  • Ctrl/Cmd+K command palette: 4 pages and 13 section entries; substring first, subsequence fallback; ↑↓ to select, Enter to jump, Esc to close, Tab trapped inside; focus enters the input on open and returns on close. It only navigates — it never writes a setting.
  • Detail in three containers: at ≥1000 px of card width the node detail sits beside the list; 720–999 px opens it as a dialog (Esc / backdrop close, focus trap); narrower keeps the inline expansion. The band comes from the card's own width (ResizeObserver), not the window — the host settings modal is a fixed ~600 px.
  • Visual language: the prototype's 12 colours and 12 px radius are CSS custom properties on the card root, and every ui.* value keeps its old literal as a fallback. The card follows the host light/dark scheme; outside the card (chips tab, host shell) nothing changes.
  • Grouped settings: “Check for updates” moved from second to last; language, injection strategy, data and vector are no longer hidden inside the fold. The fold keeps the advanced switches only.

What did not change

  • Tool names, parameters and return shapes, DIM=1536, the schema, and the pinned triviumdb version.
  • Defaults: injection off, extraction on, chips off, embedding off.
  • No new server endpoint and no new write path. “Add memory” still goes through the existing text-only POST /chips.
  • No “strict create” flow (that needs a creation contract first), and no button that cannot work.

Verification

Layer Result
Structure regression node scripts/smoke-p78.mjs → 54/54 (four pages, three layout bands, palette, Esc/focus)
Full suite node scripts/run-all.mjs → 74/74 (0.8.3 was 73/73; p78 is new)
Existing client tests p18/p24/p26 remapped to the new pages; the assertions keep their intent (on-demand loading, corrections queue, settings save receipt)
Real host Local DSH web: four pages switch, Ctrl+K works, 420 px card expands inline, widening to 1120 px shows the side detail pane; workspace .dsh files kept their mtime during the run
Evidence check node scripts/verify-evidence.mjs → 9/9

Known limits

  1. The 900–1199 px dialog band is only covered by structure tests — the host settings modal is a fixed ~600 px, so the real host cannot reach it.
  2. Dark theme was not verified on the device — screenshots and the host run were light; the variables and fallbacks exist but were not eyeballed.
  3. The palette only navigates: no save, import or delete runs from it, so it cannot bypass a confirmation.
  4. Page state is not persisted: reopening the settings returns to Memory; drafts survive page switches.
  5. No migration: no schema change, no settings-key change.

Upgrade

dsh plugin --profile web add dsh-trivium@0.8.4
# restart dsh web

0.8.4 — 设置页重构

2026-11-03。只改前端呈现:服务端逻辑、默认开关、数据库结构、模型工具、token 预算与决策替代判据一律未变。

变了什么

设置卡从"一个长页面 + 列表/召回两个标签"改成四个页面,宿主入口仍然只有一个(设置 → Trivium 记忆)。

页面 装什么 原来在哪
记忆库(默认) 工作区、搜索/类型/过期/已替代筛选、条目列表与编辑、归档/删除/合并、更正与撤销 列表标签
上下文 「这一轮实际发送」(真实送达 + 预算)、只读试算(候选、被丢弃原因、将发送文本) 召回标签前半
运行记录 运行诊断(上次抽取/卡住/已自愈/上次地图注入)、维护检查、更正队列、恢复状态、记忆变化、召回轨迹 召回标签后半 + 无处安放的诊断
设置 记忆行为(注入策略 + 配置)、显示(界面语言)、数据(导出/导入/外部记忆)、向量(embedding)、关于(检查更新) 常驻在长页面底部

其它:

  • Ctrl/Cmd+K:命令面板,4 个页面 + 13 个分区入口;子串优先、子序列兜底;↑↓ 选择、Enter 跳转、Esc 关闭、Tab 锁在面板内;打开时焦点进输入框,关闭后归还。只导航,不写任何设置。
  • 详情三档容器:卡片 ≥1000px 时右侧粘性栏、720–999px 居中弹窗(Esc/遮罩关闭、焦点陷阱)、更窄时保持行内展开。分档按卡片自身宽度(ResizeObserver),不是窗口宽度——宿主设置弹窗固定约 600px。
  • 视觉:设计稿的 12 个颜色与 12px 圆角以 CSS 变量挂在卡片根节点,ui.* 全部带旧值回退,因此卡片跟随宿主明暗,卡片外(芯片页、宿主壳)不受影响。
  • 设置分组:"检查更新"从第二位挪到最后;语言、注入策略、数据、向量不再藏在折叠里,折叠里只剩高级开关。

没变什么

  • 四工具名称/参数/返回、DIM=1536、schema、triviumdb 版本均未动。
  • 默认开关未动:注入默认关、抽取默认开、芯片默认关、embedding 默认关。
  • 没有新增服务端接口,也没有新增写路径;面板的"新增"仍走既有的纯文本 POST /chips。
  • 没有实现"严格创建记忆"(需要先定创建契约),也没有新增无法落地的按钮。

验证

层 结果
结构回归 node scripts/smoke-p78.mjs → 54/54(四页、三档布局、命令面板、Esc/焦点)
全量 node scripts/run-all.mjs → 74/74(0.8.3 为 73/73,新增 p78)
既有客户端测试 p18/p24/p26 按新页面映射(断言意图不变:按需拉取、更正队列、设置保存回执)
真宿主 本机 DSH web:四页可切、Ctrl+K 可用、卡片 420px 时行内展开、撑到 1120px 出现右侧详情栏;试验期间工作区 .dsh 文件 mtime 未变
证据校验 node scripts/verify-evidence.mjs → 9/9

已知限制

  1. 900–1199px 的弹窗档只在结构测试里验证:宿主的设置弹窗固定约 600px,实机跳不到这一档。
  2. 深色主题未实机验证:本次截图与实跑都在浅色系统下;变量与回退是为深色写的,但没有肉眼确认。
  3. 命令面板只导航:不执行保存、导入、删除一类写操作,避免在面板里绕过确认。
  4. 页面状态不持久:刷新或重开设置回到记忆库;草稿在切页时保留。
  5. 升级不需要迁移:没有 schema 变化,没有设置键变化。

升级

dsh plugin --profile web add dsh-trivium@0.8.4
# 重启 dsh web

dsh-trivium 0.8.3

Choose a tag to compare

@QWQcool QWQcool released this 02 Nov 10:10

dsh-trivium 0.8.3

状态:待发布(发布后补时间与 latest 确认)。

这一版是正确性补丁,共 24 个提交。核心是四件事:改口不再覆盖旧决策、来源与变更可追溯、
幻觉日期与可疑空回答有据可查、同一工作区只允许一个写者。

修复(会静默丢事实或给出过期答案的)

缺陷 修前 修后
改口被"合并"吞掉 「不用 A 了,改 B」合并进旧节点,旧正文被覆盖,supersededCount=0,无替代边 替换场景新增节点 + 建 supersedes 边,旧正文保留(并在 payload.history 留最近 3 版)
会话启动先建图、后重放 15 次真机里 3 次新会话拿到 decisions=0,答"没有记录" 先 await 重放(上限 8 秒)再建图;超时继续启动并记 replay-timeout
可疑空候选 模型对含决策的窗口回 {"candidates":[]},窗口被消费,事实消失 规则层无产出且窗口明显含决策时再问一次(最多一次),仍空则记 emptySuspicious
幻觉绝对日期 On 2026-04-06(会话发生在 10-30)原样入库 日期必须能被本轮原文或唯一相对表达(按该轮时间戳)解释,否则删除并上报
删除日期留残句 2026-07-13 起采用… → 起采用… 连接词随日期一起删除
同一写入重复落库 重放 + 轮末各写一条措辞不同的副本 按"同一事件 + 同名"折叠;同义改写不再写成两条
第二个写者直接崩 两个宿主进程同工作区,后者 openWorkspaceDb 抛错、进程退出 1 写锁在开库之前获取;失败方不开库、保留 pending、记 lock-busy,下一事件继续
凭据经诊断接口回显 日期清洗的 adjusted.preview 携带合成凭据片段进 /status 凭据闸门前置;预览再过闸,不通过写 <redacted>

新增

  • 来源贯穿:节点记录宿主真实事件定位(seq / messageId / at / role / quoteMatch),
    缺失字段为 null + recorded:false,不用节点 id 或当天日期伪造;hostText 恒为 unavailable(无回读接口)。
  • 变更记录:GET /api/dsh-trivium/changes,每工作区最多 200 条,落盘前脱敏,opId 幂等,裁剪有明确标记;
    面板「记忆变化」区块显示写入/合并/替代/拒绝/日期调整/恢复超时/写锁占用。
  • 合并历史:payload.history 保留被覆盖的正文(上限 3、倒序、旧凭据正文 <redacted>),
    节点列表直接展示"合并前的正文"。
  • 空回答可见:status.emptyAnswer 记录"这一轮没有任何文本"的轮次。

行为变化(升级前请读)

  1. 改口不再覆盖旧节点:替换场景会新增节点并建边,旧库里同一个决策的多次改写将呈现为链;
    已有历史不会被自动重建,升级前的覆盖无法找回。
  2. 短地图只列当前决策:已被替代的决策不再出现在短地图,ctx_read 仍可读到。
  3. 会话启动最多多等 8 秒(pending 重放预算);超时后台继续,pending 保留。
  4. 同一工作区只允许一个写者:并发时后来者跳过本轮抽取并记录 lock-busy,不排队、不崩溃。
    该锁只覆盖自动抽取写入;ctx_remember 与文件导入仍可能撞"已被打开"错误。
  5. 可疑空候选可能多花一次模型调用(仅限"窗口明显含决策且规则层无产出")。

已知限制(请勿对外宣称"不会误判")

  1. 自动替代是措辞启发式:经四轮独立复验,仍未覆盖所有说法;已登记的守卫包括问句(含句中问句)、
    引号/转述、未批准、撤回(含否定式)、讨论/假设、方向(弃用 vs 改用)、候选顺序。
    未预料到的措辞仍可能误退休,这是本版接受的风险;彻底的解法是把替代改为"提案 + 用户确认",
    已写入 docs/next-memory/SUPERSEDE-CONTRACT-OPTIONS.md(P / P′),本版未实现。
  2. 完全无替换措辞的改口不退休(例:"还是回到最早的方案吧"),只上报 no-replacement-wording。
  3. 同义改写在改名/改措辞时仍可能留两条节点(精确同文与同名会折叠)。
  4. 日期只识别 YYYY-M-D 三种写法;不认美式 04/06/2026、英文月份、中文数字日期;
    过去 7 天以外的相对表达不解析。
  5. emptyAnswer 是进程内状态,只对仍在运行的宿主有意义;HTTP 级自动回归未覆盖(仅脚本验证)。

测试与证据

  • 离线全量:node scripts/run-all.mjs → 73/73;node scripts/verify-evidence.mjs → 9/9。
  • 独立复验脚本(第三方编写、未修改期望):attacks.mjs 12/12、punctuation.mjs 11/11、
    additional.mjs 6/6、counterexamples.mjs 全部符合。
  • 真机证据与逐片修前/修后:docs/next-memory/evidence-write-provenance/W1..W15/。
  • 内核仍为 triviumdb@0.9.0-beta.3(与 package.json pin 一致),工具名、DIM=1536 未变。

升级建议

npm i dsh-trivium@0.8.3 后重启宿主。数据库格式未变,可直接打开旧库;
但已被 0.8.2 覆盖丢失的旧正文不会恢复。

dsh-trivium 0.8.2

Choose a tag to compare

@QWQcool QWQcool released this 30 Oct 08:35

dsh-trivium 0.8.2

状态:已发布到 npm。latest=0.8.2 已确认(2026-10-30 15:32 +08:00 注册表直查 dist-tags,发布后约 3 分钟生效)。
本轮是正确性补丁 + 一项新增能力:修掉 4 个会静默丢事实/给出过期答案的缺陷,新增"经用户确认的偏好导出"与其消费端自校验。

数据格式、默认开关、四工具的契约、内核 pin(triviumdb 0.9.0-beta.3)均未变,可直接替换 0.8.1。

修复

1. 工具指令句不再是"整轮丢弃"

「按顺序调用工具,生产端口是 9443。」原先命中工具指令词后整轮被丢弃,事实直接消失
(shouldExtractBatch → {call:false, reason:"empty"})。现在按句判定:只有去掉指令短语
和 ctx_* 工具名后只剩指令填充的句子才算纯操作,混合句整轮保留并走正常抽取。

2. 抽取返回空文本 = 失败,而不是"没有内容"

模型把 token 预算花在 reasoning 上时会返回空正文,旧实现把它当成 {"candidates":[]},
于是消费窗口、清空 pending,事实静默丢失。现在空/纯空白回答标记为失败,pending 保留待重试;
显式空候选列表仍是成功。

3. 抽取调用改 reasoningEffort: "off"

同一原因的另一半:maxTokens 从 400 提到 900 后仍有 12/18 次被 max_tokens 截断。
抽取是 JSON 杂务,现在显式请求关闭推理(宿主目录不认该档位时回退一次去掉该选项,
不会因此让抽取不可用)。实测截断 12/18 → 0/18,抽取命中 5/9 → 9/9。

4. 凭据闸门补上"值"的形状

原规则只认 api_key|secret|password|token|bearer|sk- 这些英文词,中文「口令 verify-QA-71」
能直接入库。现在额外识别 GitHub/AWS/Google/npm/Slack 前缀、JWT、PEM 私钥,以及
"密码/口令/密钥/令牌 + 值"的中文写法;同时把英文词从"裸词"收紧为"词 + 值",
修掉「token 预算 500」被误判为凭据的旧问题。拒绝原因会记录,且不会把密文写进日志
(preview 固定为 <redacted>)。

5. 改口时会退休被替代的决策

「先别动方案 A」与「更正:不再使用方案 A,改用方案 B」原先写成两个独立决策,
短地图把两条都列出来,模型有时答已被撤销的 A。现在新决策含显式替换词
(更正/改为/改用/不再使用/替换/取代/放弃/作废/replace/switch to)且点名了某个活的旧决策时,
建立 supersedes 链;短地图只列当前决策,历史仍可 ctx_read 到。真实复验 3/5 → 10/10。

6. 新会话先重放 pending,再建短地图

会话启动原先先建短地图、再 fire-and-forget 地重放遗留窗口;单轮进程可能在重放落地前退出,
下一个会话于是读到空库、注入 decisions=0 的地图并回答"记忆里没有记录"(15 次里 3 次)。
现在先 await 重放(上限 8 秒,超时继续启动、pending 保留)再建图。

7. 凭空写出的绝对日期不再入库

抽取会在事实里编日期(实测 On 2026-04-06 …,对话发生在 10-30)。现在候选里的绝对日期
必须在本次窗口原文里出现过,否则删除日期、保留事实并上报 adjusted;删空则整条拒写。
窗口含相对时间表达时按 [now−7d, now+400d] 放行正确换算("下周五"→具体日期不再被误删)。

新增

偏好导出(可选,默认不启用)

dsh-trivium-prefs 提供 init / export / revoke / status / verify:

  • 绑定 = 工作区 + 消费方 + 用途 + 逐条授权(soft/hard),跨工作区/跨消费方一律拒绝;
  • 快照跟随决策后继链,跳过 fork/归档/过期/脏数据;≤8 条且 ≤300 估算 token,
    超限报错并给预览,不静默截断;带 digest = sha256(规范化事实);
  • 原人设文件一个字节不改,另生成 persona-with-prefs.md 供消费方读取;
  • 撤回是清空偏好块而不是停止刷新,之后 export 直接 binding-revoked;
  • verify 只读校验:重算 digest、绑定状态/消费方、是否过期、块是否仍含每条已批准事实、
    消费方文件是否带块、库指纹是否变化(库被占用时该项跳过并在输出标注)。

测试

node scripts/run-all.mjs → 50/50 passed(p0–p49)。本轮新增回归:
p42 38、p43 17、p44 13、p45 11、p46 34、p47 16、p48 13、p49 17。

真实模型验证(隔离 DSH_HOME、合成数据、未登录真实账号):8 组约 101 次运行,约 ¥1.23。
其中同一改口夹具 3/5 → 4/5 → 5/5 → 10/10;5 场景 × 5 重复基线抽取命中 25/25、进库 25/25。

已知问题

  1. 关掉抽取推理后,模型不再自行隐去"像凭据"的内容,安全职责移到本地正则;规则有覆盖上限
    (既无前缀、又无"密码/口令"字样、也不是 JWT/PEM 的自造口令会漏)。
  2. 会话启动最多多等一个抽取调用(8 秒上限);一次性进程会因该请求未结束而延迟退出。
  3. 日期闸门是字面比对:不认 04/06/2026、英文月份、中文数字日期;相对时间放行是区间近似。
  4. 替代链判定是启发式(显式替换词 + 标签命中),多目标时串成链而非拒绝。
  5. skipped / adjusted / superseded 目前只写进 lastExtract 与日志,UI 尚无入口;
    verify 是可选手动命令,消费端不会自动调用。
  6. 依赖仍为 triviumdb 0.9.0-beta.3(与 0.8.1 相同),上游 0.9.0 稳定版未发布。
  7. 未覆盖:自然增长触发的压缩、摘要质量单独判分、多模型、5/10/20 轮长会话。

升级建议

  • 直接替换即可;四工具签名、.tdb 数据格式、默认开关均未变。
  • 若你在用自定义 profile 或脚本调用 distill,返回值多了 skipped / superseded / adjusted
    三个字段(只增不改),llmFailed 的语义扩大到"空回答也算失败"。

dsh-trivium 0.8.1

Choose a tag to compare

@QWQcool QWQcool released this 29 Oct 09:59

dsh-trivium 0.8.1

Correctness patch plus the evidence behind the numbers.

  • Injected summaries of long facts now keep both ends: head 89 + … + tail 110 characters, applied by one rule in the search line, the revision projection and the budgeted render.
  • Removed an undocumented topK: 3 cap that sat in front of the 300-token turn budget: six parallel facts were cut to three while the block spent only 89 tokens.
  • Same round publishes the C4 counterpart install/comparison, the D0 re-measurement (18/18 at 97 injected tokens), D1/D2 cost measurements and a re-checkable evidence ledger with sha256 manifest.

Limits: the 10-turn net still loses money once extraction is priced in (-¥0.00139 per session per-turn, -¥0.00046 batched; break-even extrapolates to ~16-20 turns, not measured). 50k-node tier is not covered in this release.

npm: https://www.npmjs.com/package/dsh-trivium/v/0.8.1

Attached tarball SHA-256: 3e025d501ecc305d4479f966f5fda041ead79e015ed474712e1b5959d49af020

0.8.0 — 记忆管理、可靠性与预算优化

Choose a tag to compare

@QWQcool QWQcool released this 29 Oct 04:32

0.8.0 更新

  • 设置页支持工作区切换、操作回执、只读导入预览和实际投递记录;提交前校验库指纹。
  • 修复精确名称召回、模型绕过版本关系确认、损坏版本链投影,以及抽取期间新增消息丢失、冷却后不继续等问题。
  • 纯致谢跳过抽取模型;模型侧摘要去除本地工作区路径,完整读取改为紧凑 JSON。四个工具、默认开关和数据格式保持不变。

安装与升级

通过 DSH 安装 npm 包:

dsh plugin --profile web add dsh-trivium@0.8.0

升级前请停止宿主并备份完整的工作区 .dsh/trivium.tdb* 文件组。附件 dsh-trivium-0.8.0.tgz 是与 npm registry 一致的包;GitHub 自动生成的 Source code 压缩包是源码归档。

验证与范围

离线回归 35/35;最终包干净安装、真实 DSH rc.4 peers 13 项及隔离 Web HTTP 检查通过。10 个合成场景的图工具组严格字段分数 29/30,唯一扣分为格式差异;测试不足以证明图记忆优于纯文本或同类插件。C4 对手横跑、当前版本桌面完整手工验收及长期实际成本尚未覆盖。

完整发布说明 · 质量和成本评测 · npm 包

附件 SHA-512 (SRI): sha512-ZSxoYh/cquLCzoiJfIRC8U+o8l5czlhTUY6LIT9boT2HHK/3MlfF7KPlh2nedBQmWkr67EMVuhIQp7T7WTzy8A==

0.7.1 — 可靠性补丁:JSONL 原子提交 / 更正合并 / 面板状态同步

Choose a tag to compare

@QWQcool QWQcool released this 28 Oct 10:31

0.7.0 的可靠性补丁,承接缺陷审查与可靠性收尾。不引入新模型工具、外部服务、默认自动召回或新数据格式;内核继续精确锁定 triviumdb@0.9.0-beta.3。

npm dsh-trivium@0.7.1 于 2026-10-28T10:22:01.918Z 发布(北京时间 2026-10-28 18:22:01),registry 直查 latest=0.7.1。发布源码 b560722ea9a88e7c275d361037de9f2813c1a45e,标签 v0.7.1 指向该提交;最终 tarball 37 文件,shasum bb7fd9186f7ea468072ec5fc696f32ea0514816c。

本次变更

  • JSONL 不再逐条提交事实:与 JSON 共用 URI 身份、最终图校验和原子事务。事务失败不留半条链、不更新成功 hash,失败输入不被自动写出覆盖;恢复原文件或移除失败输入后可以重试。
  • 归档与版本链的关系:合法归档是可用性状态,不是版本链损坏。JSON/JSONL 保存归档链端点与关系,避免克隆后旧版本复活;新建替代操作仍拒绝归档端点。
  • 更正与边的边界:待发更正合并到最新状态,同一轮的不同变化不会误去重;较早的在途通知不能消费更新的待发通知。32 条边可解析为 33 个节点,第 33 条边写入前拒绝。
  • 自然到期与预算:已投递决策在后续 pre-step 自然到期时排入短更正;更正先于重复 pins 使用原有每轮 300 估算 token。注入关闭或本轮预算不足时保留并解释原因,不绕过关闭选择,不承诺无条件下一条送达。
  • 旁路与诊断:旁路 health、最后注入/抽取/计划/trace 按工作区返回。显式生成旁路失败同样进入 health,设置页展示恢复提示。
  • 设置面板:绑定已显示的工作区;修复快速搜索与写后刷新竞态。替代/撤销发生 409 后同步列表并失效旧缓存,保留弹窗选择但不自动重提;已替代节点按当前筛选隐藏。条目标题可键盘展开,永久删除确认一致;替代弹窗限制 Tab 焦点,Escape 只关闭内层并返回仍存在的触发器,否则回到面板标题;多版本历史不再显示「没有历史」。原生下拉选项使用成对宿主主题颜色,修复深色白底不可读。
  • 维护 CLI:期限清理默认 dry-run 使用只读句柄,不同步旁路、不写事实或设置;两个维护 CLI 的帮助命令不打开数据库。
  • 文档:统一当前入口,迁移历史引用后删除三个重复草稿;保留原始验收与冻结 JSON。抽取的本地/联网边界已准确说明。

升级

停止使用该库的宿主,备份工作区完整 .dsh/trivium.tdb* 文件组,再通过 DSH 升级并重启。JSONL 是业务事实交换文件,不含全部本机数据,不能替代完整备份。

dsh plugin --profile web add dsh-trivium

JSON 图 version: 2 和 JSONL v: 2 不变。补丁不会自动修复此前已经丢失的正文或合并身份;体检报告结构问题后应使用原始导出或完整备份恢复,不能靠猜测重建。

验证与边界

  • 最终回归 26/26,smoke-p23 47 项、p24 12 项、p25 32 项;最终 tarball 干净安装与 13 项真实 peers 验证通过。
  • 用户手工确认键盘、深色/900px、两浏览器冲突与冲突后列表刷新;实际 Web HTTP 导入文件锁失败/恢复通过。
  • 未覆盖:完整 UI 导入故障、独立安装桌面制品的全流程。受控 pre-step 不等于真实模型质量评测。
  • 仍只支持 ≥900px,一个库一个读写进程;投递与更正账本仍为进程内状态。自然到期跟踪限于本进程已投递的 pin/recall 事实,不扫描整个会话历史,不新增后台计时器。

完整说明:docs/release-0.7.1.md · 验收记录

0.7.0 — 更正与版本链的可观测性

Choose a tag to compare

@QWQcool QWQcool released this 28 Oct 10:31

可观测性版本:把已经存在的更正队列和版本链体检暴露到设置页,并补上侧车失败的故障注入回归。记忆格式、默认值和四个工具均未变。

npm dsh-trivium@0.7.0 于 2026-10-28T07:33:32.881Z 发布,latest 指向 0.7.0。产物 shasum 14545bd60a6b3dafaf3afa049873dfa5b1dfeb3c,37 个文件,与本地 npm pack 一致。

本次变更

更正可见

  • 账本记录最近真正送达的更正(sentCorrections,账本最多 20 条;API 返回最近 10 条,UI 展示最近 3 条)。
  • 新增 GET /api/dsh-trivium/corrections?cwd=,按会话返回 pending / sent,并按工作区过滤。
  • 设置 →「召回检查」新增「更正」区块:待发显示「下一条消息生效」,送达后显示「✓ #id … 最近已发送」。

版本链体检入口

  • 新增 GET /api/dsh-trivium/integrity?cwd=,复用只读 checkRevisionIntegrity(db)。
  • 设置 →「召回检查」新增「检查版本链」按钮,显示「版本链正常。已扫描 N / M」或问题列表。

回归与文档

  • smoke-p22 新增 CORR-22(待发/已发、按工作区隔离)与 B3-22(旁路文件故障可见 + 重开 bootstrap-write 恢复 + 索引重建)。
  • README / README.zh-CN 增加桌面端 EPIPE 排障说明(宿主 electron-updater,非插件)。

升级

npm install dsh-trivium@0.7.0
# 或在 DSH 桌面端「插件」页升级
  • 0.6.0 用户可直接升级;没有数据迁移,v2 格式不变。
  • 两个新接口是只读的,不改变注入、抽取、芯片或 Git 旁路行为。

验证

  • npm test:23/23 脚本通过;smoke-p22 38 条、smoke-p18 43 条。
  • Web 宿主 @deepseek-ai/dsh@0.2.1-rc.4:待发→已发、体检 3/1、Tab 顺序(19 个停靠点)、Escape 焦点归还。
  • 桌面端 @deepseek-ai/dsh@0.2.1-rc.3(正常重启):通过内部 API 验证 0.7.0-preview 工作树,16 节点、启动注入 126 token、integrity 16/0、召回 150/300、无 EPIPE。这不是正式 0.7.0 tarball 的桌面视觉/键盘验收。
  • 内核仍精确锁定 triviumdb@0.9.0-beta.3。

已知限制

  • 仅支持 900px 及以上宽度;390px 受宿主侧栏限制不可读。
  • 同一工作区的 .tdb 只允许一个读写进程;第二个宿主得到 409 DB_LOCKED 的说明。
  • 更正列表是进程内状态,重启后清空;没有持久化的「已发送」历史。
  • 版本链体检只报告,不自动修复;清理误写期限用 dsh-trivium-clear-until。
  • 多进程并发写、手机宽度、性能测试仍不在本版范围。

完整说明:docs/release-0.7.0.md

0.6.0 — 维护命令随包分发

Choose a tag to compare

@QWQcool QWQcool released this 28 Oct 10:31

维护版本:把两个维护工具真正随包分发,并固化两项验收。核心记忆逻辑与 0.5.1 相同,数据格式不变。

npm dsh-trivium@0.6.0 于 2026-10-28T05:14:18Z 发布,latest 指向 0.6.0。产物 shasum ad979e5bf53b77d63273dd5d3c8668d9f397474d,37 个文件,与本地 npm pack 一致。

本次变更

随包分发的两个命令

  • dsh-trivium-check <workspace>:只读打开图,报告 supersedes 自环、循环、分叉、重复 URI、悬空端点与无法解析的链。退出码 0 干净、2 有问题、1 打不开。
  • dsh-trivium-clear-until <workspace>:默认只列出仍带期限的过期决策;--apply 只清「期限文本同时出现在正文里」的那些(0.4.21 从正文抓日期的形态);--apply --all 清所有过期期限,包括用户显式填的。先关宿主,内核是单写者。

0.5.1 的发布说明让用户运行 scripts/check-integrity.mjs,但该脚本当时不在 npm 包里;0.6.0 修正了这个承诺,并把清理工具一并交给用户。

验收固化(无行为变更)

  • 轮标识:真实宿主会话日志里的用户消息带稳定 id(user/message 与 agent/inbox/spliced 同一 id),turnKeyOf 走 uid: 而不是对象身份回退。多步工具循环不会因为消息对象被重建而重新发放预算。
  • 真实双窗口:两个真实标签页读取同一 ETag,窗口 A 修改正文,窗口 B 提交得到 409 code:"etag",刷新 ETag 后重试成功。

升级

npm install dsh-trivium@0.6.0
# 或在 DSH 桌面端「插件」页升级
  • 0.5.1 用户可直接升级;没有数据迁移,v2 格式不变。
  • 只需清理 0.4.21 误写期限的用户,升级后先运行 npx dsh-trivium-clear-until <workspace> 看列表,再加 --apply。

验证

  • npm test:23/23 脚本通过;新增 smoke-p22 25 条断言(bin/files、两个 CLI 的真实子进程、轮标识、dry-run/apply/--all)。
  • issue #3 的 48 项回归仍通过。
  • npm pack 文件清单包含两个 bin 目标;独立消费目录安装后 npx dsh-trivium-check 可执行。
  • 真实宿主 @deepseek-ai/dsh@0.2.1-rc.4(隔离 DSH_HOME):双标签页 409 → 刷新成功;会话日志确认用户消息 id;设置页与召回正常。
  • 内核仍精确锁定 triviumdb@0.9.0-beta.3。

已知限制

  • 仅支持 900px 及以上宽度(390px 受宿主侧栏限制不可读)。
  • 同一工作区的 .tdb 只允许一个读写进程;第二个宿主得到 409 DB_LOCKED 的说明。
  • 清理工具只按「期限是否出现在正文」做启发式;显式期限默认不动,需要 --all 才会清。
  • 多进程并发写、手机宽度、性能测试仍不在本版范围。

完整说明:docs/release-0.6.0.md

0.5.1 — 正确性修复:轮次预算 / 当前版本投影 / 导入身份

Choose a tag to compare

@QWQcool QWQcool released this 28 Oct 10:31

只修正确性,不加新功能。0.5.0 带三个 P1,不应作为升级目标;0.4.22 保留给 0.4.x 用户。

npm dsh-trivium@0.5.1 于 2026-10-28T04:42:43Z 发布,发布时 latest 指向 0.5.1。npm pack 产物 shasum 78c3427beae0b8e2044177765af6e83f305c6946 与 registry 一致。

本次变更

同轮预算真的记账

  • 规划器按实际渲染文本的前缀边际成本给每条记录写 tokens,求和恒等于计划总量(标题与包装计入)。
  • 账本按 totalTokens 预约,commit() 幂等;显式 0 预算保持 0,不再回落成 300;compaction 不再给同一用户轮免费重置额度。
  • pre-step 在异步检索结束后重读账本,两个在途步骤不会共同花掉同一份额度。

当前版本投影

  • makeRevisionResolver() 返回当前节点自己的 type / 正文 / until / stale / archived / dirty,自动召回、只读预览、ctx_find 三处共用。
  • 命中被替代的旧版本时输出新 id + 新正文,旧 id 只作为 matched_history 指针;人工 pin 与 ctx_read(oldId) 仍按原语义读旧正文。

导入身份与原子性

  • 有 URI 的节点只按 URI 识别;不同 URI 的两个版本即使正文相同或包含也不会被合并。
  • 先规划身份、预分配 id、校验映射与现库组合后的完整图,再用一次 commitTransaction 提交节点、正文更新、业务边与 supersedes 边;事务失败返回 ok:false,不留节点、正文覆盖或边。
  • JSONL 旁路同样移除正文回退,只按 URI 识别;版本链上缺 URI 的节点明确拒绝。

更正通知

  • 账本记录每个会话实际看到的 id + 正文 + 状态指纹;更新、归档、删除、合并、替代、撤销、导入都会给看过旧事实的会话排队一条短更正。
  • 更正有独立消息块,不重发旧正文,与芯片/召回共用 300;只有随 reservation 送达后才消费,超预算留到下一轮,并按工作区隔离。

只读体检与内核

  • 新增 node scripts/check-integrity.mjs <workspace> [--json],用内核 accessMode: "readOnly" 打开,报告自环、循环、分叉、重复 URI、悬空端点与不可解析的当前版本;只报告,不修复。
  • triviumdb 固定为 0.9.0-beta.3。

升级与旧数据

npm install dsh-trivium@0.5.1
# 或在 DSH 桌面端「插件」里升级
  • 0.5.0 用户可直接升到 0.5.1;v2 数据格式不变,不需要迁移。
  • 0.4.21 误写到 until 的正文日期不会自动清除:升级后在设置「显示过期决策」里清空该期限,或用 ctx_remember 传 until: "" 覆盖。正文本身不需要改。

验证

  • npm test:22/22 脚本通过;smoke-p21 89 条断言覆盖三个 P1、更正、JSONL 身份与跨库隔离;smoke-p15 的 48 项回归原样通过。
  • npm pack(35 文件)→ 独立目录干净安装 → verify-package 13 项通过,含真实 agent/pre-step 注入、同轮去重、同轮累计 ≤300、新 id 配新正文。
  • 真实宿主 @deepseek-ai/dsh@0.2.1-rc.4:多工具轮次、更正生效、过期 ETag 409、Tab/Escape 焦点、390px 测量。证据见 docs/next-memory/R5-VERIFICATION-2026-10-28.md 与 evidence-r5/。

已知限制

  • 仅支持 900px 及以上宽度:390px 无横向滚动,但宿主侧栏固定 188px,内容列约 154px,不可读。
  • 同一工作区的 .tdb 只允许一个读写进程,第二个宿主得到 409 DB_LOCKED 的可读说明。
  • 真实双窗口并发尚未覆盖:409 由客户端注入过期 ETag 制造。
  • 更正没有独立界面条目,模型侧生效、状态页可见 channel:"correction"。
  • 性能与负载测试不在本轮范围。

完整说明:docs/release-0.5.1.md

0.5.0 — 已废弃(请勿使用):统一上下文预算 / 来源解释 / 替代关系

Choose a tag to compare

@QWQcool QWQcool released this 28 Oct 10:31

此版本已废弃(deprecated),请勿安装,也不要作为升级目标。 它带三个 P1 缺陷:同一用户轮的累计预算没有真正记账、命中被替代版本时返回新 id 配旧正文、导入时按「正文相同或包含」错误合并身份。修复随 0.5.1 交付。

本页保留发布当时的功能说明与验证记录,不能用它证明正确性。原始证据见 docs/next-memory/REVIEW-2026-10-28.md。

本次变更(发布时记录)

按 docs/next-memory/IMPLEMENTATION_PLAN.md 实现三个相互依赖的部分:

  • 统一上下文预算与去重(M0):芯片与自动召回不再各截 300,两路共用同一用户轮的 300 估算 token(芯片优先、召回只用余额);同一节点跨渠道只出现一次,同一轮工具循环不重复注入。轮次由宿主消息 id 判定,fork 不继承父会话的账本与 pins;ctx_find 默认上限 1200 估算 token,超预算丢弃整条记录而不切半条 JSON。
  • 来源与召回解释(M1):设置页分「记忆条目 / 召回检查」;来源沿用 payload.source 并新增 kind / capturedAt,引文限 240 字符,没有记录就显示「没有可定位的来源」,不补造会话或引文。召回诊断只记录实际产生候选的管线分支,最多 20 条 / 10 分钟,跨工作区或跨会话查同一 trace 返回 404、过期返回 410。
  • 人工确认的替代关系(M2):新增 supersedes 有向边(新 → 旧)放在独立集合,不进默认业务边扩展;首版线性链限制为单前驱单后继,拒绝自环、循环、分叉、跨库、非决策、归档端点与超过 32 跳;写入由工作区队列串行化「读取 → 校验 → 事务」,ETag 失配返回 409,operationId 保证重试幂等;链上正文受保护(REVISION_PROTECTED / REVISION_LINKED)。
  • 数据格式:JSON 图导出 version: 2(边可带 metadata),Git JSONL v: 2 新增 supersedes 行,节点行仍不含 source;旧 v1 文件可读,v2 不能原地降级。

验证(发布时)

  • Windows / Node 22.22.2:node scripts/run-all.mjs → 21/21 通过,smoke-p15 的 48 项 issue #3 检查未改期望值。
  • 新增 smoke-p16(55) / smoke-p17(51) / smoke-p18(41) / smoke-p19(76) / smoke-p20(45)。
  • dist/dsh-trivium-0.5.0.tgz(34 文件)在临时消费目录用真实 @deepseek-ai/dsh-llm@0.2.1-rc.3 / dsh-tools@0.2.1-rc.3 跑 verify-package,status: passed。
  • 真实宿主 @deepseek-ai/dsh@0.2.1-rc.4 走通「替代 → 409 → 刷新重试 → 成功 → 撤销」全链路。

如何升级

不要安装 0.5.0。在 0.4.22 基础上直接升级到 0.5.1 或更高版本。

完整记录:docs/release-0.5.0.md

关联:issue #3。