🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

图忆内核 QWQcool/dsh-trivium

DeepSeek Harnessv0.8.3
QWQcool2 天前有提交已提供中文文档扫描:含敏感能力

为 DeepSeek Harness 提供进程内图记忆内核,底层由 TriviumDB 支撑。

36.5/100
综合分
5
GitHub 星标
1,581
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-trivium
npm 源 · dsh-trivium 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · chat
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.4.22,当前版本为 v0.8.3
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 2 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-trivium @ 0.8.3
✓Node 引擎要求 ^22.19.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 07:15:53

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 74 处,展示前 71 条)
  • 发起网络请求
    lib/client.js:945
    const resp = await fetch(path, opts);
  • 发起网络请求
    lib/client.js:1073
    const resp = await fetch(path, opts);
  • 发起网络请求
    lib/client.js:2786
    const resp = await fetch(workspacePath("/api/dsh-trivium/export.md"));
  • 读取本地文件
    scripts/check-integrity.mjs:30
    if (!existsSync(file)) {
  • 读取本地文件
    scripts/clear-expired-until.mjs:61
    if (!existsSync(file)) {
  • 写入本地文件
    scripts/prefs-export.mjs:103
    mkdirSync(dirFor(workspace), { recursive: true });
  • 写入本地文件
    scripts/prefs-export.mjs:104
    writeFileSync(bindingPath(workspace), JSON.stringify(binding, null, 2) + "\n", "utf8");
  • 写入本地文件
    scripts/prefs-export.mjs:127
    writeFileSync(bindingPath(workspace), JSON.stringify(binding, null, 2) + "\n", "utf8");
  • 读取本地文件
    scripts/prefs-export.mjs:171
    if (!existsSync(dirFor(workspace))) mkdirSync(dirFor(workspace), { recursive: true });
  • 写入本地文件
    scripts/prefs-export.mjs:171
    if (!existsSync(dirFor(workspace))) mkdirSync(dirFor(workspace), { recursive: true });
  • 写入本地文件
    lib/store.js:168
    mkdirSync(join(key, ".dsh"), { recursive: true });
  • 读取本地文件
    lib/extract.js:90
    const raw = readFileSync(pendingPath(cwd), "utf8");
  • 写入本地文件
    lib/extract.js:114
    mkdirSync(dirname(file), { recursive: true });
  • 删除本地文件
    lib/extract.js:116
    try { unlinkSync(file); } catch (err) { if (err?.code !== "ENOENT") throw err; }
  • 写入本地文件
    lib/extract.js:123
    writeFileSync(temp, JSON.stringify({ cwd, savedAt: nowIso(), ...(windows[0] || { sessionId: "", turns: [] }), windows, acknowledged }, null, 2), "utf8
  • 写入本地文件
    lib/extract.js:124
    renameSync(temp, file);
  • 删除本地文件
    lib/extract.js:126
    try { unlinkSync(temp); } catch (err) { if (err?.code !== "ENOENT") throw err; }
  • 读取本地文件
    lib/server.js:206
    dbExists: dbPath ? existsSync(dbPath) : false,
  • 写入本地文件
    lib/change-log.js:51
    mkdirSync(dirname(file), { recursive: true });
  • 读取本地文件
    lib/change-log.js:61
    try { statSync(auditGapPath(cwd)); return true; }
  • 写入本地文件
    lib/change-log.js:118
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/change-log.js:119
    appendFileSync(file, list.map((row) => JSON.stringify(row)).join("\n") + "\n", "utf8");
  • 读取本地文件
    lib/change-log.js:129
    const lines = readFileSync(file, "utf8").trim().split(/ ? /).filter(Boolean);
  • 写入本地文件
    lib/change-log.js:147
    writeFileSync(tmp, [marker, ...kept].join("\n") + "\n", "utf8");
  • 写入本地文件
    lib/change-log.js:148
    renameSync(tmp, file);
  • 读取本地文件
    lib/change-log.js:163
    try { raw = readFileSync(file, "utf8"); }
  • 读取本地文件
    lib/workspace-lock.js:28
    const owner = JSON.parse(readFileSync(file, "utf8"));
  • 删除本地文件
    lib/workspace-lock.js:34
    unlinkSync(file);
  • 写入本地文件
    lib/workspace-lock.js:75
    mkdirSync(dirname(file), { recursive: true });
  • 读取本地文件
    lib/workspace-lock.js:92
    const stat = statSync(file);
  • 读取本地文件
    lib/workspace-lock.js:93
    owner = String(readFileSync(file, "utf8") || "").slice(0, 200);
  • 读取本地文件
    lib/workspace-lock.js:115
    const recoveryStat = statSync(recovery);
  • 读取本地文件
    lib/workspace-lock.js:116
    const recoveryOwner = String(readFileSync(recovery, "utf8") || "").slice(0, 200);
  • 删除本地文件
    lib/workspace-lock.js:118
    unlinkSync(recovery);
  • 读取本地文件
    lib/workspace-lock.js:122
    const stat = statSync(file);
  • 删除本地文件
    lib/workspace-lock.js:124
    if (now - stat.mtimeMs > ttlMs && !ownerAlive(current)) unlinkSync(file);
  • 读取本地文件
    lib/settings.js:27
    const raw = JSON.parse(readFileSync(settingsFilePath(), "utf8"));
  • 读取本地文件
    lib/settings.js:206
    return existsSync(settingsFilePath());
  • 读取密钥环境变量
    lib/embed.js:22
    process.env.DSH_TRIVIUM_EMBED_KEY ||
  • 读取密钥环境变量
    lib/embed.js:23
    process.env.OPENAI_API_KEY ||
  • 发起网络请求
    lib/embed.js:94
    const resp = await fetch(config.url, {
  • 读取本地文件
    lib/sidecar.js:259
    if (!existsSync(file)) return null;
  • 读取本地文件
    lib/sidecar.js:261
    return readFileSync(file, "utf8");
  • 删除本地文件
    lib/sidecar.js:284
    unlinkSync(path);
  • 读取本地文件
    lib/sidecar.js:352
    if (!force && hash === knownHash(cwd) && existsSync(file)) {
  • 读取本地文件
    lib/sidecar.js:443
    if (existsSync(sidecarPath(key))) {
  • 写入本地文件
    lib/consumer-preferences.js:84
    mkdirSync(join(file, ".."), { recursive: true });
  • 写入本地文件
    lib/consumer-preferences.js:86
    writeFileSync(tmp, text, "utf8");
  • 写入本地文件
    lib/consumer-preferences.js:87
    renameSync(tmp, file);
  • 读取本地文件
    lib/consumer-preferences.js:92
    return JSON.parse(readFileSync(file, "utf8"));
  • 写入本地文件
    lib/consumer-preferences.js:336
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/consumer-preferences.js:341
    const original = readFileSync(personaFile, "utf8");
  • 写入本地文件
    lib/consumer-preferences.js:359
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/consumer-preferences.js:371
    if (personaFile && existsSync(personaFile)) {
  • 读取本地文件
    lib/consumer-preferences.js:373
    composed = readFileSync(personaFile, "utf8");
  • 读取本地文件
    lib/consumer-preferences.js:425
    const block = existsSync(blockPath(workspace)) ? readFileSync(blockPath(workspace), "utf8") : "";
  • 读取本地文件
    lib/consumer-preferences.js:425
    const block = existsSync(blockPath(workspace)) ? readFileSync(blockPath(workspace), "utf8") : "";
  • 读取本地文件
    lib/markdown.js:301
    const exists = existsSync(row.path);
  • 读取本地文件
    lib/markdown.js:305
    bytes = statSync(row.path).size;
  • 读取本地文件
    lib/markdown.js:316
    return readFileSync(path, "utf8");
  • 读取本地文件
    lib/update.js:14
    const pkg = JSON.parse(readFileSync(PKG_PATH, "utf8"));
  • 发起网络请求
    lib/update.js:45
    const resp = await fetch(REGISTRY_URL, {
  • 写入本地文件
    lib/atomic.js:21
    mkdirSync(dirname(file), { recursive: true });
  • 删除本地文件
    lib/atomic.js:25
    unlinkSync(tmp);
  • 写入本地文件
    lib/atomic.js:29
    writeFileSync(tmp, text, mode === undefined ? "utf8" : { encoding: "utf8", mode });
  • 写入本地文件
    lib/atomic.js:31
    renameSync(tmp, file);
  • 删除本地文件
    lib/atomic.js:35
    unlinkSync(file);
  • 写入本地文件
    lib/atomic.js:39
    renameSync(tmp, file);
  • 删除本地文件
    lib/purge.js:61
    unlinkSync(path);
  • 读取本地文件
    lib/purge.js:70
    if (!existsSync(dir)) return;
  • 读取本地文件
    lib/purge.js:73
    names = readdirSync(dir);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按节点与边记录记忆
  • 钉选注入
  • 进程内图记忆内核
v0.8.32026-11-02
· 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 | 凭据闸门前置;预览再过闸,不通过写 | · 新增 · 来源贯穿:节点记录宿主真实事件定位(seq / messageId / at / role / quoteMatch), 缺失字段为 null + recorded:false,不用节点 id 或当天日期伪造;hostText 恒为 unavailable(无回读接口)。 · 变更记录:GET /api/dsh-trivium/changes,每工作区最多 200 条,落盘前脱敏,opId 幂等,裁剪有明确标记; 面板「记忆变化」区块显示写入/合并/替代/拒绝/日期调整/恢复超时/写锁占用。 · 合并历史:payload.history 保留被覆盖的正文(上限 3、倒序、旧凭据正文 ), 节点列表直接展示"合并前的正文"。 · 空回答可见: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、英文月份、中文数
v0.8.22026-10-30
· 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 固定为 )。 · 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; · verif
v0.8.12026-10-29
· dsh-trivium 0.8.1 正确性补丁,以及数字背后的证据。 · 长事实的注入摘要现在保留首尾两端:头部 89 字符 + … + 尾部 110 字符,搜索行、修订投影和预算渲染统一按一条规则处理。 · 移除了一个未写进文档的 topK: 3 上限,它挡在 300 token 的轮次预算前面:六条并行事实被砍到三条,而整块只花了 89 token。 · 同一轮还发布了 C4 对应的 install/comparison、D0 重测(18/18,注入 97 token)、D1/D2 成本测量,以及一份可复核的证据台账,附 sha256 清单。 限制:把抽取成本算进去后,10 轮净额仍然亏钱(每会话每轮 -¥0.00139,批量 -¥0.00046;盈亏平衡外推到约 16-20 轮,未实测)。本版本未覆盖 50k 节点档位。 npm: 附件 tarball SHA-256:3e025d501ecc305d4479f966f5fda041ead79e015ed474712e1b5959d49af020
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-trivium — DSH 进程内图记忆 DeepSeek Harness 的进程内图记忆插件:按节点和边记,默认少注入,设置页可改可归档。内核贴近 DSH:不另起进程、默认不加导航。要钉住某些记忆片段,再在设置里打开 芯片 注入;情节画布是可选的自嗨层,嵌在芯片开关下。每个工作区一个 .dsh/trivium.tdb,不另起服务。 快速安装:dsh plugin --profile web add dsh-trivium → 重启 dsh web → 打开工作区(设置里出现「Trivium 记忆」;标题栏 芯片 默认关)。完整步骤见 安装。 安装 前提:已安装 DeepSeek Harness 并至少启动过一次 dsh web。当前使用 Web 0.2.1-rc.4 验证;桌面 0.2.1-rc.3 的验证层级和局限见文档入口。Node 要求 ^22.19.0 || >=24,内核精确锁定 triviumdb@0.9.0-beta.3。 dsh plugin --profile web add dsh-trivium 重启 dsh web 后生效。
展开完整文档(README 剩余 1 节)
dsh-trivium — DSH 进程内图记忆

DeepSeek Harness 的进程内图记忆插件:按节点和边记,默认少注入,设置页可改可归档。内核贴近 DSH:不另起进程、默认不加导航。要钉住某些记忆片段,再在设置里打开 芯片 注入;情节画布是可选的自嗨层,嵌在芯片开关下。每个工作区一个 .dsh/trivium.tdb,不另起服务。

快速安装:dsh plugin --profile web add dsh-trivium → 重启 dsh web → 打开工作区(设置里出现「Trivium 记忆」;标题栏 芯片 默认关)。完整步骤见 安装。

安装

前提:已安装 DeepSeek Harness 并至少启动过一次 dsh web。当前使用 Web 0.2.1-rc.4 验证;桌面 0.2.1-rc.3 的验证层级和局限见文档入口。Node 要求 ^22.19.0 || >=24,内核精确锁定 triviumdb@0.9.0-beta.3。

dsh plugin --profile web add dsh-trivium

重启 dsh web 后生效。记忆文件在当前工作区:

<workspace>/.dsh/trivium.tdb # 本地索引(二进制,建议 gitignore) <workspace>/.dsh/trivium.jsonl # 可选 Git 交换快照(业务事实) <workspace>/.dsh/consumer-preferences/ # 可选的授权偏好绑定与导出快照

把 trivium.jsonl 交给 git。二进制库不要进版本库:

.dsh/trivium.tdb
.dsh/trivium.tdb*
.dsh/trivium-pending.json
.dsh/consumer-preferences/
.dsh/trivium-changes.jsonl*

clone / git pull 后若 jsonl 变了会自动导回。设置里 Git 旁路 默认关(和芯片一样)。在「检查更新」下面的 配置设置 里打开。开关只控制是否自动写出。开着时 生成 用当前 .tdb 覆盖写出同一路径的 jsonl;关掉后 删除 jsonl 会清掉已知工作区的 jsonl(.tdb 不动)。情节、向量、芯片钉选仍只留在本机。

用 Dsh_BatStart 的,双击启动就会装上,不必再执行上面这条。

本地跟源码联调:

npm install
node scripts/link-dsh.mjs
npm test # 可选:跑全部离线 smoke

npm test 不需要 DSH 宿主,也不会碰你真实的 ~/.dsh/trivium.json(每个脚本用独立的临时设置文件)。想只跑一部分就传子串:npm test -- p8。

然后重启 dsh web。

更新

升级前先停止 DSH,备份工作区 .dsh/trivium.tdb 整个文件组。默认 mmap 模式还会使用 .vec、.wal、.text 等附属文件;Git JSONL 不含全部本机数据,不能代替完整备份。

dsh plugin --profile web add dsh-trivium

装完重启 dsh web。源码联调则在仓库里 git pull 后再跑一次 node scripts/link-dsh.mjs。

卸载

先停掉 dsh web,避免 .tdb 被占用,然后:

dsh plugin --profile web remove dsh-trivium

remove 会删掉 ~/.dsh/trivium.json,以及它打开过的每个工作区里的 .dsh/trivium.tdb、trivium.jsonl* 和 trivium-pending.json。偏好导出的 .dsh/consumer-preferences/ 会保留;源码中尚未发布的变更记录 .dsh/trivium-changes.jsonl 及其历史不完整标记也不会由卸载程序删除。如果不再需要,应自行检查并清理这些文件,连同导出到其他位置的人设副本。用 dsh plugin add dsh-trivium 升级不会清记忆。若 trivium.jsonl 已提交,git checkout 可以找回。

然后再重启 dsh web:设置里不再有「Trivium 记忆」,标题栏不再有「芯片」,四个工具不再注册。

从未用本版打开过的工作区,可能还留着旧 .tdb;看到就手动删那个文件。只想停用、不卸载(数据还在):在该 profile 的 cordis.patch.yml 里加:

- id: dsh-trivium
disabled: true

再重启 dsh web。

权限与数据

插件随 dsh web 进程加载,不另起端口、不另起服务。

| 访问 | 默认 | 说明 |
| 工作区 .dsh/trivium.tdb | 读写 | 记忆库。同一文件不要两个 Node 进程同时打开 |
| 工作区 .dsh/trivium.jsonl | 读写 | Git 旁路(默认关)。只含业务节点和边,不含向量 |
| ~/.dsh/trivium.json | 读写 | 设置和芯片钉选;可含你手填的 embedding API key |
| .dsh/trivium-pending.json | 读写 | 抽取失败时的本地队列 |
| .dsh/consumer-preferences/ | 按需读写 | 授权绑定、偏好快照及人设副本;可能包含已批准的记忆,卸载后保留 |
| .dsh/trivium-changes.jsonl | 当前源码按需写入 | 尚未发布的记忆变更记录;卸载后保留 |
| 模型抽取 | 开 | 宿主模型服务可用时,通过 DSH 把限长的对话片段交给当前会话选用的 provider/model;远程模型意味着联网和可能的模型费用。没有模型服务时使用本地规则 |
| 远程 embedding | 关 | 开启后,节点正文和查询文本会发送到配置的 embedding URL。不开也可使用关键词和图检索 |
| 检查更新 | 手动触发 | 请求 npm 包元数据,不发送对话 |
| 对话片段 | 可能交给宿主模型 | 长期记忆存储在本地,不等于抽取或 DSH 对话全程离线。关闭抽取和远程 embedding,可停止插件主动发起的这两类模型/向量调用 |

官方 DeepSeek 对话接口没有 embeddings。不开 embedding 也能用关键词 + 图遍历。开关会保存;embedding 地址、模型和密钥需要点「保存设置」。如果设置保存后仍未生效,重启 dsh web 再检查。

AI 时代安装

把下面这句话复制给助手即可:

请在 DeepSeek Harness 上执行:dsh plugin --profile web add dsh-trivium 然后重启 dsh web。设置里会出现「Trivium 记忆」。标题栏标签叫「芯片」,默认关;在设置「Trivium 记忆」里打开「芯片(记忆白名单)」即可,拨一下就保存,不必再重启。

默认安静的图记忆

Trivium 是记忆内核,不是日记、日历或聊天伴侣。它按节点和边记,默认少注入,记错了人能改。

- 跨会话 — 会话 A 记下「鉴权走 header X」,会话 B 调用 ctx_find("鉴权") 命中,并带上它连着谁(about / decided / broke / fixed)。
- 默认安静 — 新会话只注入一张短地图(≤400 token)。模型要用再调工具,不会每一步灌满。标题栏默认也不加第三标签。
- 芯片 / 记忆白名单(默认关) — 设置里打开后,标题栏「对话 / 轨迹」旁出现 芯片。拨一下即写入 ~/.dsh/trivium.json,重启后仍保持。勾选的条目从下一轮注入(L0,≤300 token)。其下还有 会话层(也默认关):把 compaction / 分叉画成方框。
- 人能改错 — 芯片条可新增、归档、删除;设置页管搜、改名 / 正文、合并、导入导出、全局开关。
- 抽取偏严 — 闲聊和一次性改文件通常不会从对话自动入库。芯片「新增」按你写的存(点一次整段一条),同样过写入卫生闸门。
- 写入卫生 — ctx_remember、芯片新增、抽取、外部导入会拒绝规则可识别的乱码、复读、JSON envelope、base64 残骸和疑似凭据。规则无法识别所有敏感值,不应将其视为完整的秘密保护。已经进 .tdb 的脏节点仍可在设置里看见以便归档;find / 短地图 / 芯片不再带它们。
- 可选 embedding — 默认关。官方 DeepSeek 对话接口没有 embeddings;可填 OpenAI 兼容地址。不开也能用:关键词 + 图遍历。

预算与记忆效果

短地图每会话最多 400 估算 token;开启芯片或自动召回后,芯片、召回和更正在每轮共用 300 估算 token,工具可按需读取全文。纯致谢等确认短句不会触发抽取模型。这些预算不包括工具定义、工具返回、模型回答或后台抽取,不能当作整次请求的费用上限。

预算是输出长度的估算,不等于整次请求或账单的上限。历史合成测试的结果和限制见评测报告;不能据此声称真实会话固定省钱或优于其他产品。当前可展示的测试数据见验证与测试数据。

底层工程

- 进程内、一个文件 — TriviumDB(向量 + JSON payload + 有向带权图)随 DSH 进程打开。不另起 HTTP / Python 服务。
- 只有四个工具 — ctx_find / ctx_read / ctx_remember / ctx_link。芯片 / 会话层不加第五个。
- 注入走 agent.inject() — 不写 system prompt,避免 persona.complete: true 把地图静默丢掉。
- 召回带路径 — 每条命中都说明从哪个节点、沿哪条边过来。
- 失败不挡主循环 — 存储 / embedding / 抽取出错只记日志,Agent 继续。
- 界面跟随宿主语言 — 设置页和「芯片」标签随 DSH locale/change 切换(zh / en),也可在配置设置里锁定。其它已解析的宿主语言、以及浏览器未命名任何注册语言的情况,一律回落英文(与宿主自己的 FALLBACK_LOCALE 一致)。
- 首轮短地图 — 每个会话只注入一次。若 session-start 和第一步赛跑输了,pre-step 会补上;不会每步重写(前缀缓存友好)。

功能

跨会话图

节点类型是 entity / preference / decision / experience。业务边是 about、decided、broke、fixed。

ctx_find 返回 L0 摘要和图路径(入边写成 <-label-id)。查询点到已有实体名时,还会带上 about/decided/broke/fixed 邻居,即使邻居正文不含查询词。相关的过期决策仍可作为历史返回,标记 stale 并降权;设置 include_stale: false 可排除过期条目。自动召回和开场短地图仍排除过期决策。

正文中的日期只属于正文。有效期通过设置页或 ctx_remember 的独立 until 字段指定,支持 YYYY-MM-DD、Friday / 周五、周末、下周,按 UTC 日末解释。无法解析的新标签不会沿用旧 untilAt。清空 until 会同时移除时间戳,修改为新的相对期限则从本次编辑时计算;仅保存同一期限不会延长它。

0.4.22 不批量删除旧数据的期限。被误标的记忆可重新通过 ctx_find 查到,也可在设置里勾选「显示过期决策」找到,清空 until 并保存;之后编辑含日期的正文不会再自动生成期限。

芯片(记忆白名单)

默认关。在设置里打开 芯片(记忆白名单):不必再点「保存设置」,也不必重启。标题栏立刻出现 对话 / 轨迹 / 芯片,选择写入 ~/.dsh/trivium.json,重启后仍在。这是钉选白名单,不是记忆编辑器;改名、合并、全局开关仍走设置页。

列出未归档的 preference / decision / entity(experience 不进芯片)。勾选后从下一轮注入(L0,≤300 token)。条上可新增、归档、删除。

| 操作 | 生效时机 |
| 勾上某条 | 当前这段里你再发的下一条带上它(L0,≤300 token) |
| 取消勾选 | 再下一轮不再带 |
| 新增 | 点一次写入一条;整段粘贴也是一条 |
| 选择 → 归档 | 软删除:find / 短地图 / 芯片不再出现,节点还在 .tdb |
| 选择 → 删除 | 从 .tdb 去掉,不可恢复 |
| 已经发出去的轮次 | 不回写 |

芯片按会话隔离。新开会话、fork 出的子会话默认都不勾。短地图仍在 session-start 自动带,不占芯片位。

其下 会话层 也默认关。打开后,同一标签里画出 compaction / 分叉方框(生成检查点、更新检查点、从方框 fork)。episode 不进 ctx_find。关掉会话层就停止写检查点,已有节点仍在 .tdb。

设置页(Trivium 记忆)

设置里的「Trivium 记忆」管库。「检查更新」在最上,记忆条目保持可见。其余选项收在 配置设置 折叠里(默认收起):注入、抽取、芯片、Git 旁路、界面语言、导入、embedding。开关拨一下就写入 ~/.dsh/trivium.json。

| 开关 | 默认 | 作用 |
| 芯片(记忆白名单) | 关 | 标题栏「对话 / 轨迹」旁的标签。勾选的芯片是下一轮注入白名单(L0;与召回共用 300 token)。 |
| 会话层 | 关(要先开芯片) | 同一标签里的情节画布:生成检查点、更新检查点、从方框分叉。 |
| Git 旁路 | 关 | 图有改动后延迟写入 .dsh/trivium.jsonl(格式 v2:含版本关系,不含本机来源)。开着可 生成(从当前 .tdb 覆盖写出);关掉可 删除 jsonl。clone / pull 会导回。 |
| 界面语言 | 跟随宿主 | 只改本插件设置页和芯片标签的中英文,不改 DSH。 |
| 注入策略 | 关 | 只有开场短地图;可改 autoRecall 或实体名折中。 |
| 抽取 | 开 | compaction / 空闲后写入。 |
| embedding | 关 | 要填 URL 并点「保存设置」;保存后仍未生效时可重启宿主。 |

注入细节:autoRecall 在本步含用户文本时取最多 8 条候选,再按剩余共享预算选择 L0;实体名折中只在话里点到已有实体时灌 1 跳业务边邻居。已送达事实的更正先占共享预算,其次是芯片和召回。注入关闭或同轮预算不足时,更正保留并显示原因,不承诺下一条必定送达。后续 pre-step 会检查已送达决策是否自然到期;没有后台计时器,重启会清空投递账本。抽取失败进 pending,下次 session-start 重放(每批正文 ≤3000 字、最多 24 条)。

- 条目 — 可搜、按类型筛、展开业务边邻居、「只看挂在这上面的」、默认隐藏过期决策。可改名 / 改正文 / 别名 / until,同类型合并,归档或删除。
- 导出导入 — JSON 是真回写。Markdown 只读投影(给人看)。给 git 用的是 .dsh/trivium.jsonl(业务事实,自动写)。WorkBuddy MEMORY.md、Claude Code CLAUDE.md、Codex AGENTS.md 可一次性严导入。不监视那些文件,不导入会话 jsonl。
- 检查更新 — 设置页对比已装版本和 npm latest,有新版时给出 dsh plugin --profile web add dsh-trivium。不会在后台自动升级。

来源、历史与召回检查

面板分两个页签,条目详情分三个。

| 位置 | 回答什么 |
| 记忆条目 | 存了什么。已替代的版本默认收起;显示已替代与显示过期是两个独立开关。 |
| 召回检查 | 上一轮实际注入了什么(按估算 token),外加一次只读检查:候选、真实过滤原因、以及将要发送的原文。 |
| 内容 / 来源 / 决策历史 | 正文、它从哪来、以及替代它的决策链。 |

只有写入时确实记录了来源(kind、会话、消息、短引文),条目才知道自己从哪来。没有来源就直说没有,不猜会话也不猜作者;本进程无法确认的会话报「已不可用」,但保留已存的摘录。宿主没有会话定位接口,所以不提供跳转,也不拼一个假的 deep link。

召回检查是只读的:不写库、不跑工具、不请求 embedding。没有查询向量时明确显示语义通道未运行。这些页签不会注入上下文,也不会调用模型。

替代一条决策

新决策不会让旧决策「过期」,而是替代它。决策上的替代…让你选另一条已有决策,并排展示两条、要求确认。旧正文与期限保留,不归档;之后面板把 当前版本 / 已被替代 作为独立一维显示,与 已过期 并列。

首版是线性链:每个节点最多一个直接前驱与一个后继,不允许循环,最多 32 跳。写入在服务端按工作区排队校验,并带上两端 ETag,所以另一个窗口用旧视图确认时拿到 409 而不是覆盖。撤销替代只删这一条关系,且当下方还有更新版本时拒绝。

链上的正文是已确认的历史:自动抽取、合并、改正文、删除、合并节点都会被拒绝(REVISION_PROTECTED / REVISION_LINKED)。名称、别名、期限、来源补充仍可改。新说法请新建一条决策,再让它替代旧的。

自动召回只讲当前版本:命中旧正文会前向映射、去重,并带一条短 matched_history 指针。你手工钉的旧节点不会被改写,只标为历史并提示可以改钉当前版本。当前版本被归档或过期时,这条链直接不注入,也不会把旧版本复活。

四个工具

| 工具 | 说明 |
| ctx_find | 文本 / 可选向量 / 图关系检索;返回 L0 和路径。过期历史标记 stale 并降权;include_stale: false 排除过期条目 |
| ctx_read | 按 id 读全文和入边 |
| ctx_remember | 手动写入;可用独立 until 字段指定真实有效期,不从正文日期推断 |
| ctx_link | 两点之间建有向边 |

内核仍是这四个。芯片 / 会话层不加第五个工具。

跨会话示例

在隔离的测试工作区中,请助手记住一条合成事实,例如「本项目鉴权走 header X」,再新建会话并询问该项目的鉴权方式;确认轨迹中使用了 ctx_find,并检查返回的事实。若还建立了实体和决策之间的关联,可以查看返回的图路径。不要用真实凭据作为示例。离线可复现示例提供无需模型和 DSH 宿主的操作及预期结果;它验证存取和图关系,不代表真实模型一定会调用工具。

按授权导出偏好

0.8.2 提供可选的 dsh-trivium-prefs:先按工作区、消费方和用途绑定并逐条授权,再导出快照;支持 status、verify 和 revoke。快照最多 8 条、300 估算 token,超限报错而非截断。工具读取记忆库,并将绑定、快照和可选人设副本写到本地,不会连接外部平台;verify 需要消费方主动执行,库被占用时部分检查会跳过并标注。

npx --package=dsh-trivium dsh-trivium-prefs --help

命令参数、撤回和已知限制见 0.8.2 发布说明。导出内容可能包含个人偏好,请自行决定存放和共享范围。

界面截图

以下截图于 2026-10-28 在 DSH Web 0.2.1-rc.4 与 dsh-trivium@0.7.1 上实拍,宿主为中文界面。它们只是界面导览,不是验收证据;分版本证据及当前边界见文档入口。插件默认跟随 DSH 宿主语言;也可在 设置 → Trivium 记忆 → 配置设置 里锁定中文或英文。

会话 — ctx_find("鉴权")

会话开头注入 dsh-trivium 短地图;模型调用 ctx_find,命中「本仓库鉴权走 header X」。

轨迹 — 上下文注入可见

设置 — 检查更新、语言、注入策略

「检查更新」下面是可折叠的 配置设置(本插件语言、注入策略);再下面分 记忆条目 / 召回检查 两个标签。

设置 — 抽取、芯片、Git 旁路

芯片开关下嵌 会话层(情节画布)。同一页还有 Git 旁路、Markdown 导出、外部记忆一次性导入、远程 embedding。

设置 — 记忆条目

列表上方是类型筛选、文本搜索和「显示过期决策 / 显示已替代」两个开关;每张卡片自带归档、删除动作。

设置 — 召回检查

召回检查 标签显示本轮估算预算、一次查询的只读试算、版本链体检、待发 / 已发更正与最近召回诊断。打开该标签或运行只读试算都不调用模型,也不请求 embedding。

芯片 — 可选,在对话 / 轨迹旁

默认关。设置里打开 芯片(记忆白名单) 后,标题栏立刻出现 芯片。若同时打开 会话层,没压过的会话只有一个「后续」方框;顶部是记忆芯片(默认不勾)。可点「生成检查点」把后续收成左边一格。compaction 或 /compact 之后左边也会出现历史方框,分叉从方框连到子会话。

限制

- 模型不调 ctx_find、也不勾芯片时,窗口里主要是开场短地图。
- 抽取会漏;脏数据可在芯片条归档 / 删除,或到设置里改、合并。
- 同一个 .tdb 不要两个 Node 进程同时打开(正常只开一个 dsh web 即可)。现在面板会给出一句可读说明,而不是原始 TDB 错误。
- 支持宽度:900px 及以上。 390px 时宿主固定保留 188px 设置侧栏,插件内容列只剩约 154px(卡片约 106px),布局会收缩但不可读。本版不声称支持手机宽度。
- Markdown 导出是给人看的,不能再解析回去。能回写进 git 的是 trivium.jsonl,不是 Markdown。外部导入(WorkBuddy / Claude Code / Codex)是一次性,不是双向同步,也不会吃会话 jsonl。
- .tdb 不要在 git 里合并(二进制)。跟踪 trivium.jsonl,忽略 .tdb。jsonl 冲突按普通文本解决,再打开工作区即可。
- 会话层打开时只投影 compaction 与 fork,不会按消息条数自己切方框。窗口没到 DSH 压缩线时,「更新检查点」也补不出历史方框;要分段请点「生成检查点」。
- 芯片 / 会话层 / Git 旁路 / 注入 / 抽取开关拨一下即保存。Embedding URL 等字段要点「保存设置」;若保存后仍未生效,重启 dsh web 再检查。
- 0.5.0 写出的 JSONL 是 v: 2,图 JSON 是 version: 2。 都是增量格式,v1 文件仍可读,但不支持原地降级:旧版本会忽略版本关系,并在下次写出时把它们丢掉。要退回请恢复升级前的文件组(.dsh/trivium.tdb 与 .dsh/trivium.jsonl),不要让旧版重写一遍。
- 这一版的决策链是线性的:一个前驱、一个后继。把一个版本拆成多条,或者多对一汇入,都会被拒绝,而不是半应用。
- 从 JSONL 文件里删掉一条替代关系会被报告为冲突,不会直接生效;请在面板里撤销。
- 宿主升到 rc.8 后,DSH 自己的旧会话库可能打不开(官方 SQLite 格式不兼容)。工作区里的 .tdb 图记忆还在;对不上号的旧情节方框可以当残留,不影响 ctx_find。

验证与测试数据

| 验证 | 结果与范围 |
| 离线回归 | 当前源码 63/63 脚本组通过,命令与范围见 F-W04 / F-W05 结果。这是源码回归,不是模型准确率或 npm 包验收。 |
| 变更记录与恢复 | 已验证回环 HTTP、真实子进程竞争和浏览器组件;DSH 宿主完整视觉、键盘验收仍待补。范围与限制见结果。 |
| 小样本真实模型 | A5 基线使用单一模型、5 类合成场景各 5 次:候选和入库各 25/25,新会话答对 21/25;这是修复前的历史基线。后续 A10 两个固定场景各 10 次新会话回答均为 10/10,但否定场景有 3/10 次准备阶段触发请求上限,部分运行由 agent 主动写入。不同批次不能合并当作通用准确率。 |
| 历史证据清单 | node scripts/verify-evidence.mjs 校验历史 manifest 中 9 个文件的大小与哈希;它不验证实验设计,也不覆盖全部新证据。 |

上述真实模型样本不能证明模型总会调用工具、完整会话效果或普遍降低成本。旧 D0 部分对照臂重复种植,D1 的 0.51× 模拟未计入完整注入历史和短地图;应按独立审查的限制解读。

更新说明

- 0.8.2:修复抽取与决策正确性问题,增加逐条授权的偏好导出与校验。
- 0.8.1:改进长事实注入与预算前候选选择。
- 0.8.0:增加工作区切换、导入预览和投递记录。
- 更早版本的发布说明见文档入口。当前源码另有发布后的来源、变更记录和抽取并发保护;它们尚未包含在 npm 0.8.2 中,验证边界见 W1–W5 与 W6。

排障

| 现象 | 处理 |
| 设置里没有「Trivium 记忆」 | 确认装的是 web profile,然后重启 dsh web,再打开一个工作区。只刷新浏览器不够。 |
| 英文宿主下设置卡 / 芯片标签显示中文 | 0.4.19 已修(issue #2)。旧版本可在 设置 → Trivium 记忆 → 配置设置 → 插件语言 → English 手动选一次,会写进 ~/.dsh/trivium.json,刷新页面即可,不用重启宿主。 |
| 标题栏没有「芯片」 | 在设置里打开「芯片(记忆白名单)」(拨一下就会保存)。切回对话页,标签应立刻出现,不用重启。 |
| 改了注入 / 抽取 / embedding / 芯片开关没生效 | 芯片 / 抽取 / 注入拨一下即保存。Embedding URL 等字段要点「保存设置」;若保存后仍未生效,重启 dsh web 再检查。 |
| 会话层只有一个「后续」方框 | 正常(在会话层已打开时)。方框跟 DSH 压缩走,会话长不等于已经压过(默认约窗口 80% 才自动压)。要分段:对话里 /compact,或点「生成检查点」(只切图,不压窗口)。旧会话可点「更新检查点」补已经发生过的压缩 / 分叉。 |
| ctx_find 什么都没有 | 新会话默认只注入短地图,模型要自己调工具。也可以在芯片条「新增」或对模型说「记住:…」。闲聊和一次性改文件不会自动入库。 |
| 报 .tdb 被占用 / 打不开 | 只开一个 dsh web。不要同时跑两份链接了本插件的 Node 进程。 |
| embedding 填了但检索没变准 | 失败会退回关键词 + 图。检查 ~/.dsh/trivium.json 中保存的 URL 是否为 OpenAI 兼容的 embeddings endpoint;保存后仍未生效时重启宿主再检查。 |
| 卸载后记忆还在 | 先停 dsh web 再 dsh plugin remove。剩下的 .tdb 是从未用 0.4.10 打开过的工作区,到该文件夹删 .dsh/trivium.tdb。已提交的 trivium.jsonl 用 git checkout 找回。只在配置里 disabled 不会清文件。 |
| 检查更新失败 | 只请求 npm registry 拿最新版本号,不影响记忆;过一会儿再点即可。 |
| rc.8 之后旧对话打不开 | 那是 DSH 自己的会话库格式变了,不是 .tdb 坏了。图记忆仍可 ctx_find;对不上号的旧方框可当情节残留。 |
| 桌面端弹出「A JavaScript error occurred in the main process / EPIPE: broken pipe, write」 | 宿主侧问题,不是插件:electron-updater 往一个已经断开的控制台管道写日志(常见于用 --inspect 的测试启动器拉起、父进程随后退出)。栈里没有 dsh-trivium。点确定后从开始菜单正常启动;不要从会关闭的终端/测试器拉起。 |

维护命令(0.6.0 起随包分发):

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

本地联调:仓库里 npm install 后 node scripts/link-dsh.mjs,再重启 dsh web。triviumdb 是原生模块,装不上时先看 Node 是否满足 package.json 的 engines(^22.19.0 || >=24)。

发布信息

- GitHub: https://github.com/QWQcool/dsh-trivium
- 已发布包:0.8.2 · npm;当前源码包含发布后修改,详见文档入口
- 测试宿主:@deepseek-ai/dsh@0.2.1-rc.4(peer 范围同时接受 0.1.x 各线)
- License: MIT(依赖 TriviumDB 为 Apache-2.0)

致谢

写入卫生闸门、npm 检查更新、跟随宿主语言的界面,以及 Claude Code / Codex 文件发现,部分借鉴自 dsh-auto-memory(Aik358)。产品仍是图内核(节点、边、四个工具、默认安静),不是日记 / 日历伴侣。
预览分享卡片长什么样 ↓QWQcool/dsh-trivium
分享 · DeepSeek Harness Hub
QWQcool/dsh-trivium

为 DeepSeek Harness 提供进程内图记忆内核,底层由 TriviumDB 支撑。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部