前言¶
在 DeepSeek Harness(DSH)里跑智能体时,上下文窗口往往被两类内容挤满:一是 curl、wget 或宿主自带的 web_fetch / read_page 把整页响应写进 transcript;二是某次工具已经返回了成千上万行日志、JSON 或表格,模型其实只需要计数、摘要或几段摘录。常见做法是事后手动删消息或换更短的命令,但 flood 往往在调用发生的那一刻就已经进上下文了。
下面介绍的 dsh-context-toolkit(维护者 chimneyQ,社区目录分类为 admin-security)专门做一件事:让 bulk output 尽量不进对话。它在执行前用 routing gate 拒绝必然灌水的调用,在工具执行后用输出瘦身处理已经返回的内容;原始字节可通过 ctk_retrieve 按标记无损读回。知识库基于 Node 自带的 node:sqlite(含 FTS5),沙箱执行用本机已有解释器,无第三方运行时依赖。
这是什么¶
一句话:DSH bundle,把「原始字节」和「结论」拆开——命令在子进程里跑、大文件在沙箱里分析、长材料写入本地知识库,对话里只留结论、摘录和统计。
| 痛点 | 插件做法 |
|---|---|
| 命令打印数千行,你只需要个数 | ctk_execute 在子进程执行并只返回答案 |
| 大文件要统计,不要全文读入对话 | ctk_execute_file 把文件字节留在沙箱 |
| 多条命令一个问题 | ctk_batch_execute 一次调用、逐条状态 |
| 页面或规格读一次后要反复查 | ctk_index 入库,ctk_search 按需拉摘录 |
curl / wget 把整段响应贴进对话 |
routing gate 拒绝并提示替代路径 |
| 不知道省了多少上下文 | ctk_stats 记账;设置页有实时占用面板 |
核心能力¶
工具一览¶
| 工具 | 作用 |
|---|---|
ctk_execute |
沙箱子进程执行代码(javascript / esm / typescript / shell),只返回答案 |
ctk_execute_file |
对文件跑统计或抽取;文件正文不进对话 |
ctk_batch_execute |
多命令一次调用,逐条状态,只返结论 |
ctk_index |
将文本或文件写入本地 FTS5 知识库 |
ctk_search |
多查询检索,摘录围绕匹配位置 |
ctk_retrieve |
从 [ctk_retrieve id=…] 标记读回瘦身前原文,字节级一致 |
ctk_fetch_and_index |
抓取页面 → 去 markup → 入库 |
ctk_purge |
删除已归档材料(需 confirm: true) |
ctk_stats |
节省账本:拒绝次数、沙箱字节、归档字节、调用计数 |
ctk_doctor |
自检:解释器、scratch 目录、知识库往返 |
ctk_context_report |
当前会话的上下文占用与构成 |
两道防线¶
Routing gate(门前):在工具执行前读取调用参数,拒绝会必然 flood transcript 的路径(例如各 shell 里的 curl / wget,并可对 web_fetch / read_page 做 nudge)。主开关为配置项 routing,denyCurlWget 默认开启。
Output slimming(事后):gate 只能看参数;已经返回的大块输出由 tools/post-execute 按形态处理——均匀 JSON 数组做无损表格化重编码;表格保留头尾并对中间步进采样且保留原行号;grep / 搜索类结果按文件折叠等。需要全文时用 ctk_retrieve 取回存储的原文。
配置要点¶
以下默认值与含义均来自插件 README(节选):
| 键 | 默认 | 含义 |
|---|---|---|
routing |
true |
routing gate 总开关 |
denyCurlWget |
true |
直接拦截 curl / wget |
bashNudgeMinCommandBytes |
4096 |
过长 shell 命令 nudge 阈值(0 关闭) |
maxReadBytesBeforeAsk |
51200 |
整文件读取 nudge 阈值(0 关闭) |
nudgeFetchTools |
true |
对宿主 fetch 工具也 nudge |
compressNudgeTokens |
120000 |
占用告警阈值(tokens) |
searchLimit |
5 |
ctk_search 每查询摘录条数 |
snippetChars |
900 |
单条摘录字符上限 |
fetchMaxBytes |
2000000 |
单页抓取上限 |
caPemPath |
auto |
ctk_fetch_and_index 的 TLS 信任;TLS inspection 代理导致 UNABLE_TO_VERIFY_LEAF_SIGNATURE 时可配 PEM |
storageDir |
空 | 知识库根目录;空则 <DSH_HOME>/context-toolkit |
各 ctk_* 工具可通过 tools.* 单独开关,默认均为开启。设置页 Context Toolkit 可查看 caPemPath 对应文件是否存在,并从系统根证书导出快照(需确认才会覆盖已有文件)。
安装与启用¶
推荐从 npm 安装:
dsh plugin --profile desktop add dsh-context-toolkit
从 GitHub 安装:
dsh plugin --profile desktop add github:chimneyQ/dsh-context-toolkit
本地路径(示例为 Windows 路径,按你的 checkout 位置替换):
dsh plugin --profile desktop add D:\path\to\dsh-context-toolkit
在 <DSH_HOME>/profiles/desktop/package.json 的 dsh.profile.bundles 中应能看到 dsh-context-toolkit。卸载:
dsh plugin --profile desktop remove dsh-context-toolkit
当前 npm 包版本为 0.3.12,许可证 MIT(见 package.json)。
典型用法¶
原则:凡是分析、计数、过滤、汇总,优先用 ctk_*——把结果读进对话正是本插件要解决的问题。
统计目录下 .log 文件数量与总大小:
// How many .log files, and how big in total?
await ctk_execute({
language: 'javascript',
code: `
const fs = require('fs');
const dir = process.argv[2];
let n = 0, bytes = 0;
for (const f of fs.readdirSync(dir)) {
if (!f.endsWith('.log')) continue;
n++; bytes += fs.statSync(dir + '/' + f).size;
}
console.log(n + ' files, ' + bytes + ' bytes');
`
});
长文档入库后按关键词取段:
await ctk_index({ path: 'D:/specs/api.md' }); // the full text stays in the store
await ctk_search({ queries: ['rate limit', 'auth'] }); // only the relevant excerpts come back
离线自检(不依赖 DSH 运行时)可在插件目录执行 README 中的 node smoke.mjs 等脚本,覆盖合约、gate、瘦身与检索等检查。
适用场景与注意¶
适合谁:长期在 DSH desktop profile 上开发智能体、频繁跑 shell、读大文件或抓网页,又希望 transcript 里主要是结论而不是原始 dump 的开发者。
权限与安全:插件以当前 dsh 进程权限 运行子进程、读写知识库与沙箱目录;routing gate 会改写或拒绝部分工具调用行为。安装前请自行审阅 GitHub 源码 与 MIT 许可证,admin-security 分类也提醒其具备策略型拦截能力,不适合在未理解配置的情况下 blindly 启用于生产敏感环境。
生态说明:DSH 社区插件目录在 SkillHub 等独立站点维护,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package.json 为准。
结尾¶
dsh-context-toolkit 用 门前拒绝 + 事后瘦身 + 本地 FTS 知识库 + 可检索原文 把上下文留给推理而不是日志堆叠。若你在 Harness 里常被 curl 输出或巨型 tool result 拖累,可以按上文命令安装,用 ctk_doctor / ctk_stats 验证环境并查看节省情况。