dsh-hindsight-local: Run Hindsight locally to provide long-term memory for DSH

前言

在 DSH 里做多轮编码或排查,上下文窗口会满,换会话又容易丢「做到哪、结论是什么」。有人靠导出整段会话再粘贴到新会话续写,但导出里工具输出、链式思考占很大篇幅,真正有用的往往是最后停在哪儿、下一步做什么。官方也有面向 Hindsight 的 @vectorize-io/hindsight-coding-agents 插件,记忆走托管服务;若希望抽取、嵌入、检索和知识页都留在本机,只用自己已有的 LLM 密钥,可以看社区插件 dsh-hindsight-local(维护者 dyrcjqlgcj,分类:记忆)。

下面介绍它是什么、能做什么,以及如何安装与配置。

这是什么

dsh-hindsight-local 在本机运行 Hindsight 记忆服务,并以 DeepSeek Harness 插件形式接入。心智模型与官方 coding-agents 插件相近:每个仓库一个 bank、由 LLM 维护知识页、按会话注入上下文;区别是自托管,除模型调用外不依赖托管记忆服务。

数据与推理密钥留在本机;LLM 可使用 DeepSeek、OpenAI、Anthropic、Ollama 等已有配置。

核心功能

资料中明确的能力如下。

服务与 daemon

  • 查找 uv 已缓存的 hindsight-api 二进制,探测 /health;未运行时以 detached 方式启动,默认最多轮询 240 秒直至就绪。
  • 不随插件打包 Python 环境,也不在会话内执行 uvx(首次安装可能耗时数分钟)。

会话注入与回写

  • 注入:每个会话一次,写入该仓库知识页索引及若干召回事实,总长度受 injectMaxChars 限制。
  • 回写:某轮对话进入 idle 后,将最近的用户/助手消息 retain 进 bank,并抽取为结构化事实。

十个工具

模型可用以下 hindsight_local_* 工具:搜索与阅读页面、召回事实、remember、reflect、查看状态/日志、启停服务等。完整名单:

hindsight_local_status、_start、_stop、_logs、_search、_read、_recall、_remember、_reflect、_pages。

Handoff 快照(替代整段导出粘贴)

DSH「交接文档」标签页对应的是整会话导出(含链式思考、工具参数与原始输出)。插件在会话结束(disposed)时写入 handoff snapshot:项目路径、会话 id、本会话每条用户请求(各 400 字符)、最终助手结论(800 字符),总长默认不超过 snapshotMaxChars(1500)。

  • 同一会话的写入共享 document_id = dsh-session:<session id>;快照标签为 dsh-session + dsh-session-handoff,逐轮片段为 dsh-session + dsh-session-turn。
  • 下一会话注入块会带「上次停在哪」:最多 3 条召回,每条 220 字符,不是全文。
  • 可用 hindsight_local_recall("上次会话做到哪一步,下一步要做什么") 查看。
  • 关闭:handoffSnapshot: false。

注入说明要求把快照当背景、使用前再核对,避免旧结论覆盖当前用户意图。

与官方插件的关系

默认 bank 名、profile 与官方插件对齐,两者可读到同一套记忆;若同时启用会重复注入上下文,应只保留其一。官方插件在 Windows 上会跳过依赖 which claude 的 daemon 探测;本插件不依赖该探测。

安装与启用

添加插件

安装命令来自项目 README(路径改为你本机 clone 或下载后的目录):

dsh plugin --profile desktop add /path/to/dsh-hindsight-local

添加后需重启 DSH,插件在进程启动时读取配置。

当前 package.json 标注版本 0.3.0,许可证 MIT;要求 dsh >= 0.1.0-rc.6、node >= 20。

一次性准备 Hindsight 服务

插件不负责创建 Python 环境。先在本机执行:

uvx --from hindsight-embed@latest hindsight-embed profile create coding-agent \
  --port 9077 \
  --env HINDSIGHT_API_LLM_PROVIDER=deepseek \
  --env HINDSIGHT_API_LLM_MODEL=deepseek-chat \
  --env HINDSIGHT_API_LLM_BASE_URL=https://api.deepseek.com

将密钥写入 ~/.hindsight/profiles/coding-agent.env:

HINDSIGHT_API_LLM_API_KEY=sk-...
HINDSIGHT_API_EMBEDDINGS_PROVIDER=local
HINDSIGHT_API_PORT=9077

插件配置

各字段有默认值,按需覆盖。优先级:插件 config → 进程环境变量 → profile env 文件 → 内置默认。

- id: hindsight-local
  config:
    apiUrl: http://127.0.0.1:9077
    autoStart: true
    profile: coding-agent
    bankTemplate: 'coding-agent::{project}'
    injectPages: true
    recallLimit: 5
    retainOnIdle: true
    handoffSnapshot: true
    snapshotMaxChars: 1500
    dataDir: ''
    offlineModels: true

dataDir 非空时,插件在拉起服务前会导出 UV_CACHE_DIR、HF_HOME、SENTENCE_TRANSFORMERS_HOME,便于把缓存放到其他盘;已有 ~/.pg0 仍需用仓库内 scripts/relocate.mjs 迁移(支持 --dry-run)。

典型用法

  1. 完成上述 profile 与插件配置,重启 DSH,打开目标仓库会话。
  2. 会话开始时自动注入知识页索引与召回事实;空闲时自动 retain 并抽取事实。
  3. 需要主动查记忆时,让模型调用 hindsight_local_search、hindsight_local_recall 等工具。
  4. 跨会话续作:依赖默认 handoff 注入,或显式 recall 上次进度。
  5. 排查服务:hindsight_local_status、hindsight_local_logs;必要时 _start / _stop。

README 说明:不要用 hindsight-embed daemon start 作为就绪依据——其 180 秒超时在冷启动(约 450 MB 依赖与模型下载,实机约 3–5 分钟)下易误报失败;本插件直接启动 hindsight-api 并自行轮询 /health。

适用场景与注意

适合:希望长期记忆与嵌入完全本地化、已自备 LLM API、在同一仓库多会话协作且不想每次粘贴整段导出的 DSH 用户。

注意:

  • 插件以当前 DSH 进程权限运行;安装前请自行查看 GitHub 源码 与 MIT 许可证,确认可接受的行为与依赖。
  • Windows:插件会注入 PYTHONUTF8=1 等以规避 GBK 控制台问题;首次从 Hugging Face 拉模型若遇证书错误,需按 README 导出 Windows 根证书到 ~/.hindsight/winroot.pem。
  • DSH 生态是「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-hindsight-local 把 Hindsight 记忆栈放在本机:daemon 管理、十项本地工具、会话注入与 idle 回写,并用 handoff 快照衔接会话,减少整段导出粘贴的成本。详情与脚本见 GitHub README;在 DSH 中通过本地路径 dsh plugin add 启用即可。

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

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

Xiaoye