dsh-plugin-context-mode:在 DSH 中原生接入 Context Mode

前言

在 DeepSeek Harness(DSH)里跑智能体时,工具和执行命令的输出往往会一次性塞进上下文:几十到几百 KB 并不罕见。结果是窗口被占满、token 成本上升,模型也容易在长噪声里丢掉核心指令(「lost in the middle」),多轮对话里还会反复读同一份文件或同一段命令输出。

context-mode(Mert Koseoglu)的思路是把大段工具输出拦在模型窗口之外,改由本地索引按需检索。dsh-plugin-context-mode 是 Domush 维护的 DSH 原生插件,把上述能力完整接到 Harness 的生命周期与 Web UI 上。下面介绍它做什么、怎么装、怎么配、以及模型侧会多哪些工具。

这是什么

  • 名称:dsh-plugin-context-mode(npm 包名与插件 id 一致)
  • 维护者:Domush
  • 分类:工作流(社区目录归类)
  • 许可:MIT(README 与 package.json 一致;当前 npm 版本 1.0.2)
  • 定位:为 DSH 提供对 context-mode 的完整原生支持——本地 SQLite FTS5 索引、大输出拦截替换、以及 8 个 Context Mode 工具。

插件挂在 DSH 的 tools/post-execute 瀑布生命周期上:超过阈值的输出会被拦截并索引,模型只收到紧凑预览和可检索的句柄。

Context Mode 在解决什么问题

标准 agent 循环里,大工具输出直接进入上下文,典型后果包括:

  1. 上下文窗口饱和,token 费用变高。
  2. 噪声导致指令与目标被遗忘。
  3. 多轮里重复读取相同内容。

Context Mode 的做法(插件 README 与原项目一致):

  • 大于 4 KB(默认阈值)的输出自动拦截,写入本地 SQLite FTS5。
  • 向模型返回短预览 + 索引句柄。
  • 模型通过 ctx_search 等工具,用 BM25 与 Trigram RRF(RRF_K=60)按需取片段。
  • 压缩或子代理场景下,用 session journal 与 ctx_resume 等保持连续性。

存储引擎使用 Node.js 原生 node:sqlite(DatabaseSync)与 FTS5 虚拟表(porter unicode61、trigram),README 写明无需额外 C++ 编译或本地二进制安装。

核心功能

八个原生工具

工具 作用(据 README)
ctx_execute 沙箱执行 Node.js / Python / shell,输出上限 16 KB;超出部分索引,可按 intent 做语义过滤
ctx_batch 批量 shell,结果拼接后统一进 FTS5
ctx_index 显式索引文件、文本或 URL,不撑开上下文
ctx_search 跨 session / worktree 检索已索引块
ctx_resume 压缩边界或子代理后,用 ≤2048 B 的状态块恢复上下文
ctx_stats 拦截字节、未进窗口字节、估算 token 节省等统计
ctx_doctor SQLite FTS5 分词器与运行环境诊断
ctx_purge 清理索引源或清空 Context Mode 表

自动拦截与 UI

  • autoIntercept:默认开启;超过 replaceTriggerBytes 的输出被替换为 head/tail 预览与 search handle。
  • Web UI:DSH 设置里提供自定义区块;实时指标(bytes kept out、token savings、进度条)、诊断表、一键 vacuum / purge。
  • 语言:en.json、zh.json 双语界面文案。

数据库与表结构

默认库路径:~/.context-mode/context.db。表包括 events(回合日志)、sources(索引目录)、chunks / chunks_tri(FTS5)、meta(元数据)。可通过配置项 dbPath 覆盖路径(空字符串表示使用默认)。

安装与启用

插件从 npm 拉取,不要用 dsh plugin add github:... 自行拼接仓库地址。

在 DSH Web UI 中安装

  1. 打开 DeepSeek Harness Web UI,进入 Settings → Plugins。
  2. 点击 Add Plugin。
  3. 粘贴插件名:
dsh-plugin-context-mode
  1. 点击 Install,从 npm 安装并立即生效。

使用 CLI

dsh plugin install dsh-plugin-context-mode

写入 Profile(package.json)

{
  "dependencies": {
    "dsh-plugin-context-mode": "^1.0.0"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-plugin-context-mode"
      ]
    }
  }
}

说明:profile 示例中的依赖版本写为 ^1.0.0;npm 当前发布为 1.0.2,可按需收紧版本范围。

配置

在 cordis.patch.yml 或 DSH Settings 中插入(与 README 一致):

- insert:
    - id: dsh-plugin-context-mode
      name: dsh-plugin-context-mode
      config:
        enabled: true
        autoIntercept: true
        replaceTriggerBytes: 4096
        injectSystemPrompt: true
        dbPath: "" # defaults to ~/.context-mode/context.db
配置项 类型 默认 说明
enabled boolean true 启用/禁用插件
autoIntercept boolean true 自动拦截并索引超阈值输出
replaceTriggerBytes number 4096 触发拦截的字节阈值
injectSystemPrompt boolean true 向系统提示注入 Context Mode 工具说明
dbPath string "" 自定义 SQLite 路径;空则 ~/.context-mode/context.db

典型用法

以下 JSON 参数摘自 README,可在模型调用对应工具时复现。

ctx_execute:带输出上限的执行,大输出进索引。

{
  "language": "shell",
  "code": "git log --oneline -n 100",
  "intent": "merge commit"
}

ctx_batch:多命令一批执行,再按查询检索。

{
  "commands": ["pnpm test", "git status --short", "cat package.json"],
  "queries": ["dependencies", "test failed"]
}

ctx_index:把文件编入 FTS5,不展开到对话上下文。

{
  "path": "docs/architecture.md",
  "source": "architecture-doc"
}

ctx_search:对已索引内容做 BM25 + Trigram RRF 检索。

{
  "queries": ["PostToolUse", "FTS5 schema"],
  "limit": 5
}

ctx_stats:查看节省报告。

{
  "scope": "all"
}

经过上面的步骤,模型在需要细节时先 ctx_search,而不是把完整日志留在每一轮上下文里。

适用场景与注意

适合谁

  • 经常在 DSH 里跑 shell、读大文件、或多工具串联,且上下文经常被输出撑满的团队或个人。
  • 希望本地优先、用 SQLite 检索替代「整段输出复读」的智能体工作流(目录分类为「工作流」与此一致)。

使用注意

  1. 权限边界:ctx_execute、ctx_batch 等在 DSH 进程权限与环境里运行;安装前请阅读 仓库源码 与 MIT 许可证,确认符合你的安全策略。
  2. 依赖归属:核心能力与 context-mode 对齐;插件 README 标注 Context Mode 版本徽章 v2.1.7,与上游生态保持一致时需自行关注 upstream 变更。
  3. 生态说明:DSH 奉行「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系,不要当作官方应用商店条目理解。

结尾

dsh-plugin-context-mode 把 Context Mode 的拦截、索引、检索和恢复能力接到 DSH 原生生命周期与设置界面,适合需要控制上下文体积、又希望按需取回工具输出细节的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜