前言¶
在 DeepSeek Harness(DSH)里随手记一段提示词草稿、待办或会话摘录,很多人会装社区里的 @adamcjm/dsh-memo。上游 0.2.11 已经能落盘、打标签、同步 GitHub,但正文按纯文本展示:粘进去的 ## 标题、表格源码原样躺着;手机上输入区、标签云和筛选条又把列表可视区挤到半屏;触屏上轻轻一滑就被 SortableJS 当成拖拽,列表很难正常上下滚。
ymf2317-tech/dsh-memo-plus 是针对这些痛点的自用 fork。包名与面板 id 仍保持 @adamcjm/dsh-memo / memo,属于 drop-in 替换,不是多装一个面板,也不单独迁数据目录。下面按定位、改动点、接口用法和安装方式说明。
这是什么¶
- 仓库: ymf2317-tech/dsh-memo-plus
- 目录页:SkillHub 插件条目
- 维护者:ymf2317-tech(上游作者 adamcjm,MIT)
- 当前包版本(资料中
package.json):0.3.3-ymfd.4,基于上游@adamcjm/dsh-memo@0.2.11 - 分类:记忆
一句话:在不动 memo 数据模型和 host API 的前提下,给客户端补上 Markdown 渲染、布局收紧、触屏长按拖拽门控,以及面板内「笔记」区长文档区。
与上游 0.2.11 的差异¶
| 能力 | 上游 0.2.11 | 本 fork |
|---|---|---|
| 正文 | white-space:pre-wrap 纯文本 |
Markdown 渲染(标题/表格/代码/引用/列表) |
| 长文 | 一条占满整屏 | 折叠 9 行 + 展开全文 |
| 手机布局 | 输入区 80px + 标签两三行 + 筛选换行 | 输入单行聚焦展开、标签收起、筛选单行横滚 |
| 触屏 | 一滑就变拖拽 | 长按 220ms 才拖,正常上下滚动 |
| 长文档 | 只能塞进备忘列表 | 「笔记」区(正文首行 # 标题 即名称,全屏阅读) |
核心功能¶
1. Markdown 渲染¶
host 半侧新增 GET /memo/vendor/marked.js,把 profile 里已有的 marked@18.1.3(node_modules/marked/lib/marked.umd.js)原样提供;不新增 npm 依赖。client 按需 loadMarked(),renderMarkdown() 使用 marked.parse(gfm:true, breaks:true),按正文文本缓存(超过 400 条清空)。
渲染前经过 sanitizeHtml(),去掉 script/iframe/object/embed/link/style、on* 属性、javascript: 协议。若拿不到 marked,则降级为上游纯文本行为,不报错、不阻塞面板。样式覆盖标题层级、表格横向滚动、行内/块代码、引用、列表、链接与分隔线。
2. 布局(CSS + 少量状态)¶
输入框默认约 40px 单行,:focus-within 再展开到 104px。标签云默认收起,只显示 标签 N ▸ chip。筛选条单行横滚,不再换两排。窄屏(max-width:720px)收紧头部、隐藏条数、缩小同步按钮,列表底部留安全区。备忘列表区域吃满剩余高度。
3. 触屏拖拽门控¶
SortableJS 使用长按门控,鼠标端零延迟不变:
delay: 220,
delayOnTouchOnly: true,
touchStartThreshold: 6,
fallbackTolerance: 4,
配合 touch-action: pan-y 与 overscroll-behavior: contain,手机上先滚动,长按才排序。
4. 笔记本(备忘 / 笔记 双 tab)¶
顶栏用 chip 在「备忘」与「笔记」之间切换。不单独建表:用保留标签「笔记本」区分长文档,数据仍在同一套 notes/*.md 事实源,GitHub 同步、快照、附件与上游一致。
- 备忘区列表自动排除带「笔记本」标签的条目;「全部 / 待处理」计数也会扣除这部分。
- 标签云对用户隐藏「笔记本」这一内部分类标记。
- 笔记列表:标题取正文第一个
# 标题行(否则取首行);摘要去掉 Markdown 记号后截 120 字。 - 阅读:面板内全屏层,Markdown 渲染后可滚动;编辑为等宽 textarea,
Ctrl / ⌘ + Enter保存。 - 删除需两次确认。保存时显式传
tags: ['笔记本', ...正文里的 #标签],避免归类被正文覆盖。
host 侧 API 未改,仍复用 create / update / remove / list / tags。
5. 刻意未注册 Agent 工具¶
插件没有向 DSH 注册 agent 工具:设计上是让人工(或你自己写的脚本)通过 HTTP 写备忘,而不是让模型默认自动读写私人笔记。
安装与启用¶
资料中的 README 未给出 dsh plugin add github:... 一类一键命令;安装思路是把本 fork 替换已存在的 @adamcjm/dsh-memo 包目录(包名不变)。常见两种方式:
A. link 到 fork 目录(改代码即时生效,自用推荐)¶
- 将 dsh-memo-plus 仓库 放到本机某绝对路径(例如资料作者示例中的
D:\dsh-workspace\packages\dsh-memo-plus)。 - 在 DSH profile(
~/.dsh/profiles/<profile>)的package.json的dependencies增加:
"@adamcjm/dsh-memo": "link:<绝对路径>/dsh-memo-plus"
- 让
<profile>/node_modules/@adamcjm/dsh-memo指向该目录(Windows 可用目录联接,其他平台用符号链接)。 - 重启 DSH Web。
仅改 lib/client.js 时刷新浏览器即可;改 lib/index.js(含 /memo/vendor/marked.js)须再次重启 DSH Web。
B. 覆盖已安装的上游目录¶
把本仓库的 lib/、cordis.patch.yml、package.json 覆盖进 profile 下已有的 node_modules/@adamcjm/dsh-memo。DSH 仍识别为同一插件,不会新建数据目录。
说明:包名故意仍叫 @adamcjm/dsh-memo,以便 bundle patch 与面板 key 不变;因此该 fork 不能直接以原包名 npm publish。将来若改名发布为 dsh-memo-plus,需同步改 package.json 与 cordis.patch.yml 中的 name。
运行环境:package.json 要求 node >= 22.5.0。
典型用法:走 HTTP API,不要手改磁盘文件¶
对 AI 或自动化脚本,唯一稳妥入口是 host 暴露的接口。不要直接编辑 notes/YYYY-MM/<ID>.md 再指望界面生效——需自拼 frontmatter、23 位大写十六进制 id,并调用 POST /memo/api/rebuild 重建索引,漏步会导致 SQLite 与事实源不一致。
写 # 标题 时井号后须有空格,否则可能被 stripTags 当成标签剥离。
| 动作 | 请求 | 说明 |
|---|---|---|
| 新建 | POST /memo/api/create {body, tags?} |
返回 {item, stats};正文内 #标签 会抽成标签并从正文去掉 |
| 修改 | POST /memo/api/update {id, patch:{body?,tags?}} |
patch.tags 显式给出则完全替换;否则从正文增量合并 |
| 删除 | POST /memo/api/remove {id, hard?} |
默认软删(保留在 notes/ 且 git 可追) |
| 查询 | POST /memo/api/list {filter,q,tag,limit} |
filter ∈ all / todo / done / today / pinned |
| 笔记本 | 同上,tags 含保留标签 笔记本 |
备忘区 UI 会自动排除这些条目 |
数据目录在 ~/.dsh/memo(SQLite、notes/*.md、附件、git),与代码路径无关;回滚 fork 不会丢备忘内容。README 中给出了 Windows 下从备份恢复上游 0.2.11 的 PowerShell 示例,可按同样思路还原 package.json 与 node_modules 后重启 DSH Web。
适用场景与注意¶
适合谁
- 已在用
@adamcjm/dsh-memo,希望备忘正文按 Markdown 阅读、长条目不撑爆列表。 - 经常在手机或窄屏 Web 上翻备忘,需要更多列表高度和可滚动的筛选/标签区。
- 想把长文档放在同一 memo 数据体系里,用「笔记」tab 全屏读,而不是和单行待办混在一起。
使用前请自行确认
- 插件以后台 DSH Web / profile 进程权限 运行,能读写
~/.dsh/memo与用户配置;安装前应阅读仓库源码与 MIT 许可证,确认符合你的安全策略。 - 这是社区维护的 fork,SkillHub 目录与 DeepSeek / 幻方无官方从属关系;星标与曝光以目录页为准(资料抓取时为 0)。
- 同步、GitHub、附件等行为继承上游;本 fork 主要改 client 体验与 marked 路由,升级上游时需留意是否仍适合直接覆盖。
结尾¶
dsh-memo-plus 不换一个插件 id,而是用 drop-in 方式把上游备忘改成「能读 Markdown、能收布局、能长按排序、能分区长文档」的日常面板。若你正在维护 DSH 个人 profile,可从目录页了解分类与链接,再到 GitHub 按 link 或覆盖方式替换 @adamcjm/dsh-memo 后重启验证。
- 目录页:https://www.skillhub.cn/plugins/ymf2317-tech/dsh-memo-plus
- GitHub:https://github.com/ymf2317-tech/dsh-memo-plus