ltl0312/my-dsh-plugins--packages-tlmemory ↗★ 0
dsh-plugin-tlmemory
Cross-session and cross-project memory manager for dsh (silent turn-end sedimentation + native web client embedding)
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ltl0312/my-dsh-plugins#9666eb5f4a0ebf028e0496b4ee0e1bb9bafb8fae&path:packages/tlmemory说明文档
阅读完整 README ↗⚙️ 配置
看板服务随宿主零配置自启,无需任何开关声明。想改配置就在自己的 profile 补丁层
~/.dsh/profiles/web/cordis.patch.yml 里按 id 覆盖(写 - id: 覆写行,不要再写
- insert:):
- id: dsh-plugin-tlmemory
config:
serverPort: 4890 # 看板服务端口(默认 4890)
maxRecallCount: 5 # 单轮最多注入系统提示词的记忆条数
enableAutoReflection: true # 会话结束异步自动反思提炼
compactionInterval: 20 # 每累计 N 次沉淀触发一轮强化衰减 + 矛盾检测
⚠️ 从 0.6.x 升级:先删掉旧的手工挂载条目
0.6.x 不是 bundle,只能靠 profile 补丁层里的
- insert:挂载,而且当时文档给的 id 是tlmemory-runtime(不是包名)。Cordis 按 id 去重而不按 name,所以旧的tlmemory-runtime条目和 0.7.0 的 bundle 条目会同时生效 —— 同一个包被挂载两次, 结果是两个数据库句柄、两个抢 4890 的监听实例。升级步骤:
- 在 profile 的
cordis.patch.yml里删掉整段- insert: - id: tlmemory-runtime …;- 把
dsh-plugin-tlmemory加进dsh.profile.bundles(dsh plugin add会自动做);- 需要自定义配置时,按上面的
- id: dsh-plugin-tlmemory覆写行写。
端口冲突自愈:4890 被前序 tlmemory 实例占用时,新实例会经健康探测确认同名进程 后自动复用(多宿主并存无需手工分工);被无关进程占用时自动顺延端口;连续顺延 仍失败时在控制台打印 EADDRINUSE 排查指引。
禁区端口自检:浏览器与
fetch共同封禁的端口(如 3659 / 4045 / 4190 / 5060 / 5061 / 6000 / 6566)无法打开看板也无法被 HTTP 客户端访问,绑定后会被自检识别并 自动换端口重试 —— 配置serverPort: 0交由系统分配时同样保证落在可用端口上。
🚀 启动与使用
1. 启动 DSH Web 宿主
在任意终端路径下直接启动:
dsh web
Node 版本:运行需 Node >= 22.13 —— 0.8.0 起持久层用 Node 内置的
node:sqlite(v22.13.0 / v23.4.0 起不再需要--experimental-sqlite,v24.2.0 起不再 experimental), 因此不再有原生二进制,也就不再有NODE_MODULE_VERSION不匹配这类问题。
2. 访问记忆看板
- 打开浏览器进入 DSH 界面(通常为 http://127.0.0.1:3080)。
- 在左侧边栏顶部(「+ 新会话」下方、「技能中心」旁)点击 「记忆看板」。
- 中间主视口将平滑接管展示记忆树:顶部下拉框切换任意工程(默认选中当前所在工程), 「全局偏好」胶囊单独查看跨工程偏好;右上角滑块在「📋 目录列表」与「🌲 树状图谱」 之间切换,选中工程、搜索关键词与图谱的平移缩放都会原样保留。 图谱右上角工具条里的「横向 / 竖向」按钮可一键反转树的生长方向(切换后自动重新居中, 选择记在本地,下次打开沿用);「居中」保证可读尺寸:整棵树装得下就全览,装不下就把根节点 放到左上角、由你拖拽浏览局部(滚轮仍可缩到 25% 看全局地形)。「📋 目录列表」只列真正的 记忆条目,目录骨架不再混进列表。
- 正常进行对话,每个完成的回合(Turn)将由后台自动提炼关键信息沉淀入库。
3. Agent 侧记忆工具(模型可直接调用)
| 工具 | 用途 | 关键约束 |
|---|---|---|
tlmemory_save | 显式沉淀一条记忆 | content 截断到 80 字;tree_scope 决定落 global 树还是当前工程树 |
tlmemory_query | FTS5 全文检索既有记忆 | 结果已附带节点 id,可直接交给删除工具精确定位 |
tlmemory_delete | 删除一条记忆(不可逆) | 必须 confirm: true;仅叶子(目录级联删请走看板);默认只删当前工程,global / 其它工程需 allow_cross_scope: true;同名多条返回候选要求改用 id |
看板上的删除按钮与待确认区的「拒绝」是同一套底层能力(
DELETE /api/nodes/:id, 由trg_nodes_ad触发器同步 FTS5 索引);Agent 工具只是把这条路径按「必须显式确认 + 作用域隔离 + 仅叶子」收窄后开放给模型,避免一次措辞含糊的调用毁掉正确记忆。