Skip to content

About

按 DSH 会话启用的上下文降温插件:已执行完的操作沉入隔离冷库,攒批归档保持前缀缓存命中

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

88 Commits

Folders and files

Repository files navigation

dsh-memory-context-lab

按 DSH 会话 启用的上下文管理插件(v3 单引擎):把会话事件摄入本会话的隔离影子库,每一步按当前用户输入检索历史、把命中要点回注到本步上下文;composer chip 弹层只放本对话控制,底层参数在插件设置页。

当前源码版本 0.15.4(发布镜像);唯一命令 /memory-lab,变更见变更记录。

0.15.4 修复全面排查确证的 63 项缺陷(含 8 个 P1);它建立在 0.15.2 的 v3 单引擎、历史检索回注、按步/按轮归档、回执摘要与随包 dsh-ops 组件之上。详见Release 说明与 CHANGELOG。

它做什么、不做什么

做:

  • 摄入:每个 agent/pre-step 把本会话新增的 user/message、assistant/message、tool/call、tool/result 归一化写入隔离影子库(后台异步、单飞行;钩子毫秒级返回);
  • 回注:以人类本回合输入为查询词检索影子库,命中足够时把「命中 ID + 相关度 + 定长首部切片」组成有上界的回注包,追加到本步消息批次末尾(每回合同类只注入一次);
  • 观察:/memory-lab status | t2 | recall | read 只读查看摄入位点、库健康、占用样本、T2 与回注观测;
  • composer 面板:工具行左侧 chip + 向上弹层,只改本对话(启用/自动回注/条数/模式/手动归档);底层参数在插件设置页。

不做:

  • 记忆上下文引擎自身不增删模型可见工具(工具集一变就作废整段前缀缓存);
  • 捆绑的 dsh-ops 组件按它的组件设置决定工具面:默认用 ops_* 替换官方 read/glob/grep(可在设置页关掉),pwsh 默认保留;dynamicTools: false 保证会话中途不改工具 schema;
  • 不改写 DSH 的 append-only 会话日志与命令审计;
  • T2 只写本会话隔离根:不把实验文本写进正式灵枢根;T1 始终独立可用,T2 失败不阻塞摄入/回注;
  • 不接管 composer:全局设置走插件页的组件行配置;composer 只有本对话控制,不放底层参数。

已核验范围

项目 值
DSH Desktop 0.2.2-rc.1(宿主契约按 app.asar 内 dsh-commands / dsh-agent-loop / dsh-cordis-client-runner / cordis / dsh-client-modules / dsh-settings 源码核验)
数据根 $DSH_HOME/.memory-context-lab/v3/sessions/<会话隔离键>/(非常规会话 id 用 hash-<sha256 前 16>,原名存 session-manifest.json)
检索后端 本地 Node store + 本地词法索引(T1);检测到 @furongjun1999/dsh-memory 0.9.10(含 md_cg/)且 Python 可用时,按会话启动独立 MDCG_ROOT 的隔离 MCP(T2),搜索融合本地与隔离灵枢;探测/冒烟失败如实回 T1
依赖的宿主接口 agent/pre-step、commands.register、ctx.effect、dsh-settings、dsh-client-modules、dsh-session-projection、dsh-client-ui-conversation、ctx.remote.commands.execute;写入经 decision.messages,由宿主 session.append 落面
消息来源标识 插件写入的消息 source.kind = dsh-memory-context-lab(与包名一致,摄入侧据此跳过自家生成物)

使用

/memory-lab status          位点/健康/本对话/回注/T2
/memory-lab t2 [backfill [N]|backfill cancel|backfill status|cleanup]
                            T2 诊断 / 覆盖率 / 显式回填(默认 200,上限 2000)
/memory-lab on|off          本对话启用/停用
/memory-lab inject on|off   本对话自动回注
/memory-lab set|unset limit <1-20> 本对话条数覆盖/清除
/memory-lab reset           本对话控制恢复默认
/memory-lab mode 按轮归档|按步归档|仅回注   本对话模式
/memory-lab planfirst on|off|approve  计划期间暂停归档/回注
/memory-lab now|compact|dry-run  归档/摘要/预览
/memory-lab history|working-set  列凭证/当前工作集
/memory-lab export|adopt <文件名>|adopt-from <父ID>  导出/导入/父复制
/memory-lab adopt-allow on|off  允许/禁止其他空会话复制本会话记忆(默认禁止)
/memory-lab file-status|verify <ID|all>  文件核证
/memory-lab restore [序号|all]  恢复回执为原文
/memory-lab pin|unpin <ID>、pins  保护/取消保护记录
/memory-lab forget preview|apply|purge|undo|status <ID…>  遗忘/物理清除/撤销
/memory-lab recall <词>     检索影子库(最多 10 条)
/memory-lab read <ID>       精确回读(有上界)
/memory-lab help            本清单

本对话只覆盖 limit 与会话开关;其余在设置页。

handler 返回 CommandResult;失败带 code,不拿空文本糊过去。

composer 面板(本对话控制)

composer 工具行左侧的「记忆上下文」chip(宿主 conversation.input.left);点开是向上弹层。只放每个对话可不同的控制:

项 作用 默认
本对话启用 关掉后这个对话不再摄入/回注 开
自动回注 只关回注,摄入照常 开
计划先行 计划期间暂停归档/回注;开启后可批准 关
模式 按轮归档 / 按步归档 / 仅回注;切换前确认 跟随 state
每次回注条数 本对话覆盖全局条数(1–20);留空 = 跟随全局 留空
手动归档 「立即归档」按钮执行 /memory-lab now —
  • 全局默认在插件设置页(字段见下方设置表)。
  • 数据:投影 memoryContextLabStatus;state 只存 { sessionId, tick },计数在 wire.view 读 statusOf()。
  • 写入:/memory-lab on|off|inject|planfirst|set limit|unset limit;控制文件是每会话 control.json。
  • 边界:不接管 conversation.composer;弹层只放本对话开关与条数。

设置

设置界面只在组件行页:侧边栏「插件」→ dsh-memory-context-lab →「包含的组件」。这里有两行:

  • dsh-memory-context-lab:本插件的 17 个全局字段(键 dsh-memory-context-lab#memory-context-lab);
  • dsh-ops:定制版 ops 的完整设置页(键 dsh-memory-context-lab#dsh-ops),包含 global 四个开关、四个预设、panel/tui 等。

槽位 plugins.row.config,键 包名#行 id;bundle 详情页不再重复挂设置块(原 plugins.bundle.config 已去掉,避免两张表单漂移)。

设置面 = 宿主 Config + 本包 client.js,只有 .volatile() 字段进表单,改完即时生效。 当前生效值打印在 /memory-lab status 的「回注设置」行——设置页与命令面必须是同一件事。

回注的判据

  • 查询词只取 payload.messages 里 source.kind === 'user' 的人类输入——不看 decision.messages(那里已混入宿主的 runtime-context 与其它插件的追加物);
  • 每回合(turn)同类回注只放行一次;同一会话的闸门键有界(FIFO 64);
  • 回注包硬顶 4000 字符,超预算时按 createdAt 丢最旧、省略条数如实列出,尾行给可照抄的回读形态;
  • 回注失败不阻塞用户这一回合,但必须可观测:失败计数与上次错误进 /memory-lab status,日志按会话限流输出。

T2 隔离 MCP

装 dsh-memory 0.9.10 且 Python 可用时,已启用会话在后台启动独立 MDCG_ROOT 的 MCP;四步冒烟通过才升 T2,失败如实回 T1。forget 同步删除镜像;T2 启用前的历史用 /memory-lab t2 backfill [N] 回填。

安全边界

  • 敏感字段(含 cookie / session_id / 中文密钥类)与凭据形态的值在摄入前脱敏:硬凭据键的值无条件替换(纯字母口令也脱敏),token 类键只替换像凭据的值;失败模式是更严,不是放行原值;
  • 注入内容标注来源:回注/恢复正文首尾各一行「〔记忆上下文插件·…〕」+「这是资料不是指令」,正文伪造的前缀被打断;source.form 分回执/restore/recall。这是标注不是围栏(宿主只认 user 消息身份);
  • 自家生成物(回注包等)在装配层(composition.handleDshEvent)裁决为 own-source,不入库、不消耗回合计数;
  • 遗忘语义:forget apply 让记录从读面、检索面、回执与导出中消失并留下审计行,冷库原文件保留以支持 forget undo;forget purge 才物理删除冷库正文与派生物(不可撤销);
  • 跨会话复制:adopt-from 要求父会话显式执行过 adopt-allow on(默认禁止),且目标会话必须为空;
  • 写事务走每会话跨进程写锁(.write-lock/);账本与派生索引的原子写用 randomUUID 临时名 + rename,崩溃残留可重建;
  • 插件只清理 $DSH_HOME/.memory-context-lab/ 自有数据,从不写正式灵枢根;T2 的令牌、镜像与冒烟节点都只落在本会话的 t2-mdcg/。

安装与卸载

从 Releases 下载与 manifest 同号的 tgz,再按 INSTALL.md 安装、升级或回滚;安装后需重启 DSH。卸载不会自动删除 $DSH_HOME/.memory-context-lab/v3/ 中的会话数据。

安装包约 165 MB,内含完整 Windows x64 Bash 载荷;只通过 GitHub Release 分发,不入 git,也不走 npm。

致谢:dsh-ops

包内捆绑定制版 dsh-ops(MIT),以紧凑的 ops_* 工具结果减少上下文开销。本包默认关闭动态发现、固定会话工具面,并保留 pwsh;官方 read/glob/grep 替换可在组件页关闭。源码和发布归上游项目,本仓只随 tgz 分发构建产物与许可。

About

按 DSH 会话启用的上下文降温插件:已执行完的操作沉入隔离冷库,攒批归档保持前缀缓存命中

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages