跳到主要内容

dsh-prompt-optimizer

已验证

@zzy001/dsh-prompt-optimizer · v0.2.1 · MIT · Web 界面

Prompt optimizer for DeepSeek Harness: a composer tool-row button that rewrites the draft into a structured prompt via the session's selected model, with one-click restore

安装

dsh plugin add @zzy001/dsh-prompt-optimizer

dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南

源码

标签

作者

说明文档

dsh-prompt-optimizer

DeepSeek Harnessdsh)提供输入框提示词优化能力:在聊天输入框工具行添加一个 ✨ 按钮,一键把草稿改写成结构化提示词(任务目标 / 功能需求 / 验收标准 / 假设…),再点一次还原原文。

  • 跟随会话模型与思考强度:优化调用使用输入框当前选中的模型与其思考强度设置(会话日志优先,退回部署默认),不改变任何会话状态;走你已配置的模型凭证,不引入任何新密钥。
  • 官方通道:按钮注册在官方 conversation.input.right 增量席位(发送按钮左侧);草稿读写走官方 inputActions 机器事务路径;图标与 Tooltip 复用官方 primitives 原语。
  • 高质量改写:内置经调研打磨的元提示词(意图忠实 > 适度增强 > 歧义消解,反膨胀长度旋钮,假设显式化),详见 research/meta-prompt.md
  • 健壮交互:NDJSON 流式进度反馈(悬浮提示实时显示「已推理 N 字 / 已生成 N 字」,推理阶段事件持续喂看门狗)、120s 总上限 + 45s 空闲看门狗(同时取消宿主侧模型调用)、并发编辑检测(优化用 draftRev、还原用内容比对)、会话切换竞态守卫、失败红显 3s 提示、宿主错误码中英双语映射、回环/同源请求围栏、点击不夺焦点、无障碍标签。

兼容性

DeepSeek Harness >= 0.1.0-rc.8(实测至 0.1.1-rc.2,web profile)
Node.js >=20
安装 dsh plugin --profile web add ...

工作原理

  1. Host 半部:在 webServer HTTP 载体上注册精确路由 POST /plugins/prompt-optimizer/api/optimize。收到草稿后:解析会话当前模型选择与思考强度(原样跟随)→ llm.resolveCallConfig 校验路由 → llm.stream 一次性调用(元提示词作 system,temperature 0.4,maxTokens 随输入长度缩放)→ 以 NDJSON 事件流应答(metaprogress* → 终态 done|error),progress 同时上报可见文本与推理阶段的字数;只累积 text-delta(思维链增量永不混入结果)。
  2. Client 半部:注册进输入框工具行席位;点击后同源 fetch 调用上述路由并增量读取事件流——悬浮提示实时显示「思考中…已推理 N 字 / 已生成 N 字」;终态 done 到达后经 draftRev 校验一次性原子替换草稿并进入"还原"态。还原前比对当前草稿与按钮写入的确切内容,手改过则拒绝覆盖。
  3. 模型选择解析顺序与官方 api-proxy 一致:会话日志的请求配置优先,其次 agentDefaultModel 默认选择(在输入框切换模型时官方会同步保存默认,因此常规场景与界面显示一致)。

安装

方式 A:npm(推荐,发布后可用)

dsh plugin --profile web add @zzy001/dsh-prompt-optimizer

方式 B:本地目录(开发/自用)

npm install
npm run build
dsh plugin --profile web add ./dsh-prompt-optimizer

方式 C:GitHub

dsh plugin --profile web add "github:zzy-cl/dsh-prompt-optimizer#<commit-sha>"

pnpm ≥10 首次安装 git 依赖会要求授权构建脚本(allowBuilds),按 dsh 提示操作;npm 分发预构建产物则无需授权。

方式 D:tarball(无构建授权)

npm pack
dsh plugin --profile web add ./zzy001-dsh-prompt-optimizer-0.1.0.tgz

所有 dsh plugin add 方式需要本机有 pnpm:npm install -g pnpmcorepack enable pnpm

安装后重启一次 dsh web,输入框工具行右端(发送按钮左侧)出现 ✨ 图标。

更新

两个坑:①semver 里 ^0.1.x 不匹配更高的 0.y 版本,普通 update 无法跨越;②pnpm ≥11 的供应链冷却策略可能让 @latest 静默解析回旧版(输出 "Already up to date" 但实际什么都没装)。最稳妥的做法是始终用精确版本号

# npm 源安装的:精确版本号升级(推荐)
dsh plugin --profile web add @zzy001/[email protected]

# 本地目录安装的:先在插件目录 git pull,再重新 add(路径不变则原地覆盖)
cd dsh-prompt-optimizer && git pull && cd ..
dsh plugin --profile web add ./dsh-prompt-optimizer

# GitHub 安装的:把钉住的 ref 前移到新 commit
dsh plugin --profile web add "github:zzy-cl/dsh-prompt-optimizer#<new-commit-sha>"

然后重启一次 dsh web——profile 插件层在启动时装载,运行中不会热替换。

验证升级成功:输入框有草稿时点击 ✨,优化进行中悬浮提示实时显示「已生成 N 字」(0.1.x 只会转圈)即为 0.2.0。

回退到指定版本 / 卸载:

dsh plugin --profile web add @zzy001/[email protected]   # 回退
dsh plugin --profile web remove @zzy001/dsh-prompt-optimizer      # 卸载(同样需重启)

使用

  1. 在输入框输入提示词(草稿为空时图标置灰)。
  2. 点击 ✨ → 图标转圈 → 草稿被替换为结构化提示词,图标变为 ↩。
  3. 点击 ↩ → 还原原始文本,图标变回 ✨。
  4. 优化结果直接发送后按钮自动复位。

失败(超时 / 模型错误 / 等待或还原前手动改了草稿)时图标红显 3 秒并在悬浮提示中说明原因;还原前若草稿又被手动编辑过,插件拒绝覆盖并提示,绝不吞掉手改内容。

与动态插件的关系

本仓库由同会话的动态 Cordis 插件(prompt-1)固化而来,功能一致、通道不同(动态版走包私有 RPC,仓库版走 webServer 路由)。两者不要同时启用:都注册 conversation.input.rightprompt-optimizer 席位,后激活者会覆盖前者。长期使用请安装本插件并停用动态插件。

开发

npm install
npm run check    # tsc --noEmit
npm run build    # tsdown → lib/ + esbuild → client/client.js
npm pack --dry-run

结构:

src/
├── index.ts        # Host 半部:webServer 路由 + 模型选择解析 + llm 调用
├── meta-prompt.ts  # 优化元提示词(设计依据见 research/meta-prompt.md)
└── client.ts       # Client bundle 源码(构建为经典脚本)
research/           # 元提示词与命名调研
review/             # 发布前评审报告

发布

npm login
npm publish        # prepare 自动构建,发布预构建 lib + client + cordis.patch.yml

发布前用 npm pack --dry-run 复核产物。GitHub 仓库建议打 topics:dsh-plugindeepseek-harness

License

MIT