dsh-bao:给 DeepSeek Harness 加一个有长期记忆的助理插件

前言

DSH 的理念是「一切皆插件」,但很多插件解决的是「单次调用」的问题:一次 prompt 里的检索、一个工具、一个界面。跨会话的东西——你的偏好、项目里已经定过的事实、过了一夜需要回来看的进度——默认并不在它手里。你要么每次开会话重新交代一遍,要么自己搭一套记忆表,再自己写通知脚本。

下面介绍 milestone-17/dsh-bao,一个把「定时 + 通知 + 状态 + 记忆」打包成助理层的插件。

这是什么

dsh-bao(DSH 宝)是 milestone-17 维护的 DSH 插件,定位是 TRAE 宝式的个人助理:跨会话长期记忆、专属助理 Agent 预设、每日简报、桌面通知,以及一个工作状态速览面板。它在社区目录里归在「记忆」分类,目前 0 星。

它不新建一套存储栈,也不替代 DSH 原生的 schedule_*、notify_user、goals、subagents 原语,而是把这几个原语组合成一个产品化的外层。实现基于 Harness 的公开插件 API,不碰私有实现。

核心功能

六个能力,全部对应 README 中写明的实现:

  1. 长期记忆:bao_remember / bao_recall / bao_forget 三个工具,加上每次模型请求自动注入的「主人的长期记忆」上下文。偏好、项目事实、决策跨会话保留。
  2. 专属助理预设:安装即上架名为「DSH 宝」的 Agent 预设(id aibao),新建会话处可选。调度层人设自己答问、记事、查状态,重活派给 subagent;面板有一键「和宝聊聊」直接开局。
  3. 每日简报:每天固定本地时间(默认 09:00)把「活跃定时任务 + 最近推进的会话」汇总成一条桌面通知,可配开关。
  4. 助手主动通知:bao_notify 工具,模型可以以助理身份弹系统通知,比如定时汇总或需要你决策时。
  5. 状态速览:bao_status 工具,用一句话回答「最近在忙什么 / 有哪些提醒待办」。
  6. 侧边栏面板:新增「DSH 宝」面板,一屏看到长期记忆、定时任务、最近会话、简报开关,30 秒自动刷新。

工作原理

记忆存储在 $DSH_HOME/bao/memory.json,写盘走临时文件加 rename 的原子写,进程内写链串行化,零依赖。

记忆注入注册为 system-prompt 的动态 runtime context(interpolate: false),每次模型请求前重新求值。刚记下的笔记下一步请求就能看到。这里有个取舍:选 context 而不是 section,是为了与 complete: true 的预设人设共存——complete section 会替换全部 section,context 则永远渲染。

通知按顺序尝试三条通道,第一个成功者生效:Electron 原生通知(Desktop 壳内,带应用身份与图标)、Windows 原生 toast(toast.ps1,WinRT API,经 Windows PowerShell 5.1,纯 Node Host 也可用)、都不可用时静默返回 none。macOS / Linux 走 Electron 通道;纯 Node Host 暂无额外通道。

面板数据路由 GET/POST /bao/api/overview 返回速览 JSON,只读:读 schedule 服务的目录和 sessionTitle 的会话行,不写状态、不激活会话。路由带信任围栏,只接受 loopback(localhost / [::1] / 127/8)或 trustedHosts 命中的 Host,拒绝 cross-site 请求,Origin 必须是监听器自身。

代码结构很简单:Host 半边是纯 ESM(index.js + memory.js + delivery.js + toast.ps1),Client 半边是单个 client.js(经 window.__ModuleLoader__.load 工厂,React 来自浏览器模块表),无构建步骤、零运行时依赖。语法检查:

node --check index.js && node --check memory.js && node --check delivery.js && node --check client.js

安装与启用

插件市场命令(推荐):

dsh plugin --profile <name> add dsh-bao

走 Discover 页安装:仓库自带一份插件市场索引(官方 format 1),把下面任一地址加进 DSH 的插件市场索引设置:

https://raw.githubusercontent.com/milestone-17/dsh-bao/master/market-index.json
https://ghproxy.net/https://raw.githubusercontent.com/milestone-17/dsh-bao/master/market-index.json

第二个地址经 ghproxy.net 镜像,国内网络可用。之后在 Discover 页搜索「DSH 宝」一键安装,安装走 GitHub 并 pin 到发布 commit。

本地目录安装:在 DSH 会话里让助理执行 plugin_manager 的 install_bundle,target 填该目录的绝对路径;或者在 Plugins 设置页直接选本地目录。

不用 bundle 通道的手动挂载:把下面一行加进 profile 的 cordis.patch.yml:

- insert:
    - id: aibao
      name: 'dsh-bao'
      config:
        digestTime: '09:30'

注意手动挂载时 digestTime 这样的配置要自己写全,升级也不会帮你补。

配置

配置写在插件行(Loader patch)的 config 里,端口和开关如下。这里摘录常用的几项,完整列表见仓库 README:

- insert:
    - id: aibao
      name: 'dsh-bao'
      config:
        digestEnabled: true
        digestTime: '09:00'
        notifyTool: true
        statusTool: true
        memoryTools: true
        memoryInject: true
        memoryInjectLimit: 30
        memoryNoteMaxChars: 200
        sound: true
        appUserModelId: 'com.deepseek.dsh'
        routePath: '/bao/api'
键 默认 说明
enabled true 总开关;关闭后工具、路由、简报全部不注册
digestEnabled true 每日简报开关
digestTime "09:00" 简报触发的本地时间,HH:mm(进程时区)
notifyTool true 是否注册 bao_notify
statusTool true 是否注册 bao_status
memoryTools true 是否注册三个记忆工具
memoryInject true 是否每次请求注入长期记忆
memoryInjectLimit 30 注入上下文里最多引用几条笔记
memoryNoteMaxChars 200 单条笔记注入时的最大字符数
sessionWindowCount 5 速览里最多列出几个最近会话
sessionWindowMs 93600000 「最近」的时间窗,默认 26 小时
maxLineLength 90 单行摘要最大字符数
sound true 系统通知是否带声音
appUserModelId "com.deepseek.dsh" Windows toast 的应用身份
routePath "/bao/api" 面板数据路由前缀(loopback 围栏内)

典型用法

记一件事,下次开会话还能用。在会话里让助理调用 bao_remember 记下你的偏好或项目决策,例如「这个项目用 pnpm 不要 yarn」。下次新开对话,注入的长期记忆里就会带这条笔记,不用再重新交代。读取用 bao_recall,记错了用 bao_forget。

每天早上看一眼进度。配好 digestEnabled: true 并把 digestTime 设成你要的时间,到点收到一条桌面通知,内容是活跃定时任务加最近推进的会话。不需要自己写 cron 脚本去翻会话列表。

需要判断时让助理来找你。bao_notify 让模型主动弹通知,bao_status 让你一句话问清「最近在忙什么、有哪些提醒待办」。两者都不需要离开当前会话。

对比重活让 subagent 跑。用「DSH 宝」预设开会话,调度层自己处理问答和记事,重活派给 subagent;面板上的「和宝聊聊」可以直接开局。

适用场景与注意

适合个人开发者或者小团队:你希望 assistant 跨会话记住偏好和项目事实,希望通过桌面通知而不是翻聊天记录来跟进进度,同时愿意接受「助理调度 + subagent 执行」这个分工。已经有成型的记忆或调度系统、只想为单个会话加点工具的人,不需要这个插件,DSH 内置的 schedule_*、notify_user、goals、subagents 原语已经够用;dsh-bao 是把这几个原语组合成人看的简报、速览和面板。

几点需要留意:

  1. 这个插件以当前 dsh 进程的权限运行,能读到你 profile 里能看到的东西。安装前把源码打开过一遍,确认它访问的路径和路由符合预期。
  2. 许可证是 MIT,功能按原样提供,没有官方支持承诺。
  3. 手动挂载 cordis.patch.yml 时,配置项不会自动补齐;插件自带的 patch 行(bundle.patch 指向 ./cordis.patch.yml)才是它认为的默认值。
  4. 更新日志里出现过两次由浏览器端 E2E 才暴露的建会话失败(0.2.1 缺 tool-fs-search 必填配置、0.2.2 的 aibao 预设 delegation 组缺 workflow-ptc)。如果你改过预设或自制 delegation 组,升级后先建一次会话验证。
  5. macOS / Linux 桌面通知目前只有 Electron 通道,纯 Node Host 上火墙内静默返回 none,不会报错也不会打断会话。

结尾

dsh-bao 的价值不在单个功能,而在把记忆、简报、通知、面板这四件散落的东西接成一条「助理主动找你」的链路,同时不接管 DSH 原有的调度原语。源码体量小、零运行时依赖,读一遍的成本不高。

  • 社区目录页:https://www.skillhub.cn/plugins/milestone-17/dsh-bao
  • 仓库:https://github.com/milestone-17/dsh-bao

注:社区目录是独立站点,与 DeepSeek / 幻方没有官方从属关系。

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

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

小夜