Skip to content

storage unit 名含连字符导致 alias 存储初始化失败(附根因分析与修复建议) #6

Description

@lingyingaojue

现象

dsh web 启动时插件报错,工作区别名(alias)存储功能不可用:

[usage-stats] alias storage unavailable: StorageError: invalid unit name 'usage-stats-aliases'
    at loadAliases (…/dsh-usage-stats/lib/index.js:273:37)
    at new apply (…/dsh-usage-stats/lib/index.js:518:8)
  code: 'malformed-medium'

#2 是同一问题(#2 仅贴了错误,此处补充根因)。

根因

dsh 存储后端对 unit 名称有严格校验(@deepseek-ai/dsh-storage/lib/index.js:80):

const UNIT_NAME_RE = /^[a-z][a-z0-9_]*$/;   // 只允许小写字母/数字/下划线

不允许连字符 -。而插件在 lib/index.js:273 使用了:

const unit = await backend.kv.open({ name: 'usage-stats-aliases', ... })

usage-stats-aliases 含两个连字符,直接触发 validateDescriptor 抛错,loadAliases 的 try/catch 吞掉异常后 alias 持久化整体失效。

修复建议

把 unit 名改成符合 ^[a-z][a-z0-9_]*$ 的名称即可(一行改动),例如:

name: 'usage_stats_aliases'

注意:若用户已有旧数据,可考虑迁移逻辑(读取旧的 usage-stats-aliases 数据文件 → 写入新名 → 删除旧文件),或直接说明需要重建别名。

环境

验证

改名为 usage_stats_aliases 后重启,错误消失,alias 可正常读写。

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