DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

zhang-jiazhi /

zhang-jiazhi/dsh-prompt-optimizer

Verified

将原作者 linshenkx 的 prompt-optimizer 移植到 DeepSeek Harness 的第三方插件(非官方)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@a149d9de

dsh-prompt-optimizer

[!IMPORTANT] 本项目是将原作者 linshenkx 的 linshenkx/prompt-optimizer 移植到 DSH(DeepSeek Harness)的第三方插件,并非原项目的官方 DSH 版本。 核心优化模板与设计归功于原作者;本仓库主要实现 DSH Host、Client 与设置系统集成。

本插件移植 prompt-optimizer(AGPL-3.0)的核心优化模板,去掉评估、对比、迭代、变量、图像生成对接等功能,只保留一件事:把输入框里的提示词一键优化好。

参考了 seven282/oss-prompt-optimizer 的宿主/客户端结构。

功能

  • 入口:输入框工具行、权限选择器右侧:[基础|上下文|图像 ▾] [模板 ▾] [✨]
    • 类别下拉:基础 / 上下文 / 图像
    • 模板富下拉:展示模板名称与一句话描述(对齐参考成品的选项样式)
    • ✨ 按钮:点击优化输入框草稿并写回;优化中再点取消(断开请求,宿主同步中止模型调用);成功后按钮变 ↺,草稿未被手动编辑时可一键恢复原文
  • 模板目录(提取自 prompt-optimizer 默认模板,做了精简改写):
    • 基础:通用优化 / 通用优化-带输出格式要求 / 分析式结构优化 / OpenClaw-SOUL 结构化模板
    • 上下文:通用消息优化(推荐)/ 分析型优化(技术场景)/ 格式化优化(数据场景)——自动携带当前会话最近的对话作为背景(best-effort;优先读取 DSH 的 canonical surface,旧 host 才回退原始会话事件;取尾部 80 个事件里的最后 N 条对话,N 由设置项控制且最多 200 条)
    • 图像:通用自然语言 / 摄影向 / 解构创造性 / 中文美学(文生图)+ 通用编辑优化(图生图)
  • 模型调用:走 DSH 宿主 ctx.llm 服务,默认跟随 DSH 默认模型,不直连任何 API、不触碰凭据;提供方与模型 ID 同时填写时覆盖默认路由
  • 请求边界:仅接受 loopback、同源请求;请求体有大小上限;客户端断开会中止模型流;上下文读取与模型执行均受可清理 deadline 约束,兼容忽略 signal 的旧适配器
  • 设置页:设置 → 侧边栏「提示词优化」独立分区,可配:模型提供方/ID(覆盖默认路由)、采样温度、输出 token 上限、超时、输入长度上限、上下文条数与字符预算;改动即时生效并持久化。settingsScope 按可选服务注入,缺失时工具栏仍可用

安装(本地插件)

# 1. 克隆到 DSH 本地插件目录
git clone https://github.com/zhang-jiazhi/dsh-prompt-optimizer.git \
  "$HOME/.dsh/local-plugins/dsh-prompt-optimizer"

# 2. web profile 挂依赖 + 加入 bundles(~/.dsh/profiles/web/package.json)
#    dependencies:  "@local/dsh-prompt-optimizer": "link:<上面的绝对插件路径>"
#    dsh.profile.bundles 追加: "@local/dsh-prompt-optimizer"
cd ~/.dsh/profiles/web && pnpm install

# 3. 停止旧进程后重新启动 web
dsh web

测试

npm test          # 宿主 + 客户端兼容性/生命周期验证,无需启动 web
  • test/host-smoke.mjs:路由注册、模板目录、三类模板渲染、默认/自定义模型路由、settings 生效与数值钳制、 取消、超时、越权 403、canonical surface 优先读取、坏 JSON/413 body 边界、响应 listener 清理,及请求/模型 deadline 回归。
  • test/client-smoke.mjs:用最小 React/DOM 替身加载 lib/client.js,验证两个插槽注册、 可选 settingsScope(undefined / null / 无 .bind)兼容、服务晚到时的嵌套 bind,以及 dynamic-like facade 不支持 nested inject 时仍保留工具栏。
  • test/client-lifecycle-smoke.mjs:验证等待期间手动编辑不被覆盖、取消后立即重试、切换会话、卸载组件时的 AbortController 与 request identity 防护,旧响应不能写入新草稿。

替身实现的两个细节是刻意的,别"简化"掉:fakeRes 提供 on('close') 与 writableEnded,fakeReq 在读完 body 后立刻触发 close——真实 Node 的顺序就是 end → close。替身省掉这些,取消路径的断言会变成假绿(本插件的 P0 正是这样漏过一轮)。

本地 Node 合成会话基准(不含 sessionQuery 后端磁盘读取与真实 LLM):尾窗投影 60 / 5000 事件请求 p50 约 0.02 ms、p95 约 0.04 ms;算法只处理最后 80 个事件。真实会话读取仍由 DSH persistence/query 服务负责,底层读取不可取消时插件只保证自身 handler deadline,不保证后台存储工作立即停止。

模板改写说明

原项目模板经 TemplateProcessor 用完整 Mustache(循环 / lambda / 定界符切换)渲染。本插件不移植 Mustache,模板提取时已归一为白名单变量约定:

  • {{originalPrompt}} 原提示词({{json:originalPrompt}} 为 JSON 转义形态)
  • {{对话上下文}} 会话最近对话(仅上下文类模板)
  • 其余 {{…}}(输出格式示例中的占位符)渲染时原样保留

三个上下文类模板原版的 user 消息依赖 {{#conversationMessages}} 循环与 helpers.toJson,已改写为等价的扁平「证据」协议。

来源、致谢与协议

  • 原项目与原作者:linshenkx/prompt-optimizer
  • DSH 插件结构参考:seven282/oss-prompt-optimizer
  • 模板文本源自原项目;本项目保留原项目归属并同样以 AGPL-3.0 发布,详见 LICENSE
—/ 5

No ratings yet

Verified DSH bundle

Commit a149d9de49ed

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout