dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH Web 界面提示词增强插件:基础/标准/专家三档模式,标准/专家模式结合项目上下文与最近会话历史重写草稿;网关拒绝推理档位参数时自动去参重试;增强结果支持对比确认与撤回。
💡 觉得好用?去 dsh-plugin.org 查看插件详情并点个 ⭐,支持一下作者~
DSH Web profile 的静态插件:随 harness 启动自动加载,无需每次手动重新加载。任何机器、任何经 DSH 注册的模型/网关均可直接使用;模型能力差异由插件在运行时自动适配,无需修改代码。
| 文件 | 内容 |
|---|---|
lib/index.js | Host 半(ESM 静态 Cordis 插件):注册 POST /api/prompt-enhance/enhance,按模式读取会话 cwd 与最近对话历史 → 采集项目上下文(目录结构 + 依赖/配置/入口文件,关键词命中优先;根 AGENTS.md 自动作为事实块)→ 调会话默认 LLM 重写提示词(失败自动降级重试 + 回退候选模型链,最多 3 个候选)。 |
lib/client.js | 浏览器半(window.__ModuleLoader__.load 手写 bundle):在 conversation.input.right 注册模式选择 + ✦ 按钮、conversation.input.overlay 注册对比面板与浮动提示条;fetch 调 Host 路由(同源)。 |
cordis.patch.yml | bundle 补丁:向 profile 组合树插入插件行 prompt-enhance(部署可经 $DSH_HOME/cordis.patch.yml 或 --patch 覆盖其 config)。 |
package.json | main = Host 半、exports["./client"] = 浏览器半、dsh.bundle.patch、dsh.client 声明。 |
reasoningEffort(基础/标准默认 off 关推理、专家默认 high 深思);模型/网关不支持或拒绝该参数(宿主报 UNSUPPORTED_REASONING_EFFORT、400、developer 角色不被接受等)时,自动在同一候选取掉档位重试一次,不影响可用性。EMPTY_RESPONSE),自动同一候选显式关推理(off)并加大预算重试。注意:0.2.0 起「省略档位参数」不等于关推理——宿主会用模型默认档位补齐(deepseek 默认 high),所以恢复动作必须显式发 'off'。effort: none(= 不带该参数,由宿主按模型默认决定;要真正关推理请用 off)。historyTurns: 0 可关闭。contentChars),项目根存在 AGENTS.md 时自动作为项目事实块读取(单文件上限 4000 字符);不写任何文件、不新增交互。useInput,≤0.1.1 回退 props.input);事件处理器只读右槽草稿镜像,不在 overlay 调钩子;提示框/撤回超时优先用宿主 timer 服务、取不到时回退浏览器定时器,提示框还可点击关闭;状态按 sessionId 分桶——切会话或同时挂多个 composer(右侧栏子智能体聊天)时面板/撤回/草稿镜像/在途请求互不串、互不清;写回草稿前校验 phase === 'plain',被拒时只在面板内提示(不丢增强结果);publish 定时器失败不阻塞状态推进;忙碌超时 120 秒自动取消;浏览器 JS 错误自动上报 Host 诊断环(GET /api/prompt-enhance/log 可查最近请求与错误)。Esc 放弃、Enter 采用(焦点在回答输入框时 Enter 仍为"按回答重新增强");任意位置按 Ctrl+Shift+E(macOS Cmd+Shift+E)触发增强。NO_CONTEXT、ALL_MODELS_FAILED 等),客户端映射为用户可操作提示。| 场景 | 推荐模式 | 说明 |
|---|---|---|
| 随手润色、不依赖项目 | 基础 | 快、省 token,纯文本层面清理 |
| 需要引用项目结构/依赖/入口 | 标准 | 读取目录树 + 关键配置与代码(3 层预算) |
| 深层任务分析 + 验收标准 | 专家 | 更大上下文预算 + 任务分析 + 可验证验收标准 |
| 网关不支持推理档位 | 任意(配 effort: none) | 在 cordis.patch.yml 中为该模式关闭档位发送 |
| 现象 | 错误码 | 处理建议 |
|---|---|---|
| "未能读取到项目上下文" | NO_CONTEXT | 确认会话已关联工作目录且目录可读;临时可切换为基础模式 |
| "当前会话未关联工作目录" | NO_CWD | 先打开一个项目工作区,或切换为基础模式 |
| "候选模型均调用失败" | ALL_MODELS_FAILED | 检查网络/网关/模型配置,或切换为基础模式 |
| "未找到可用模型" | NO_CANDIDATES | 在 DSH 设置中配置模型后重试 |
| 增强超过 120 秒无结果 | (客户端超时自动取消) | 检查网关延迟;可配置该模式 effort: none 或调大 maxTokens |
| 浏览器控制台报错 | (自动上报诊断环) | GET /api/prompt-enhance/log 查看最近请求与错误详情 |
插件读取组合行 prompt-enhance 的 config(Cordis apply(ctx, config))。默认行为无需任何配置;需要适配特定模型/网关时,在 $DSH_HOME/cordis.patch.yml(对所有 profile 生效,机器级)或 --patch 覆盖层里写(同一 row id 的 config 会整体替换本行 config,所以请写全):
# $DSH_HOME/cordis.patch.yml
- id: prompt-enhance
config:
maxAttempts: 3 # 候选模型链长度上限(1-6,默认 3)
autoFill: true # 是否自动从已注册 provider 补足候选(默认 true)
candidates: # 固定候选链(可选,优先于会话默认模型)
- { provider: my-provider, model: my-model }
system: "" # 可选:完整替换内置系统提示词;留空字符串表示使用默认内置提示词
modes:
basic:
effort: off # 'off'|'low'|'high'|'max'(按模型支持发送)
# 或 'none':不带该参数(宿主按模型默认补齐,不是关推理)
maxTokens: 2000
temperature: 0.4
standard:
effort: off
maxTokens: 3000
temperature: 0.3
depth: 3 # 上下文采集:目录递归层数
treeLines: 160 # 目录树行数上限
treeChars: 7000 # 目录树字符上限
fileChars: 6000 # 单个配置文件内容上限
contentChars: 11000 # 文件内容合计上限
historyTurns: 3 # 会话历史:最近 N 轮(0 = 不带)
historyChars: 6000 # 会话历史字符上限
extra: "" # 追加到系统提示词的模式说明
expert:
effort: high
maxTokens: 5000
temperature: 0.2
depth: 4
treeLines: 260
treeChars: 12000
fileChars: 9000
contentChars: 18000
historyTurns: 3
historyChars: 9000
前提:已安装 DeepSeek Harness 并启用 web profile(dsh web)。
宿主版本兼容
| 宿主 | 浏览器半输入态来源 | 说明 |
|---|---|---|
| ≤ 0.1.1 | slot owner prop { session, input } | 旧契约,props.input |
| ≥ 0.1.2-rc.1(含 0.2.x 桌面版) | session 标准钩子 useInput(inputActions 仍是 prop) | owner props 变空,输入态走选择器钩子 |
插件两种契约都读(readInputState()),所以 web profile 与桌面版客户端通用。若在旧宿主上看到 ✦ 按钮恒为禁用,说明宿主给槽位传的值既不是 input 也不是 useInput——请附上宿主版本反馈。
方式一(推荐):npm 一键安装
插件已发布到 npm registry,使用 DSH 官方插件命令安装:
# 安装
dsh plugin --profile web add @lidaxi/prompt-enhance
# 升级
dsh plugin --profile web update @lidaxi/prompt-enhance
# 卸载
dsh plugin --profile web remove @lidaxi/prompt-enhance
安装后重启 dsh web 并刷新页面即可。dsh plugin 会自动把本包加入 dsh.profile.bundles(包内 dsh.bundle.patch 组合补丁与 dsh.client.inject 浏览器半声明随 bundle 自动生效),无需手工编辑任何文件。
三条 /api/prompt-enhance/* 路由是 webServer 上的 exact 注册,而 DSH 的 /api 围栏是 prefix 路由——exact 命中即返回,围栏看不到它们(实测 0.2.0-rc.2:带 Origin: https://evil.example + Sec-Fetch-Site: cross-site 的 POST 能直接打到 enhance;同样头的 /api/gateway/* 是 403)。v1.5.2 起插件自己套上宿主的门禁:
| 路由 | 门禁 |
|---|---|
POST /enhance、POST /log-error | connection.requestRejection(Host/Origin 同源校验 + 浏览器 cookie 认证),每请求惰性读取;该服务不存在时回退到同规则的本机 Host/Origin 校验;门禁抛错一律 fail closed |
GET /log | 只做 Host/Origin 围栏(读接口不改状态、跨源也读不到响应体;这样本机脚本仍能取诊断环,而 DNS rebinding 的 Host 会被挡) |
另外:POST 若带非 JSON 的 content-type 直接 415(挡表单型跨站简单请求);请求体 >1MB 返回 413 结构化错误(不再断连);草稿上限 20000 字符;单条路由注册冲突只放弃该条(不再三条一起失效);响应带 cache-control: no-store。
方式二:从源码安装(本地开发 / 贡献者)
仓库自带 install.ps1 / install.sh,clone 后在仓库目录直接执行:
.\install.ps1
chmod +x install.sh
./install.sh
脚本会自动:创建源码联接 → 同步安装副本(含语法与一致性校验)→ 注册依赖与 bundle(file: 依赖)。改完代码只需重新执行脚本 + 重启 dsh web。卸载用 .\uninstall.ps1 / ./uninstall.sh(安全:只删联接/副本/注册,保留本仓库源码)。
方式三:手动
# 1) 把插件源码放到 DSH 插件目录(<repo> = 本仓库 clone 路径)
Copy-Item -Recurse <repo> "$HOME\.dsh\plugins\prompt-enhance"
# 2) 注册依赖与 bundle(编辑 $HOME\.dsh\profiles\web\package.json):
# dependencies 增加:
# "@lidaxi/prompt-enhance": "file:../../plugins/prompt-enhance"
# dsh.profile.bundles 数组增加:
# "@lidaxi/prompt-enhance"
# (插件的 cordis.patch.yml 组合补丁与 dsh.client.inject 声明会随 bundle 自动生效)
# 3) 重启 dsh web,刷新页面
重启后:composer 发送按钮左侧出现 [模式 ▾] [✦](✦ 为增强按钮)。
install.sh / install.ps1 同步到安装副本,再重启 harness 生效:Copy-Item "$HOME\.dsh\plugins\prompt-enhance\lib\index.js", "$HOME\.dsh\plugins\prompt-enhance\lib\client.js" "$HOME\.dsh\profiles\web\node_modules\@lidaxi\prompt-enhance\lib\" -Force
# macOS / Linux
cp lib/index.js lib/client.js "$HOME/.dsh/profiles/web/node_modules/@lidaxi/prompt-enhance/lib/"
GET /api/prompt-enhance/log 返回最近请求记录(状态 / 耗时 / 所用模型 / 浏览器错误上报)。lib/index.js)注册 POST /api/prompt-enhance/enhance:按模式读取会话工作目录与最近对话历史 → 采集项目上下文(目录树 + 依赖/配置/入口文件,按草稿关键词命中优先;根 AGENTS.md 自动作为事实块)→ 用会话默认 LLM 流式重写提示词(失败自动降级重试:去档位 / 关推理加大预算,再回退候选模型链 ≤3 个,支持取消中断)。lib/client.js)在 conversation.input.right 注册模式选择 + ✦ 按钮,在 conversation.input.overlay 注册对比面板 / 忙碌状态卡 / 提示条;采用增强结果前先对比原文与增强后,采用后 9 秒内可撤回。answers + baseEnhanced),返回修订后的正文与新清单。off / low / high / max 推理档位,基础/标准默认 off 实测 6-10s 出全量正文)。developer 角色不被接受、thinking 等参数不识别)时自动去掉档位重试;参数彻底不可用时把对应模式配置为 effort: none 即可跳过。插件不针对任何特定厂商做硬编码,新增模型无需改动。maxTokens。agentDefaultModel.currentSelection()),失败回退候选模型链(默认 ≤3 个;可用 config.candidates 固定候选链、config.maxAttempts 调整长度)。historyTurns: 0 可关闭;历史随增强请求进入所用 LLM 网关(与项目上下文同级别,外部网关下历史内容会出本机)。本仓库采用 Apache-2.0 许可证,贡献即代表您同意该许可证。