Skip to content

persona 行使用已废弃的 text 字段 → 在 dsh-persona 0.1.5+ 上 learning-mode preset 无法挂载(invalid config: prefix missing required value) #2

Description

@Ankali-Aylina

现象

在 DSH 0.1.5-rc.1(profile web)上选择「学习模式」(dsh-learning-mode@0.1.1),preset 挂载失败、
模式不可用:

failed to apply loader entry persona(@deepseek-ai/dsh-persona):
invalid config:
  - prefix missing required value (at prefix)
(/home/ankali/.dsh/.agent-presets/learning-mode/agent.cordis.yml)

环境

  • dsh 0.1.5-rc.1,profile web,Node v22.23.2,Linux
  • dsh-learning-mode@0.1.1
  • @deepseek-ai/dsh-persona@0.1.5-rc.2(dsh 的依赖声明是 ^0.1.5-rc.1)

根因

@deepseek-ai/dsh-persona 的配置字段已由 text 改名为 prefix(并新增 suffix):

dsh-persona 版本 Config schema
0.1.2-rc.1(及更早) text(required)、complete、includeRuntimeContext
0.1.5-rc.1 起(含 0.1.5-rc.2 / rc.3) prefix(required)、suffix(default '')、complete、includeRuntimeContext

本包捆绑的 preset/learning-mode/agent.cordis.yml 第 18 行仍是旧字段:

- id: persona
  name: '@deepseek-ai/dsh-persona'
  config:
    text: |-          # ← 当前 persona 只认 prefix

同文件第 6 行的说明注释也还写着 persona.text。harness 在 apply loader entry 时做 schema 校验
(cordis resolveConfig() → Config['~standard'].validate()),prefix 缺失即抛 ValidationError,
整个 preset 挂载失败。对照:dsh 自带的 standard / minimal / cordis / ptc 用的都是 prefix。

复现

  1. dsh plugin --profile web add dsh-learning-mode,重启 host
  2. 选择「学习模式」(或新建一个使用该 preset 的会话)
  3. 挂载失败 → 上面那段报错

建议修复

  1. preset/learning-mode/agent.cordis.yml 第 18 行:text: |- → prefix: |-(正文一字不用动);
  2. 同文件第 6 行注释里的 persona.text 一并更正为 persona.prefix。

⚠️ 升级路径需要注意

lib/index.js 的 installer 是「目标目录已存在就跳过」(idempotent,注释明确写了 an existing target
directory is left untouched
)。这意味着即使发布了修复版,已经装过的用户也不会拿到修复 ——
$DSH_HOME/.agent-presets/learning-mode/ 会一直保留旧的 text:,故障持续。

建议二选一并写进 README:

  • 检测已存在目录的内容/版本戳并在旧版本时覆盖(可参考 @ziduup/dsh-programming-mode 的版本戳策略),或
  • 明确提示用户手动处理:删除 ~/.dsh/.agent-presets/learning-mode/ 后重启 host,让它重新植入。

在修复发布前,现有用户可以自己改一行:

sed -i '0,/^    text: |-/s//    prefix: |-/' ~/.dsh/.agent-presets/learning-mode/agent.cordis.yml

(text: 在本文件里只出现一次,改完重启 host 即可;本次即用此法修复并验证。)

验证方式(离线,不需要起 host)

按 harness 的真实路径离线校验组合文件:

  1. 用 loader 自己的 YAML 方言(entryListSchema,即带 !!js 的那个)解析 .cordis.yml;
  2. 按 loader 的 interpolate() 递归求值 !!js 节点(with (scope) { return eval(expr) },scope 提供 baseUrl);
  3. 对每个会启动的 row(Boolean(disabled) === false,组递归)解析模块并调用 Config['~standard'].validate(config)。

结果:修复前该文件报 row "persona" (@deepseek-ai/dsh-persona): $.prefix missing required value (at prefix)
(且仅此一条 apply 级错误,与线上报错一致);修复后与内置 standard、cordis(对照组)一样 OK。
人格正文 SHA-256 比对:改键前后一致(3474 字符,同一 hash),确认只换了键名。


🤖 本 issue 由 DeepSeek Harness 的 coding agent(模型 deepseek-flash) 定位根因、复现并起草,
经用户授权以其 GitHub 账号提交。上文的 schema 对照、installer 幂等性分析、离线校验脚本与
SHA-256 正文比对均由该 agent 实际执行。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions