前言¶
在 DeepSeek Harness(DSH)里跑长会话时,每一轮请求往往都会重发系统提示、工具定义、技能与 MCP 说明,再加上其他插件注入的运行时上下文;会话历史也会持续挤占上下文窗口。只看 DSH 自带的窗口占用,很难判断「慢」和「满」究竟是历史消息堆积,还是每轮固定开销过大。
已有插件例如 dsh-context 更侧重跨会话查看上下文构成与演变;dsh-context-control 把方向落在「先看清 token 花在哪,再决定这一轮发什么」——在不动日志、不改插件源码的前提下,只改下一次请求的装配结果。
这是什么¶
dsh-context-control 是 creatjy 维护的 DSH 工作流类插件:看清 token 构成,按会话懒加载技能 / MCP / 插件,并在需要时压缩会话。它不改动 DSH 日志,也不改其他插件源码;开关与文本改写都只作用于下一次请求的装配,可随时还原。
- 目录页:https://www.skillhub.cn/plugins/creatjy/dsh-context-control
- 源码:https://github.com/creatjy/dsh-context-control
- 许可证:MIT(README 与 package.json 一致)
- 当前 package 版本:0.6.8
两个入口分别解决什么问题¶
插件在 Web GUI 提供两处入口,对应「全局请求构成」与「当前会话」两类问题。
| 入口 | 回答的问题 | 能做什么 |
|---|---|---|
| 左侧「上下文管控」配置台 | 整个请求由什么组成? | 按系统提示 / 运行时注入 / 工具定义拆 token;逐段开关、编辑、还原;配置项目与全局规则。 |
| 输入框左侧的「上下文」胶囊 | 这条会话占多少?下一轮还会发什么? | 看当前窗口、每次重发、下一轮预计;按会话切换技能 / MCP / 插件档位;开关提示段与工具;立即压缩或设置自动压缩。 |
配置台顶部有三段比例尺(系统内容 / 运行时注入 / 工具定义),下面按「构成 / 项目 / 全局」组织:构成展示当前项目实际会发出的全部内容;项目定义工作区规则并可被子项目继承;全局为所有项目共享的默认值。
胶囊与 DSH 上下文统计同口径,展开后可见三层数字:当前窗口(会话已占用)、每次重发 ≈(下一轮还会再发的系统提示与工具定义,已扣本会话隐藏项)、下一轮预计 ≈(两者相加的粗估)。
核心能力¶
请求侧与会话侧分开核算¶
DSH 的上下文占用由两部分组成:
- 请求侧(每轮重发):系统提示段、运行时注入、技能说明、工具定义。
- 会话侧(窗口内累积):用户消息、助手消息、工具调用与结果。
插件分列展示;请求侧按来源分组并带 ≈token、预览与开关;会话侧读取 DSH 的 tokenMeter,「会话已累积」与胶囊、DSH 当前窗口一致。
逐段编辑系统提示与运行时注入¶
与「只看统计」的工具相比,本插件可以改这一轮实际发送的内容。
在配置台「构成」中:
- 系统提示段(sections):段名、来源、预览、≈token;可开关、编辑文本、还原;作用域为全局 / 项目 / 本会话。
- 运行时注入(contexts):其他插件或宿主在请求前塞进上下文的内容;可单独关闭或改写后再发;作用域为全局 / 项目。
- 工具定义(tools):仅支持开关,不能改 schema 文本;作用域为全局 / 项目 / 本会话。
- 技能 / MCP / 插件:支持加载 / 简介 / 隐藏三档;作用域为全局 / 项目 / 本会话。
编辑保存后只写入本地规则,下一次装配时用你的文本替换对应段;点「还原」可回到宿主或插件生成的原文。将某能力设为「隐藏」会连带去掉其工具定义与相关提示段。
工具开关通过 agent.ctx.tools.restrict({ deny }) 等机制限制;全关工具后模型确实无工具可用,界面会提示但不会强制拦截。
技能 / MCP / 插件:三档懒加载(本会话)¶
| 档位 | 这一轮发什么 | 模型调用时 |
|---|---|---|
| 加载 | 正文与工具定义均在 | 正常调用 |
| 简介 | 只留一行说明,正文与工具不发 | 自动恢复完整内容 |
| 隐藏 | 连简介也不发 | 先弹审批;拒绝则调用失败 |
三档默认作用于本会话;行内标「本会话」,回退可重新点选档位。同一能力在多个页面出现时,关联的说明段与工具会同步;优先级从低到高为:全局 → 项目继承链 → 项目覆盖 → 本会话覆盖。
系统提示段与系统工具无「简介」档,仅有加载 / 不加载。
会话内压缩¶
- 立即压缩:宿主暴露压缩服务时,由 DSH 选择可压缩区间并折叠历史;本轮仍在运行时会排队。
- 自动压缩:窗口占用达到设定比例(5%–95%)后,在空闲时执行。
- 无压缩服务时:按钮变为「发送压缩指令」,以 steer 方式让模型就地折叠,不硬改会话日志,可回滚。
AI 建议(0.6.0 起,默认关闭)¶
在配置台或胶囊中手动触发后,才将当前作用域的条目元数据交给当前会话模型,生成带 reason / confidence / risk / 预计少发 的建议;需先预览、勾选再「应用选中」,可撤销。首次启用会说明隐私范围:发送条目名称、类型、token 数,不发送会话正文。基础能力(文件读写、shell、压缩、上下文管控自身等)受保护,只允许保留或简介。
数据存放与边界¶
规则写在本地 <DSH_PROFILE_DIR>/dsh-context-control/modes.json,纯 JSON,可手改;删除该文件即恢复默认。带 ≈ 的数为估算,真实会话侧以计量器为准。压缩是否可用取决于当前 DSH profile 是否暴露压缩服务。README 注明验证环境为 macOS,其他系统可能存在差异。
安装与启用¶
从 GitHub 直装(README 原文):
dsh plugin add github:creatjy/dsh-context-control
或下载 Release 中的 tarball,例如 0.6.8:
dsh plugin add ./dsh-context-control-0.6.8.tgz
也可通过 GitHub Packages(npm 包名 @creatjy/dsh-context-control),需先对 https://npm.pkg.github.com 完成 npm 认证后再执行:
npm login --scope=@creatjy --auth-type=legacy --registry=https://npm.pkg.github.com
npm config set @creatjy:registry https://npm.pkg.github.com
dsh plugin add @creatjy/dsh-context-control
安装后重启 DSH,并刷新 Web GUI。左栏应出现「上下文管控」,输入框左侧出现类似 上下文 12.7k ▾ 的胶囊。
插件以当前 dsh 进程权限运行,安装前请自行查阅源码与 MIT 许可证,确认是否符合你的环境与安全要求。
典型用法¶
README 中给出的可复现场景如下:
- 长会话越跑越慢:打开胶囊,将暂不需要的 MCP / 插件设为「简介」或「隐藏」,再点「立即压缩」。
- 某个插件注入过多:配置台 →「构成」→「运行时注入」,找到来源后关闭;若要保留结构,可「编辑」压成一句话。
- 系统提示过长:在「系统提示」里按段查看
≈token,改写为本项目需要的规则,或关闭不用的工具说明段。 - 减少重复手工调整:在项目层设一套默认规则,会话内只覆盖当前需要的几项。
适用场景与注意¶
适合经常在 DSH 中开长会话、装多个技能 / MCP / 插件,且希望区分「每轮固定开销」与「历史占用」的开发者。若需要跨会话深挖上下文演变,可配合 dsh-context 使用。
「隐藏」能力依赖审批;若全局关闭审批,隐藏项调用会直接失败。插件不额外上传会话内容,token 统计在本地完成。DSH 生态以「一切皆插件」为理念;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-context-control 把请求装配与会话占用拆开呈现,并在配置台与会话胶囊里完成开关、编辑、懒加载与压缩,目标是让你在发下一轮之前就能看清 token 构成并做裁剪。
- 社区目录:https://www.skillhub.cn/plugins/creatjy/dsh-context-control
- GitHub:https://github.com/creatjy/dsh-context-control