dsh-mem
零依赖本地记忆层:回指针 + 原文切片、NDJSON 迁移、隐私闸(DSH 插件 + 独立 CLI,只用 node:* 与 node:sqlite)
同名パッケージの別リポジトリ
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cyanxi-eb/dsh-memドキュメント
README 全文を読む ↗配置项
package.json 已声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },patch 内容是:
- insert:
- id: dsh-mem
name: 'dsh-mem'
config:
workspace: '' # 钉死工作区;空 = 优先级链
storeDir: '' # 库目录;空 = $DSH_HOME/mem
excludePaths: [] # 入库时跳过的路径 glob
redact: [] # 入库前替换的正则
autoIngest: false # 首次工具调用时后台 ingest 一次
rerank: 'lexical' # 'off' | 'lexical' | 'embedding'(向量 = RRF(词面,向量),k=60)
rerankLexical: true
episodeEnabled: true
episodeClosureMinutes: 10
episodeMaxChars: 4000
embeddingEnabled: false
embeddingModel: 'bge-small-zh-v1.5'
embeddingModelDir: ''
embeddingFailFast: true
workspace— 钉死的工作区绝对路径(例如'D:\dsh-sp1');空 = 按下面的优先级链自动解析。解析只有core.resolveWorkspace一份实现,CLI 与插件共用:workspace配置 > 宿主会话cwd(exec.agent.session.header.cwd/workingDirectory.get(session),取不到就跳过)>process.cwd()> profile 目录(DSH_PROFILE_DIR//profiles/)storeDir— 库目录,空 =/mem;换机器/换盘改这里excludePaths— ingest 时跳过的路径前缀redact— 入库前替换的正则数组(见下节)autoIngest— 默认false:不自动索引,由你显式触发
0.2 新增的键(逐字绑定面板,改名会让面板写了不生效):
| 键 | 默认 | 作用 |
|---|---|---|
rerank | 'lexical' | 'off' 与 P0 逐字节一致 / 'lexical' 词面重排 / 'embedding' 向量重排(RRF(L3,向量) k=60;模型缺失时按 embeddingFailFast 报错或退回词面) |
rerankLexical | true | 词面重排的独立开关;false 等价于 rerank:'off' |
episodeEnabled | true | ingest 时幂等 pass 生成 episode 区间 |
episodeClosureMinutes | 10 | 闭合阈值:源文件 mtime 距今 ≥ N 分钟才算闭合 |
episodeMaxChars | 4000 | 单段字符上限;超了在 assistant 消息边界再切 |
embeddingEnabled | false | 向量层开关(默认关:要 90MB 模型 + 可选依赖) |
embeddingModel | 'bge-small-zh-v1.5' | 模型 id(宿主按 embed-models.MODELS 白名单校验) |
embeddingModelDir | '' | 模型根目录;空 = $DSH_HOME/mem/models |
embeddingFailFast | true | 模型不可用时显式失败(false = 静默退回词面重排,只 warn 一次) |
默认值只有一份:index.mjs 的 DEFAULTS(cordis.patch.yml 与它逐键相等,test/routes.test.mjs ⑥ 看着)。
lib/settings-schema.js 只留值域(BOUNDS)与消毒,不再持有默认值。