deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
会话切换卡顿的「体检 + 归档 + 补丁」三件套,针对 DeepSeek Harness。
DSH 切换长会话会卡好几秒,根因是流式输出块(assistant/chunk)事件爆炸:
一个长会话的日志里,99% 以上的事件是流式生成过程中的 assistant/chunk 增量块(实测:单会话 13.3 万事件中 13.2 万是 chunk)。切换会话时,DSH 的 history 分页把这些 chunk 全部返回并逐个计算视图——50 条消息的一页实际携带约 2.7 万事件,这才是卡顿的来源(不是网络,不是渲染)。
本插件把整套优化方法打包成 4 个模型工具 + 1 个设置页:
| 入口 | 作用 |
|---|---|
optimizer_audit |
会话体检:总数、占用、空会话、最大会话的事件规模与 chunk 占比 |
optimizer_archive |
归档旧/大会话:移出 ~/.dsh/sessions,切换立刻变快,可恢复 |
optimizer_cleanup |
清理空/损坏会话:先列候选,确认后移入归档(不直接删除) |
optimizer_patch |
补丁管理:给部署的 dsh-host-apiproxy 打「history 跳过 chunk」补丁(status / apply / revert) |
| 设置页「优化」 | 一键扫描 → 列出可优化问题 → 逐项修复 / 一键优化全部(设置 → 优化) |
安装并重启后,侧边栏 设置 → 优化 打开面板:
所有操作都可逆:补丁可 revert,归档/清理只是把目录移入 ~/.dsh/sessions-archive/(可手动移回),不直接删除任何数据。
dsh plugin --profile <profile> add github:mengyihh233/dsh-optimizer
bundle 插件安装后需要重启 dsh web 生效。
装好后,在会话里直接让模型调用(模型会自动选用):
调用 optimizer_audit,full=true,看看最大的几个会话调用 optimizer_archive,olderThanDays=7,minMB=1(把 7 天未动且超过 1MB 的会话归档)调用 optimizer_cleanup(先看候选)→ 调用 optimizer_cleanup,dryRun=false(确认后执行)调用 optimizer_patch,action=status → action=apply(重启 web 后生效)assistant/chunk补丁实现:paginate 返回页滤 chunk(主要收益,130 倍),并在窗口尾部补回边界事件以保证客户端分页连续性(见下方「补丁说明」的缺陷与修复记录)。
optimizer_patch 修改的是部署目录下的:
node_modules/@deepseek-ai/dsh-host-apiproxy/lib/index.js
补丁内容(与上游分支一致,含边界保序修复):
const HISTORY_SKIPPED_TYPES = new Set(["assistant/chunk"]);
// paginate 返回:滤 chunk + 窗口尾部补回边界事件
events: window.filter((event) => event.seq >= cut && !HISTORY_SKIPPED_TYPES.has(event.type)).concat(
beforeSeq === undefined ? [] : (() => {
const boundary = window[window.length - 1];
return boundary !== undefined && boundary.seq >= cut && HISTORY_SKIPPED_TYPES.has(boundary.type) ? [boundary] : [];
})()
),
缺陷与修复(v0.1.0 → v0.1.1):第一版补丁直接滤掉窗口内全部 chunk,结果客户端 loadOlder 的连续性检查(tail.seq + 1 === baseSeq)几乎必然失败——被滤掉的 chunk 留下 seq 空洞,前端误判为分页断裂并停止加载更早历史(实测 3/3 次失败)。修复:分页计数与页面主体仍滤 chunk(页面仍缩小 ~130 倍),但窗口尾部若原本是 chunk(beforeSeq-1),把它补回——连续性检查通过(实测 0 失败),每页只多返回 1 个事件。
apply 安全action=revert 恢复原状(已通过 apply→revert→apply→revert 往返验证 + JS 语法检查)apply 即可DSH_DEPLOY_ROOT 环境变量 → Windows 常见部署根 → ~/.dsh/profiles/*/node_modules上游分支(已推送到 fork):
https://github.com/mengyihh233/deepseek-harness/tree/perf/history-skip-chunk
官方 CONTRIBUTING 说明目前不接受外部 PR;补丁已按同源码推送到上述分支,可在 GitHub Discussions 讨论采纳。
与其他插件的兼容性(本机实测清单):
dsh-session 的 known-event-types,本插件补丁 dsh-host-apiproxy——不同文件,无冲突;都属部署文件修改,升级后各自需重打optimizer_* 工具晋升后可用,无冲突wechat-* 前缀)。清理/归档默认只动空会话与 >7 天未动的会话,活跃微信会话不受影响;optimizer_cleanup 列出 wechat-* 空会话时请确认后再执行settings.section 的 optimizer 条目(order 50),不覆盖任何现有设置页安全设计:
~/.dsh/sessions-archive/,可手动移回@deepseek-ai/cordis 与 dsh-tools,由 DSH 运行时提供已知限制:
applyoptimizer_audit 的 chunk 占比是行级近似(打包行按 1 行计),非展开后精确值DSH_DEPLOY_ROOT 环境变量可解决npm install # typescript + @types/node(@deepseek-ai/* 由 DSH 运行时提供,peerDependencies)
npm run build # tsc 编译 src → lib
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。