DSH Plugins Marketplace

DSH Plugins

Plugins

/

Memory & Context

/

companion-memory

R

companion-memory

Identified★ 1

Roleplay companion memory for DeepSeek Harness: per-conversation editable persona documents, favorability tracking, recent 48-hour transcript search and a date-archived local knowledge base.

companion-memory icon

伴侣记忆 · companion-memory

给 DeepSeek Harness 的角色扮演 / 伴侣型对话加一套常驻记忆与人格配置系统。
每个对话独立一套数据,互不干扰;新对话默认关闭,想用时一键开启。

license stars DSH plugin node


这个插件解决什么

角色扮演聊久了,模型会忘设定、忘剧情、忘你说过的话;而普通聊天窗口既放不下长篇人设,也不该让 AI 每轮都翻旧账。这个插件在本地给每个对话配一套「人格文档 + 好感度 + 记忆 + 知识库」:

  • 人设随时改、立即生效:侧边栏里填写的三份文档,每次对话前现读,改完下一轮立刻按新设定说话。
  • 重点原文一字不改:判定为重信息的原文只做「保存 / 调取」,系统不会改写或脑补。
  • AI 自我演化:角色在长期相处中会自己慢慢长出新细节 —— 性格侧面、喜欢 / 讨厌的事物、行为习惯。由 AI 在剧情触发时自行增删(每条必须写理由),越攒越多,也会同步进系统提示词;只做加法,永远不推翻用户写死的三份核心文档。
  • 聊天周期自动管理:按真实对话累计交互日,满 30 天自动归档;48 小时小归纳、每 30 个交互日月度打包、可自定义轮数的自动打包,全部写进可检索的本地知识库。
  • 两段式检索:最近两个聊天日的事直接检索原始对话(热缓存),更早的事从知识库归档 / 归纳里查。所有计时都按「聊天时间」——只有真正聊过天的日子才推进,没聊天的日子不占用额度。
  • 多人 / 群聊预留:一个对话里出现多个人时,AI 自己判断现在是谁在说话,对每个人的好感度分开记录;记忆(剧情)大家共享。单人对聊不受影响,行为与以前完全一样。
  • 说话简短、像真人:默认注入「像真人在聊天软件里发消息」的说话方式——1~3 个短句、口语化、不用 Markdown 标题/列表/客服腔、不每轮长篇复述;可按需改成 normal / detailed / off。
  • 导入即回顾:导入记忆文档后,AI 会自动把带进来的聊天原文分批过一遍,提炼成活跃记忆,不用检索也能接上以前的事;可在导入面板关掉。
  • 长对话不超限:上下文接近模型窗口时,较早的对话会自动压缩成「伴侣记忆式」记忆块(重要原文 + 次要摘要 + 好感度变化 + 未完成事项),写进本地知识库并替换旧对话;原文仍留在本地日志里,需要时可检索,长聊可以一直继续。
  • 按对话隔离:每个对话各自一套人设、好感度、记忆与知识库;关闭只停止注入,数据保留不删。

最近更新(1.0.0)

  • 好感度满了还能继续涨「羁绊值」(无上限):超过 ±100 的部分自动转羁绊;满值后继续记录也会 +1,面板可手动 +1/−1;
  • 导入聊天原文加了保护:最多 500 条、单条 6000 字,预览显示体量,回执报告跳过条数;
  • 修复旧版清理逻辑导致的会话加载失败(system/message does not match an open turn and step);
  • 新增 ROADMAP.md 与《多级记忆压缩设计》(年度摘要 + 滚动跨年沉积,关键记忆原样保留)。

完整记录见 CHANGELOG.md。

界面预览

配置:固定说明 + 分字段填空按对话开启 / 关闭
配置关闭引导
记忆:好感度与活跃记忆知识库:48h 热上下文 / 自动打包
记忆知识库
AI 自我演化:四类细节可增删,AI 与用户都能维护
自我演化
总览页(只读):核对 AI 到底看到了什么

总览

功能

七个页面

除了侧边栏面板,顶部会话视图标签栏(对话轨迹那一排)还会多一个「伴侣记忆」:点开自动显示当前对话的情绪表、好感度与活跃记忆(只读速览)。

  1. 配置:三份角色文档 —— 角色性格.md、允许&禁止行为.md、预设发言例句.md。说明文字固定只读,按固定字段逐项填空(基础性格 / 三观 / 说话语调 / 思考方式 / 喜好 / 雷区;允许 / 禁止 / 行为边界;日常问候 / 表达关心 / 表达不满 / 口头禅),每份末尾另有「其他补充」自由填写框。保存后下一轮对话立刻生效,优先级高于一切记忆。默认还允许 AI 在剧情需要或你明确要求时小步修改「角色性格」和「预设发言例句」(每次必须写原因,改动自动归档到知识库,你随时可以改回来;「允许&禁止行为」默认只有你能改)。
  2. 情绪:独立大类页。情绪表——每种情绪一条独立的 0~100 进度条(默认九种:开心/兴奋/平静/依恋/悲伤/委屈/愤怒/焦虑/疲惫,可同时存在,AI 每句实时更新且是最高优先级参考);可手动拖动改值(必须写理由)、新建/删除情绪种类,下方列出最近 10 次情绪变化。
  3. 记忆:全局活跃记忆(重要原文不改、上限 30 个聊天交互日;每条记忆前面都带记录日期+时间,记忆向量由 AI 保存时自己打分:情感 -100100 / 重要 / 亲密 / 敏感 / 长期 各 0100、类别(偏好/约定/事件/人物/雷区/日常/其他)、最多 3 个自定义方面;AI 还能自己新建全局维度(如「饮食」「工作」,所有对话共用,存 <数据根目录>/vector-dimensions.json,总共最多 12 个;有记忆在用的维度不允许删除,面板上会显示每条维度多少条记忆在用),之后所有记忆都能按它打分,面板上直接显示)、好感度(角色 / AI 对当前说话人的好感度,-100 ~ 100,多人对话时按人分开,变更必须写理由并归档;满 ±100 后继续加深的部分记入羁绊值,无上限、可正可负;每个人还另有一套多维评价(信任/亲近/尊重/依赖/警惕/吸引…,AI 自己打分,维度可自己增删、全局共享))、AI 自我演化(性格细节 / 喜欢的事物 / 讨厌回避的事物 / 行为习惯四类,每类上限 12 条;AI 在剧情触发时自行增删并写明理由,用户也可以在面板里手动补充或删除,所有条目都会同步进系统提示词)。
  4. 知识库:按日期归档的本地文档 + 每 30 个交互日自动生成的月度打包文档 + 可自定义间隔的自动打包文档,支持关键词检索与原文查看;页面顶部显示「最近两个聊天日上下文」状态与「自动打包」设置(每 N 轮一次,0 = 关闭)。
  5. 状态:交互日计数、48 小时(聊天时间)归纳到期状态、对话月周期进度、在场人物与各自好感度、说话方式、数据目录与统计。
  6. 总览:只读。把注入给 AI 的每一块内容分别列成独立框,末尾给出「整体」完整系统提示词,可展开 / 复制全文,方便核对 AI 到底看到了什么。
  7. 备份:把当前对话的整套记忆(人格文档、好感度与变动历史、活跃记忆、知识库归档/月度/自动打包、交互日与设置)导出为一个可读的 JSON 文档(如 伴侣记忆_对话_2026-10-29.json);换对话或重装后导入即可完整接上。导入前会显示摘要预览,可选「合并到当前记忆」或完全覆盖。

记忆页每条活跃记忆都带操作按钮:置顶 / 取消置顶、上移、下移、归档、删除;好感度卡片支持 撤销最近一次变动(把数值恢复到上一次记录之前)。

Host 侧自动行为

  • 只对已开启的对话注入系统提示词(三份人设文档、AI 自我演化条目、全局活跃记忆、好感度、最近上下文状态与工具协议);未开启的对话完全不受影响;
  • 自动缓存该对话最近两个聊天日的原始对话(用户与角色原话),供模型 search_recent / read_recent 检索;超出后自动清理,只保留知识库归档与归纳;
  • 按「当天是否产生有效对话」累计该对话的聊天交互日(不聊天的日子不计数);
  • 活跃记忆满 30 个交互日自动移入知识库(原文不变);
  • 每满 30 个聊天交互日自动生成 对话月度归档_第N周期_起始YYYY-MM-DD.md;
  • 按面板设置的轮数(默认 5,可设 0 关闭):每累计 N 轮真实对话,自动把区间内的重点原文(原样)、次要摘要、48 小时归纳、好感度变更整理成 packs/对话自动打包_第N次_起始…_截止….md,并写入知识库供检索;不修改任何原有归档;
  • 通过 companion_memory 工具让模型记录每轮对话、保存重点原文、更新好感度、检索上下文与知识库、提交 48 小时归纳,以及用 evolve 动作让角色慢慢演化自己的性格细节 / 喜好 / 厌恶 / 习惯(每次最多 2~3 条、必须写理由,只做加法不推翻核心人设);未开启的对话调用会被拒绝;
  • 每轮强制记忆提醒:系统提示词最末尾单独一段提醒「回复前先调用 turn_end」,并说明历史里「未开启伴侣记忆」的旧报错不代表现在不可用(避免模型因为一次旧报错而放弃调用);
  • 被动记忆记录(Auto turn_end):如果模型某轮漏掉 turn_end,Host 侧会自动补记—— · passiveTurnEnd(默认开):用一次轻量旁路模型调用提取本轮的「重点原文 + 次要摘要 + 好感度变化」,像工具调用一样写入记忆、好感度与知识库; · 旁路调用失败时退化为一条流水摘要兜底(autoTurnRecord),保证交互日、轮次统计、自动打包计数不断档; · 模型自己调用过时不会重复记录;可用 passiveTurnEnd: false / autoTurnRecord: false 关闭;
  • AI 可小步修改配置文档(edit_doc):默认允许改「角色性格」「预设发言例句」,不允许改「允许&禁止行为」;每次必须写理由,修改会归档进知识库;只做补充和渐变,不推翻用户写死的核心设定,用户手动修改永远优先;可用 aiEditDocs: false 整组关闭;
  • 对话上下文压缩:每轮请求前估算当前上下文压力,接近模型窗口上限时,把最旧且「工具调用配对完整」的一段对话交给模型压成「重要原文 + 次要摘要 + 好感度变化 + 未完成事项」的记忆块,写进 packs/上下文压缩_第N次_YYYY-MM-DD.md,再用这条记忆块替换那段旧对话 —— 旧消息从此不再进入上下文,长聊不会撞上窗口上限。遇到上下文溢出错误(CONTEXT_WINDOW_EXCEEDED)时会强制压缩一次并重试,作为兜底;压缩请求失败或在压缩期间 surface 变化时会安全放弃,不影响当前对话;
  • 记住最近活跃的对话,面板打开时自动跟随;「切换对话」浮层按工作区(项目)分组,分组可点击折叠 / 展开,只列出真实对话(未聊过的空会话不显示),点选即可切换。

两段式检索

时间范围数据位置工具动作内容
最近 2 个聊天日(聊天时间)recent.json(自动缓存)search_recent / read_recent对话原话,可直接引用
超出最近 2 个聊天日archive/、monthly/、packs/search_kb / read_archive归档记录、48 小时归纳、月度打包、自动打包、上下文压缩记忆

「聊天时间」口径:时间只按真正聊过天的自然日累计,每天算 24 小时;某天没聊天不会消耗额度。例如今天和昨天聊过,之后间隔一周没聊,回来时那两天的原话仍然可以检索。

上下文压缩(长对话不超限)

长对话里最早的历史最占 token,却往往只需要记住重点。开启伴侣记忆的对话会在每次请求前检查上下文压力:一旦超过可用窗口的阈值(默认 50%),就自动压缩最旧的一段:

  1. 选择最旧的、工具调用配对完整的一段区间,并保留最近原文(默认 16000 tokens)与最后一条用户消息;
  2. 用当前模型把这区间压成伴侣记忆格式:重要原文(原样保留)|次要摘要|好感度变化|未完成的事;
  3. 写进知识库 packs/上下文压缩_第N次_YYYY-MM-DD.md(带归档日期,可 search_kb / read_archive 检索);
  4. 在会话 surface 上用这条记忆块替换旧区间 —— 旧消息不再送给模型,摘要之后的对话照常继续。

压缩请求失败、摘要不比原文小、或压缩期间会话发生变化时,会安全放弃本次压缩(下一轮再试);上下文溢出报错(CONTEXT_WINDOW_EXCEEDED)后会强制压缩一次并重试该请求。面板「状态」页显示已压缩次数与累计节省估算。

可在 profile 补丁里调整(全部可选):

- id: companion-memory
  config:
    contextCompression:
      enabled: true            # 关闭 = 只做记忆,不做上下文压缩
      thresholdRatio: 0.5      # 占「窗口 - 输出预留」的比例,到阈值就压缩
      retainTokens: 16000      # 最近至少保留多少 token 原文
      minCompressTokens: 16000 # 单次至少压缩多少 token 才值得做
      summaryMaxTokens: 4096   # 摘要输出上限
      summaryReasoningEffort: low  # 摘要推理强度:low / high / max,留空不指定
      cooldownMs: 180000       # 两次自动压缩的最小间隔(毫秒)
      overflowRecovery: true   # 上下文溢出后强制压缩并重试
    importDigest:              # 导入记忆后让 AI 把聊天原文过一遍
      enabled: true
      batchChars: 12000        # 每批最多多少字符
      maxBatches: 8            # 最多过几批(超出跳过)
      maxMemoriesPerBatch: 10  # 单批最多采纳几条记忆

压缩只作用于「已开启伴侣记忆」的对话;未开启的对话完全不受影响。原始对话仍保存在本地会话日志中(只是不再进入模型上下文),压缩记忆随时可在知识库页查看。

多人 / 群聊(按说话人分开好感度)

一个对话里可以出现多个人(几个人轮流用同一个对话、角色扮演里有多个角色、或者以后接入真正的群聊插件)。插件把每个人当独立的「说话人」处理:

  • 好感度按人分开:角色对小明和对小红各有一套 -100 ~ 100 的好感度,互不影响;语气和态度按「当前说话人」的好感度调整。
  • AI 自己判断是谁在说话:提示词里会给出「在场人物」清单和识别规则——单人对聊时默认就是对方,不要乱切换;消息明显来自另一个人(自报姓名、落款、@ 某人、群聊口吻、身份/关系不同)时,先调用 companion_memory({action:"speaker", name:"名字", reason:"判断理由"}) 登记并切换,再继续回复;拿不准时用角色口吻问一句。
  • 消息前缀自动识别:消息以 [名字]、【名字】 或「已知名字:」开头时,Host 侧会自动切到那个说话人(只对已登记的名字生效,避免误判)。
  • 记忆是共享的:角色记得大家说过的话(剧情/约定/关键原文),但每条记忆会记下「来自谁」,多人对话里注入时会显示来源。
  • 面板可以看和改:状态页「在场人物」列出每个人的好感度;记忆页好感度卡片会显示当前说话人,并给出人物切换按钮;AI/用户都能用 speaker 动作登记或切换(name / aliases / note / switchTo)。
  • 旧数据自动迁移:以前单人对话的好感度会自动成为默认说话人「用户」的好感度,不用手动处理;单人对话不会出现多余的人物。

群聊插件本身还没做(需要真正的多人接入和发言人标记);目前是「同一个对话里的多人轮流说话」形态,等以后有群聊插件可以直接对接这套说话人机制。

AI 也可以改配置文档(edit_doc)

默认情况下,配置页的三份文档 AI 只能读、不能改。但角色在长期剧情里可能会自然变化(例如经历重大事件、和用户相处很久之后变得更主动),这时候只加「AI 自我演化」条目有时不够——所以插件支持让 AI 小步修改配置文档本身:

  • 工具动作:companion_memory({action:"edit_doc", key:"personality"|"examples"|"rules", fields:{...} 或 content:"...", reason:"为什么改"});
  • 默认允许:personality(角色性格)、examples(预设发言例句);
  • 默认禁止:rules(允许&禁止行为)——安全底线只由用户本人改;
  • 每次修改必须写 reason,改动会以「AI 修改配置文档」类型写进知识库归档,用户在配置页随时可以改回来;
  • 提示词里会明确告诉 AI:只做补充和渐变、不推翻用户写的核心设定、用户手动修改永远优先、不要每轮都改;
  • 全部可以关掉:在 profile 补丁里设置 aiEditDocs: false(或只关某一类):
- id: companion-memory
  config:
    aiEditDocs:
      personality: true   # 角色性格:AI 可小步修改
      examples: true      # 预设发言例句:AI 可小步修改
      rules: false        # 允许&禁止行为:仅用户可改(建议保持 false)

如果你完全不想让 AI 动配置文档:aiEditDocs: false。用户手写的内容仍是最高优先级,AI 的修改只是「在用户设定之上做补充」。

说话方式(简短、像真人)

默认给 AI 注入一段「说话方式」约束,让它像真人在聊天软件里发消息,而不是写文档:

  • 默认 1~3 个短句就够,能一句回完就一句;对方发得短你也回得短;
  • 不用 Markdown 标题 / 列表 / 编号 / 表格 / 加粗 / 引用块,也不用「总结/建议」这种结构;
  • 不用客服腔和书面语("好的""首先""综上所述"),用口语和语气词;
  • 不每轮复述剧情、不写一段内心独白、不一口气发一大段;结尾最多自然问一句;
  • 只有用户明确要求「详细说明/列一下/写出来」时才展开成长回答。

可在 profile 补丁里调整:

- id: companion-memory
  config:
    replyStyle:
      mode: brief        # brief 简短像真人(默认)| normal 自然长度| detailed 按需详细| off 不注入
      maxSentences: 3    # brief/normal 的短句上限参考

面板「状态」页会显示当前说话方式;如果角色开始长篇大论,先检查这里是不是被改成了 normal/detailed/off。

安装

方式一:从 GitHub 安装(推荐分享)

在 DSH 插件市场选择「从链接安装」,填入 Release 资产直链:

https://github.com/Root-7-KHX/companion-memory/releases/download/v0.6.2/companion-memory-0.6.2.tgz

或命令行:

dsh plugin add https://github.com/Root-7-KHX/companion-memory/releases/download/v0.6.2/companion-memory-0.6.2.tgz

方式二:本地目录安装

  1. 下载本仓库(Code → Download ZIP 并解压,或 git clone);
  2. 在 DSH 中让插件管理器安装该目录(plugin_manager → install_bundle → 指向解压出来的 companion-memory/ 目录);
  3. 刷新 Web GUI 页面,侧边栏出现「伴侣记忆」图标。

方式三:解压即用

把 companion-memory-0.6.2.zip 解压到固定目录,指向该目录安装即可(无需构建、无第三方依赖、纯 ESM)。

使用

  1. 打开左侧「伴侣记忆」面板 —— 顶部「当前对话」栏会显示当前对话与开启状态;
  2. 点击「开启本对话」:这个对话从此拥有独立的一套数据;
  3. 到「配置」页填写角色性格、允许与禁止的行为、常用例句(自动保存,下一轮生效);
  4. 正常聊天即可:AI 每轮结束会记录重点原文、次要摘要并评估好感度;长期相处中还会自己慢慢演化人设细节(性格侧面 / 喜欢 / 讨厌 / 习惯),每轮最多几条并写明理由;
  5. 想核实时去「总览」页看 AI 收到的完整内容;想回忆旧事时直接问,AI 会先查 48 小时热缓存,再查知识库;
  6. 长对话变长后不用管:上下文接近窗口上限时会自动压缩更早的对话(见上文「上下文压缩」),「状态」页能看到压缩次数与累计节省估算。
  7. 多人对话(几个人轮流用这个对话):直接聊就行,她会在有人自报姓名/明显换人时登记新人物并分开记好感度;也可以叫她「记住小明是我朋友」。状态页和记忆页能看到每个人的好感度。
  8. 想让她自己调整角色设定:直接说「把性格里的‘有点社恐’改成‘慢热但熟了话多’」「口头禅换成 Z」——她会用 edit_doc 小步修改并写原因(默认只允许改「角色性格」和「预设发言例句」,「允许&禁止行为」仍只有你能改);改动会归档到知识库,你随时能在配置页改回来。

新对话默认关闭 —— 每个对话单独点一下开启即可;关掉只停止注入,已有数据不会删除。

数据位置

默认根目录 $DSH_HOME/companion-memory(回退 ~/.dsh/companion-memory):

companion-memory/
├── sessions.json                     # 哪些对话已开启、最近活跃对话
├── sessions/<对话 id>/               # 每个对话独立一套
│   ├── 角色性格.md
│   ├── 允许&禁止行为.md
│   ├── 预设发言例句.md
│   ├── state.json                    # 好感度(按说话人分开)、AI 自我演化、活跃记忆、交互日、周期与打包设置
│   ├── recent.json                   # 最近 48 小时原始对话
│   ├── archive/YYYY-MM-DD.md         # 按日期归档
│   ├── monthly/对话月度归档_第N周期_起始YYYY-MM-DD.md
│   └── packs/
│       ├── 对话自动打包_第N次_起始YYYY-MM-DD_截止YYYY-MM-DD.md
│       └── 上下文压缩_第N次_YYYY-MM-DD.md   # 长对话的压缩记忆(早期对话的替身)
└── (旧版单套数据:首次启用某个对话时自动迁入该对话目录)

所有归档条目以 归档日期:YYYY-MM-DD HH:MM 开头,按日期分组;重点原文类条目另外带 原始记录时间:YYYY-MM-DD HH:MM(记忆最初被记下的时刻)。每条活跃记忆在面板、提示词、自动打包里都带「日期 + 时间」,不会出现无时间戳的记忆。AI 修改配置文档也会以「类型:AI 修改配置文档」记进归档。数据全部保存在本地,不上传任何服务器。

常见问题

下面是安装、升级与日常使用中最常见的问题。

Q:装了插件,侧边栏却没有「伴侣记忆」,或者面板突然消失? 答:先检查 package.json 是否带 UTF-8 BOM。DSH 解析带 BOM 的插件清单会失败,常见报错是 Unexpected token ''(引号内是 BOM 字符);用编辑器另存为 UTF-8 无 BOM,再到插件管理里把本插件的 bundle 关掉再打开即可。

Q:打开旧对话提示会话历史加载失败(session corrupt)? 答:这是旧版 0.7.0 的 dynamic-context 在 turn/step 之外写 surface replace 导致的,典型报错为 system/message does not match an open turn and step。1.0.0 已停用这段逻辑并修复会话日志;升级后仍复现,可把会话日志目录下的 .bak-* 备份与 raw log 路径附到 issue 里。

Q:长对话越聊越贵、token 暴涨怎么办? 答:1.0.0 已把系统提示词拆成静态 / 动态两部分,伴侣会话工具从 74 个精简到 25 个,旧原文默认不加载、只在需要时检索。如果还是觉得贵,先在面板里关掉不用的会话的伴侣记忆;关闭只停止注入,不会删除数据。

Q:好感度到 100 后怎么还能涨? 答:±100 是好感度上限,不是关系上限;满值后继续加深的部分会记入「羁绊值」,无上限、可正可负。也可以在面板里手动 +1 / −1 微调。

Q:卸载或更新插件,数据会丢吗? 答:不会。数据独立保存在 ~/.dsh/companion-memory(或 $DSH_HOME/companion-memory),卸载、更新插件都不会删除。每个会话一套目录,真要删某个会话的记忆,删除 companion-memory\sessions\<对应目录> 即可;删前建议先导出备份。

Q:在 QQ 里也能用伴侣记忆吗? 答:可以,目前走桥接方案:把 QQ 发言人映射成伴侣记忆的「说话人」。同一角色在 QQ 和 DSH 里共享人格文档与同一套好感度体系,但对话内容和数据分别存储。

Q:导入后记忆没有变多,或者出现了重复? 答:导入会做机械去重,完全相同的内容不会重复入库;它不做语义合并,所以相近但不相同的条目可能同时保留,看起来就像「没变多」。语义整理已列入 1.1.0 计划。

迁移说明

  • 0.6.x → 0.7.x → 1.0.0:数据格式由 store normalize 自动迁移,无需手动改文件,升级后直接使用即可。
  • 旧对话显示「未开启伴侣记忆」:数据还在,只是该对话的开关没打开;到侧边栏「伴侣记忆」面板点「开启本对话」即可恢复注入。
  • 换电脑 / 换工作区:在面板「备份」页导出 JSON 包,到新环境再导入;包内含人格文档、好感度与变动历史、活跃记忆、知识库与 state。聊天原文可以选择是否一起导出,导入时可选「合并导入」或「覆盖导入」。
  • 升级 DSH 本体:不影响插件数据;数据始终在 ~/.dsh/companion-memory(或 $DSH_HOME/companion-memory),不在 DSH 安装目录里。
  • 插件更新被覆盖 / 改了代码不生效:本机通过 profile 的 pnpm link 安装(@local/companion-memory → link:D:/AI/插件/companion-memory),更新仓库代码后,在插件管理里把 bundle 关掉再打开一次即可,无需重新安装。

开发与结构

companion-memory/
├── index.js              # Host 入口:注册提示词段、工具、事件追踪、HTTP API
├── client.js             # Client 半:侧边栏图标 + 主面板(七个页面,轮询状态)
├── lib/
│   ├── manager.js        # 按会话管理数据目录、开启注册表、会话列表、旧数据迁移
│   ├── store.js          # 单会话数据层:文档、记忆、好感度(按说话人)、自我演化、归档、周期、打包
│   ├── recent.js         # 48 小时热上下文缓存与检索
│   ├── prompt.js         # 系统提示词分段渲染(按对话隔离注入;含在场人物/说话人识别、AI 可改文档说明)
│   ├── tool.js           # companion_memory 工具(转发到对应会话的 store;含 speaker / edit_doc 动作)
│   ├── tracking.js       # 会话事件 → 交互日计数 / 热缓存 / 自动打包 / 说话人前缀识别
│   ├── context-compress.js # 对话上下文压缩:压力检测 → 摘要 → 知识库 → 替换旧对话
│   └── api.js            # 同源 HTTP API(/companion/api/*)
├── locale/               # 中英双语文案
├── cordis.patch.yml      # 插件加载补丁
└── docs/screenshots/     # README 图片

插件通过 Host HTTP 路由与 Client 面板通信,数据与状态全部落在本地文件;Host 侧在 agent/created 时按对话注册系统提示词段,关闭的对话不注入任何内容。

在 GitHub Codespaces 里改代码(免装 Git)

仓库自带 .devcontainer 配置,所以可以直接在浏览器里改代码:

  1. 仓库页点绿色的 Code 按钮 → Codespaces 标签 → Create codespace on main;
  2. 等几十秒,浏览器里打开一个 VS Code(已装好 Node 22);
  3. 改完文件,在左侧 Source Control(Ctrl+Shift+G)填写提交信息 → Commit & Push;
  4. 也可以在终端跑校验:node --check index.js && node --check client.js。

限制:Codespaces 只是云端编辑器/终端,跑不了 DSH 本体。插件的实际界面与数据验证仍需在本地 DSH 里做;它适合改代码、改文档、打包和发版。

本地校验

# 语法检查(Node ≥ 22;纯 ESM,无需安装依赖)
node --check index.js
node --check client.js
node --check lib/manager.js
node --check lib/context-compress.js

参与贡献

这个项目是公开的,欢迎任何人一起完善(改代码、提建议、修文档都可以):

  • 📋 提 Bug / 建议:Issues(有对应模板)
  • 🔧 帮忙改代码:Fork 本仓库 → 新建分支 → 提交 PR(流程与自检清单见 CONTRIBUTING.md)
  • 🌐 参与方式不限身份:公开仓库下,任何 GitHub 用户都可以 fork、提 Issue、提 PR;如果你希望某个朋友直接改仓库,可以把他加成 Collaborator(仓库 Settings → Collaborators → Add people)
  • 🧩 本地开发:node --check 自检 + 安装到 DSH 后按 CONTRIBUTING.md 的冒烟清单走一遍

不接收任何用户对话数据;Issue 里请勿粘贴真实聊天隐私。

License

MIT © 2026 Root-7-KHX

Comments

Loading…

Similar plugins

mindspace-dsh-session-memory

by Spirtxiaoqi7

Editable, session-isolated personalization memory for DeepSeek Harness

Manifest valid

★ 3

MIT

JavaScript

Oct 9, 2026

dsh plugin --profile web add mindspace-dsh-session-memory

by eryucheng

Per-session long-term memory for DeepSeek Harness, with memory management, persona settings, and compaction prompts.

Memory & ContextManifest valid

★ 3

Apache-2.0

JavaScript

Oct 29, 2026

dsh plugin --profile web add dsh-suzu-memory

Cross-app project memory for DeepSeek Harness with role-separated writeback, a visual knowledge workspace, confirmed corrections, session controls, local Writer and organizer settings, and an account-

Memory & ContextManifest valid

★ 0

dsh plugin --profile web add dsh-tmcra-memory

by tluoluo

Persistent memory for DeepSeek Harness: per-conversation notes, selective injection, project memory, semantic Vault search + automatic retrieval.

Manifest valid

★ 4

↓ 115/wk

MIT

TypeScript

Aug 16, 2026

dsh plugin --profile web add dsh-persist

by chenkezhen480

Semantic long-term memory for DeepSeek Harness: embedding-based retrieval over a persistent cross-session memory store, with model-facing tools, proactive per-question recall, automatic conversation summarization, and auto-selected embedding provider (apiKey present → API, otherwise local).

Tools & CapabilitiesManifest valid

★ 0

Apache-2.0

TypeScript

Aug 17, 2026

dsh plugin --profile web add dsh-plugin-semantic-memory

by ly2601620664

陪伴型长期记忆 DSH 插件:分层记忆(对话→事实→场景→人格)、规则抽取、时间衰减检索,全本地文件、append-only 不丢数据。

Manifest valid

★ 0

MIT

JavaScript

Oct 23, 2026

dsh plugin --profile web add dsh-pet-memory