dsh-composer-live 0.2.11 → 0.2.13
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 +25 -10
- package/README.md +5 -3
- package/README.zh-CN.md +5 -3
- package/client.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
> 更新日志以中文记录。Changelog entries are written in Chinese.
|
|
4
4
|
|
|
5
|
+
## 0.2.13(2026-10-01)
|
|
6
|
+
|
|
7
|
+
**发布仓库隐私整改 + E2E 工具通用化(插件本体零改动)。**
|
|
8
|
+
|
|
9
|
+
- **发布仓库 commit 作者身份修正**:GitHub 仓库全部历史 commit 的作者已重写为 zeusxx(此前误用本机全局 git 身份)。
|
|
10
|
+
- **E2E runner 通用化**(`e2e/run-e2e.mjs`):退役写死本机布局的目标表,改为环境变量推导——`DSH_CL_PORT`(默认 8124)+ `DSH_CL_DSH_HOME`(默认 `DSH_HOME`,再默认 `~/.dsh`)→ 自动定位部署副本;`--target <name>` 保留为纯别名(报告文件名/日志/传给部署脚本)。cookie 与报告文件统一按端口命名(`cookie-<端口>.txt` / `report-last-<端口>.json`);部署副本不存在时跳过版本对照不阻塞;`--with-deploy` 在分发包内(不含部署脚本)给出明确提示。任何布局的实例都能测,不再绑定特定开发机。
|
|
11
|
+
- **文档修复**:CHANGELOG 0.2.3 条目的字面 `` `\n` `` 曾被写成真实换行导致 Markdown 列表损坏(本条已修);0.2.4 条目对 CLAUDE.md 的失效引用改指 `e2e/README.md`;README 双语的 E2E 场景数 53→62 更正。
|
|
12
|
+
|
|
13
|
+
## 0.2.12(2026-10-01)
|
|
14
|
+
|
|
15
|
+
**E2E 测试体系升级为双环境 62 场景(插件本体零改动——本版是测试基建与发布配套)。** v0.2.11 的插件代码在 dsh 0.1.5-rc.2 与 0.2.0-rc.2 两个环境各跑一轮 62 场景全绿,本版把这套测试能力作为包内容发布。
|
|
16
|
+
|
|
17
|
+
- **`--target <8124|020>` 双测试目标**:一套脚本测多个 dsh 版本(0.1.5-rc.2 / 0.2.0-rc.2),`TARGETS` 表可扩展新版本;报告文件按目标分开(`report-last.json` / `report-last-020.json`)。
|
|
18
|
+
- **鉴权 cookie 全自动**:dsh 0.1.5/0.2.0 对无 cookie 的本机请求会在 Set-Cookie 里直接发一个 30 天授权 cookie——runner 自动获取并存 `cookie-<端口>.txt`,不再需要从 DevTools 手动复制。
|
|
19
|
+
- **0.2.0 首访 modal 弹窗自动关闭**:新浏览器 profile 首次打开 0.2.0 会弹「预览版说明」modal,其焦点陷阱会让 `input.focus()`、`execCommand`、合成 beforeinput 全部失效(症状是「时灵时不灵」的插入与删除)——runner 内置 `dismissDialogs` 自动点「继续」;**弹窗未关闭时的测试结果全部作废**。
|
|
20
|
+
- **新增 R 组 9 场景(53→62)**:图片附件在场(打字渲染 / 长文本滚动 / @ 候选菜单贴输入框——对应 v0.2.6-0.2.8 三个附件 bug 的回归)、全选替换 + Ctrl+Z 撤销、Ctrl+Y 重做、窄视口软折行、注入后改视口重排、长文滚动工具栏 sticky 钉顶、空文档基线。
|
|
21
|
+
- `inpage.js` op 集扩充:`attachImage` / `detachImages` / `toolbarClear` / `scrollToolbar` / `menuNearInput` / `snapshotClass`;op 改 async(runner 侧 awaitPromise);`clearDraft` 改用 `Range.selectNodeContents`(`execCommand("selectAll")` 在焦点不在编辑器内时会溢出到页面级)。
|
|
22
|
+
- 视口控制:场景可声明 `viewport` / `resizeAfter`(Emulation.setDeviceMetricsOverride),覆盖窄窗口软折行与 resize 重渲染路径。
|
|
23
|
+
- INV-8 白名单:0.2.0-rc.2 刷新页面时 sidebar.footer slot 第三方插件的 React #130 噪音(官方错误边界兜住、与输入框插件无关)。
|
|
24
|
+
- 部署脚本 `deploy.mjs` 同步支持 `--target`(不进发布包,随私有仓库分发)。
|
|
25
|
+
|
|
5
26
|
## 0.2.11(2026-09-27)
|
|
6
27
|
|
|
7
28
|
- **README 配图**:双语 README 的截图段落补齐三张实拍(docs/screenshots/)——实时渲染全景(行内格式/任务列表/引用块/链接)、代码块(语法高亮/语言标签/等宽)、选区浮动格式条。新增 `e2e/capture-shots.mjs` 截图脚本(复用 E2E 链路:独立 Chrome + CDP + cookie,注入演示草稿后按输入卡元素截取,画面不含侧栏)。
|
|
@@ -45,7 +66,7 @@
|
|
|
45
66
|
|
|
46
67
|
**E2E 自动化测试体系建成 + 长文本五处真 bug 修复(全部由测试矩阵定位)。**
|
|
47
68
|
|
|
48
|
-
新增 `e2e/`:一条命令(`node e2e/run-e2e.mjs --with-deploy`)在真浏览器里跑 44 个场景 × 10 条不变量——六种注入通道复刻真实输入形态(字面
|
|
69
|
+
新增 `e2e/`:一条命令(`node e2e/run-e2e.mjs --with-deploy`)在真浏览器里跑 44 个场景 × 10 条不变量——六种注入通道复刻真实输入形态(字面 `\n`/字面 `\r\n`/逐行 br/insertParagraph/合成 paste/刷新恢复多 p),逐字符对比「渲染段内字符真实 rect vs 编辑器字符 rect」(INV-3)、行距均匀性(INV-6,多余空白探测器)、caret 采样对齐(INV-7)等。详细设计见 `e2e/README.md`。
|
|
49
70
|
|
|
50
71
|
测试暴露并修复的 bug(此前 25/44 场景失败):
|
|
51
72
|
|
|
@@ -53,17 +74,11 @@
|
|
|
53
74
|
- **CRLF 粘贴「多余空白/行错乱」(用户头号问题)**:段 text 里的 `\r` 经 `innerHTML` 被浏览器规范化成 `\n`(HTML 解析规则),pre-wrap 段内凭空多出真换行。修法:段 text 剔除 `\r`(视觉零宽,与编辑器换行语义一致)+ escapeHtml 补 ` ` 实体通道。
|
|
54
75
|
- **行内代码文字恒低 1px**:cd/img 胶囊 `padding:1px 5px` 横向有负 margin 补偿、垂直没有——绝对定位段的内容下移 padding-top。修法:`margin:-1px -5px` 四向补偿。
|
|
55
76
|
- **大段粘贴形态下代码块等宽完全失效**:MONO 打点循环的行号推进只认 br/para 锚,字面 \n 单文本锚跨全部行使 lineIdx 恒 0;且单锚跨 N 行时 DOM 无法按行换字体。修法:回退 v0.1.x「整框等宽」语义(文档含已闭合代码块 → 编辑器整框 + 渲染全段同步切等宽合成栈)。
|
|
56
|
-
- **Maple Mono NF CN 漏剔**:合成栈未滤名含 NF CN 的字体(自带中文 1.2em 字形),代码块中文 advance 两侧不一致。修法:CJK 关键词清单补 "nf cn"(与
|
|
77
|
+
- **Maple Mono NF CN 漏剔**:合成栈未滤名含 NF CN 的字体(自带中文 1.2em 字形),代码块中文 advance 两侧不一致。修法:CJK 关键词清单补 "nf cn"(与 0.1.x 版本的度量保护一致)。
|
|
57
78
|
|
|
58
79
|
## 0.2.3(2026-09-16)
|
|
59
80
|
|
|
60
|
-
- **长文本粘贴「一片空白」真正根因修复**:粘贴的大段文本在编辑器里是「单个文本节点内含字面
|
|
61
|
-
」(官方 paste 管线的 insertText 不把
|
|
62
|
-
转成换行元素)——渲染侧行列表按
|
|
63
|
-
切成了 N 行,但字符测量的行号推进只认 DOM 换行元素(br/段落边界),字面
|
|
64
|
-
不推进——1669 个字符全被记到第 0 行,而第 0 行的文本只有 40 个字,后续字符取字越界返回空串 → 40 个渲染段只有第 1 段有字、其余全空 → 可见区一片空白(刷新后正常是因为草稿恢复走 setDraft 产多段落结构,不经此路径)。修法:测量的行号推进同样认文本节点内的字面
|
|
65
|
-
(与 split("
|
|
66
|
-
") 的行边界一致,off 用负偏移补偿保持行内偏移语义)。
|
|
81
|
+
- **长文本粘贴「一片空白」真正根因修复**:粘贴的大段文本在编辑器里是「单个文本节点内含字面 `\n`」(官方 paste 管线的 insertText 不把 `\n` 转成换行元素)——渲染侧行列表按 `\n` 切成了 N 行,但字符测量的行号推进只认 DOM 换行元素(br/段落边界),字面 `\n` 不推进——1669 个字符全被记到第 0 行,而第 0 行的文本只有 40 个字,后续字符取字越界返回空串 → 40 个渲染段只有第 1 段有字、其余全空 → 可见区一片空白(刷新后正常是因为草稿恢复走 setDraft 产多段落结构,不经此路径)。修法:测量的行号推进同样认文本节点内的字面 `\n`(与 `split("\n")` 的行边界一致,off 用负偏移补偿保持行内偏移语义)。
|
|
67
82
|
|
|
68
83
|
## 0.2.2(2026-09-14)
|
|
69
84
|
|
|
@@ -94,7 +109,7 @@
|
|
|
94
109
|
|
|
95
110
|
## 0.1.0(2026-09-12)
|
|
96
111
|
|
|
97
|
-
初版(129 项单测 +
|
|
112
|
+
初版(129 项单测 + 实例实测 E2E 全过):
|
|
98
113
|
|
|
99
114
|
- markdown 实时渲染(透明编辑器 + overlay 渲染层,源文原样保留)
|
|
100
115
|
- 代码块体验:未闭合围栏不渲染、Shift+Enter 自动补全封闭块、↓ 跳出、Tab 缩进、语法高亮、语言标签、行级等宽
|
package/README.md
CHANGED
|
@@ -152,11 +152,13 @@ See [docs/architecture.md](./docs/architecture.md) for the full deep dive.
|
|
|
152
152
|
## Development
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
node test-live.cjs
|
|
156
|
-
node e2e/run-e2e.mjs
|
|
155
|
+
node test-live.cjs # 188 unit tests (pure functions, no browser needed)
|
|
156
|
+
node e2e/run-e2e.mjs # 62-scenario × 10-invariant E2E suite against a live instance
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
-
The E2E
|
|
159
|
+
The E2E runner expects a DSH web instance with this source deployed and derives everything from environment variables: `DSH_CL_PORT` (default 8124) and `DSH_CL_DSH_HOME` (defaults to `DSH_HOME`, then `~/.dsh`) locate the deployed copy for a version check; the auth cookie is fetched automatically. See [e2e/README.md](./e2e/README.md) for the full variable list.
|
|
160
|
+
|
|
161
|
+
The suite replays six real input channels (literal `\n` / literal `\r\n` / line-by-line br / insertParagraph / synthetic paste / refresh-restore multi-paragraph) and cross-checks an independent projection against the plugin's own, character by character.
|
|
160
162
|
|
|
161
163
|
Version discipline: every change bumps `package.json` and gets a [CHANGELOG.md](./CHANGELOG.md) entry.
|
|
162
164
|
|
package/README.zh-CN.md
CHANGED
|
@@ -152,11 +152,13 @@ DSH_HOME=/path/to/your/.dsh dsh plugin --profile web add dsh-composer-live
|
|
|
152
152
|
## 开发
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
node test-live.cjs
|
|
156
|
-
node e2e/run-e2e.mjs
|
|
155
|
+
node test-live.cjs # 188 项单测(纯函数,无需浏览器)
|
|
156
|
+
node e2e/run-e2e.mjs # 62 场景 × 10 不变量的 E2E 套件(对着运行中的实例测)
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
-
E2E
|
|
159
|
+
E2E runner 要求被测实例已部署当前源码,路径全部由环境变量推导:`DSH_CL_PORT`(默认 8124)与 `DSH_CL_DSH_HOME`(默认取 `DSH_HOME`,再默认 `~/.dsh`)定位部署副本做版本对照,鉴权 cookie 自动获取。完整变量表见 [e2e/README.md](./e2e/README.md)。
|
|
160
|
+
|
|
161
|
+
套件复刻六种真实输入通道(字面 `\n` / 字面 `\r\n` / 逐行 br / insertParagraph / 合成 paste / 刷新恢复多段落),用一份独立投影与插件自身的投影逐字符交叉验证。
|
|
160
162
|
|
|
161
163
|
版本纪律:每次改动 bump `package.json` 并在 [CHANGELOG.md](./CHANGELOG.md) 记一笔。
|
|
162
164
|
|
package/client.js
CHANGED
|
@@ -827,7 +827,7 @@ window.__ModuleLoader__.load({
|
|
|
827
827
|
"." + TOOLBAR + "{position:sticky;top:0;left:0;right:0;z-index:60;display:flex;align-items:center;box-sizing:border-box;height:38px;padding:0 10px;gap:2px;background:rgba(28,30,36,.95);border-bottom:1px solid rgba(127,127,127,.16);}" +
|
|
828
828
|
// sticky 工具栏钉滚动视口顶(v0.2.8):内容从其下方滚过永不重叠;附件栏在
|
|
829
829
|
// 滚动容器外,scroll 顶=附件栏底,天然让位(v0.2.7 的让位变量退役)。背景色
|
|
830
|
-
//
|
|
830
|
+
// 必须不透明——滚动内容从下方经过(实测反馈「工具栏透明」问题的根治)。
|
|
831
831
|
"body.dsh-cl-light ." + TOOLBAR + "{background:rgba(250,251,253,.97);border-bottom-color:rgba(0,0,0,.08);}" +
|
|
832
832
|
"." + TOOLBAR + " [data-cl=\"expand\"]{margin-left:auto;}" +
|
|
833
833
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-composer-live",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "DSH Web 0.1.5+ 输入框增强(Lexical contenteditable 架构版):markdown 实时渲染 + 代码块语法高亮/段落级等宽 + 格式工具栏(常驻顶条 + 选区浮动条)+ 70vh 展开 + 大段粘贴包代码块 + Esc 分发。纯浏览器端插件,零依赖,不改官方源码。仿 Open WebUI 输入体验。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|