把超长命令输出存入本地库,按需检索回上下文
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add akske/dsh-local-context该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 10 处,展示前 10 条)
- 读取本地文件index.js:77
if (statSync(absolute).isDirectory()) return absolute; - 读取本地文件index.js:82
if (statSync(base).isDirectory()) return base; - 写入本地文件lib/db.mjs:61
mkdirSync(dirname(key), { recursive: true }); - 执行外部命令来自配置/变量lib/exec.mjs:72
const probe = spawnSync(exe, ['/d', '/c', 'chcp'], { windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] }); - 读取本地文件lib/exec.mjs:106
...PWSH_CANDIDATES.filter((candidate) => existsSync(candidate)), - 读取本地文件lib/exec.mjs:118
...BASH_CANDIDATES.filter((candidate) => existsSync(candidate)), - 执行外部命令固定命令lib/exec.mjs:141
spawnSync('taskkill', ['/PID', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' }); - 执行外部命令来自配置/变量lib/exec.mjs:163
child = spawn(attempt.exe, attempt.args, { - 删除本地文件递归test.js:80
try { rmSync(TMP_ROOT, { recursive: true, force: true }); } catch { } - 读取本地文件test.js:229
assert.ok(existsSync(dbPath), 'database file should exist');
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
一个零依赖的 DSH 插件,用来优化上下文窗口。支持沙箱执行、智能截断和 FTS5 本地搜索。无需构建 C++!
README
由 DeepSeek 最新模型翻译生成dsh-local-context
给 DeepSeek Harness(DSH)的零原生依赖本地知识库。
不用再为了把超长工具输出拿出上下文窗口,去装 Visual Studio、编译 C++。dsh-local-context 使用 Node 内置的 node:sqlite,把完整命令输出存进本地 SQLite + FTS5:没有原生插件、没有预编译二进制、没有任何构建步骤。
English · 为什么做它 · 特性 · 安装 · 三个工具 · 工作原理 · 配置 · 开发 · License
为什么做它
Agent 的工具结果会持续吃掉上下文:一次 npm test、一段 git diff、一份 JSON dump,动辄几千 token,而且直到会话结束都在计费。常见解法是 context-mode 类插件——把完整输出存进可检索的库,只把有用的部分返回给模型。
但这些插件大多依赖原生 SQLite 绑定。在 Windows 上,这意味着 Visual Studio Build Tools、Python、编译器工具链,以及一次就能耗掉一下午的构建失败。
这个插件选择另一条路:用 Node 24 / Electron 已经自带的能力,搭一套够用的检索栈。你只需要装一个文件夹,没有任何东西需要编译。
展开完整文档(README 剩余 1 节)
dsh-local-context
给 DeepSeek Harness(DSH)的零原生依赖本地知识库。
不用再为了把超长工具输出拿出上下文窗口,去装 Visual Studio、编译 C++。dsh-local-context 使用 Node 内置的 node:sqlite,把完整命令输出存进本地 SQLite + FTS5:没有原生插件、没有预编译二进制、没有任何构建步骤。
English · 为什么做它 · 特性 · 安装 · 三个工具 · 工作原理 · 配置 · 开发 · License
为什么做它
Agent 的工具结果会持续吃掉上下文:一次 npm test、一段 git diff、一份 JSON dump,动辄几千 token,而且直到会话结束都在计费。常见解法是 context-mode 类插件——把完整输出存进可检索的库,只把有用的部分返回给模型。
但这些插件大多依赖原生 SQLite 绑定。在 Windows 上,这意味着 Visual Studio Build Tools、Python、编译器工具链,以及一次就能耗掉一下午的构建失败。
这个插件选择另一条路:用 Node 24 / Electron 已经自带的能力,搭一套够用的检索栈。你只需要装一个文件夹,没有任何东西需要编译。
- 无原生插件、无预编译二进制下载
- 无需 Visual Studio、Python 或 C++ 工具链
- package.json 不声明任何 npm 依赖
- 已在 DSH 桌面端实测:Electron 44.7.0 / Node 24.21.0 / SQLite 3.53.4
特性
- 智能截断:输出超过 5000 字符时保留前 2000 + 后 2000,中间替换为精确的省略标记(... [省略 N 个字符的输出] ...)。
- 完整原文仍可检索:只要发生截断,完整原始输出会先写入 FTS5;模型随后可用 ctx_search 找回任意细节。
- FTS5 + trigram + LIKE:trigram 支持中英文子串;1–2 个字的纯中文查询自动降级到 LIKE,弥补 trigram 无法命中短词的短板。
- bm25 相关度排序:标题权重 5、正文 1,默认返回前 3 条;默认给约 400 字高亮片段,full=true 可取完整块。
- 超时真的杀进程:默认 120 秒、上限 600 秒;Windows 上用 taskkill /T /F 结束整棵进程树。
- 4 MiB 输出硬上限:cat 大文件也不会撑爆内存;命令被终止,已收到的内容仍会入库。
- Markdown 感知分块:识别标题层级、代码围栏不拆开;默认 1200 字符一块、硬上限 1600。
- 同 title 覆盖:重复索引同一标题会替换旧块,build-fix-build 不会越积越多。
- 加载安全:数据库懒初始化、WAL、busy_timeout;库坏了也不会拖垮 DSH profile 启动。
- 运行时 JS 不到 40 KB:5 个文件,无打包器、无转译器。
安装
要求:Windows 10/11 上的 DSH 桌面端、Node 24+(当前 DSH 桌面端已内置),推荐安装 Git Bash(language: "bash" 默认使用它)。
git clone https://github.com/akske/dsh-local-context.git
把目录作为 DSH bundle 安装(官方路径):
plugin_manager(action: "install_bundle", target: "<绝对路径>/dsh-local-context")
可以在 DSH 插件管理器中安装本地 bundle(若你的版本提供该入口),也可以直接让 DSH agent 安装这个路径的 bundle。profile 的包管理器健康时,CLI 方式同样可用:
dsh plugin --profile desktop add "<绝对路径>/dsh-local-context"
通常三个工具会立即出现;如果没有,重启一次 DSH。
验证:
ctx_exec({ command: "echo hello from ctx_exec" })
→ hello from ctx_exec
[exit code: 0]
三个工具
| 工具 | 作用 |
| ctx_exec | 执行 shell 命令;智能截断超长输出并归档完整原文 |
| ctx_index | 把文本分块写入本地知识库 |
| ctx_search | 在已存内容中按相关度检索 |
ctx_exec
| 参数 | 必填 | 说明 |
| command | 是 | shell 命令。需要 Python/Node 时直接写 python -c "..." / node -e "..." |
| language | 否 | bash(默认,Git Bash)、pwsh、cmd |
| cwd | 否 | 工作目录;相对路径按会话目录解析 |
| timeoutMs | 否 | 1000–600000,默认 120000;超时会终止进程树 |
ctx_exec({ command: "git log --oneline -20" })
ctx_exec({ command: "npm test", timeoutMs: 300000 })
ctx_exec({ command: "python -c 'print(sum(range(10)))'" })
截断行为:
- 仅当输出严格大于 5000 字符时触发。
- 保留 2000 头 + 2000 尾,N = 总长 - 4000。
- 末尾附固定警告语,提示模型用 ctx_search 找细节。
- 退出码、超时、输出超限、启动失败都会写进返回值;非零退出标记为错误,但正文不丢。
ctx_exec({ command: "printf 'A%.0s' {1..6000}; printf 'NEEDLE'; printf 'B%.0s' {1..6000}" })
→ AAAAAAAA...(2000 字符)
... [省略 8020 个字符的输出] ...
BBBBBBBB...(2000 字符) [exit code: 0] [警告:输出过长已被智能截断,完整原始输出已存入本地知识库。你可以使用 ctx_search 工具搜索关键信息]
之后 ctx_search({ query: "NEEDLE" }) 就能命中被省略的中段。
ctx_index
| 参数 | 必填 | 说明 |
| text | 是 | 要索引的文本,单次上限 100 万字符 |
| title | 否 | 来源标题;再次索引同一标题会覆盖旧块 |
Markdown 标题会变成块标题(文档 > 小节),代码围栏保持完整,返回值只报告块数。
ctx_search
| 参数 | 必填 | 说明 |
| query | 是 | 检索词;支持 1–2 个字的纯中文 |
| full | 否 | true 返回命中块完整正文,默认只给片段 |
| limit | 否 | 1–10,默认 3 |
ctx_search({ query: "trigram" })
ctx_search({ query: "开发" }) # 短中文 → LIKE 兜底
ctx_search({ query: "UNIQUE_TOKEN", full: true }) # 取完整块
ctx_search({ query: "timeout", limit: 5 })
工作原理
┌────────────────────────────┐
ctx_exec ───► │ shell(bash/pwsh/cmd) │ │ └─ 超时 → taskkill /T │ └────────────┬───────────────┘ │ stdout + stderr(≤ 4 MiB) ▼ ┌────────────────────────────┐ │ 截断:2000 + 2000 │──► 返回给模型 └────────────┬───────────────┘ │ 仅截断时写完整原文 ▼ ┌────────────────────────────┐ │ FTS5 chunks(trigram) │◄── ctx_index │ node:sqlite · WAL │ └────────────┬───────────────┘ ▼ ┌────────────────────────────┐ │ ctx_search:bm25 → 片段 │ │ 短查询 → LIKE 兜底 │ └────────────────────────────┘
检索策略刻意保持简单:
1. 按空白拆词并剔除 FTS 语法字符。
2. trigram MATCH:先全词 AND,再任一 OR。
3. 查询太短(1–2 字)或 FTS 解析失败时,降级为 LIKE 子串。
4. bm25(chunks, 5.0, 1.0) 排序,返回片段或完整块。
数据库完全运行在 DSH Host 进程内,没有额外服务、端口或子进程。
配置
所有键都是可选的,写在 cordis.patch.yml 的 bundle row 里:
| 键 | 默认值 | 说明 |
| dbPath | $DSH_HOME/local-context/local_context.db(即 ~/.dsh/local-context/local_context.db) | SQLite 文件的绝对路径 |
| bashPath | 自动探测 | PATH 与常见 Git 安装位置都找不到时,显式指定 bash |
| pwshPath | 自动探测 | 显式指定 pwsh / powershell |
环境变量 DSH_LOCAL_CONTEXT_DB 可覆盖默认路径;dbPath 优先级高于环境变量。
- insert:
- id: local-context
name: dsh-local-context
config:
dbPath: 'D:/data/dsh-local-context.db'
请使用绝对路径:相对 dbPath 会按 DSH 进程的工作目录解析。
数据与隐私
- 知识库就是本地一个 SQLite 文件(以及临时的 -wal / -shm)。数据不出本机,没有遥测。
- 内容以明文存储——不要把你不愿落盘的密钥索引进库。
- 删除数据库文件即可清空知识库。
- 同一台机器上的所有会话、profile 共用一个库;每条块记录保留 source、origin 与时间戳。
- ctx_exec 以 DSH Host 权限执行命令且没有沙箱;不要用它执行由不可信输入拼接出的命令。
开发
npm test # node --test test.js
测试在系统临时目录创建一次性数据库,绝不触碰真实知识库。覆盖:截断边界(4999/5000/5001/12000)、代理对、Markdown/围栏分块、exec 成功/stderr/退出码、截断→入库→检索、中文双字查询、覆盖索引、limit/full、非法 FTS 语法、4 MiB 上限、超时杀树、缺失解释器、cmd OEM 代码页解码。
依赖审计(刻意保持简单):package.json 没有任何依赖字段;所有 import 只允许 node:* 或相对路径。
index.js 插件入口:apply()、工具注册、结果格式化 lib/text.mjs 字符安全截断、片段、高亮 lib/chunk.mjs Markdown / 代码围栏感知分块 lib/exec.mjs shell 启动、超时、杀进程树、输出上限、解码 lib/db.mjs node:sqlite 建表、按来源覆盖、bm25/LIKE 检索
locale/{en,zh}.json 插件管理器的显示元数据
icon.svg 插件图标 test.js node:test 测试(不随包发布)
兼容性
- Windows 10/11 是主要目标:支持 Git Bash、pwsh、cmd,超时用 taskkill。
- Linux/macOS 在具备 bash 且显式设置绝对 dbPath 时可用;shell 自动探测偏 Windows。
- 需要 Node 24+(node:sqlite 无需实验开关)。已在 Electron 44.7.0(Node 24.21.0、SQLite 3.53.4)验证。
限制
- 工具描述目前是中文;参数 schema 与语言无关。欢迎提交本地化 PR。
- cmd 在管道下无法切换代码页,输出按 Windows OEM 代码页(中文系统为 936/GBK)解码;在 cmd 内强制输出 UTF-8 的程序仍可能乱码,优先用 bash 或 pwsh。
- SQLite 是同步 API:一次超大的 ctx_index 可能短暂阻塞 Host 事件循环(已有上限约束)。
- 不加密、不限额、不自动清理。
致谢
灵感来自两个优秀项目:
- mksglu/context-mode — 上下文窗口工具与 FTS5 设计思路的源头。
- icanfinish11/dsh-context-mode — DSH bundle 形态与进程内工具注册模式。
本项目是独立重写:不包含上述项目的代码,运行时不依赖它们,并用 node:sqlite 替换了原生数据库层。若仍有相似之处,仅停留在工具命名与总体架构层面。
License
MIT © 2026 dsh-local-context contributors预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
akske/dsh-local-context
把超长命令输出存入本地库,按需检索回上下文
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,487已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,894已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,379已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 5,084已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,778已汉化DSH
71.1
这是你的仓库?认领条目