# @panando/dsh-prompt-optimizer

<p align="center">
  <a href="README.md"><kbd>English</kbd></a>
  &nbsp;|&nbsp;
  <a href="README.zh-CN.md"><kbd>中文</kbd></a>
</p>

**One button prompt optimizer with configurable strategy.**
**一键提示词优化，策略可配置。**

面向 [DeepSeek Harness](https://github.com/deepseek-ai)（DSH）输入框的提示词优化插件。它把一段粗糙的草稿改写得更清晰、更便于执行，并流式写回输入框供你审阅——一个按钮搞定，模型与生成策略完全由你掌控。

---

## 特性

### 优化能力

- **一键优化。** 输入框旁的单个按钮即可改写当前草稿：保留你的原意，同时让指令更清晰、更具体、更便于开发 Agent 执行。
- **优化提示词可编辑。** 整份提示词模板都能改。它被拆成互相独立的**提示词**段与 **Few-shot** 段，每段各自提供恢复默认，统一收在可折叠的「优化提示词模板」区块里。
- **自定义 Few-shot 示例。** 用最多 16 条示例教会插件你偏好的改写风格。每条示例可以是「原始提示词 → 优化后提示词」，也可以是「宽泛任务提示 → 优化后的任务指令」，并且都能启用、停用、编辑、删除。
- **输出长度可控。** Token 上限与请求超时均可配置；内置模板会引导模型「扩展」指令，而不是总结或代你作答。

### 模型与策略

- **跟随会话模型（默认）。** 直接使用当前 DSH Session 已选定的提供商与模型，零额外配置。
- **固定指定模型。** 可从 DSH 模型目录中挑选任意提供商/模型，为插件单独固定，不受会话切换影响。
- **推理强度可配。** 默认「最快（不思考）」；当改写确实需要更深分析时，可逐级调到「认真一点（低）/ 更认真（高）/ 最认真（最高）」。

### 输入框体验

- **流式写回输入框。** 内容逐字返回并落入草稿供你审阅，插件**绝不会**替你发送消息。
- **可中断。** 生成期间再次点击按钮即可取消当前请求。
- **草稿可撤销/重做。** 在输入框中按 `Ctrl+Z` / `Ctrl+Y`，可在历次生成的草稿之间前后回溯。

### 范围与隐私

- **纯本地，不经第三方服务。** 生成调用的是 DSH 中已配置的模型路由，插件不会把你的草稿转发给任何独立的优化服务。
- **只发送草稿与提示词。** 当前启用的优化流程只发送输入框草稿和配置的本地提示词。项目上下文采集与空草稿提示词设计虽已实现在代码中，但目前由功能开关关闭，不会采集项目文件或会话历史。

---

## 安装

要求 DeepSeek Harness `0.2.x`（`0.2.0-rc.1` 或更新版本）。

从 npm 安装：

```sh
dsh plugin --profile web add @panando/dsh-prompt-optimizer
```

或从 GitHub 安装：

```sh
dsh plugin --profile web add github:panando/dsh-prompt-optimizer
```

安装后重启 DSH。

更新与卸载：

```sh
dsh plugin --profile web update @panando/dsh-prompt-optimizer
dsh plugin --profile web remove @panando/dsh-prompt-optimizer
```

---

## 使用方式

1. 在 DeepSeek Harness 中打开项目 Session。
2. 在输入框中写下需要优化的任务。
3. 点击输入框操作区旁的**提示词优化**按钮。
4. 检查并编辑生成的草稿，确认后再发送。

| 操作 | 结果 |
| --- | --- |
| 输入非空草稿后点击提示词优化 | 将优化后的指令流式写入输入框。 |
| 生成期间再次点击 | 取消当前请求。 |
| 在输入框中按 `Ctrl+Z` / `Ctrl+Y` | 在生成草稿历史中撤销或重做。 |
| 检查完成后按 Enter | 通过 DSH 发送当前可见草稿。 |

空草稿不会启动提示词生成，因为空草稿提示词设计目前处于关闭状态。

---

## 设置

打开**设置 → 提示词优化**。

- **模型路由：** 默认跟随当前 Session，也可以从 DSH 模型目录中选择提供商和模型，为插件固定使用。
- **生成方式：** 默认使用**最快（不思考）**；只有在需要更深入分析时才选择更高档位。
- **优化提示词模板：** 可折叠区块，展开后包含可编辑的**提示词**段、**Few-shot** 段，以及你自己的 **Few-shot 示例**；模板两段各自提供恢复默认。
- **高级生成限制：** 设置最大输出 Token 数和请求超时。

项目上下文采集关闭时，对应设置项会隐藏。

---

## 开发

要求：Node.js 22.19 或更高版本。

```sh
npm ci
npm run build      # 生成 lib/ 产物
npm test           # 运行测试
```

提交更改前运行完整检查：

```sh
npm run check      # build + test + npm pack --dry-run
```

### 项目结构

```text
src/index.cjs              DSH Host 集成、模型路由与 RPC
src/core.cjs               提示词拼装、设置与有界请求数据
src/optimizer-template.cjs 本地默认优化提示词与 few-shot 段
src/client-factory.cjs     输入框按钮与设置界面
src/features.cjs           已归档能力的功能开关
cordis.patch.yml           DSH Bundle 配置（用于启用插件入口）
scripts/build.mjs          Host 与 Client 构建脚本
lib/                       生成的安装包产物
```

### 参与贡献

欢迎提交 Issue 和范围明确的 Pull Request。请说明用户可见的问题、控制改动范围并补充测试，同时附上 `npm run check` 的运行结果。

---

## 常见问题

**为什么空输入框没有生成内容？**

空草稿提示词设计目前已关闭。请先输入草稿，再使用提示词优化。

**插件会把项目文件发送给模型吗？**

不会。当前启用的优化流程只发送输入框草稿和配置的提示词，项目上下文采集处于关闭状态。

**由哪个模型生成结果？**

默认使用当前 DSH Session 选定的模型；你也可以在设置中固定某个 DSH 提供商和模型。

**可以修改默认提示词吗？**

可以。提示词段、模板 few-shot 段以及自定义 few-shot 示例都能在设置中编辑。

---

## 许可证

本项目采用 MIT License，详见 [LICENSE](LICENSE)。

## 致谢

本项目是 **[dsh-prompt-for-me](https://github.com/XXXXXQ-0206/dsh-prompt-for-me)**（原作者：dsh-prompt-for-me contributors，MIT）的 fork。衷心感谢原作者贡献了插件架构、Host/Client 分层、模型目录与设置服务，以及流式写回输入框的集成方案——本项目正是建立在这些工作之上。

本 fork 的改动：

- 重新打包并以 `@panando/dsh-prompt-optimizer` 名义发布；包名、插件 id、RPC 路由、设置存储键与 CSS 前缀（`dsh-pfm-` → `dsh-po-`）均已改名。
- 显示名改为「提示词优化」。
- 修复设置面板中模型下拉框的高度问题（`flex-basis` 曾作用在错误的轴上）。
- 将优化提示词区块整合为单个可折叠区块，并移除冗余的「全部恢复默认」按钮。

默认提示词模板来源于 Trae，并针对本插件进行了改编；此来源说明不代表任何背书或关联关系。

## 免责声明

本软件按 **“AS IS”** 原样提供，不附带任何明示或默示的保证。在适用法律允许的最大范围内，作者和贡献者不对因使用本软件而产生的任何直接、间接、附带、特殊、惩罚性或后果性损失承担责任。使用者自行承担使用风险，并负责遵守适用法律及模型服务条款。禁止将本软件用于违法用途。