Ykls53/dsh-memory-inject ↗★ 4

dsh-memory-inject

Inject USER.md / MEMORY.md as curated memory into DeepSeek Harness sessions — the 'always-on' half of a memory system, without any LLM call. 适合需要将本地Markdown记忆自动注入会话的用户;注入本身不额外调用模型。

Package
dsh-memory-inject
Compatibility
Unverified
Harness peer range
*
Version
0.4.2
License
MIT
Last updated
Oct 22, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Ykls53/dsh-memory-inject

配置

写在 profile 的 cordis.patch.yml 里,用 id memory-inject 覆盖:

配置默认说明
memoryDir~/.dsh/memories记忆目录
files[].maxCharsUSER 1375 / MEMORY 2200每份文件的硬预算
maxTotalChars4000单次注入的总预算,超出的文件整份跳过
turns[]空 = 每轮检查去重;填 [1] = 只第一轮
includePreambletrue是否带「这是记忆不是新输入」的说明行
skipPresets['qqbot', 'qqbot-c2c']这些 preset 的会话不注入(见下)
onlyPresets[]只在这些 preset 上注入;空 = 不限。配了就优先于 skipPresets
autoCapturefalse全自动回填开关
captureTimeoutMs180000提炼子进程超时

为什么默认排除 qqbot

DSH 的插件挂在进程上,不是挂在某个会话上。QQ 机器人(im-qqbot)跟桌面端跑在同一个进程里, 而 agent/pre-step 是全局钩子——不给过滤条件的话,你自己的 USER.md / MEMORY.md 会被塞进每一段 QQ 聊天里,对面的人不该看到你的私人画像。

判据是 agent.session.header.agentPreset(session 的 header 里存着这个会话用的 preset id)。

但 agent/pre-step 的事件里只有 messages/turn/step/signal,没有 agent 也没有 session (cordis 的 dispatch 没传 thisArg,监听器拿不到上下文)。所以走了一条曲线:

system-prompt/assemble   ← 这里带 context.agent,能读到 agentPreset
        ↓ (同一个 turn,紧邻触发)
agent/pre-step           ← 记下的 preset 在这里比对,命中 skipPresets 就直接返回

时间窗 200ms:两个事件之间只隔一个 await,窗外的旧值不认,避免多会话串台。

改法: