DSH 插件:dsh-hindsight-memory

前言

DeepSeek Harness(DSH)与 Oh-My-Pi(omp)各自有自己的记忆系统:DSH 可以通过 dsh-mnemon 的 Hindsight provider 写入记忆,但读侧不支持按项目过滤,只能召回整库;omp 的原生 Hindsight 后端则支持按项目过滤,却无法产生无标签的全局层。两边各自读写同一记忆库,标签规则不统一,最终导致互相“看不见”。

dsh-hindsight-memory 是一个 DSH 插件,作为中间层把 DSH 的记忆行为对齐到 omp 的语义:使用同一个记忆库、同一套标签规则、同一套分层与过滤规则。模型只接触语义化工具,标签与路由由插件自动处理。

核心价值与定位

  • 插件名称:dsh-hindsight-memory
  • 维护者:meisijiya
  • 分类:记忆
  • 版本:0.7.3
  • 许可证:MIT
  • 插件职责:在 DSH 与 omp 之间建立统一的记忆语义,避免两边各自写、各自读的分裂。

解决的问题

现状 痛点
DSH 用 dsh-mnemon 的 Hindsight provider 写侧能打标签,但读侧不支持按项目过滤 ⇒ 读的是整库
omp 用官方原生 Hindsight 后端 读侧按 project:<label> 过滤,读不到别的项目;但无法产生无标签的全局层
两边各写各的 同一记忆库内的标签规则不统一 ⇒ 写着写着就互相看不见

插件将 DSH 侧替换为受控的中间层:模型只看到 4 个语义化工具,标签与记忆库路由由插件自动处理,模型接触不到 tags 或 bankId。

核心功能

插件提供 9 个语义化工具,与 omp 的记忆能力一一对应:

工具 作用 与 omp 的对应
memory_recall(query, scope?) 召回长期记忆。scope=project(默认)= 本项目 + 全局;project_only = 只本项目;global = 只全局 omp 的 recall
memory_retain(content, tier?) 写入耐久事实。tier=project(默认)只有本项目可见;tier=global 所有项目可见 omp 的 retain
memory_reflect(query, scope?) 让记忆服务综合回答(不返回原始条目) omp 的 reflect
memory_status() 连通性、当前记忆库(含 bank 体检告警)、项目标签、各层条数与类型分布、任务队列健康度 omp 无(诊断用)
memory_hygiene(action?, scope?) 整理共享记忆库:预览/清理近重复事实、触发 observation 合并、查看分层与口径命中;维护动作 audit/retract/restore/correct/supersede;scope 可锁定某一层 omp 无(见“记忆卫生”一节)
memory_mental_models(action?) 维护精神模型(跨会话的经验总结):ensure 幂等建好三个模型(用户偏好 + 本项目约定/决策),list/content/refresh/patch,以及维护动作 delete/clear/dry-run omp 启动时自动建同样的三个
memory_operations(action?) 运维观测:列出抽取/刷新/合并任务,可 retry 失败任务 omp 无(但 omp 也看不见失败任务)
memory_pages(action?, id?, query?, title?, sourceQuery?) 知识页层(服务端合成的长文):list 读知识库树、search 检索、read 读整页、create 建页(自动盖本项目标签),以及维护动作 update/delete omp 无(服务端同一套能力)
memory_initiative(action?, title?, question?) 把正在做的事登记成受跟踪的一页 + 一条标记事实(页与事实互链):capture 登记、list 查看 omp 无(服务端同一套能力)

知识页与 initiative 是 Hindsight 服务端原生能力(/knowledge-base),本插件将其封装为与 omp 同语义的工具,产出盖 project:<小写项目名> 标签,写入走 async:true + metadata.session_id。可通过配置 knowledgePages: false 整体关闭这两个工具。

标签由插件生成,不暴露给模型。插件按 basename(主 checkout 根).toLowerCase() 盖章,与 omp 的 projectLabel() 规则一致。

安装与启用

从 GitHub 安装(推荐):

dsh plugin --profile web add "git+https://github.com/meisijiya/dsh-hindsight-memory.git"

本地开发(Windows 不能用裸绝对路径):

dsh plugin --profile web add "file:D:/path/to/dsh-hindsight-memory"

安装后需要重启 DSH Web 才会装载。回滚:

dsh plugin --profile web remove dsh-hindsight-memory

也可通过插件市场发现页装:在 DSH → 插件 → 发现 → 索引源中填入索引地址:

https://raw.githubusercontent.com/meisijiya/dsh-hindsight-memory/main/index.json

配置要点

插件配置通过 YAML 写入,核心字段包括:

- insert:
    - id: hindsight-memory
      name: 'dsh-hindsight-memory'
      config:
        enabled: true          # 总开关
        inject: true           # 是否注入常驻系统提示词段
        writeEnabled: true     # false = 只读(灰度第一步)
        apiUrl: 'http://127.0.0.1:8888'
        bankId: shared          # 必须与 omp 的 hindsight.bankId 一致
        bankIdPrefix: ''
        scoping: per-project-tagged   # global | per-project | per-project-tagged
        types: [world, experience]     # 与 omp 的 recallTypes 同值
        budget: mid
        reflectBudget: low
        maxTokens: 1024
        recallMaxQueryChars: 800
        autoRecall: true        # 首回合自动召回(与 omp 的 autoRecall 默认值一致)
        autoRetain: true        # 回合结束自动留存(与 omp 的 autoRetain 默认值一致)
        retainEveryNTurns: 3
        sectionOrder: 950
        hygieneThreshold: 0.9        # 近重复判定阈值(越高越保守)
        hygieneMaxFacts: 500          # 单次扫描的事实条数上限
        hygieneProjectMission: '只保留该项目中长期有效的技术决策、约定、硬约束与踩过的坑;不保留一次性进度、临时状态与重复表述。'
        hygieneProjectMaxObservations: 40   # 项目层每个 scope 的 observation 上限
        hygieneGlobalMission: '只保留跨项目长期有效的约定、环境事实与用户偏好;不保留一次性进度、临时状态与重复表述。'
        hygieneGlobalMaxObservations: 30   # 全局层 observation 上限

配置写错不会导致 profile 损坏,所有非法输入会回落到默认值。如需只读或纯手动,可在插件配置面板中关闭 writeEnabled 或 autoRetain,无需改代码。

面板与观测

  • 插件管理(配置):DSH → 插件 → dsh-hindsight-memory → 详情页 → “配置”。可逐项查看与修改配置项。
  • 插件管理(记忆看板):同详情页 → “记忆看板”(v0.7.0 新增)。提供只读快照:记忆库条数与告警、全局层/项目层/其它项目层分层、事实类型分布、近重复组、体检计数(陈旧/孤儿 observation/被取代/空知识页/卡住任务)、任务状态分布、精神模型与知识页清单。支持手动刷新。
  • 终端状态面板:运行 node scripts/panel.mjs。显示服务健康、记忆库清单、分层条数(全局层 / 本项目层 / 其它项目层)、最近事实与其标签。项目标签按 omp 同规则自动推导,可用 --project <名字> 覆盖。
  • 官方前端:访问 http://127.0.0.1:9999(Hindsight Control Plane),查看知识页、实体、关系图、原始事实、库管理。

与 dsh-mnemon 的分工

两个插件不冲突,但只有一层能连接 Hindsight。当前配置如下:

层 归谁 连 Hindsight? 说明
① 运行时记忆 dsh-mnemon ❌ 本地 MEMORY.md / USER.md 投影,常驻注入上下文,omp 看不到
② 项目档案 dsh-mnemon ❌ 本地 markdown,按需检索,omp 看不到
③ 记忆空间 本插件接管 ✅ 与 omp 记忆系统同层:同一个记忆库、同一套标签、同一套过滤
④ 技能管理 dsh-mnemon ❌ 技能账本,不是记忆层

注意:dsh-mnemon 的 Hindsight provider 必须保持“不启用”(enabled.hindsight=false),否则会出现两边都在写、但过滤规则不一致的分裂。记忆空间组件本身不要关闭,否则会导致 dsh-mnemon 的检索提醒整片清空。

适用场景与注意

  • 适合需要与 omp 共享记忆、保持标签与分层一致的 DSH 场景。
  • 插件以当前 DSH 进程的权限运行,安装前建议阅读源码与许可证。
  • 配置修改后需重启 DSH Web 才会生效(DSH 在启动时解析 package.json 并缓存结果)。
  • DSH 理念是“一切皆插件”,社区目录与 DeepSeek / 幻方无官方从属关系。

短结尾

dsh-hindsight-memory 在 DSH 与 omp 之间建立统一的记忆语义,使用同一个记忆库与标签规则,避免分裂。访问插件目录页与 GitHub 了解更多:https://www.skillhub.cn/plugins/meisijiya/dsh-hindsight-memory | https://github.com/meisijiya/dsh-hindsight-memory

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜