Skip to content

dsh-default-tuner

Verified

dsh-default-tuner · v0.3.0 · MIT · Web UI

在 DSH Web 设置里新增「默认设置覆盖」分区,把官方插件写死在 bundle 里的默认值变成可配置项:会话标题长度、标题模型输入上限等。

Install

dsh plugin add dsh-default-tuner

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Readme

dsh-default-tuner

在 DSH Web 的设置里新增一个「默认设置覆盖」分区,把官方插件写死在 bundle 里的默认值变成可配置项。

首批开放的是会话标题相关参数——也就是"标题为什么只有半句话""为什么长提示词不生成标题"这类问题的直接开关:

分组 可覆盖项 官方默认
会话标题 · 模型命名 输入上限 / 输出上限 / 生成超时 / 目标词数 / 目标字数 4096 字节 / 4096 token / 60000 毫秒 / 5 词 / 10 字
会话标题 · 长度与兜底 标题最大字节 / 兜底词数 / 兜底字节 80 / 5 / 40 字节

每一项都显示「默认值 · 实际生效」,改完点「应用」即时生效;点「恢复默认」则把该项退回官方默认值。默认值由 DSH 自带的 bundle 决定、官方会随版本调整,所以以页面输入框的占位符为准(上表只是当前这一版的取值)。

要求

  • DSH >=0.2.1-alpha.2 <0.2.2(逐版本验证:0.2.1-alpha.2)。
  • 只在 Web 界面提供设置分区;宿主侧需要 profile 挂载 config-editor(官方 web 组合默认就有)。
  • 无运行时依赖。

安装

dsh plugin --profile web add dsh-default-tuner        # 安装
dsh plugin --profile web add [email protected]  # 指定版本(升级必须显式写版本号)
dsh plugin --profile web remove dsh-default-tuner     # 卸载

源码开发路线:在本插件目录执行 ./install.sh(内部同样是 dsh plugin add link:<目录>)。

安装/卸载改变 profile 组成,需要重启 dsh web 并刷新页面才生效。

使用

  1. 打开 设置 → 默认设置覆盖。
  2. 页面是一个个可折叠模块(默认收起,点标题栏展开):模块标题右侧的标签直接说明它的状态——默认值 / 已覆盖 N 项 / 无需重算 等;如果你装了会替换官方条目的实验性插件(例如会话标题的"全部消息"命名),标签会多一个 跟随 <条目名>,说明这一模块实际覆盖的是哪个条目。
  3. 展开要改的模块,在那一项里填入新值,点「应用」。行内实时显示"默认值 / 实际生效",状态用标签标出:已覆盖(你改过的)、随整块写入(补丁整块替换顺带写进去的同值字段)。
  4. 想回到官方默认,点该行的「恢复默认」。
  5. 会话标题重算 也是其中一个模块:列表只收标题仍是"兜底截断"的会话(模型命名失败、首条消息超过上限、或没有可用凭证时留下的半句话标题)。模型已成功命名、或你手动改过名字的会话不会进列表;某条重算成功后它会自动从列表消失。
    • 列表里每条只显示会话号与工作区名(完整路径放在悬停提示里)。
    • 如果某条会话的首条消息本身就超过「输入上限」(例如首条 4.6 KB、上限还停在默认 4 KB),它会归到"输入超限"那一段并标出字节数,按钮是「调大上限并重算」——点一下先把上限抬到够用(写进当前 profile 补丁,对所有会话生效)再重算。这类会话直接点重算是必然失败的,所以页面上会提前说明。
  6. 最底部的 高级模式 列出当前 profile 里所有带配置覆盖的条目,可以清除某个条目的整块覆盖(等于把它交还给继承层默认值)。如果补丁里存在指向已不存在条目的覆盖(最常见的是"覆盖写在实验性条目上、之后关掉了那个实验性插件"),这里会用「N 条失效覆盖」标出来,并说明它们已被 dsh 忽略、只能手动从补丁文件删除。

注意事项与已知边界

  • 写入直接落到当前 profile 的补丁文件(页面顶部会显示完整路径,通常是你手写覆盖的那份 cordis.patch.yml):保留注释与 !!js 表达式,写入前后有完整校验,失败会回滚。
  • 因为补丁是整块替换,应用任意一项都会把该条目的全部字段一起写进补丁:改动的那项标「已覆盖」,与该条目默认值相同的那些标「随整块写入」(它们不改变行为,点旁边的「恢复默认」可以清理)。
  • 覆盖即冻结该条目:官方之后若调整该插件的默认值,你不会自动跟随——点「恢复默认」即可解除。
  • 官方条目被实验性插件替换时会自动跟随:例如开启 DSH 自带的 @deepseek-ai/dsh-experimental-session-titles-bundle 后,官方 session-title-llm 条目会被禁用、实际生效的是 optional-session-title-all-prompts。本插件自动跟随仍然生效的那一个(模块上标出「跟随 …」),读写都落到它身上;只有候选条目全都不可用(不存在或加载失败)时才降级为「暂时不可写」并说明原因。
  • 关掉实验性插件时,先把它上面的覆盖清掉:跟随期间你的覆盖写在上面的替代条目上;一旦那个实验性插件被关掉,该条目从组合里消失,dsh 会忽略这条覆盖(只在启动日志里打一条 warning),设置页也清不掉它——高级模式会把它列为「失效覆盖」并提示手动删除。所以在关闭之前,先到对应模块点「恢复默认」是最省事的做法。
  • 如果该条目同时被更高优先级的层覆盖(home patch 或命令行 --patch),设置页会明确拒绝写入并说明原因,不会静默失败。
  • 改完立即生效,但已经存在的会话标题不会被自动重算:命名只发生在会话的首条消息上。旧会话请用「会话标题重算」逐条重新生成。
  • 「会话标题重算」只对当前进程里活跃(也就是你打开着)的会话有效,并且只列出标题仍是兜底截断的那些;重算成功后该会话自动从列表消失,之后打开也不再进入列表。(这个口径宿主与页面各筛一遍,即使宿主还没重载,也不会把全部会话列出来。)
  • 只影响当前运行的 profile;headless 等其它 profile 需要在对应 profile 里单独设置。
  • 高级模式的"清除覆盖"会删掉该条目在补丁文件里的整块 config,请先确认那不是你手写的配置。