youli42/dsh_BetterInput0

dsh-better-input

DSH Web 插件:在模型选择器左侧加一个「AI 优化输入」按钮,按可自定义提示词优化输入框内容,并支持撤销。

包名
dsh-better-input
版本
0.1.0
许可证
MIT
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:youli42/dsh_BetterInput

打开插件配置文件(P6.3)

设置页底部有「打开插件配置文件」,一键用编辑器打开本插件的组合层配置 cordis.patch.yml (就是 package.jsondsh.bundle.patch 声明的那个文件)。

  • 路径由宿主解析,不是前端拼的:lib/index.js 用自己的模块位置推出包根 (link: 安装指向仓库、正式安装指向 profile 的 node_modules)。设置页同时把绝对路径 显示出来,方便手动打开或复制。

  • 为什么不是简单的"交给系统默认关联".yml 在不少 Windows 机器上根本没有关联 (本机实测 assoc .ymlFile association not found),此时 explorer.exe 只会弹一个「你要如何打开这个文件?」——按钮就变成"点了没反应"。所以给了一条必然可用的候选链:

    平台候选(按顺序试,起不来就落到下一个)
    WindowsCode.exe(VS Code 的常见安装位置)→ notepad.exe(系统自带,保证可用)
    macOSopen -t-t = 强制用默认文本编辑器)
    Linuxxdg-open

    Windows 上刻意不用 PATH 上的 code:那是 code.cmd,Node 从 18.20/20.12 起禁止在不开 shell 的情况下 spawn .cmd(EINVAL),而开 shell 又要把路径交给 cmd 解析(引号/& 都是坑)。

  • 这是一条能力路由(会在宿主上起进程),准入条件与 /optimize 同级:必须有浏览器会话, 不能靠本机任意进程触发。

  • 失败都有明确提示,且都带上可直接照做的绝对路径:文件不在(404 config-missing)、 平台不支持(501 open-unsupported)、全都起不来(500 open-failed,附每个候选的错误)。 前端只负责显示提示,不做任何静默失败。

  • 真机验收(会真的打开文件):

    node .perf/verify-open-config.mjs
    # status=200 body={"ok":true,"path":"...\\cordis.patch.yml","openedWith":"...\\Code.exe"}
    

配置参考(cordis.patch.ymlconfig:

字段默认说明
enabledtrue总开关;false 时不挂路由
systemPrompt内置(见 lib/policy.js默认系统提示词(基底);被设置页的自定义系统提示词覆盖。追加提示词不替换它,只接在它之后
model.provider / model.model省略固定模型路由;必须成对出现。被设置页覆盖;都没配时用宿主当前默认选择
presets[].{id,label,prompt}[]预设;请求带 presetId 时其 prompt 追加到 system。id/label 会经 /catalog 下发到输入框旁的 菜单(prompt 不下发)。id 命中内置条目concise/spec)时语义不同:它是那条内置条目的追加文案的组合层默认值(被遗留设置字段与设置页覆盖),且不再列进预设区。见「追加提示词」一节
stylePromptConcise / stylePromptSpec用户设置,非本文件)逐风格提示词,写在设置页里;这里列出来只是说明它压过 presets 里同 id 的那一项
maxInputChars8000输入字数上限(超限 400)
maxOutputTokens1024输出 token 上限,取值域 1–200000(截断仍返回文本并标 truncated: true
timeoutMs30000单次调用超时,取值域 1000–600000 ms(超时 504)
temperature不传采样温度,取值域 0–2(缺省交给适配器决定)
maxConcurrentCalls4全局并发调用上限,取值域 1–64。同会话单航班始终生效(第二条得 409),超上限得 429

未知字段名、类型错误或超出取值域都会让启动失败并报出字段名(fail loud,避免「拼错字段却以为生效了」, 也避免 AbortSignal.timeout 超范围时每次请求都 502)。 这项配置是组合层:设置页里的用户值优先于它,改它需要重启 dsh webpatchReload: live 会重载 patch,但插件自身的 Node 代码不热重载)。