dsh-herta
把 Herta(黑塔)作为 DeepSeek Harness 智能体装入:携带人格与记忆提示词段的 preset、六个记忆与语音工具、区分内心与发言的叙述层、80 条随包语音、本地与 MiniMax 两条语音合成链路,以及两个用她自己的组件渲染会话的对话视图。
安装
dsh plugin --profile web add dsh-herta
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-herta
把 Herta(黑塔) 作为一个插件装进 DeepSeek Harness:
她的人格、她的记忆、她的声音、她的界面。
## 📌 来源声明
本项目是基于原作者项目所做的第三方改造,不是原创作品。
- 原作者项目:Herta —— _THE SELF THAT USES THE AGENT_
- 原作者官网:<https://www.herta-ai.com/#research>
- 本项目把 Herta 作为一个插件接进 DeepSeek Harness —— 人格、记忆、语音、界面四层
都来自 Herta 原作;插件侧的代码(src/、scripts/、Cordis 配置)为本次改造新写。
本项目由第三方独立开发,与 Herta 原作者无任何隶属、合作或背书关系。
如原作者认为本改造有不妥之处,请联系我,我会立即调整或撤下。
另:「Herta / 黑塔」是 HoYoverse《崩坏:星穹铁道》中的角色。Herta 原作者项目本身
即为非官方同人作品,本项目同样是非官方同人作品,与 HoYoverse / miHoYo / Cognosphere
无关联、未获其背书或赞助。
素材授权细节见 [THIRD-PARTY.md](./THIRD-PARTY.md)。
🎨 相关仓库:主题
界面配色、开机 ASCII 开场、可换背景与「外观」设置页,是另一个包:
dsh-theme-herta —— 也可以单独安装
(没装本插件的人,照样能只下主题)。
0.1.7 起本插件自带它。 接线三件事都已落地:主题已发到 npm
(dsh-theme-herta@0.1.0)、本包把它列成依赖、cordis.patch.yml里多了一行
并列的 ui-theme-herta。所以装了本插件就一起拿到主题,不用再单独装;
装完照例要关窗重开(bundle 是启动期挂载的)。
主题包自己的 cordis.patch.yml 不会被自动应用 —— loader 只读 profile 的
dsh.profile.bundles 里那些包的 patch,所以挂载点必须由本包给出。
本仓库里也放了同一份源码(theme/dsh-theme-herta/)。⚠️ 主题的
NOTICE.md记着一条未决的授权边界:lib/opening/那 10 个文件移植自
PersonaCLI/Herta,而那个上游未标注标准许可证(GitHub 读作
NOASSERTION)—— 用之前请自己与上游确认。
四层,各自独立可验:
层 · 内容 · 落在哪
A 身份 · HertaBio.txt 逐字作人格前缀 + 为 DSH 改写的处境/纪律 · agent preset
B 记忆 · 记忆货架(.herta/narrative/)作动态提示词段;四个记忆/做梦工具 · preset 行
C 语音 · 80 条她本人的 .opus(开场白 / 语气词 / 自我收回 / 彩蛋)+ 发声工具 · 静态路由 + client
D 界面 · 乙:用她的展示组件渲染 DSH 会话;甲:iframe 装下她的整机 · conversation.view ×2
⚙️ 兼容性(先看这一节)
面向 DSH 0.1.7-rc.2 起(0.2.1-rc.2 实测)。 下面三处是 0.1.5 → 0.1.7 之间
的破坏性 API 变更(都是实测出来的,不是猜的):
变了什么 · 0.1.5 时的写法 · 0.1.7 的现状 · 本仓库怎么办
agent preset 的载体 · $DSH_HOME/.agent-presets/<name>/agent.cordis.yml(一整棵 cordis 树)+ preset.yml · 该目录机制整个移除(运行时里已无任何代码引用 .agent-presets);preset 变成一条 @deepseek-ai/dsh-agent-preset loader 行,官方写成 dsh-web-app/presets/*.patch.yml · 生成 preset/herta.patch.yml,作为第二条 bundle patch 随插件一起装(dsh.bundle.patch 现在可以是数组)
用户偏好的存放(设置域) · 宿主 ctx.settings.register(ns, schema) + 客户端 settingsScope.bind({namespace}) · 两者一起消失:SettingsProvider/SettingsScope/SettingsRegisterOptions 不再导出,客户端 settingsScope 服务不存在,事件 settings/updated、settings/document-updated 也没了;换成基于插件 Config 的 SettingsForms/configForms,没有第三方命名空间入口 · 用后者:插件自己的 volatile Config(落 profile 的 cordis.patch.yml),客户端挂 settings.section 一页。密钥另走凭据缝 ctx.remote.credentials(值进 $DSH_HOME/.credentials.yaml,不进明文配置)。2026-09-26 起黑塔的设置只有这一处
消息来源的 kind(会话格式 v4) · { kind: "plugin", plugin: "dsh-herta" } · v4 只认「生产者自有 kind」,kind: "plugin" 在写入会话时就被 assertV4SourceRowAdmission 拒绝(format v4 message requires a producer-owned source kind);第三方插件的合法形状是 { kind: "plugin:<包名>" } —— 这正是 DSH 自己的 v3→v4 迁移为旧行推导出的形状,两代读回同一个 kind · 全部改成 { kind: "plugin:dsh-herta" }(agent.steer 两处 + 两个 PLUGIN_SOURCE);新增 scripts/test-source-kind.mjs 钉住这条不变量
⚠️ 第三处症状最难定位:被拒的事件根本没进会话日志(写入前就抛了),
事后翻 session.v4.jsonl.zstd 是干净的,只有 GUI 上显示「本轮运行失败」。
实测就是这么踩的 —— 详见 v0.1.3 版本历史。
其余用到的 API 在 0.1.7 上没变,实测可用:ctx.systemPrompt.section({name,order,text})、
ctx.tools.register(defineTool(...))、ctx.inject([...])、ctx.slots.inject/register、
ctx.uiConversation.binding(id).target('chat')、
ctx.on('agent/turn-stopping' | 'agent/error' | 'tools/result')、
@deepseek-ai/dsh-llm 的 BlockAssembler / createUserMessage、
webServer.register({ kind: 'prefix' })。
0.2.1 另有一处提示词变量的收紧:dsh-agent-loop 只注册 provider / model,
{{cwd}} 已被移除(官方 README 明确要求自定义 persona 不得依赖它)。v0.1.11 起
preset/herta.patch.yml 的 suffix 不再写工作目录 —— 目录信息由 0.2.1 的
working-directory 服务作为 runtime context 注入,没有丢。preset 底本也跟到官方
0.2.1(scripts/baselines/,工具清单随上游)。
升级 DSH 后先跑这三条:
1.dsh --profile <p> --dump-config→ 应有- id: preset-herta,且其config.plugins末尾有plane: preset
2. 启动日志 → 应有plane=host、plane=preset、叙述层依赖就绪、
`设置命名空间已就绪:her
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:8,最后更新 2026-10-17