dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
对话开始时自动拉取 GitHub 仓库内容注入上下文,对话结束时提取长期记忆按文件写回并提交;文件权限中心、原生设置页、回合写回指示与全局变动提示。
给 DeepSeek Harness 配一个「外置大脑」:对话开始前,它把 GitHub 仓库里的记忆文件装进上下文的脑子;对话结束后,它把值得长期记住的新事写回仓库并提交。跨设备、跨前端、跨重启,记忆都活在同一份文件里。
名字是个双关:Get 记忆(取回记忆)+ Git 记忆(GitHub 仓库里的记忆)。
dsh-get-memory,或 dsh plugin --profile web add dsh-get-memory);长期记忆账本.md,不用你去 GitHub 手动建任何东西;没选仓库之前,插件不注入任何东西、也不写回任何东西——陌生的默认配置零风险。
打个比方:你有一个 GitHub 仓库,里面躺着几份 Markdown 文件——人设、规则、长期记忆账本,随便你写什么。这个插件就是那个仓库的「管家」:
适配说明:本插件只适配 DSH 软件端(桌面应用)。DSH 的网页界面是软件端的镜像页面,插件能力跟随软件端生效,不提供独立的 web 插件。
{{User}} 这类模板语法也不会炸。长期记忆账本.md(友好模板),全程不用碰 GitHub 网页——工具适应人,不让人适应工具。插件按以下顺序找令牌,找到即止:
AIRE_MEMORY_GITHUB_TOKEN,面板保存的令牌就存在这里,推荐位置);githubToken 字段(引导用:一旦在配置里填了,插件首次加载时自动把它迁移进凭据库)。令牌只会被用于「读取 / 写入你配置的那一个仓库」,绝不写入仓库任何文件;写回前还会对内容做密钥形态脱敏。
agent/created 事件(每次「上岗」)→ 并行拉取仓库文件(GitHub Contents API)→ 更新内存缓存 + 磁盘缓存(~/.dsh/cache/aire-memory/snapshot.json)→ 通过 systemPrompt.context() 在每次模型组装时注入最新内容。拉取失败不报错:回退缓存(标注过期),缓存也没有就注入「暂不可用」占位。
agent/turn-stopping(回合结束)→ 防抖 30 秒(期间有新消息就取消)→ 或 agent/disposed(会话关闭)立即执行 → 插件自行调用模型(用当前会话模型 / 默认模型)提取新记忆,按「读写」文件逐个产出更新后的完整内容 → 先 GET 拿最新 SHA → PUT 提交(SHA 锁) → 409 冲突自动重取重试一次 → 成功后本会话立刻看到新内容。
只对根会话(主对话)写回;子代理 / 工作流会话不写。所有失败仅记日志,绝不打断对话。
| 左栏快捷面板(日常用) | 原生设置页(详细配置) |
|---|---|
| 状态一览(仓库 / 令牌 / 最近修改记录) | 令牌、仓库选择器、文件权限、一键初始化 |
| 立即拉取 | 自动写回、触发与范围、全局提示模式 |
| 自动写回开关 | 检查更新、关于 / 问题反馈 / 更新记录 |
| 设置引导 | 设置引导 |
设置页只露新手需要的字段;下表是完整配置(含底层字段,插件列表的配置入口可改):
| 字段 | 默认 | 说明 |
|---|---|---|
repo | 空 | 记忆仓库(owner/repo);留空 = 未配置,不注入不写回。设置页通过令牌选择 |
branch | main | 分支 |
fileModes | 旧字段自动迁移 | 文件权限表 [{file, mode: 'ro'/'rw'}]:注入取全部,写回只取 rw;设置页「文件权限」卡片管理 |
ledgerFile | 长期记忆账本.md | 主账本(多文件写回时排最前) |
injectOrder | 100 | 上下文排序(数字小靠前;运行时上下文从 110 起) |
tokenRef | AIRE_MEMORY_GITHUB_TOKEN | 凭据库 / 环境变量名 |
githubToken | 空 | 引导令牌(secret),首次加载自动迁移进凭据库 |
autoDiscoverFiles | true | 每次拉取盘点仓库新 .md 并加入权限表(读写),含 {{ 模板语法的跳过 |
writebackEnabled | false | 自动写回开关(默认关,保护模型额度) |
writebackEveryN | 5 | 每 N 条对话写回一次记忆(1 = 每条都写) |
sessionPolicyMode | all | 应用范围:all / exclude / include |
sessionPolicyIds | 空 | 排除 / 仅限的会话 id 列表 |
maxWriteFiles | 5 | 每次写回最多处理的「读写」文件数 |
writebackDebounceMs | 30000 | 回合结束后的写回防抖(毫秒) |
maxTranscriptChars | 16000 | 送入提取器的转录上限(取尾部) |
minConversationChars | 80 | 低于此长度不提取 |
extractProvider / extractModel | 空 | 提取模型覆盖;留空用会话模型 / 默认模型 |
requestTimeoutMs | 15000 | 拉取 / 写入超时(毫秒) |
showPanelIcon | true | 显示左栏快捷面板图标 |
showTurnIndicators | true | 显示回合写回指示 |
showGlobalNotice | true | 写回变动时输入框下方的小条提示 |
historyLimit | 50 | 面板内操作记录保留条数 |
设置页与快捷面板里改动以上任意字段(图标/指示开关除外)都会保存为运行时覆盖,即时生效、重启保留。
~/.dsh/.credentials.yaml 里 AIRE_MEMORY_GITHUB_TOKEN 的值(重启 DSH 后生效);# 客户端半边是拼接式 ModuleLoader bundle(无构建依赖):
node scripts/build-client.mjs # 由 src/client/*.js 生成 client.js
node --check lib/index.v8.js # 宿主半边语法检查
宿主半边入口见 package.json 的 main(纯 JS ESM);客户端半边声明见 dsh.client 与 exports["./client"]。
MIT