dsh-hindsight-config:Hindsight 记忆的可视化配置面板

前言

在 DeepSeek Harness(DSH)中编写智能体时,如果使用 Hindsight 作为记忆层,需要在配置文件里管理 coding-agent.json 中的字段。这些字段分散在多个层级,修改时容易出错,且需要重启宿主才能生效。官方的 @vectorize-io/hindsight-coding-agents bundle 只提供引擎,没有提供可视化的配置入口。

dsh-hindsight-config 解决这个问题:它是一个「伞包」,既包含记忆引擎的 patch,也提供本地客户端设置和远程服务端 bank 数据的可视化面板。

插件定位

  • 名称:dsh-hindsight-config
  • 维护者:scccy
  • 分类:记忆
  • 许可证:MIT
  • 版本:0.5.3
  • 核心价值:用可视化面板管理 Hindsight 记忆的配置与服务端数据

这是一个包,同时完成两件事:

  1. 引擎:在 patch 里插入 id: hindsight 行(@vectorize-io/hindsight-coding-agents/dsh),提供记忆注入、hindsight_* 工具、git 摄取、代码库勘察等功能。
  2. 面板:本包的 Host 路由 + 客户端 UI,用于改本地配置、看服务端 bank 状态、改 bank 配置。

安装本包 = 上面两半一起到位。卸载本包 = 两半一起消失。

安装与启用

从 npm 安装(推荐):

dsh plugin --profile <profile> add dsh-hindsight-config

本地目录安装(开发时):

dsh plugin --profile <profile> add D:/github/suijiwenti/dsh-hindsight-config

也可以在 DSH 的 Plugins → Discover 里找到并安装。安装后,本包的 patch 会同时插入引擎行与面板行。

重要:不要再单独选装官方 bundle。两个 bundle 都选时,各自的 patch 都会插入一行引擎;Loader 按 id 索引(newMap = Object.fromEntries(config.map(o => [o.id, o]))),同一个 store[id] 槽,后插入的一行覆盖前一行,只会挂一个引擎。设计去重靠的是复用官方 bundle 的 row id hindsight。

面板功能

面板提供五个页签:

状态

报告记忆引擎是否挂载,显示引擎版本与表单字段基准(fields.js 的 ENGINE_BASELINE,当前为 0.8.2)。检查服务端连通性(/health、/version、特性位),显示配置路径与生效值。当引擎版本与基准不一致时,会给出黄条提示。

客户端配置

提供 48 个字段 / 8 组的表单,用于编辑本地客户端配置,包括连接、注入与召回、写入与成本、仓库摄取、知识页、作用范围、诊断、高级对象等。

服务端

显示 bank 列表与统计(文档/节点/观测/待处理/失败/上次整合),管理心智模型(列表/刷新/预览/编辑/删除),管理 bank 别名(增删、设为显示名),以及 15 个 bank 配置项(PATCH /v1/default/banks/{id}/config)。

原始 JSON

整份 ~/.hindsight/coding-agent.json,带校验,未知字段原样保留。

诊断

显示生效值与来源(默认/env/文件/harness 覆盖)、生效中的环境变量,以及 plugin.log / diag.jsonl / usage.jsonl 的尾部内容。

心智模型配置

心智模型是服务端的原语,知识页就是心智模型。面板使用的是 mm-…(/mental-models 里的模型),与知识树里的节点 kp-… 指向同一份记录,从任一侧 PATCH,另一侧立刻能看到。

写入方向是客户端配置 → 引擎 → 服务端。引擎每次会话检查漂移,把服务端改回配置的样子。

每个心智模型自己的配置

心智模型有两层配置:bank 默认配置(mental_model_min_refresh_interval_seconds、knowledge_page_default_trigger)和每一页自己的配置。

顶层字段包括:

  • name:名称
  • source_query:提问
  • max_tokens:内容上限
  • tags:标签
  • trigger.mode:full(每次整篇重写)或 delta(只做增量编辑)
  • trigger.budget:low / mid / high,按 reflect_max_iterations 的倍数
  • trigger.refresh_cron:UTC 5 段 cron,不接受 H
  • trigger.refresh_after_consolidation:每次观测整合后刷新,与 refresh_cron 互斥
  • trigger.min_refresh_interval_seconds:两次自动刷新的最小间隔
  • trigger.fact_types:只检索哪些事实类型(world / experience / observation)

其余 10 个字段在「高级 JSON」里编辑,包括 trigger.tags_match / tag_groups / exclude_mental_models / exclude_mental_model_ids / include_chunks / recall_max_tokens / recall_chunks_max_tokens / reflect_search_observations_* / response_schema / keep_trace。

内置页与自建页

面板对内置页(taxonomy)和自建页有不同的处理:

  • 内置页:编辑 source_query 时,会同时 PATCH 服务端和写入客户端配置(pages.<页名>.source_query),否则下次会话会被覆盖。编辑刷新 cron 时,面板会提示「内置页的刷新节奏由配置里的全局策略托管,下次会话会被重推」,并拒绝填 H。
  • 自建页:只重推 trigger;name / source_query 只写一次。

刷新 / 预览 / 清空 / 删除

  • 刷新、预览(dry-run)、清空:纯服务端操作,与配置无关。
  • 删除:纯服务端;内置页删掉后下次会被重新播种,想永久去掉请在 pages 里设 false。

bank 别名

bank id 由目录名推导(coding-agent::{gitProject}),工作区标题不参与。

  • 改 DSH 工作区标题:bank 不变。
  • 改磁盘目录名:会变成新名字,变成一个全新的空 bank,旧记忆仍在旧 id 下。

要改名又不丢记忆,用别名(服务端功能,面板「服务端 → Bank 别名」可直接操作):

  1. 先给旧 bank 加别名 = 新目录名(例如 coding-agent::dsh-插件开发),可选「设为显示名」。
  2. 再改文件夹名。
  3. 之后新会话按路径解析到新名字 → 命中别名 → 写进同一个 bank。

顺序不能反:别名要求「不能已经是某个 bank 或另一个别名」,若先改目录并开过会话,会先建出一个空 bank,别名就加不上了。

备选方案是不动服务端,只改客户端:mapPathToBank 或 banks.<新id>.bank = 旧id,两者都是「新名字 → 旧 bank」的重定向。

效果与约束

生效时机

  • apiToken:立即生效(引擎每次请求前重读)。
  • 其余字段:需要重启宿主。引擎按 workspace 首次解析配置并缓存在模块级 Map 里,运行中的会话不会重读。

卸载互锁

本包的 patch 与官方 bundle 共用 row id hindsight(去重的代价)。当官方 bundle 也在同一 profile 里启用时,remove_bundle 会被 bundle-in-use 拒绝,因为那个 entry 仍被另一个已启用的 bundle 使用。解决办法是先禁用官方 bundle 再移除,或者直接停用本包(set_bundle enabled:false),此时 patch 不应用、路由不注册、客户端不加载,效果等同于卸载。

配置文件错误

若配置文件不是合法 JSON,引擎会打一行 console.error 然后当作 {}(全部配置静默失效)。面板会把这个状态显式报出来,并要求显式确认才允许覆盖。

服务端部署

真实部署中 Hindsight 服务端是跨机器的。本插件的约束:

  • 服务端只走 HTTP(fetch 到 apiUrl),地址与 token 来自 ~/.hindsight/coding-agent.json;不读、不写、不假设服务端上的任何文件或进程。
  • 唯一强制 localhost 的分支是 serverMode: "daemon"(按定义就是本机进程)。
  • token 永不进浏览器:/state 只回 hasToken,代理请求在 Host 侧带 token;连无法解析的配置文件也只回打过码的文本。
  • 路由守门:同源 / loopback,并复用宿主的 connection.requestRejection(浏览器带 cookie 能过,裸请求 401)。

适用场景

适合需要在 DSH 中使用 Hindsight 记忆,并希望用可视化面板管理配置与服务端数据的开发者。

插件以当前 DSH 进程权限运行。安装前应检查源码与许可证(MIT)。

总结

dsh-hindsight-config 用一个包同时提供 Hindsight 记忆引擎的 patch 和可视化配置面板。面板支持本地客户端配置、服务端 bank 数据管理、心智模型配置、bank 别名等功能,让配置修改更直观,减少手动编辑 JSON 的风险。如果你在 DSH 中使用 Hindsight,这个插件可以大幅提升配置管理的体验。

  • 目录页:https://www.skillhub.cn/plugins/scccy/dsh-hindsight-config
  • GitHub:https://github.com/scccy/dsh-hindsight-config
羽毛球分组比赛记分
小程序二维码

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

Xiaoye