夜雨聆风学习资料网

ARTICLE · 1138285

【DSH 插件·上下文与记忆】dsh-context:上下文里装了什么,摊开了

【DSH 插件·上下文与记忆】dsh-context:上下文里装了什么,摊开了

一个跑了三个小时的长会话,输入框右下角的占用环转到了 82%。你盯着它看了一会儿,意识到一个问题:你知道占了八成,却说不出这八成里装了什么。系统提示词占多少?几十个工具定义呢?一小时前 Agent 读进来的那三个大文件还在不在上下文里?更早它跑命令刷屏的那几屏输出,是被压缩了,还是被悄悄裁掉了?

内置其实给了不少东西。占用环点开有分解:系统提示词、工具定义、对话消息各占多少,随事件流实时更新。会话的「轨迹」标签页是结构化的请求时间线,每次请求的 token 用量、实际发出去的 system prompt 和工具定义、prompt 变更的 diff 都在;压缩发生时有独立的一行,聊天流里还有「上下文已压缩」的内联标记,摘要可以展开看。问题是三处各管一段:占用环只有当前快照,组成怎么一步步变成现在这样的,没有历史;分解粒度固定在三类,单条消息、单个工具结果吃了多少,看不到;最隐蔽的是 tool-result-pruner 的静默裁剪——不生成摘要、不发通知,在整个界面上不留任何痕迹,上下文里少了什么你无从察觉。

把会话日志摊开成一条时间线

dsh-context(当前 0.65.0,Apache-2.0)做的事情一句话:把会话日志在宿主侧折叠成一条带组成分解的上下文时间线,再在 web 端给你一个收拢的面板。宿主进程里它注册三个常驻投影——时间线、请求头、活动记录——事件一边产生一边折叠;面板端是侧边栏的 Context 页,组成堆叠、逐 turn 的演进曲线、cost 估算、文件活动、agent 树都在一处;输入框上另有一层 overlay 直接显示当前占用,想细看某一步,点下去才按需拉取那条的具体内容,不预载全文。外加一个 /context 命令、一个余额胶囊和一个跨会话的 Insights 页。

对着内置的三个盲区看:组成演进有了曲线,占用从 40% 爬到 82% 是哪些回合、哪类内容堆上来的,直接可见;粒度细到单条,哪条消息、哪个工具结果吃了多少 token 可以逐个点开;pruner 的静默裁剪和压缩事件一起落在时间线上,上下文「变瘦」的每个时点都有记录。拿一个最常见的排查场景说:上下文突然涨了 20K,在内置里你得去轨迹页逐请求翻 usage 找嫌疑;在时间线上它是曲线上的一个台阶,点那个台阶,就是那次工具结果的全文。而且它对历史会话同样有效——重开一个装插件之前的老会话,时间线会从日志重新折叠出来,不是只伺候新会话。一句话区分:内置回答「现在占多少」,它回答「怎么变成现在这样的」。

▲ 注入面:宿主半区唯一硬注入是会话投影注册表,向上挂三个常驻投影和三条认证 API 路由(detail、balance、backfill);client 半区走侧边栏、Insights 页、composer overlay 等槽位。凭据只在一个地方出宿主——balance 路由;浏览器侧两处外联都不带凭据。

装之前,先看它碰什么

观测类插件最该审的是它顺手带走了什么。这个包的边界相当干净:运行时依赖只有 zod 一个,没有子进程,不写文件,没有遥测,没有 eval。全插件唯一碰凭据的地方是余额胶囊——经宿主凭据服务解析 DEEPSEEK_API_KEY,向 api.deepseek.com 请求一次余额,十秒超时、不缓存、失败就显示空,密钥不出宿主进程。配置只落在自己的卡槽里,卸载即净。npm 包带 SLSA 构建溯源和 registry 签名,装的时候认准 0.65.0。

▲ 生命周期:安装后组合进 profile 配置,会话事件流实时折叠成三个投影推送到面板,detail 按需经 RPC 拉取;卸载后配置行消失、投影注销,不留状态。

两个如实交代的保留项。第一,维护者是单人,迭代极快——两个月发了 65 个 minor 版本,好处是问题修得快,代价是没有「稳定版」可追,介意的话锁定装过的版本。第二,按 DeepSeek Harness 团队的说法,宿主会把已装插件的包名和版本上报官方 API(不占 tokens);团队 9 月 30 日在 X 上把这个插件选作「每日优质插件推荐」的第一期,还提到生态里约六成用户装了至少一个第三方插件——被官方点名意味着维护响应大概率不会断,但也意味着你的插件清单对官方是透明的。

不在兼容名单里的新版本

插件自己声明测过的 Harness 版本有三档:0.1.5-rc.1、0.1.7-rc.2、0.2.0-rc.2,当前最新的 0.2.1-alpha.1 不在名单里。宿主的兼容门禁对未声明版本是放行的,所以装得上——但「装得上」和「接缝都对得上」是两回事。把新基线加进它自带的兼容矩阵跑一遍:声明的三档全部通过;新基线的 27 个接缝探针——从投影注册、checkpoint 缓存、事件词汇,到设置面板、会话跳转、图标面——第一次比对就全部吻合,一处都不用改;全量 2044 个测试零失败。隔离环境里安装、组合进配置、卸载,也都干净。

▲ 兼容矩阵输出:名单之外的新基线 0.2.1-alpha.1 的 27 个探针全部通过,face 零修正;全量 2044 个测试零失败。

▲ 一次性 HOME 下的冒烟记录:plugin add 后 dump-config 组合出一行 dsh-context,remove 后归零;全程未启动会话、未配置任何密钥。

没验证到的也摆出来:没跑真实会话(token 统计由合成日志验证),余额的真实外联没有发出,面板在真实浏览器里的渲染没有取证。这些不影响安装判断,但指望余额胶囊的人,第一次用之前自己看一眼数字对不对。

看清上下文,不止这一条路

▲ 同一件事的五条路:内置覆盖当前快照与请求轨迹,console 做成可读写的操作台,budget 只管配置不看观测,better-composer 把占用与演进收进输入框周边;dsh-context 的时间线加组成分解加 cost 组合没有等价对手。

目录里做「上下文」的包不少,分工其实清楚。dsh-context-console 把它做成可读写的操作台:事件级轨迹、行内编辑、模拟注入、会话日志修复,能看也能改,但没有 token 组成分解和演进趋势。内置轨迹页也有一手独门的东西——system prompt 变更的 diff 视图,dsh-context 目前不做这个。dsh-context-budget 退到更上游:不给你看任何东西,只管在设置页写上下文窗口和压缩阈值,是配置工具不是观测工具。最接近的是 dsh-better-composer:侧边栏占用表盘、组成堆叠、逐 turn 增长图、原地压缩,重合度很高,差别在形态——一切收进输入框周边,少了 cost 估算、文件活动和 agent 树。加上内置已有的「当前快照 + 请求轨迹 + 压缩标记」,想要「一条时间线讲清上下文的一生」的人,dsh-context 这一组组合在目录里没有等价对手。

装不装

上下文工具的分水岭不在「现在占多少」,而在「怎么变成现在这样的」。快照回答第一个问题,时间线回答第二个——而第二个问题才是你决定要不要压缩、该不该精简工具、是不是该开新会话时真正需要的。这个判断不只适用于它:下次评估任何上下文工具,先问有没有历史。

结论 install:边界干净,声明矩阵全绿,名单外的新版本实测全通。适合装的人——常跑长会话、想知道上下文花在哪、或压缩之后需要追溯内容的人。不值得装的人——会话都短、偶尔用一次,内置占用环加轨迹页已经够了;对迭代速度敏感的人装时锁定 0.65.0。今天的第一步:dsh plugin add dsh-context,打开一个存量长会话的 Context 面板,对着占用环看一遍组成曲线——曲线比环更能告诉你下一次该压掉什么。

参考:github.com/bowenliang123/dsh-context(v0.65.0);github.com/deepseek-ai/deepseek-harness(dsh-v0.2.1-alpha.1);github.com/awesome-dsh-plugin/awesome-dsh-plugin

相关学习资料