dsh-multiline-input 0.0.0-stage → 0.1.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/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +136 -2
- package/ROADMAP.md +33 -0
- package/assets/icon-180.png +0 -0
- package/assets/screenshot-1-single-line.png +0 -0
- package/assets/screenshot-2-multiline.png +0 -0
- package/client.js +644 -0
- package/cordis.patch.yml +9 -0
- package/docs/PLAN-2026-10-27.md +227 -0
- package/docs/RELEASE-CHECKLIST-0.1.0.md +69 -0
- package/docs/RELEASE-CHECKLIST-0.1.1.md +58 -0
- package/icon.svg +4 -0
- package/index.js +17 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +70 -4
- package/screenshots.json +4 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.1 — 2026-10-29
|
|
4
|
+
|
|
5
|
+
修复 0.1.0 的 tab 压住输入框上方卡片的问题:[npm](https://www.npmjs.com/package/dsh-multiline-input) · [GitHub Release](https://github.com/ZilongYang/dsh-multiline-input/releases/tag/v0.1.1)
|
|
6
|
+
|
|
7
|
+
- tab 提示从 `conversation.input.overlay` 浮层改到 `conversation.input.dock` 座位里的一行(`order: 1000`,紧贴输入卡片上方),占 24px 真实布局:不再覆盖目标条(GoalBar)的文案与暂停 / 编辑 / 清除按钮,也不会被待办、队列、额度横条等卡片撞到。
|
|
8
|
+
- tab 行按运行时读到的 composer 栈 `row-gap` 自适应(dock 6px / hero 8px),底边始终与卡片上沿齐平,外观与 0.1.0 一致(仍是「卡片肩上的 tab」)。
|
|
9
|
+
- 观感变化:输入区比 0.1.0 高约 18px(消息区相应少 18px),composer 上方的 dock 卡片整体上移 24px。
|
|
10
|
+
- 测试:新增「tab 座位必须是 `conversation.input.dock`、且 order 排在全部内置条目之后」的断言。
|
|
11
|
+
|
|
12
|
+
## 0.1.0 — 2026-10-28
|
|
13
|
+
|
|
14
|
+
首个公开发布版本:[npm](https://www.npmjs.com/package/dsh-multiline-input) · [GitHub Release](https://github.com/ZilongYang/dsh-multiline-input/releases/tag/v0.1.0) · [市场 PR #9938](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9938)(条目校验已过,等仓库满 24h 自动合并门槛)。
|
|
15
|
+
|
|
16
|
+
- 对话输入框单行 / 多行双态切换,模式按设备持久化。
|
|
17
|
+
- 通过 DSH 官方快捷键服务注册 `multiline-input.toggle`:桌面默认 `Cmd+E`(macOS)/ `Ctrl+E`(Windows / Linux),可在「设置 → 通用 → 快捷键」改绑、恢复默认、查看冲突。
|
|
18
|
+
- 输入框上沿常驻 tab 提示(与卡片同底色、底部淡分割线):实时显示当前生效键位与目标模式;点击可切换。
|
|
19
|
+
- 多行模式最小高度 4 行,内容变多自动长高(沿用 DSH 的 336px 滚动上限)。
|
|
20
|
+
- 多行模式 Enter 换行、Shift+Enter 发送;`Cmd/Ctrl+Enter`、斜杠 / 引用菜单、输入法组合态保持原有语义。
|
|
21
|
+
- 卸载 / 禁用后恢复原生输入框,无 DOM、样式、监听残留。
|
|
22
|
+
- 市场素材:`screenshots.json` + `assets/` 两张截图(1360 宽)。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ZilongYang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,137 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-multiline-input
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 官网 / Website: <https://dsh.zlmix.com/multiline-input/>
|
|
4
|
+
|
|
5
|
+
[npm](https://www.npmjs.com/package/dsh-multiline-input) · [GitHub](https://github.com/ZilongYang/dsh-multiline-input) · [Release v0.1.1](https://github.com/ZilongYang/dsh-multiline-input/releases/tag/v0.1.1) · [市场 PR #9938](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9938)
|
|
6
|
+
|
|
7
|
+
把 DeepSeek Harness 的对话输入框在**单行 / 多行**之间切换的 Web 客户端插件。
|
|
8
|
+
|
|
9
|
+
- 默认快捷键 **Cmd+E(macOS)/ Ctrl+E(Windows / Linux)**;输入框上沿有一个与输入框同底色的小 **tab** 显示当前快捷键与目标模式,点击即可切换。
|
|
10
|
+
- 多行模式输入框默认 **4 行高**(3–5 行区间内),内容变多自动长高,到原生 336px 上限后滚动。
|
|
11
|
+
- 多行模式 **Enter 换行、Shift+Enter 发送**;单行模式保持 DSH 原生行为(Enter 发送、Shift+Enter 换行)。
|
|
12
|
+
- 快捷键可在 **设置 → 通用 → 快捷键**里改成任意组合(冲突校验、恢复默认都由 DSH 官方界面负责)。
|
|
13
|
+
- 模式按设备记住,刷新 / 重启后保持。
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
## 安装
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
# 市场 / CLI 管理的 profile
|
|
23
|
+
dsh plugin --profile <profile> add dsh-multiline-input
|
|
24
|
+
|
|
25
|
+
# 或在应用内「插件」页搜索 / 用绝对路径安装后启用
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
桌面版使用的 `desktop` profile 由应用独占(`dsh plugin --profile desktop` 会被拒绝),请在应用「插件」页安装或手动 link:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
cd ~/.dsh/profiles/desktop
|
|
32
|
+
pnpm add link:/absolute/path/to/dsh-multiline-input
|
|
33
|
+
# 再把 "dsh-multiline-input" 追加到 package.json 的 dsh.profile.bundles
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
启用后刷新页面即可;插件清单变化不需要重启应用。
|
|
37
|
+
|
|
38
|
+
**卸载**:插件页关闭 / 卸载,或 `dsh plugin --profile <profile> remove dsh-multiline-input`。
|
|
39
|
+
|
|
40
|
+
## 使用
|
|
41
|
+
|
|
42
|
+
| 操作 | 单行模式 | 多行模式 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `Enter` | 发送 | 换行 |
|
|
45
|
+
| `Shift+Enter` | 换行 | 发送 |
|
|
46
|
+
| `Cmd/Ctrl+Enter` | 加速提交(不变) | 加速提交(不变) |
|
|
47
|
+
| `/`、`@` 菜单打开时的 `Enter` | 选中菜单项 | 选中菜单项 |
|
|
48
|
+
| 输入法候选态的 `Enter` | 交给输入法 | 交给输入法 |
|
|
49
|
+
|
|
50
|
+
- 按 `Cmd+E` / `Ctrl+E`(或点击 tab)在两种模式间循环;切换不清空草稿、不抢焦点。
|
|
51
|
+
- tab **常驻显示**,输入文字时也不隐藏;多行时显示 `Shift+Enter 提交 · Cmd+E 单行输入`,单行时显示 `Cmd+E 多行输入`。
|
|
52
|
+
- tab 是输入框上方**独立的一行**(占 24px):目标条、待办、队列、额度横条等 DSH 卡片排在它上面,不会被遮住;目标条的暂停 / 编辑 / 清除按钮也能正常点击。
|
|
53
|
+
|
|
54
|
+
## 修改快捷键
|
|
55
|
+
|
|
56
|
+
1. 打开 **设置 → 通用 → 快捷键**;
|
|
57
|
+
2. 搜索「多行输入」(命令名:**切换多行输入**,id `multiline-input.toggle`);
|
|
58
|
+
3. 点击右侧键位进入录制,按下新组合即可;冲突时官方界面会提示,可随时恢复默认。
|
|
59
|
+
|
|
60
|
+
tab 实时跟随当前生效的组合;把绑定清空后只显示「多行输入 / 单行输入」,点击仍可切换。
|
|
61
|
+
|
|
62
|
+
## 与相近插件的区别
|
|
63
|
+
|
|
64
|
+
| 插件 | 它做什么 | 本插件 |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `dsh-composer-expand` | 工具行按钮把输入框撑到 70vh | 双模式 + 快捷键 + Enter/Shift+Enter 互换 + 常驻 tab |
|
|
67
|
+
| `dsh-fullscreen-input` | 另开全屏面板写多行,Enter 换行、Ctrl+Enter 发送 | 内联在原生输入框,多行时 Shift+Enter 发送(带输入法保护) |
|
|
68
|
+
| `dsh-ctrl-enter-submit` | 全局把 Enter 改成换行、Ctrl/Cmd+Enter 发送 | 单行保持原生 Enter 发送,多行才交换 |
|
|
69
|
+
| `dsh-composer-ux` | 可配置发送/换行键位 + 右键菜单 + 快捷指令面板 | 只专注输入模式与高度 |
|
|
70
|
+
| `dsh-keyboard-manager` | Ctrl+Q / **Ctrl+E** / Ctrl+S 切栏、开设置 | Windows/Linux 上它的 Ctrl+E 与本插件默认冲突;可在设置里改键(macOS 本插件用 Cmd+E,不冲突) |
|
|
71
|
+
|
|
72
|
+
## 实现说明
|
|
73
|
+
|
|
74
|
+
插件遵守 DSH 的第三方客户端插件契约(`dsh.client` + `dsh.bundle.patch`),Host 半只保留一个可安装 / 启停的 bundle row,功能全部在 `client.js`:
|
|
75
|
+
|
|
76
|
+
- **模式状态**:模块级 store + `localStorage['dsh-multiline-input.mode.v1']`,投影为 `<html data-dsh-ml-input="multi">`;
|
|
77
|
+
- **高度**:一条 CSS 规则给 `[data-composer-card] [data-composer-input][contenteditable="true"]` 设 `min-height: calc(4 * 1lh + 8px)`,不碰 DSH 的滚动上限;
|
|
78
|
+
- **tab 提示**:注册到 `conversation.input.dock` 座位(`order: 1000`,排在 todo 0 / 额度横条 5 / 目标条 10 / 队列 20 之后),成为输入卡片正上方**独立的一行**:整行只有 24px,宽度与卡片同列、tab 右对齐到卡片右边缘;`margin-bottom` 吃掉栈的行距(dock 态 6px、hero 态 8px,运行时按实际 `row-gap` 同步),让 tab 底边与卡片上沿齐平、视觉上仍是「卡片肩上的 tab」,但因为占位而**不可能压到任何上方卡片**。旧实现走 `conversation.input.overlay` 浮层(`bottom: 100%` + `z-index: 2`),会盖住目标条右侧的文案与暂停 / 编辑 / 清除按钮;
|
|
79
|
+
- **Enter / Shift+Enter**:在 document 捕获阶段拦下多行模式下的 `Enter`,向编辑器重放一个翻转了 `shiftKey` 的合成按键——仍由 DSH 自己的 composer keymap 决定「换行」还是「提交」,撤销历史、输入法保护、busy-enter(queue/steer)、菜单仲裁全部保持原逻辑;
|
|
80
|
+
- **快捷键**:通过 `ctx.shortcuts.register()` 注册命令,编辑与持久化完全交给 DSH。
|
|
81
|
+
|
|
82
|
+
源码依据(DSH `0.2.1-rc.3`,commit `22ddee3`):
|
|
83
|
+
|
|
84
|
+
| 契约 | 源码文件 |
|
|
85
|
+
|---|---|
|
|
86
|
+
| 输入卡片 / 覆盖层锚点 | `packages/client/ui-conversation/src/client/skeleton/InputBar.tsx`、`InputBar.module.css` |
|
|
87
|
+
| composer 卡片栈(`conversation.input.dock`) | `packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx`、`ConversationRoot.module.css` |
|
|
88
|
+
| 可编辑面 / 占位符 | `packages/client/ui-conversation/src/client/input/editor/DraftEditor.tsx`、`ComposerContentEditable.tsx` |
|
|
89
|
+
| Enter 语义 | `packages/client/ui-conversation/src/client/input/editor/keymap.ts` |
|
|
90
|
+
| 公开输入动作面 | `packages/client/ui-conversation/src/client/contract/input.ts` |
|
|
91
|
+
| 座位与标准 props | `packages/client/ui-conversation/src/client/contract/slots.ts`、`packages/extensions/cordis-client-runner/src/client/slot-catalog.ts` |
|
|
92
|
+
| 快捷键命令契约 | `packages/client/shortcuts/src/client/types.ts`、`binding.ts` |
|
|
93
|
+
| 客户端清单 | `packages/util/package-manifest/src/types.ts`、`packages/client/modules/README.zh.md` |
|
|
94
|
+
|
|
95
|
+
## 兼容性
|
|
96
|
+
|
|
97
|
+
- 在 DSH **0.2.1-rc.3**(桌面版 / Web)验证;`dsh.compatibility.dsh` = `>=0.2.1-rc.3 <0.3.0-0`。
|
|
98
|
+
- 依赖 composer 的 `data-*` 锚点与 `role="listbox"`,属 DSH 内部实现;升级 DSH 后需要回归(锚点缺失时插件只 warn,不会崩)。
|
|
99
|
+
- tab 行的宽度与右对齐复用了 DSH 布局变量 `--dsh-composer-card-max-width` / `--dsh-composer-side-clearance`(都带兜底值),若 DSH 改了输入区宽度算法,tab 会与卡片右边缘错开几像素。
|
|
100
|
+
- Web + Linux 没有默认快捷键(DSH 对 Web 可选组合有白名单限制),需在设置里自行指定。
|
|
101
|
+
|
|
102
|
+
## 开发
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
dsh-multiline-input/
|
|
106
|
+
├── package.json # dsh.bundle.patch + dsh.client(platform: web)
|
|
107
|
+
├── cordis.patch.yml # 1 个 Host row
|
|
108
|
+
├── index.js # Host 半(空实现,仅为 bundle 契约)
|
|
109
|
+
├── client.js # Client 半(手写,无构建、无第三方依赖)
|
|
110
|
+
├── icon.svg / assets/ # 插件图标与市场截图
|
|
111
|
+
├── locale/{zh,en}.json # 插件展示元数据
|
|
112
|
+
├── test/ # node --test
|
|
113
|
+
└── docs/ # 计划、发版清单
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
- 测试:`npm test`(`node --test`,当前 13 条用例)。
|
|
117
|
+
- 语法:`node --check client.js && node --check index.js`。
|
|
118
|
+
- 调试:HMR 默认忽略 `**/node_modules`,链接安装的 `client.js` 改动不会被热加载;改完客户端代码后在插件页关/开一次(或重启应用),再刷新页面。
|
|
119
|
+
|
|
120
|
+
## 已知限制
|
|
121
|
+
|
|
122
|
+
- 仅作用于 Web GUI(桌面版与浏览器),TUI / CLI 不适用。
|
|
123
|
+
- 多行起始高度是代码常量 4 行,暂不提供配置项。
|
|
124
|
+
- tab 行占输入框上方 24px:输入区整体比没有 tab 时高约 18px(24px 行高抵掉 6px 栈间距),消息区相应少 18px。
|
|
125
|
+
- hero(空会话)状态下栈行距是 8px,tab 行会按运行时读到的实际 `row-gap` 自适应,视觉上与 dock 态一致。
|
|
126
|
+
- 若默认键位与其它插件的命令默认值冲突,插件会降级为「点击 tab 切换」并在控制台输出一次警告。
|
|
127
|
+
|
|
128
|
+
## 文档
|
|
129
|
+
|
|
130
|
+
- [实施计划(2026-10-27)](docs/PLAN-2026-10-27.md)
|
|
131
|
+
- 发版检查清单:[0.1.1](docs/RELEASE-CHECKLIST-0.1.1.md)、[0.1.0](docs/RELEASE-CHECKLIST-0.1.0.md)
|
|
132
|
+
- [路线图](ROADMAP.md)
|
|
133
|
+
- [变更记录](CHANGELOG.md)
|
|
134
|
+
|
|
135
|
+
## License
|
|
136
|
+
|
|
137
|
+
MIT
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ROADMAP
|
|
2
|
+
|
|
3
|
+
## 0.1.0(2026-10-28 已发布)
|
|
4
|
+
|
|
5
|
+
- [x] 单行 / 多行双态切换,模式按设备持久化(`localStorage`)
|
|
6
|
+
- [x] 官方快捷键命令(`multiline-input.toggle`;macOS `Cmd+E`,Windows / Linux `Ctrl+E`,可在设置中改绑)
|
|
7
|
+
- [x] 输入框上沿常驻 tab 提示(同底色、实时显示当前生效键位与目标模式,可点击切换)
|
|
8
|
+
- [x] 多行模式 4 行起高,随内容长高,沿用 DSH 336px 滚动上限
|
|
9
|
+
- [x] 多行模式 Enter 换行 / Shift+Enter 发送,保留撤销、输入法、菜单、busy-enter 语义
|
|
10
|
+
- [x] 与 composer 其它输入框、设置弹窗、斜杠菜单互不干扰
|
|
11
|
+
- [x] 单元测试(`node --test`)与静态检查
|
|
12
|
+
- [x] 发布:npm 0.1.0、GitHub Release `v0.1.0`、awesome-dsh-plugin PR #9938(等仓库满 24h 自动过门槛)
|
|
13
|
+
|
|
14
|
+
## 0.1.1(2026-10-29 已发布,布局修复)
|
|
15
|
+
|
|
16
|
+
- [x] tab 提示从 `conversation.input.overlay` 浮层改到 `conversation.input.dock` 独立一行(`order: 1000`,紧贴卡片上方):不再压住目标条文案与暂停 / 编辑 / 清除按钮,也不会被以后新增的 composer 卡片覆盖
|
|
17
|
+
- [x] tab 行按运行时读到的栈 `row-gap` 自适应(dock 6px / hero 8px),底边始终与卡片上沿齐平
|
|
18
|
+
- [x] 子龙刷新后确认观感(目标条三个图标完整可见可点、tab 仍在卡片肩上)
|
|
19
|
+
- [x] 发布:版本号 `0.1.1`、CHANGELOG、`npm publish`、GitHub Release `v0.1.1`,清单见 [docs/RELEASE-CHECKLIST-0.1.1.md](docs/RELEASE-CHECKLIST-0.1.1.md)
|
|
20
|
+
|
|
21
|
+
## 0.2.0 候选
|
|
22
|
+
|
|
23
|
+
- [ ] 起始行数可配置(3–5 行),通过 Host `Config` + 插件详情页
|
|
24
|
+
- [ ] 按会话记忆模式(当前为全局 / 按设备)
|
|
25
|
+
- [ ] 若 DSH 提供公开的 composer 输入扩展点,替换现有的 DOM 事件接管
|
|
26
|
+
- [ ] DSH 下一个版本线的兼容回归(DOM 锚点 / `Shortcuts` 契约)
|
|
27
|
+
|
|
28
|
+
## 文档
|
|
29
|
+
|
|
30
|
+
- 计划:[docs/PLAN-2026-10-27.md](docs/PLAN-2026-10-27.md)
|
|
31
|
+
- 发版清单:[docs/RELEASE-CHECKLIST-0.1.1.md](docs/RELEASE-CHECKLIST-0.1.1.md)、[0.1.0](docs/RELEASE-CHECKLIST-0.1.0.md)
|
|
32
|
+
- npm:<https://www.npmjs.com/package/dsh-multiline-input>
|
|
33
|
+
- GitHub Release:<https://github.com/ZilongYang/dsh-multiline-input/releases/tag/v0.1.1>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|