前言¶
做智能体应用时常遇到一个具体问题:模型能推理、能调工具,但「今天发生了什么」没有地方落。对话结束后记录散在聊天里,想回顾、检索都很被动。DSH(DeepSeek Harness)的理念是「一切皆插件」,这类能力适合做成插件来补。下面介绍的 dsh-diary 就是这样一个插件:给模型一组日记工具,再配一个浏览器端的查看和管理界面。
这是什么¶
dsh-diary 是 hyperMoss 维护的 DeepSeek Harness 插件,npm 包名 dsh-diary,当前版本 0.1.1,许可证 MIT。它做三件事:
- 在
ctx.tools注册 10 个模型可调用工具,覆盖日记条目的增删改查、全文搜索和模板管理; - 自带自定义模板系统,让条目按固定格式生成;
- 提供浏览器端界面,包括一个「日记」设置分区和一个独立的日记看板。
条目本身就是普通的 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 同时传入 template 和 content,渲染后的模板正文在前,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_create 传 slug 可以在同一天保留多条,文件名变为 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.0 和 zod ^4.4.3;@deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-tools 等 peer 依赖均为 optional。
适用场景与注意¶
适合的场景:
- 希望智能体有持续的工作日志或个人日记,能自己写、自己查;
- 想在浏览器里直接浏览和整理条目,而不是进文件系统翻文件;
- 想把记录放在自己控制的目录里,比如同步盘中的 Diary 目录。
注意几点:
- 插件以当前 dsh 进程的权限运行,它能读写日记目录,也就拥有该进程对应的文件系统权限。安装前建议先检查源码与许可证(本项目为 MIT);
- 安装后务必重启 web server,否则新的工具与设置分区不会出现;
- 默认目录是
$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 / 幻方没有官方从属关系。