Repository navigation
[建议] 增加 DSH_TUI_MODEL_ROUTE / DSH_TUI_EFFORT 启动级覆盖(默认仍遵循 /model 的 last-used) #1910
steel-code-agent
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
[建议] 增加
DSH_TUI_MODEL_ROUTE/DSH_TUI_EFFORT启动级覆盖(默认仍遵循/model的 last-used)感谢维护 dsh-TUI。这是一个与「渲染行数」无关的独立建议:给部署/启动器一个显式的模型与 effort 覆盖入口,默认行为完全不变。
现象
dsh --profile tui --patch ...和DSH_TUI_PRESET=<role>目前都无法固定一个新 worker 的 provider/model/effort:~/.dsh-tui/model.json(/model的 last-used 选择)整体优先于 cordis.yml 里的provider/model;~/.dsh-tui/effort.json与settings.json的dsh-tui.effortDefault优先于 cordis.yml 的effort;结果:部署方想「这次启动就用 X 模型跑 Y 角色」,只能:
HOME(例如符号链接农场,排除.dsh-tui)——会连带丢掉用户的主题、鼠标、状态栏等 UI 偏好;dsh-tui行 overlay(patch 层替换整个 config,需要重复所有字段,升级时容易漏新字段)。这能工作,但把「一个启动参数」变成了「隔离整个用户环境」。
根因(已验证)
src/modelRoute.ts:65resolveModelRoute(configured, pref, defaults):pref(持久/model)整体优先,cordis.yml 只是 deployment default。src/dsh-adapter/plugin.ts:3177startupRoutes()直接调用readModelPref(),没有环境变量入口。src/effortPrefs.ts:46resolveEffortDefault(settingsDefault, configured, persisted):settingsDefault ?? persisted ?? configured。src/modelRoute.ts的注释本身写着:需要固定路由的部署应把值放在「composition reads the environment」的位置,而不是这个 config key。但目前没有这样的 env 入口。建议
增加两个可选的启动级环境变量:
语义:
/model与settings.effortDefault;/model、/effort在会话内仍然正常工作。代码形态可以很小,例如在
readModelPref/resolveEffortDefault入口检查环境变量,或者由startupRoutes()传入一个可选 override:effort则在resolveEffortDefault的最前面加一行:为什么值得做
HOME;~/.dsh-tui偏好得以保留;dsh-tui行 overlay;兼容性与测试
startupRoutes一样经过 catalog 校验;/model仍可切换、settingseffortDefault与 env 的优先级。关于贡献流程
我不在
.github/APPROVED_CONTRIBUTORS名单里,按pr-gate不能直接提交实现 PR。如果方向认可,我可以提供完整 patch、聚焦回归脚本与手工验证结果;也可以由维护者开 issue 或转给已批准贡献者。再次感谢维护者的工作。这个建议不改变任何默认行为,只是给「部署/启动器需要确定性路由」补一个显式的、可审计的入口。
适用场景:受管环境(如 Herdr)
这个建议主要针对“启动是程序化的、但使用者仍然在 TUI 里工作”的场景:Herdr/launcher 创建 pane 并启动
dsh,启动时没有人在 TUI 里手动输入/model;但之后用户仍然要在同一个 TUI 里交互。启动器需要把“这次用哪个 provider/model/effort”作为启动意图传进去。在受管环境里,启动器本来就能控制子进程环境(
docker exec -e、shell export、systemdEnvironment=、Herdrpane run等),TUI 会继承这些变量。项目已经有DSH_TUI_PRESET、DSH_TUI_BACKEND、DSH_TUI_RESUME_SESSION这类启动级 env,所以用 env 传递 route/effort 与现有模式一致:不需要改dsh的 CLI 参数解析,也不依赖人在 TUI 里先执行/model。补充一点:env 本身只是“信封”,需要有代码去读它;没有读取分支时,设置
DSH_TUI_MODEL_ROUTE不会改变任何行为。这正是本提案要补的那一小段代码。All reactions