dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Long-term memory box for DeepSeek Harness settings — text typed here is injected into the system prompt of every new session, in every workspace. · DSH 设置页的「长时记忆」输入框
在 DeepSeek Harness 的设置里放一个输入框。填一次,之后每一个新会话、每一个工作区、每一次重启,它都在系统提示词里。
一个给 DeepSeek Harness(DSH) 用的双半插件(host + browser),补上 DSH 原生的一个缺口:跨会话的长期偏好没有地方填。
~/.dsh/AGENTS.md 管的是「指令与规则」,改它要动文件、要懂目录;这个插件把同一件事搬进 设置页 → 长时记忆,一个文本框、一次保存。
场景 · 没有它 · 有它 每次都想让 agent 用简体中文、别开场客套 · 每个新会话重说一遍 · 填一次,永久生效 常用目录、构建命令、代码风格约定 · 写进每个仓库的 AGENTS.md,一个仓库一份 · 一处填写,全局生效 想让 agent 记住「先给可回滚命令」这类硬规矩 · 忘了就忘 · 系统提示词里常驻 临时换一套偏好做实验 · 改文件、还要记得改回来 · 设置页改完点保存,随时清空
设置侧栏多出一栏「长时记忆」(Long-term memory):
┌─────────────────────────────────────────────┐
│ 长时记忆 │
│ 这里填写的内容会作为系统提示词的一部分注入到 │
│ 之后每一个新会话(跨工作区、跨重启)… │
│ ┌─────────────────────────────────────────┐ │
│ │ 在每次新开一个项目时,先在该工作区内新建 │ │
│ │ 一个关于这个项目的文件夹… │ │
│ └─────────────────────────────────────────┘ │
│ [保存] [撤销修改] 有未保存的修改 │
└─────────────────────────────────────────────┘保存后状态行变为「当前内容已生效」——text 字段是 volatile 的,host 侧立刻重算系统提示词,不需要重启;下一个新会话就带着它。
在 Harness 里打开 设置 → 插件市场,搜索 long-term memory 或 dsh-long-term-memory,一键安装。
# 1. 放到插件目录
git clone https://github.com/Yang-Yin734/dsh-long-term-memory.git \
~/.dsh/plugins/dsh-long-term-memory
# 2. 让 profile 能解析到它(实体复制,不要用符号链接)
cp -r ~/.dsh/plugins/dsh-long-term-memory \
~/.dsh/profiles/desktop/node_modules/dsh-long-term-memory~/.dsh/profiles/desktop/package.json 的 dependencies 里加一行:"dsh-long-term-memory": "file:C:/Users/<you>/.dsh/plugins/dsh-long-term-memory"~/.dsh/profiles/desktop/cordis.patch.yml 末尾加:- insert:
- id: long-term-memory
name: 'dsh-long-term-memory'
config:
text: ''plugin_manager 工具若你的 DSH 版本带 plugin_manager,直接用 action: install_bundle、target 指向包目录即可,返回 application: applied 表示已 live。
字段 · 类型 · 默认 · 说明 text · string(volatile,textarea) · "" · 要注入的正文。空字符串表示不注入任何内容(不是注入空标题)
保存会写回 profile 的 cordis.patch.yml(insert 建条目 + 顶层同 id 覆盖行,属合法层叠)。值随之持久化,重启后仍在。
host 半(`lib/index.js`)
ctx.systemPrompt.section({
name: 'long-term-memory:user-text',
order: 10250, // 紧随一方 persona 后缀(10200)之后
interpolate: false, // 用户文本里的 {{…}} 保持字面,不参与插值
text: () => body === '' ? '' : `${HEADER}\n\n${body}`,
})三个要点:
{{...}},若参与插值,未解析的引用会让整个提示词组装抛错,把会话直接打挂。10200)之后,保证只改长时记忆时,前面那一大段前缀字节不变(prompt cache 友好)。renderPrompt 会 filter(t => t.length > 0),空段不会留下空标题噪音。browser 半(`client.js`)
slots / locale / configForms 三个服务取能力;configForms.whileServed(['long-term-memory'], …) —— host 真的服务这个条目时才挂 UI,没装 host 半就什么也不显示;settings.section 槽注册一个分区(id: 'long-term-memory', order: 60);SettingsFormModel + 一个 settingsTextField('text'),inject() 返回 { hooks: { longMemory: store }, edit, save, discard, resetField },框架把 hooks.longMemory 转成组件里的 props.useLongMemory。项目 · 要求 DSH · 0.2.x(桌面版 / web 版;依赖 settings.section 槽、configForms、volatile 配置) cordis · ^4.0.1 Node · ≥ 18(仅用于包管理,插件本身跑在 DSH 里) 平台 · 所有 DSH 支持的平台(纯 JS,无原生依赖)
cordis.patch.yml 里 —— 别往里写密码、token、私钥。.
├── client.js # browser 半:设置页分区
├── lib/index.js # host 半:systemPrompt 段 + Config
├── cordis.patch.yml # bundle patch:向组合树插入插件条目
├── package.json # dsh.bundle.patch / dsh.client 声明
└── LICENSE自检(不需要装进 DSH):
node --check client.js
node --check lib/index.js
# 校验 Config 与 section 注册
node -e "import('./lib/index.js').then(m => console.log(m.name, m.inject, Object.keys(m.Config ? {} : {})))"background: var(--dsw-alias-label-primary); color: var(--dsw-alias-bg-l1, #fff) —— --dsw-alias-bg-l1 不存在,var() 静默回退成白色,深色主题下直接白底白字,按钮看起来「是空白的」。file has not been read;用 PowerShell here-string 写中文会变 闀挎椂璁板繂(写文件请走 UTF-8 编辑器 / Node 脚本)。import '@deepseek-ai/schemastery' 解析失败。仓库内不含任何账号、密码、API key、token、私钥或机器相关绝对路径。插件运行时也不发起任何网络请求。
MIT © Yang-Yin734