🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

陪伴聊天 wuwen837/dsh-companion

DeepSeek Harness
wuwen83710 天前有提交已提供中文文档扫描:含敏感能力

切换聊天模式,让人设与长期记忆陪你自然对话

30.2/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wuwen837/dsh-companion
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 16 条)
  • 读取本地文件
    index.js:304
    return new Response(readFileSync(stickers.pathOf(sticker)), {
  • 读取本地文件
    agent.js:90
    const { sticker, duplicate } = stickers.add({ bytes: readFileSync(path), name: entry.name, description: entry.description, origin: 'chat' })
  • 发起网络请求
    client.js:219
    const response = await fetch(`${API}/${path}`, {
  • 读取本地文件
    lib/store.js:49
    if (!existsSync(path)) return fallback
  • 读取本地文件
    lib/store.js:50
    return JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    lib/store.js:58
    writeFileSync(temp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/store.js:59
    renameSync(temp, path)
  • 写入本地文件
    lib/store.js:138
    mkdirSync(this.root, { recursive: true })
  • 写入本地文件
    lib/stickers.js:36
    writeFileSync(temp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/stickers.js:37
    renameSync(temp, path)
  • 写入本地文件
    lib/stickers.js:78
    mkdirSync(this.dir, { recursive: true })
  • 读取本地文件
    lib/stickers.js:81
    if (existsSync(this.indexPath)) items = JSON.parse(readFileSync(this.indexPath, 'utf8'))?.items ?? []
  • 读取本地文件
    lib/stickers.js:81
    if (existsSync(this.indexPath)) items = JSON.parse(readFileSync(this.indexPath, 'utf8'))?.items ?? []
  • 读取本地文件
    lib/stickers.js:83
    this.items = items.filter(item => item && typeof item.id === 'string' && typeof item.file === 'string' && existsSync(join(this.dir, item.file)))
  • 写入本地文件
    lib/stickers.js:150
    writeFileSync(join(this.dir, file), bytes)
  • 删除本地文件
    lib/stickers.js:179
    try { unlinkSync(this.pathOf(item)) } catch { }
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-companion · 陪伴聊天与长期记忆 给 DeepSeek Harness(dsh)加一个「聊天」模式:在顶部切换 聊天 / 工作。聊天模式下,模型以你设定的人设和你聊天,自动记住聊过的事,在之后的对话里自然地用上;工作模式保持 dsh 原样,不带人设,也不读写聊天记忆。 聊天:记得之前的约定,并发出表情包 | 记忆 | 表情包 | | 记忆面板 | 表情包面板 | 截图中的人设、记忆和表情均为演示数据。 功能 - 顶部切换:Windows 桌面版放在标题栏「应用 / 编辑」菜单右边,浏览器里放在对话区左上角。打开某个会话时,模式会自动跟随它。 - 人设:一张人设卡(名字、对你的称呼、性格、说话风格、关系、背景),作为聊天会话的完整系统提示词。 - 自动记忆:每轮聊天结束后,在后台调用一次模型,提炼值得记住的事实、喜好、事件、约定,自动去重、更新或删除过时的记忆。 - 按话题挑记忆:人设每次都完整带上;记忆只挑与当前话题相关的若干条,再加上重要和最近的,记忆再多也不会撑爆上下文。检索在本地完成,不需要 embedding 接口。 - 记忆面板:查看、搜索、手动添加、编辑、删除、置顶(置顶 = 每次都带上)。手动写的和置顶的记忆,自动记忆不会改动。 - 独立的聊天记录:聊天模式下侧边栏换成聊天记录列表;工作模式下聊天会话会从工作区列表中隐藏。
展开完整文档(README 剩余 1 节)
dsh-companion · 陪伴聊天与长期记忆

给 DeepSeek Harness(dsh)加一个「聊天」模式:在顶部切换 聊天 / 工作。聊天模式下,模型以你设定的人设和你聊天,自动记住聊过的事,在之后的对话里自然地用上;工作模式保持 dsh 原样,不带人设,也不读写聊天记忆。

聊天:记得之前的约定,并发出表情包

| 记忆 | 表情包 |
| 记忆面板 | 表情包面板 |

截图中的人设、记忆和表情均为演示数据。

功能

- 顶部切换:Windows 桌面版放在标题栏「应用 / 编辑」菜单右边,浏览器里放在对话区左上角。打开某个会话时,模式会自动跟随它。
- 人设:一张人设卡(名字、对你的称呼、性格、说话风格、关系、背景),作为聊天会话的完整系统提示词。
- 自动记忆:每轮聊天结束后,在后台调用一次模型,提炼值得记住的事实、喜好、事件、约定,自动去重、更新或删除过时的记忆。
- 按话题挑记忆:人设每次都完整带上;记忆只挑与当前话题相关的若干条,再加上重要和最近的,记忆再多也不会撑爆上下文。检索在本地完成,不需要 embedding 接口。
- 记忆面板:查看、搜索、手动添加、编辑、删除、置顶(置顶 = 每次都带上)。手动写的和置顶的记忆,自动记忆不会改动。
- 独立的聊天记录:聊天模式下侧边栏换成聊天记录列表;工作模式下聊天会话会从工作区列表中隐藏。
- 表情包:
- 在聊天里发图并说「存起来」,它会用 save_stickers 工具把图片存进表情库,自己起名字、写含义。
- 也可以在「记忆与人设 → 表情包」里批量拖入上传,上传后会自动看图命名,名字和含义都能改。
- 聊天时它偶尔在情绪明显的时候发一个:回复里写 [表情:名字],插件把它换成图片,以小图显示。
- 独立的聊天模型:在聊天输入框里切换模型即可。插件会记住它作为新聊天的模型,并把工作模式的默认模型恢复原样。

实现方式

| 部分 | 做了什么 |
| companion Agent 预设 | 聊天会话使用的预设:不挂任何工具,只保留上下文压缩。 |
| dsh-companion/agent | 预设内的行:用人设作为完整系统提示词(dsh-persona 同样的方式),关闭可选的运行时上下文,再加一条必需的上下文,放当前时间和挑出的记忆。 |
| dsh-companion(Host) | 记忆与人设存储、POST /api/dsh-companion/* 接口、聊天轮结束后的记忆提炼、聊天模型与工作默认模型的隔离。 |
| dsh-companion(Web) | 顶部切换(conversation.header.leading)、聊天记录列表(以负优先级遮住 sidebar.workspaces)、记忆面板(main + sidebar.panellist)。 |

表情包相关:聊天预设里唯一的工具是 save_stickers;Host 包住 llm/stream,只在聊天会话里把回复中的 [表情:名字] 改写成指向本地文件的 Markdown 图片;面板上传时先把图片存成 dsh 附件,再调用一次能看图的模型自动命名。

数据保存在 ~/.dsh/companion/(设置了 DSH_HOME 时在其下):persona.json、memories.json、settings.json、stickers.json,表情图片在 dsh-companion-stickers/ 文件夹里。设置环境变量 DSH_COMPANION_HOME 可以把这些数据放到别的目录,比如用一份单独的演示数据。

安装

先从托盘完全退出 DeepSeek Harness 桌面版,然后从 GitHub 安装:

dsh plugin --profile desktop add github:wuwen837/dsh-companion

开发时也可以克隆仓库,再链接到本地目录,改完代码重启就生效:

git clone https://github.com/wuwen837/dsh-companion.git
dsh plugin --profile desktop add link:<克隆下来的目录的绝对路径>

安装后确认该 profile 的 package.json 里 dsh.profile.bundles 包含 dsh-companion,再打开桌面版。改了后台代码(index.js、agent.js、lib/)以后,同样要从托盘完全退出再重开,只关窗口不会重新加载。

使用

1. 点顶部「聊天」。侧边栏会变成聊天记录,左侧出现「记忆与人设」。
2. 打开「记忆与人设 → 人设」,写好人设卡并保存。
3. 正常聊天即可。记忆会在每轮结束后自动整理,在「记忆」页可以查看和修改。
4. 想换聊天模型,直接在输入框的模型菜单里换。

已知限制

- 记忆检索是本地关键词匹配(中文按字和词组切分),能找出说法相近的记忆,但不理解同义改写。
- 自动记忆每轮多调用一次模型(默认跟随当前聊天的模型,用最低的推理强度),可在「设置」里关闭或换成更便宜的模型。
- 工作模式隐藏聊天会话是按会话行隐藏的;工作区默认只显示前几条会话,隐藏后那一组可能显示得比平时少一两条。
- 表情库只存 JPG / PNG / GIF / WebP,按文件内容判断格式,不看扩展名。面板上传时,浏览器能打开的其他格式(AVIF、BMP 等,包括扩展名写成 .jpg 的)会自动转成 PNG;HEIC 浏览器打不开,需要先另存为 JPG / PNG。
- 在聊天里发 GIF 让它存,存下来的是 dsh 处理过的静态图,动画会丢;想保留动图请在面板里上传。
- 带图片的那一轮和调用工具会多花一些 token;面板上传时自动命名也会额外调用一次模型。
- 浏览器(非桌面版)里,打开「记忆与人设」面板时,顶部切换按钮随对话头部一起隐藏,从侧边栏点回聊天即可。

开发

node test/offline.test.mjs

离线测试覆盖存储、检索、提示词和提炼结果解析。界面和模型调用需要在运行中的 dsh 里验证。

许可

MIT
预览分享卡片长什么样 ↓wuwen837/dsh-companion
分享 · DeepSeek Harness Hub
wuwen837/dsh-companion

切换聊天模式,让人设与长期记忆陪你自然对话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部