🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

Danerus23/dsh-user-mirror-ru

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

dsh-user-mirror — 俄语版

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/20 · 已提供中文文档

DSH(DeepSeek Harness)插件 dsh-user-mirror 的俄语版本:界面和系统提示词的翻译,外加两处上游修改 --- 请提供需要翻译的 Markdown 文档内容,我会按照要求将其翻译为简体中文并保留所有 Markdown 语法。

综合分
29.3
GitHub 分
29.3
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Danerus23/dsh-user-mirror-ru
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功
是什么
dsh 原生插件 · chat
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 6 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/26
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/26(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-user-mirror — 俄语版

让模型了解你。
DSH 的记忆插件:模型会自行记录你的原则、红线、
工作流程和品味——它们会跨会话延续。

dsh-user-mirror 插件的俄语版
(上游源码:webkubor/dsh-mirror,版本 0.6.1)。

所有可见文本均已翻译——“记忆”标签页、帮助、工具描述、错误文本
以及系统提示中累积的记忆块。除翻译外,此分支还包含对插件本身的两处修改:
没有它们,俄语记忆无法正常工作——计数器会出错,记录会重复复制,
因为上游的主题匹配器无法处理西里尔字母。

* 英语摘要(说明为何这不仅对俄语用户有用)——README.en.md。
* AI 代理说明:安装、验证、回滚——AGENTS.md。

插件的作用

插件只解决一个任务:模型会自行记录这个人是如何思考的,这些
记录会返回到后续会话的系统提示中。

* 学习。 当一个人表达出可迁移的判断时(“不要为不紧急的任务
付出复杂度代价”,“在 CI 中我需要日志归档,而不是截图”),模型会调用
工具 mirror_remember 并记录下为什么记住它。
* 记忆。 记录通过 ctx.storageDomain 本地存储——带有容量上限、
按遗忘曲线遗忘以及按主题覆写。
* 使用。 累积的内容按token 预算插入系统提示,而不是
“按记录数量”。

只记录判断,不记录事实:路径、账号、服务器和仓库地址
都有自己的真相来源,在这里再存一份迟早会与之产生分歧。

| 类别 | 其中包含的内容 |
|---|---|
| principle | 原则/权衡——在什么情况下优先选择什么以及如何选择 |
| redline | 红线——在任何情况下都不能做的事 |
| workflow | 工作流程——工作顺序和交互习惯 |
| taste | 品味/表达——措辞、风格、呈现方式 |

工具:mirror_remember(text, kind, reason)——记录,mirror_forget(text, reason)——
按含义删除记录(无需记住确切文本)。故意没有读取工具:
记忆本来就位于系统提示中,第二条读取路径只会占用常驻 token。

要求

| 项目 | 值 |
|---|---|
| DSH | ≥ 0.1.1-rc.2;开发和验证基于 0.1.5-rc.2 |
| 配置 | 仅 web:插件需要 storageDomain 和 webServer 服务。在 headless 配置下,它会进入 pending (waiting for services) 并导致加载失败 |
| git 和 pnpm | 从 git 安装时需要:dsh plugin 是对在配置目录中运行的 pnpm 的薄封装 |
| Node | 运行 DSH 本身所用的那个 |

该分支是替代内存插件安装的,而不是与之并存:两份副本会注册相同的
路由和工具,DSH 会因此损坏。

⚠️ 请检查两个名称。 我们的分支名为 dsh-user-mirror——与上游的旧包同名。
但上游已迁移到 @dsh-plugins/dsh-user-mirror(详情见
「上游状态」一节)。如果你安装的是新包,它的名称不同,安装分支不会替换它——会得到两份插件副本。请先移除它:

dsh plugin --profile web remove @dsh-plugins/dsh-user-mirror

安装(面向用户)

需要已安装并至少运行过一次带 web 配置的 DSH。如果 web 配置尚不存在,
它会在第一次执行 dsh plugin 命令时自动创建——无需单独的「创建配置」步骤。

1. 查看当前安装了什么(非必需,但有用)
dsh plugin --profile web why dsh-user-mirror
dsh plugin --profile web why @dsh-plugins/dsh-user-mirror   # 上游的新包——不应存在

2. 从仓库安装俄语版本
dsh plugin --profile web add github:Danerus23/dsh-user-mirror-ru

3. 重启 web 配置,然后在浏览器中用 Ctrl+Shift+R 刷新页面

在第 1 步中,对于未安装的包,why 会什么都不输出(返回码 0)——
这是正常的,表示「未安装」。如果包已安装,输出如下:

dsh-user-mirror@0.6.1-ru.1
└── dsh-profile-web (dependencies)

Found 1 version of dsh-user-mirror

安全验证:独立配置与独立端口

如果不想把插件安装到日常使用的配置中,可以先在独立存储上验证。
这不会影响工作配置中的任何内容,而且内存和设置都是独立的:

$env:DSH_HOME = "$env:TEMP\dsh-check"                                   # 独立的 DSH 存储
dsh plugin --profile web add github:Danerus23/dsh-user-mirror-ru         # 配置会自动创建
dsh web --port 3097 --no-open                                            # 在独立端口上运行独立服务器
在另一个窗口中:浏览器地址由 dsh web 自行打印——形如
dsh web: http://127.0.0.1:3097/?token=...
不带 token 的裸 http://127.0.0.1:3097 会返回 401——这是保护机制,而非故障
pwsh -File .\tools\check-server.ps1 -Url http://127.0.0.1:3097

$DSH_HOME 默认为 %USERPROFILE%\.dsh(即 ~/.dsh);如果设置了该变量,
以下所有路径(profiles\web\...、storages\...)都相对于它计算。

如果之前安装的是 npm 上同名(dsh-user-mirror)的版本,第 2 步会替换配置依赖。
上游的新包名称不同,不会自动移除——如果第 1 步
показал @dsh-plugins/dsh-user-mirror, удалите его перед установкой (см. предупреждение
в «Требованиях»). Команда add сама дописывает пакет в dsh.profile.bundles профиля —
руками править package.json не нужно.

Перезапуск: если DSH запущен из терминала — Ctrl+C и снова dsh web; если через панель
(трей) — «Остановить», затем «Запустить». Плагин читается на старте, поэтому без перезапуска
изменений не будет. (В профиле стоит patchReload: live — это про перезагрузку патчей-конфигов
на лету; код плагина она не перечитывает, так что перезапуск нужен полный.)

Если git недоступен, а нужен только перевод

Есть запасной способ: наложить файлы перевода поверх уже установленного npm-пакета
dsh-user-mirror (наше имя — то же, что у старого пакета апстрима). Он не трогает
package.json, но и не защищает от обновления — dsh plugin update затрёт накат, и скрипт
придётся запустить заново. Для нового пакета апстрима (@dsh-plugins/dsh-user-mirror)
этот способ не подходит: у него другое имя и другой каталог — ставьте форк из git.

Нужен каталог с файлами проекта — подойдёт и архив без git (на GitHub: «Code» →
«Download ZIP», распаковать). Если git есть, то клоном:

git clone https://github.com/Danerus23/dsh-user-mirror-ru.git   # или распакованный ZIP
cd dsh-user-mirror-ru
pwsh -File .\tools\apply-overlay.ps1          # накат (с бэкапом и поведенческими тестами)
pwsh -File .\tools\apply-overlay.ps1 -Revert  # вернуть как было

Скрипт откажется работать, если установлен апстрим другой версии (перевод сверяется по
коду), — тогда нужен -Force или перенос перевода на новую версию.

Установка (агенту)

Если установку выполняет ИИ-агент, ему достаточно одной команды и одного условия:

dsh plugin --profile web add github:Danerus23/dsh-user-mirror-ru

Условия и грабли — в AGENTS.md: там же проверка живого сервера, откат и
порядок обновления при выходе новой версии апстрима.

Как убедиться, что всё встало

1. Откройте в интерфейсе вкладку «Память» — она появляется после «Чат / Траектория».
Подписи должны быть русскими: «Память», «предпочтения, выученные из цепочки think ·
забываются · новое переписывает старое», «Когда оно записывает? Что именно? Почему
забывает?».
2. Если подписи китайские — почти всегда это старый бандл из кеша браузера:
обновите страницу с Ctrl+Shift+R. Если не помогло — профиль не перезапускался.
3. Из клона репозитория можно проверить и командой (маршруты плагина и язык подписей):

pwsh -File .\tools\check-server.ps1                       # по умолчанию http://127.0.0.1:3080
pwsh -File .\tools\check-server.ps1 -Url http://127.0.0.1:3097

Скрипт печатает только количество записей и подписи категорий — текстов памяти он не
выводит. Если сервер не запущен или порт другой, он скажет прямо: «сервер не отвечает по
адресу …». Проверка боевого сервера (3080) — это чтение ваших данных в консоль, так что
запускайте её осознанно.

Обновление

dsh plugin --profile web update dsh-user-mirror

Обновляется то, что стоит: с git-адресом это форк, и перевод никуда не денется.

Если репозиторий форка обновился, а pnpm этого не заметил:

dsh plugin --profile web add github:Danerus23/dsh-user-mirror-ru

Ветку и коммит можно зафиксировать: github:Danerus23/dsh-user-mirror-ru#v0.6.1-ru.1.

Удаление и возврат к апстриму

вернуться к апстриму
dsh plugin --profile web remove dsh-user-mirror
dsh plugin --profile web add @dsh-plugins/dsh-user-mirror   # текущее имя апстрима

или убрать плагин совсем
dsh plugin --profile web remove dsh-user-mirror

Старое имя апстрима — dsh-user-mirror — заморожено на 0.6.1; add dsh-user-mirror вернёт
именно ту версию, без будущих обновлений. Возвращайтесь на новое имя.

remove убирает и зависимость из package.json, и имя из dsh.profile.bundles (проверено).
Но уже запущенный сервер продолжит отвечать на маршруты плагина — модуль загружен в память
процесса; вкладка исчезнет только после перезапуска профиля. Это норма, а не поломка.

Память при этом не удаляется: записи лежат в хранилище DSH (домен dsh_mirror), а не
внутри пакета. Вкладка «Память» исчезнет вместе с плагином.

Правки к апстриму

Перевод сам по себе — не единственная причина для форка. Обе правки нашлись на живом
сервере и обе меняют поведение.

Правка 1: запись и удаление памяти теперь дождутся завершения

table.put / table.delete в @deepseek-ai/dsh-storage-domain асинхронные: они
возвращают промис и выполняют работу в очереди. Апстрим вызывает их без await и сразу
читает table.size — то есть состояние «до».

table.put(id, { ... })                             // добавление
return { outcome: 'created', total: table.size }   // size ещё старый

Отсюда три следствия:

1. Врали оба счётчика. mirror_remember печатал «всего записей: 0» сразу после первой
записи, mirror_forget — «осталось 1» после удаления единственной.
2. Вытеснение по пределу ёмкости не срабатывало на только что добавленной записи —
table.size в проверке if (table.size > config.maxPreferences) её ещё не видел.
3. Запись на диск не дожидалась ответа: закрыв процесс сразу после операции, можно было
не получить ни добавления, ни удаления.

Исправлено везде: remember() стала async и ждёт put (обе ветки — перезапись по теме и
добавление) и delete (вытеснение), инструмент mirror_remember ждёт remember(),
mirror_forget и HTTP-обработчик /dsh-mirror/forget/ ждут table.delete().

Правка 2: сопоставитель тем понимает кириллицу

Апстрим искал сущности по /[a-z0-9]+/g — кириллица туда не попадала вообще, а второй канал
сравнивает иероглифические биграммы. То есть для русских записей не работал ни один канал,
кроме дословного совпадения: «русские ответы» и «отвечать по-русски» считались разными темами
и копились дублями до предела ёмкости.

| Что добавлено | Как |
|---|---|
| Кириллица в сущности | /[a-z0-9\u0430-\u044f\u0451]+/g |
| Русские стоп-слова | 186 служебных слов и частых глаголов: без них канал слов склеивал бы разные записи по общим «для», «что», «использовать» |
| Срезание «пользователь» | normalize() и оба extract'а — аналог апстримного /^\u7528\u6237/; модель часто начинает запись со слова «пользователь» |
| Канал русских основ | extractStems(): первые 5 символов слова — «русски» / «русские» / «русском», «картинки» / «картинок» |

Первая версия канала срезала окончания по списку — и на живой проверке выяснилось, что это
даёт разные основы для одного корня: «русски» → русс (срезалось «ки»), «русские» →
русск (срезалось «ие»), из-за чего тема не опознавалась. Поэтому основа — просто первые
5 символов слова: результат не зависит от того, какое окончание попалось первым в списке.

Известная граница: жёсткая морфология не сводится — «отвечай» и «ответы» дают разные
пятисимвольные основы, поэтому пара, где это единственное общее слово, не склеится. Пять
символов, а не четыре: на четырёх «предпочитать» и «предлагать» дали бы ложную склейку, а
ложная склейка тут дороже дубля — она стирает чужую запись. Полноценное решение — стеммер или
embedding, как и пишет апстрим про свои границы.

Что переведено

| Где | Что |
|---|---|
| Вкладка «Память» | заголовок, подпись, кнопка «Обновить», пустое состояние, «Загрузка…», «Не удалось загрузить» |
| Каждая запись | «почему записано», «сила», «подтверждений», «только что / N минут назад / N часов назад / N дней назад», тултип кнопки удаления и её двухшаговое подтверждение |
| Раскрывающаяся справка | «Когда записывает? Что именно? Почему забывает?» — все пункты |
| Категории | principle / redline / workflow / taste — русские подписи в легенде и в ответе /dsh-mirror/preferences |
| Инструменты | описания mirror_remember и mirror_forget, тексты их ответов и ошибок |
| Системный промпт | секция, которую видит модель: (mirror: …) и блок с накопленной памятью |
| Прочее | статусы шарика ai-orb (включая aria-подписи), сообщения лога ctx.logger, комментарии |

Что сознательно не переведено

имена инструментов и параметров (mirror_remember(text, kind, reason)) — это API;
пути и URL (/dsh-mirror/preferences, /dsh-mirror/forget, /dsh-mirror/vendor/ai-orb);
* имя slot conversation.view, CSS-классы, идентификаторы, package.json;
* данные сопоставителя тем: срезание ведущего «用户», китайские служебные слова,
выделение иероглифических сегментов [^\u4e00-\u9fa5]. Это алфавит сравнения, а не проза:
перевод сломал бы дедупликацию молча. Русские правила добавлены рядом, китайские остались.

Настройки

Параметры переопределяются в патче профиля — $DSH_HOME\profiles\web\cordis.patch.yml
(по умолчанию %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml) — так же, как это описано
в апстриме:

- insert:
- id: dsh-mirroryaml
name: dsh-user-mirror
config:
maxPreferences: 20   # предел ёмкости памяти, записей
halfLifeDays: 30     # период полураспада, дней: сколько не подтверждается — слабеет
maxTokens: 500       # бюджет вставки в системный промпт, токенов
sectionOrder: 160    # место секции в системном промпте (меньше — раньше)

隐私

* 记忆仅存储在本地($DSH_HOME\storages\,默认 ~/.dsh/storages/),
不会发送到任何地方;
* 插件不访问网络;
* 如何彻底清除记忆: 记录存放在 dsh_mirror 域中,以文件形式存在于
$DSH_HOME\storages\dsh_mirror.json(文件名即域名)。停止服务器,
删除该文件,重新启动服务器——“记忆”标签页将为空。单条记录
更方便的不是通过文件删除,而是使用 mirror_forget 工具或该标签页中的 ✕ 按钮。

仓库构成

仓库根目录就是包本身:从 git 安装的内容就放在根目录。

| 路径 | 说明 |
|---|---|
| index.js | host 半部分的工作文件:翻译 + 修改;由脚本从 index.translation.js 构建 |
| client.js | 浏览器半部分,纯翻译 |
| cordis.patch.yml | bundle 配置补丁:将插件插入 web 配置 |
| index.translation.js | host 半部分的纯翻译——用于与上游比对的基准 |
| upstream/0.6.1/ | 来自 npm 的未改动上游文件:用于比对以及将翻译迁移到新版本的基准 |
| NOTICE.md | 来源与作者身份:谁是原始作者、谁做了 fork、upstream/ 基于何种条件 |
| tools/build-index.mjs | 以锚点列表形式表示的修改:构建 index.js(--check——仅检查) |
| tools/verify-structure.mjs | 按代码骨架将翻译与上游比对,并将工作文件与翻译比对 |
| tools/test-matcher.mjs | 主题匹配器的行为测试(22 项检查) |
| tools/apply-overlay.ps1 | 将翻译覆盖到 npm 包上,带备份和自动回滚 |
| tools/check-server.ps1 | 检查运行中的服务器:路由和分类的俄语标签 |
| tools/check-upstream.ps1 | 检查上游:是否发布了新版本(npm 中的两个名称加上上游仓库中的版本)以及其中有什么变化 |
| tools/link-deps.ps1 | 指向配置依赖的 junction——以便从克隆运行测试 |

如何验证
powershell
node tools/verify-structure.mjs     # 翻译 == 上游按骨架;index.js == 翻译 + 修改
node tools/test-matcher.mjs         # 22 项匹配器行为检查
pwsh -File tools/check-server.ps1   # 运行中的服务器:路由和分类的俄语标签

tools/link-deps.ps1 仅用于从克隆运行测试:它创建指向配置依赖的 junction,
以便 Node 找到 @deepseek-ai/、zod 和 ai-orb。重要的是,这些是完全相同的
副本,与生产环境中的一样:两份 dsh-tools 副本会彻底破坏 DSH。

上游状态

为了避免在名称和版本上混淆:

| 项 | 值 |
|---|---|
| 我们的基线 | dsh-user-mirror 0.6.1 —— 旧名称下的最后一个版本(该名称未加 scope),它就在 upstream/0.6.1/ 中 |
| 上游迁移到了哪里 | 包 @dsh-plugins/dsh-user-mirror;以新名称在 npm 上自 2026 年 9 月 17 日起发布的是 0.6.3 |
| 0.6.3 有什么新内容 | 实质上没有:index.js 和 cordis.patch.yml 逐字节相同,client.js 中有一行不同,且没有一个新增汉字 —— 没有什么可翻译的 |
| 上游正在准备什么 | 其仓库中的 0.7.0:“记忆”标签页从条目列表改造成了“画像”(一行摘要,强度 = 粗细,判断之下是证据,红线单独成块且不会被遗忘)。尚未发布到 npm |
| 我们的包名 | 有意保留为 dsh-user-mirror。对于安装了上游旧包的用户,这个 fork 是 drop-in 替代:配置文件的 bundles 列表和安装命令都不变。对于安装了新包(@dsh-plugins/dsh-user-mirror)的用户 —— 必须先将其删除,否则会有两份插件副本 |
| 迁移决定 | 等待 0.7.0 发布到 npm,然后一次性完成迁移(顺序见下文);不跟进 0.6.3,因为它没有实质内容 |

检查是否出现了新内容 —— 一条命令:
powershell
pwsh -File .\tools\check-upstream.ps1

它会查看 npm 上的两个名称、上游仓库中的版本,并打印哪些文件
发生了变化,以及 client.js 的新增行中有多少个汉字 —— 也就是实际的翻译
工作量。返回码 1 表示“上游更新”。

上游更新

当 npm 上发布新版本时,翻译需要手动迁移:

0. pwsh -File .\tools\check-upstream.ps1 —— 具体改了什么、需要翻译多少;
1. 将上游的新文件放入 upstream//,并与旧文件比较 ——
可以看出改了什么;
2. 将改动迁移到 index.translation.js(如果涉及,也迁移到 client.js);
3. 检查 tools/build-index.mjs 中的锚点是否仍然存在(如果不存在,构建会报告);
4. 提升 package.json 中的 version(-ru.),补充
CHANGELOG.md 以及 upstream/ 中的上游历史;
5. 运行 tools/verify-structure.mjs 和 tools/test-matcher.mjs,然后将 fork
安装到单独的配置文件并实际验证。

已验证内容

在干净的 DSH_HOME(单独的配置文件,端口 3097)上从此仓库安装:
pnpm 安装 git 依赖,配置文件启动,配置文件中的文件与仓库逐字节一致,
分类标题以俄语返回(tools/check-server.ps1 已在 PowerShell 7.6 和
Windows PowerShell 5.1 下运行过);
* git 安装能经受住向配置文件中安装无关包以及 dsh plugin update ——
不同于将文件覆盖到 npm 包之上,后者会被这两种操作抹掉;
* tools/verify-structure.mjs 和 tools/test-matcher.mjs —— 全绿,而且是从 GitHub
的全新克隆中,而不仅仅是在开发者的工作目录中:tools/link-deps.ps1 会安装
依赖配置文件的 junction,之后 tools/test-matcher.mjs 完整通过;
tools/check-upstream.ps1 在 2026 年 9 月 19 日的状态下显示:在新上游名称下
发布了 0.6.3,没有新的待翻译文本,而 0.7.0 尚未发布到 npm。

致谢与许可证

该插件及其全部逻辑均为 webkubor 的成果
(dsh-mirror;在 npm 上为 dsh-user-mirror 0.6.1,旧
名称,以及 @dsh-plugins/dsh-user-mirror,当前名称)。本仓库是
衍生作品:翻译、两处修改以及校验工具。

许可证为 MIT,与上游一致:保留 webkubor 的版权,并在其基础上添加了 fork 的
版权。参见 LICENSE;谁是谁以及 upstream/ 以何种条件存放——
见 NOTICE.md。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群