dsh-diary:给 DeepSeek Harness 智能体配一份 Markdown 日记

前言

做智能体应用时常遇到一个具体问题:模型能推理、能调工具,但「今天发生了什么」没有地方落。对话结束后记录散在聊天里,想回顾、检索都很被动。DSH(DeepSeek Harness)的理念是「一切皆插件」,这类能力适合做成插件来补。下面介绍的 dsh-diary 就是这样一个插件:给模型一组日记工具,再配一个浏览器端的查看和管理界面。

这是什么

dsh-diary 是 hyperMoss 维护的 DeepSeek Harness 插件,npm 包名 dsh-diary,当前版本 0.1.1,许可证 MIT。它做三件事:

  1. ctx.tools 注册 10 个模型可调用工具,覆盖日记条目的增删改查、全文搜索和模板管理;
  2. 自带自定义模板系统,让条目按固定格式生成;
  3. 提供浏览器端界面,包括一个「日记」设置分区和一个独立的日记看板。

条目本身就是普通的 markdown 文件,存放在本地目录,不引入额外的存储服务。

核心功能

十个模型可调用工具

工具注册在 ctx.tools 上,模型可以直接调用:

工具 用途
diary_create 创建条目(文件名 YYYY-MM-DD[-slug].md),支持可选 title、tags、body 和命名模板
diary_list 列出条目及元数据,可按年/月、标签或标题/文件名子串过滤
diary_read 读取单个条目的 frontmatter 和完整正文
diary_update 替换或追加正文,修改标题和标签
diary_delete 删除单个条目文件
diary_search 对条目正文做全文搜索,返回行号和片段
diary_template_list 列出可用模板
diary_template_read 读取一个模板的完整内容
diary_template_set 创建或覆盖模板
diary_template_delete 删除模板

前六个面向条目本身,后四个是模板工具组。模板是 <diary-directory>/templates/ 下的 markdown 文件,diary_create 接受 template 名称,并替换正文中的占位符:

{{date}} {{title}} {{tags}} {{slug}} {{year}} {{month}} {{day}} {{datetime}} {{time}}

如果 diary_create 同时传入 templatecontent,渲染后的模板正文在前,content 追加在空行之后。

浏览器端界面

插件自带浏览器端代码 lib/client.js,经 /plugins/dsh-diary/client.js 提供,包含两个界面:

  • 「日记」设置分区:显示日记/模板目录,列出、创建、编辑、删除模板;
  • 日记看板:独立面板,通过自己的悬浮按钮打开(按钮图标为 📓),条目按月分组,提供「新建日记」按钮和逐条删除。

两个界面的后端是 /api/diary/* 下的 diary Typert Remote 命名空间:

getDirectory  listTemplates  getTemplate  setTemplate  deleteTemplate
listEntries   getEntry       createEntry  deleteEntry

安装与启用

安装的是 npm 上发布的 dsh-diary 包(https://www.npmjs.com/package/dsh-diary),不是 GitHub 源。官方安装命令:

dsh plugin --profile web add dsh-diary

这一步会把插件装入 web profile。之后需要重启 web server,新的工具层和设置分区才会生效。

存储与配置

条目文件格式

条目是带可选 YAML frontmatter 的 markdown 文件,默认存放在 $DSH_HOME/diaries(回退 ~/.dsh/diaries)。一个条目大致长这样:

---
title: My day
date: 2026-08-14
tags:
  - work
  - life
---

Today I …

默认每个日期一条;给 diary_createslug 可以在同一天保留多条,文件名变为 YYYY-MM-DD-<slug>.md

覆盖日记目录

想把日记放到别的目录,可以在 profile 的 cordis.patch.yml 里用 config.directory 覆盖:

- insert:
    - id: dsh-diary
      name: 'dsh-diary'
      config:
        directory: '/Users/me/Diary'

资料中出现的配置项只有 directory 这一项。

开发与调试

如果要自己改代码,流程如下:

pnpm install      # 链接 @deepseek-ai/* 宿主与客户端包,供 typecheck 使用
pnpm run build    # esbuild 打包出 lib/index.js(宿主端)、lib/client.js(浏览器端)和声明文件
pnpm run typecheck
node smoke.mjs    # 对十个工具做功能冒烟测试

依赖方面,运行时依赖 js-yaml ^4.1.0zod ^4.4.3@deepseek-ai/cordis ^4.0.1@deepseek-ai/dsh-tools 等 peer 依赖均为 optional。

适用场景与注意

适合的场景:

  • 希望智能体有持续的工作日志或个人日记,能自己写、自己查;
  • 想在浏览器里直接浏览和整理条目,而不是进文件系统翻文件;
  • 想把记录放在自己控制的目录里,比如同步盘中的 Diary 目录。

注意几点:

  1. 插件以当前 dsh 进程的权限运行,它能读写日记目录,也就拥有该进程对应的文件系统权限。安装前建议先检查源码与许可证(本项目为 MIT);
  2. 安装后务必重启 web server,否则新的工具与设置分区不会出现;
  3. 默认目录是 $DSH_HOME/diaries(回退 ~/.dsh/diaries),如需调整用上面的 directory 配置。

小结

经过上面的步骤,智能体就有了一份落在本地 markdown 文件里的日记:模型侧通过十个工具读写和搜索,人侧通过设置分区和日记看板管理。代码与文档在 GitHub:https://github.com/hyperMoss/dsh-diary;目录页在社区站点 skillhub.cn:https://www.skillhub.cn/plugins/hyperMoss/dsh-diary。该目录是独立的社区站点,与 DeepSeek / 幻方没有官方从属关系。

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

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

Xiaoye