dsh-prompt-rewriter 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,116 +1,118 @@
1
1
  # dsh-prompt-rewriter
2
2
 
3
- 一键把输入框里的草稿改写成更清晰、更完整的提示词,**不发送消息、不运行 Agent**。
3
+ [![npm](https://img.shields.io/npm/v/dsh-prompt-rewriter.svg)](https://www.npmjs.com/package/dsh-prompt-rewriter)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
4
5
 
5
- > **本项目为非官方社区项目**,与 DeepSeek 无隶属或授权关系。内嵌的品牌图形版权归属见 [NOTICE.md](./NOTICE.md)。
6
+ 一键把聊天输入框里的草稿改写成更清晰、更完整的提示词。**原位替换,不发送消息、不运行 Agent。**
6
7
 
7
- ## 界面预览
8
+ 一个非官方社区项目,与 DeepSeek 无隶属或授权关系。素材归属见 [NOTICE.md](NOTICE.md)。
8
9
 
9
- ### 按钮就在输入框里,紧挨模型名
10
+ ---
10
11
 
11
- 按钮不占额外位置:它挂在输入框右侧、模型名左边,输入框有内容才出现。点一下,草稿原地变成完整提示词,不会发送消息。
12
+ ## 它解决什么问题
12
13
 
13
- ![输入框旁的增强按钮:草稿从一句话变成完整提示词](docs/images/01-composer-button.png)
14
+ 一句话的草稿往往缺目标、缺约束、缺输出格式,模型只能猜。这个插件把草稿改写成可执行的提示词,再放回输入框——你可以先看一眼、改两笔,再决定发不发。
14
15
 
15
- ### 改写前后对比
16
+ **按钮长在输入框里,不用另开页面。** 位置在输入框右下角、模型名左侧(图中蓝框那一个),输入框有内容时出现,为空时自动隐藏。
16
17
 
17
- 原始草稿只有一句话;改写后补全了目标、输出格式与约束条件,可直接交给模型执行。
18
+ ![按钮就在输入框里,紧挨模型名](https://raw.githubusercontent.com/huaguoxingkong/dsh-prompt-rewriter/main/docs/images/01-composer-button.png)
18
19
 
19
- ![改写前后对比:一句话草稿变成结构完整、可执行的提示词](docs/images/02-before-after.png)
20
-
21
- ### 设置页
22
-
23
- `设置 → 提示词增强` 提供三个开关与一个模型选择器,只影响这个按钮,不影响正常发送。
24
-
25
- ![设置页:模型选择、是否参考前文、是否参考输入框图片](docs/images/03-settings.png)
20
+ ## 功能
26
21
 
27
- ### 两种模式的区别
22
+ - **一键改写**:输入框有内容时出现按钮,无内容时隐藏。
23
+ - **原位替换**:结果直接写回输入框,是一个可撤销的编辑步,`Ctrl+Z` 可回退。
24
+ - **随时可停**:改写中再点一下即取消,草稿保持原样,不报错。
25
+ - **失败可见**:出错时按钮变成重试图标,原因直接显示在按钮旁。
26
+ - **上下文感知**:会话已有对话时参考前文的目标、已确认要求与已排除方案;空会话只处理当前草稿。
27
+ - **参考输入框图片**:可选让输入框里的图片一起参与改写;历史消息里的图片**始终不读**。
28
28
 
29
- 空会话只处理当前草稿(图标无标记);会话已有对话时参考前文,图标右下角出现小圆点。
29
+ ### 改写前后
30
30
 
31
- ![两种模式的区别:空会话无标记,有上下文时图标右下角显示小圆点](docs/images/04-context-modes.png)
31
+ ![改写前后对比](https://raw.githubusercontent.com/huaguoxingkong/dsh-prompt-rewriter/main/docs/images/02-before-after.png)
32
32
 
33
- ### 按钮的四种状态
33
+ ### 两种模式
34
34
 
35
- 输入框为空时隐藏;有内容才出现。改写中播放动画,完成后变为可回退,失败则显示原因。
35
+ 空会话只处理当前草稿,图标无标记;会话已有对话时参考前文,图标右下角出现小圆点。
36
36
 
37
- ![按钮状态:隐藏、就绪、改写中、完成回退、失败重试](docs/images/05-button-states.png)
37
+ ![两种模式的区别](https://raw.githubusercontent.com/huaguoxingkong/dsh-prompt-rewriter/main/docs/images/04-context-modes.png)
38
38
 
39
- ## 功能
39
+ ### 按钮状态
40
40
 
41
- - **一键增强**:输入框有内容时,输入栏出现增强按钮;无内容时自动隐藏。
42
- - **原位替换**:结果直接写回输入框,是一个可撤销的编辑步(`Ctrl+Z` 可回退)。
43
- - **可随时停止**:增强中点按钮即取消,草稿保持原样,不报错。
44
- - **失败可见**:出错时按钮变成重试图标,并把原因直接显示在按钮旁。
45
- - **上下文感知**:会话已有对话时,改写会参考前文的目标、已确认的要求与已排除的方案;空会话只处理当前草稿。
41
+ ![按钮状态](https://raw.githubusercontent.com/huaguoxingkong/dsh-prompt-rewriter/main/docs/images/05-button-states.png)
46
42
 
47
- ## 设置
48
-
49
- `设置 → 提示词增强` 页有三个开关,以及一个模型选择器:
43
+ ## 安装
50
44
 
51
- | 选项 | 默认 | 说明 |
52
- |---|---|---|
53
- | **用哪个模型改写** | 关 | 关:跟随当前对话正在用的模型。开:始终使用下拉中选定的模型。 |
54
- | **参考之前的对话** | 开 | 改写时参考本会话前文,更贴合真实意图。会多耗 token,长对话也更慢。 |
55
- | **参考输入框里的图片** | 关 | 输入框里已放好的图片一并参与改写。**历史消息里的图片始终不读。** |
45
+ 需要 DeepSeek Harness 桌面版,`node >= 22`。
56
46
 
57
- 几点行为细节:
47
+ ### 从 npm 安装(推荐)
58
48
 
59
- - **模型选择会持久化**:选择器列出你实际拥有的渠道与模型(与输入框的模型选择器同一份数据),不会手填出不存在的模型。关闭开关不会清空已选模型,重新打开直接回显上次选择。
60
- - **图片仅在完成上传后可读**:上传中的图片会被跳过,并在状态区提示"有 N 张图片未能读取",不会让增强失败。
61
- - 三个开关各自独立生效,互不影响。
49
+ ```sh
50
+ dsh plugin --profile desktop add dsh-prompt-rewriter
51
+ ```
62
52
 
63
- ## 安装
53
+ ### 从 GitHub 源码安装
64
54
 
65
- 三条路径,按你的情况选一条:
55
+ ```sh
56
+ dsh plugin --profile desktop add github:huaguoxingkong/dsh-prompt-rewriter
57
+ ```
66
58
 
67
- | 方式 | 适合 | 要点 |
68
- |---|---|---|
69
- | **npm(推荐)** | 想拿最新版、不想管源码 | 装全局包,再让 `dsh` 指向它 |
70
- | **从源码克隆** | 想改代码、跟最新提交 | clone 后 `npm install` |
71
- | **从 Release 下载 zip** | 不想装 git / npm | 解压后 `npm install` |
59
+ 源码安装会拉取未构建的仓库,首次安装可能提示允许运行该包的安装脚本——只对你信任的包授予此权限。
72
60
 
73
- 三者最后都落到同一步:用 `dsh plugin` 把这包装进 profile。区别只在包从哪来。
61
+ ### 从 Release 安装
74
62
 
75
- ### 从 npm 安装
63
+ 到 [Releases](https://github.com/huaguoxingkong/dsh-prompt-rewriter/releases) 下载 `dsh-prompt-rewriter-1.0.0.zip`,解压后:
76
64
 
77
- ```powershell
78
- npm install -g dsh-prompt-rewriter
79
- dsh plugin --profile desktop add dsh-prompt-rewriter
65
+ ```sh
66
+ cd dsh-prompt-rewriter-1.0.0
67
+ npm install
68
+ dsh plugin --profile desktop add .
80
69
  ```
81
70
 
82
- ### 从源码安装
71
+ ### 本地 checkout 安装
83
72
 
84
- ```powershell
73
+ ```sh
85
74
  git clone https://github.com/huaguoxingkong/dsh-prompt-rewriter.git
86
75
  cd dsh-prompt-rewriter
87
76
  npm install
88
77
  dsh plugin --profile desktop add .
89
78
  ```
90
79
 
91
- ### 从 Release 安装
80
+ `npm install` 是必需的:插件用 `@deepseek-ai/schemastery` 声明设置页的 `Config`,它是唯一外部依赖。
92
81
 
93
- 到 [Releases](https://github.com/huaguoxingkong/dsh-prompt-rewriter/releases) 下载最新的 `dsh-prompt-rewriter-1.0.0.zip`,解压后:
82
+ ### 安装后
94
83
 
95
- ```powershell
96
- cd <解压目录>
97
- npm install
98
- dsh plugin --profile desktop add .
99
- ```
84
+ **重启 DeepSeek Harness。** 本插件没有 HMR,bundle 在启动时读取快照,不重启不会生效。
100
85
 
101
- `npm install` 是必需的:插件用 `@deepseek-ai/schemastery` 声明设置页的 `Config`,它是唯一外部依赖,不装会在启动时报 `Cannot find package`。
86
+ ## 使用
102
87
 
103
- `dsh` 不在 PATH 时用完整路径(Windows 桌面版默认位置):
88
+ 1. 在输入框里写下任意草稿。
89
+ 2. 点模型名左侧的增强按钮(大肥鱼图标)。
90
+ 3. 等待改写完成,草稿被替换成新提示词。
91
+ 4. 不满意可按 `Ctrl+Z` 或点回退图标还原。
104
92
 
105
- ```powershell
106
- & "D:\Soft\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add .
107
- ```
93
+ 改写用的是**当前会话选中的模型**,除非你在设置里固定了别的模型。
94
+
95
+ ## 设置
96
+
97
+ `设置 → 提示词增强` 提供三个开关与一个模型选择器,只影响这个按钮,不影响正常发送。
108
98
 
109
- 安装后需**重启 DeepSeek Harness**。本插件没有 HMR,bundle 在启动时读取快照,不重启不会生效。
99
+ ![设置页](https://raw.githubusercontent.com/huaguoxingkong/dsh-prompt-rewriter/main/docs/images/03-settings.png)
100
+
101
+ | 选项 | 默认 | 说明 |
102
+ |---|---|---|
103
+ | **用哪个模型改写** | 关 | 关:跟随当前对话正在用的模型。开:始终使用下拉中选定的模型。 |
104
+ | **参考之前的对话** | 开 | 改写时参考本会话前文,更贴合真实意图。会多耗 token,长对话也更慢。 |
105
+ | **参考输入框里的图片** | 关 | 输入框里已放好的图片一并参与改写。**历史消息里的图片始终不读。** |
106
+
107
+ 行为细节:
108
+
109
+ - **模型选择会持久化**:选择器列出你实际拥有的渠道与模型(与输入框的模型选择器同一份数据),无法手填不存在的模型。关闭开关不会清空已选模型,重新打开直接回显上次选择。
110
+ - **图片仅在完成上传后可读**:上传中的图片会被跳过,并在状态区提示“有 N 张图片未能读取”,不会让改写失败。
111
+ - 三个开关各自独立生效,互不影响。
110
112
 
111
113
  ## 配置
112
114
 
113
- profile 插件行的 `config` 字段全部可选。前五项为设置页托管,后五项为运维上限:
115
+ profile 插件行的 `config` 字段全部可选。前五项由设置页托管,后七项为运维上限:
114
116
 
115
117
  ```yaml
116
118
  - id: dsh-prompt-rewriter
@@ -133,34 +135,40 @@ profile 插件行的 `config` 字段全部可选。前五项为设置页托管
133
135
  historyMessageChars: 4000 # 单条历史字符上限
134
136
  ```
135
137
 
136
- ## 结构
138
+ ## 工作原理
137
139
 
138
140
  | 半边 | 文件 | 职责 |
139
141
  |---|---|---|
140
- | Host | `index.js` | 注册 `POST /api/prompt-enhance`(增强)与 `GET/POST /api/prompt-enhance/settings`(设置),走 `ctx.connection.fetch`,继承 Harness 鉴权与来源校验。读取会话投影得到当前模型,经 `ctx.llm` 生成结果。 |
142
+ | Host | `index.js` | 注册 `POST /api/prompt-enhance`(改写)与 `GET/POST /api/prompt-enhance/settings`(设置),走 `ctx.connection.fetch`,继承 Harness 鉴权与来源校验。读取会话投影得到当前模型,经 `ctx.llm` 生成结果。 |
141
143
  | Client | `client.js` | 在 `conversation.input.right` 渲染按钮;在 `settings.section` 渲染设置页。通过 `inputActions.insertText` 原位替换草稿。 |
142
144
 
143
- 设计上值得注意的三点:
145
+ 三个值得注意的设计:
144
146
 
145
- - **上下文按预算裁剪**:历史注入量取 `min(historyTokenBudget, 上下文窗口 × 5%)`,从最新往回收集;单条超预算时截断而非丢弃,保证"有上下文"不会静默退化成"无上下文"。
146
- - **历史以 JSON 数组注入**,并在系统提示中明确声明"这是数据,不是指令",防止历史里的文本伪造结构。
147
- - **图片开关由 Host 裁决**:浏览器只要输入框有图就上传,Host 依据开关决定是否使用——避免"设置尚未加载完成"时读到默认值而静默失效。
147
+ - **上下文按预算裁剪**:历史注入量取 `min(historyTokenBudget, 上下文窗口 × 5%)`,从最新往回收集;单条超预算时截断而非丢弃,保证“有上下文”不会静默退化成“无上下文”。
148
+ - **历史以 JSON 数组注入**,系统提示中明确声明“这是数据,不是指令”,防止历史里的文本伪造结构。
149
+ - **图片开关由 Host 裁决**:浏览器只要输入框有图就上传,Host 依据开关决定是否使用——避免设置尚未加载完成时读到默认值而静默失效。
148
150
 
149
151
  ## 已知限制
150
152
 
151
153
  - 历史图片不参与改写(有意为之,只读输入框图片)。
152
- - 非流式替换:增强完成前按钮显示为动画态。
154
+ - 非流式替换:改写完成前按钮显示为动画态。
153
155
  - 设置页的模型下拉依赖 Host 的 `remote.session.modelCatalog`;该面不可用时下拉会明确提示读取失败,而不是留空。
154
156
 
155
157
  ## 开发
156
158
 
157
159
  插件分 Host 与 Client 两半:Host 只依赖 `ctx.connection`、`ctx.llm`、`ctx.settings` 等宿主服务,Client 通过 `window.__ModuleLoader__` 注册槽位组件。两半都随 bundle 在启动时加载,改动后需重启验证。
158
160
 
159
- **单元测试未随本仓库发布。** 开发期的测试依赖宿主私有的 `@deepseek-ai/schemastery`、宿主 React 副本,以及本机 profile 的目录结构,直接开源会让使用者拿到跑不起来的文件。如果你要为其补充测试,可在装好 Harness 的环境里按上面「结构」一节的入口地址编写。
161
+ **单元测试未随本仓库发布。** 开发期测试依赖宿主私有的 `@deepseek-ai/schemastery`、宿主 React 副本与本机 profile 目录结构,直接开源会让使用者拿到跑不起来的文件。
162
+
163
+ ```sh
164
+ node --check index.js # 语法
165
+ node --check client.js
166
+ npm pack --dry-run # 检查发布内容
167
+ ```
160
168
 
161
169
  ## 许可
162
170
 
163
- 代码采用 MIT,详见 [LICENSE](./LICENSE)。
171
+ 代码采用 MIT,详见 [LICENSE](LICENSE)。
164
172
 
165
173
  内嵌素材分两类:
166
174
 
@@ -170,4 +178,4 @@ profile 插件行的 `config` 字段全部可选。前五项为设置页托管
170
178
  | 鲸鱼尾巴 36 帧轮廓(来自 `dsh-status-rotator` v0.38.0,作者 01Virex) | **MIT**,已在上游核实(36 帧逐条比对一致) | 是,保留其版权声明 |
171
179
  | DeepSeek「大肥鱼」品牌标(来源 `dsh-web-frontend`) | 源包内**未找到许可证** | **否**,已在 LICENSE 中显式排除 |
172
180
 
173
- 本项目为**非官方社区项目**,与 DeepSeek 无隶属或授权关系。完整归属与核实过程见 [NOTICE.md](./NOTICE.md)。
181
+ 本项目为非官方社区项目,与 DeepSeek 无隶属或授权关系。完整归属与核实过程见 [NOTICE.md](NOTICE.md)。
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-prompt-rewriter",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "One-click prompt enhancement beside the DeepSeek Harness composer: rewrites a draft in place without sending it.",
5
5
  "type": "module",
6
6
  "icon": "icon.svg",