Skip to content

Releases: YOGEMOW/DSH-Cyrene

v0.4.0 —— 表达风格档位 + 角色扮演场景

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:40

上一次发版是 v0.3.1。这个版本把两件「只在对话里生效」的东西做完了,
另外还包含 v0.3.2 的一个静默失败修复(新版 DSH 上「发消息没反应」),
用 v3 会话格式旧版 DSH 的不受影响,但仍建议一并升级。

这一版新增什么

  • 表达风格档位:五档 + custom,/style 切换,按会话生效;
    风格提示词走请求尾部注入(对齐上游的注入时序),温度走 agent/request。
  • 角色扮演场景:默认普通对话;消息里出现 (…) 场景描述时切到「叙述+对话」,
    括号里写「你…」则是给你的动作指令,会照做并在括号里写出动作。
  • custom 档可配置:显示名(customLabel)、温度(customTemperature)、
    强度档(customTier,硬开关,由状态决定而不是让模型猜)。

升级须知

  • 对话模式预设变了(多挂 cyrene-style 与 cyrene-scene),需要重装预设:
    node scripts/install.mjs --force(已存在且内容不同时默认拒绝覆盖)。
  • 从 0.3.0 升级,请一并看 0.3.1(行尾修复:Windows 上世界书整条失效)与
    0.3.2(会话来源修复:新版 DSH 上发消息没反应)两条。
  • 工作模式不挂风格与场景(上游 work/code 本来就不吃风格),有测试守着。

新增

表达风格档位:style.js + /style 命令

  • 五档 + custom,每档 = 一段风格提示词 + 一个温度,对齐上游 Cyrene-Agent 的
    prompts/styles/ 与 BUILT_IN_STYLE_PRESETS(lively 0.90 / healing 0.55 /
    focused 0.40 / sweet 0.82;default 不设采样)。

  • 风格提示词走 systemPrompt.context()(请求尾部、每轮重算、order: 130,
    排在常驻世界书 140 之前);注入外壳与上游 buildStylePromptBlock() 逐字一致。

  • 温度走 agent/request 瀑布(DSH 的预设行没有 temperature 字段)。
    default 档不写温度,跟随模型默认。

  • 按会话生效:状态在 <DSH_HOME>/cyrene-style.json(最多留 50 条会话记录),
    /style 查看与切换(/style lively、/style default、无参列出全部)。

  • custom 档读 <DSH_HOME>/cyrene-style-custom.md;没写文件时 /style custom
    会报错提示而不是静默不注入。想给它温度就在 JSON 里加 customTemperature(0–2)。

  • custom 档支持两个可选字段(只影响显示/授权,不参与玩法):

    • customLabel:改这一档的显示名(如叫成自己的风格名);
    • customTier:1(默认)/ 2 —— 硬开关。style.js 会按它在注入块里写一行
      授权标记(「第二档已授权」/「未授权」),模型看到的是确定事实,而不是去猜用户
      有没有点头。档位本身的含义由使用者自己的风格文件定义。

角色扮演场景开关(scene.js)

  • 纯文本对话模式默认普通聊天;用户这一轮的消息里出现括号、且括号里写了场景/动作
    ((雨夜,屋里只有一盏灯)),本轮切到「叙述+对话」的场景模式;没有括号了自动切回。
  • 判断走 agent/pre-step(context() 在用户消息落库前执行,看不到本轮输入);
    且是状态机,只在状态切换时追加一条标记,不会每轮往历史里堆指令。
  • 中文括号 ≥2 字、半角括号 ≥6 字符才算,避开 print(x)、(1) 的误触发。
  • 括号里用「你」描述她的动作((你亲了我一下))时,按动作指令处理:
    照做,并在回复里用括号写出动作((亲了你一下));与场景描述可同时出现。
    判据保守:以「你」开头、非问句、且有动作痕迹才算。
  • 只挂对话模式;工作模式不挂(与风格同理)。

安全约定

  • 风格在工作模式里被禁用:预设层面工作模式不挂该插件;style.js 的
    DISABLED_PRESETS 还会在运行时拒绝 cyrene-work(读会话的
    agent-preset/selected 事件判断);新会话页的风格按钮在该模式下不显示。
    原因:工作模式带 shell / 文件 / 网络权限,写作风格不该影响"能不能动手、动哪只手"。

已知限制(能力边界,非缺陷)

  • DSH 的 LlmCallConfig 只暴露 temperature / maxTokens / stop:上游的 top_p、
    OpenAI frequency_penalty、Qwen repetition_penalty 无处可放,未移植。
  • deepseek-flash 在思考模式下温度可能不生效(上游同类规则 requiresReasoningOff)。
    本项目不替你改路由,只在 /style 的回复里提示。

升级须知

  • 对话模式预设多挂了一行 dsh-cyrene/style,需要重装预设才生效:
    node scripts/install.mjs --force(已存在且内容不同时默认拒绝覆盖)。
  • 从 0.3.0 升级请一并看 0.3.1(行尾修复)与 0.3.2(会话来源修复)两条。

附:同时包含的 v0.3.2 修复

修复

新版 DSH 上「发消息没反应」(会话格式 v4 拒收消息来源)

  • 现象:装好之后能选到模式,但发消息没有任何反应;没有任何报错指向本插件。
    旧版本 DSH(如 0.1.5-rc.2)上一切正常 —— 所以自己测是测不出来的。
  • 原因:世界书的命中块是一条手写的消息描述符,source.kind 写的是 v3 的裸
    'plugin'。会话格式 v4 要求「生产者自有」的 kind(plugin:<插件 id>),于是整条
    消息被校验拒掉:
    SessionFormatError: format v4 message requires a producer-owned source kind。
  • 修法:改为 kind: 'plugin:dsh-cyrene/worldbook' —— 这是 harness 自己的迁移器
    (producerKind())给第三方插件生成的形态,新旧两个版本都接受。
  • 已经装了的怎么办:更新代码后完全退出 DSH 再启动。JS 模块替换必须重启进程
    才生效,热重载读到的仍是旧代码。
  • ⚠️ 别换成 runtime-context:那是 dsh-agent-loop 自己持有的 kind,用它会让我们
    注入的内容被当成它的运行时快照,进而被替换/清除。详见
    docs/pitfalls.md 第七节。

测试

  • 单元测试 73 → 74 条。新增一条守 source.kind:必须是 plugin:<id>、不能是裸
    plugin、也不能是 runtime-context,且注入块不能被当成真实用户语料。

v0.3.1 · 两条静默失效 + Windows 真机验证

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

这个版本已发过 Release,正文可直接沿用;这里补一份更细的清单。

修复

  • 世界书注入的消息补 id —— 缺它会让会话历史永久打不开
    (session event at seq N lacks an identified message)(c46dabc)
  • CRLF 检出下整份世界书静默失效:Windows 上 core.autocrlf=true 检出为 CRLF,
    解析层只按 切行 → 每个字段尾部带 \r、触发词永远匹配不上。
    解析层吞掉 CRLF + .gitattributes 加 * text=auto eol=lf(c225499、23b9f31)
  • cyrene-work 在起不来 workflowEngine 的部署上整条预设判「加载失败」:
    默认关闭依赖它的三行(代价是少三个工具 ≪ 整条预设不可用)(ddbb66d)
  • 声明导出漏了 - insert: 那层(按字面用会静默失效)(61039b4)
  • 入口判断 import.meta.url === file://${argv[1]} 在 Windows 上永不成立 → CLI 静默零输出(380e250)
  • 预设测试在无 DSH 环境下崩溃,导致 CI 两次 job 全红(bdf726c)
  • LICENSE 恢复为逐字标准 MIT,让 GitHub 能识别(0804b5d)

新增

  • 支持 DSH 0.2.0+ 的声明式预设注册(旧版目录方式在那一代静默失效)(53b348d)
  • CI 增加真实 windows-latest job;维护边界写进 README / CONTRIBUTING.md(9f6a769)
  • docs/windows.md:六条实测坑 + 为什么没有 install.ps1(131b1ec、23b9f31)
  • 工作模式压制追问,避免靠反问收尾(2987438)

移除

  • 删除 install.ps1 / install.bat:作者没有电脑、无法实测,连试三轮仍未在真机跑通
    (b3cc7f0、fa05aa1、4706529)

v0.3.0 · 改名 + 双模式

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

变更

  • 改名:包名 dsh-cyrene,仓库 DSH-Cyrene(9e9dc30、42f7ed1)
  • 新增「昔涟工作模式」预设:昔涟人设 + 标准模式全套工具(9e9dc30)
  • 安装脚本支持多预设:自动发现 preset/ 下的每个子目录(9e9dc30)

修复

  • 版本号补齐三处,并修掉「工作模式看不到」的过时断言(80cf342)
  • 仓库 URL 指向实际仓库名(42f7ed1)

文档

  • 记下三个只能踩出来的 DSH 行为,新增 AGENTS.md(cfaf941)
  • 修正只对「单预设」成立的说法(7d08702)
  • 写明 install.ps1 / install.bat 尚未在真实 Windows 上实跑过(690369c)

v0.2.3 · 外部评价 P0–P3

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

逐条核实外部评价后处理,另外修了他没提到的两处。

修复

  • P0 人设正文的硬规则冲突:正文同时写着「这些词语并非绝对禁止」与「不可以使用……」,
    以及「对方要求解释时必须说明」与「不需要解释为什么」。根因是上游靠请求尾部注入的时序
    压过正文,本仓库合并成静态正文后时序消失。
    修法是把覆盖关系显式写回正文(定向覆盖 + 一处明确例外),而不是删改上游文本(bb3b9e0)
  • P1 记忆通道没有净化:memory.js 原样塞进系统提示词,而记忆的写入方是模型、触发源可能是
    联网结果。现在写入与注入两处都清洗,整份记忆包进显式数据分隔块(bb3b9e0)
  • P2 CI 与测试命令:测试头部那条 node --test tests/ 会挂;已改正并加警告。
    新增 package.json 的 test 脚本、harness:check 扩到全部运行时代码、
    新增 .github/workflows/test.yml(Node 22/24,无需 npm install)
  • P2 人设残留痕:删除上游自带的空台词行与一段逐字重复的「知识性回复」,
    保留 # 标题作来源锚点,并在 THIRD_PARTY_NOTICES 如实披露
  • P3 六个小口子:forget 只删 - 开头的条目行(短关键词不再误删标题);
    scanDepth 1–5 真的生效(原先被静默夹到 3);lastHit 改有界 LRU(上限 64 会话);
    删死代码 assembleSplit();index.js 版本号改为读 package.json

测试

  • 新增 tests/memory.test.mjs(14 条),用临时 DSH_HOME,不碰真实记忆文件
  • 全量 45 → 59 条通过

v0.2.2 · 世界书随包发运

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

新增

  • 61 条世界书随包发运(worldbook/data/),按触发词自动注入;装了就有,不需要自备(78cd969)
  • 注入通道按「需不需要本轮消息」拆成两条:
    • 常驻块(内容恒定)→ systemPrompt.context(),只落库一次
    • 命中块(需要本轮消息)→ agent/pre-step

修复

  • 绕开一个静默失效:assemble() 跑在用户消息落库之前,装配期读会话永远拿不到本轮输入
    (新会话第一轮更是一条都没有);空文本 section 会被过滤掉,快照里看不出异常

说明

  • 条目格式与字段语义来自 Cyrene-Agent 的 rag/worldbook.ts,本项目的匹配器是其简化实现
    (去掉 DMAE 状态机,故「内在价值」不生效、「优先级」成为主排序键)

v0.2.1 · 修「语气变淡」

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

修复

  • 补回原应用每轮注入的「语气规则」(句式禁止 / 语气参考 / 回复边界)。
    之前因为 includeRuntimeContext: false 把动态块整体关掉,这段规则一并丢失,
    模型退回默认助手腔:语气变淡、少了活人气(1cc8c12)

文档

  • THIRD_PARTY_NOTICES 注明该段来自 tone-injector.ts 的 DEFAULT_RULES,
    不是 prompts/ 下的文件;上游是随请求尾部注入,本仓库并入预设正文

v0.2.0 · 首个可用版本

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:39

「纯文本对话模式」跑通了:整份替换系统提示词做纯角色对话,附带长期记忆与可配置称呼。

新增

  • 预设骨架插件:DSH 的「纯文本对话模式」agent 预设 v0.1.0(df046e0)
  • 随包提供完整人设,并补齐四层授权声明(上游 MIT、角色 IP、非商用、许可证副本)(ae13f66)
  • 长期记忆 + 可配置称呼:remember / forget 两个工具、{{user_nickname}} 变量;
    同时修复了"预设变量未注册导致装配期报错"(952d0a3)

修复

  • files 白名单补 LICENSES/,避免许可证副本漏发(6090efa)

文档

  • 新增「推荐搭配」;主题配方升级为可复刻的完整配置指南(0a67b26、d783677)
  • 记录原作者授权(2026-10-03)与授权凭据,并说明其排除 Live2D 模型(1ea1a90、504faef)
  • 修正过时的占位说明,标注 soul.md 同步风险(07ce367)