@tom2012/dsh-pomodoro-overlay 0.1.1 → 0.1.2

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,26 +1,28 @@
1
1
  # @tom2012/dsh-pomodoro-overlay
2
2
 
3
- 为 DeepSeek Harness Web 设计的自动循环番茄钟。启动后无需点击,自动进行「专注 → 休息 → 专注」循环;一个尽量铺满聊天消息区的半透明大倒计时,不覆盖侧栏和底部输入框。
3
+ 为 DeepSeek Harness Web 设计的自动循环番茄钟。新计时或已运行的计时无需点击,自动进行「专注 → 休息 → 专注」循环;一个尽量铺满聊天消息区的半透明大倒计时,不覆盖侧栏和底部输入框。旧版暂停快照的兼容行为见下文。
4
4
 
5
5
  ## 功能
6
6
 
7
- - **自动循环**:默认专注 25 分钟、休息 5 分钟;原生配置读取完成后自动开始。
7
+ - **自动循环**:默认专注 25 分钟、休息 5 分钟;没有有效快照时,原生配置读取完成后自动开始。已运行快照继续按时间线推进,旧版暂停快照保持暂停。
8
8
  - **聊天区大倒计时**:按消息区实际宽高和文字宽度自适应,保持数字比例,不裁切。
9
9
  - **可配置阶段外观**:默认专注浅灰 `#9ca3af` / 10% 不透明度,休息红 `#ef4444` / 30% 不透明度;颜色和不透明度均可调整。
10
10
  - **可配置时钟字体**:专注与休息共用,默认等线(DengXian);可输入本机已安装字体,未安装时回退到本机无衬线字体,不下载字体。
11
11
  - **DSH 原生设置页**:在 DSH 设置窗口的「番茄钟」页修改字体及两种阶段的时长、颜色和不透明度;七个字段一次原子保存,revision 防止并发覆盖。
12
12
  - **纯展示聊天层**:聊天区只有大倒计时,没有“专注 / 休息”可见标签,也没有暂停、跳过、重置等控制按钮。
13
- - **刷新恢复**:运行状态保存绝对截止时间,刷新、切标签页、休眠或重开页面后按原时间线恢复,不通过 interval 递减计时。
13
+ - **刷新恢复**:运行状态保存绝对截止时间;刷新、切标签页、休眠或重开页面后,运行中的计时按原时间线恢复,暂停快照保持暂停,不通过 interval 递减计时。
14
14
  - **低干扰**:数字层鼠标穿透;没有声音、系统通知、网络请求、模型工具或额外后台服务。
15
15
 
16
16
  ## 安装
17
17
 
18
- npm 包名:`@tom2012/dsh-pomodoro-overlay`。
18
+ 从 npm 安装并注册到 DSH Web profile:
19
19
 
20
20
  ```bash
21
- npm install @tom2012/dsh-pomodoro-overlay
21
+ dsh plugin --profile web add @tom2012/dsh-pomodoro-overlay
22
22
  ```
23
23
 
24
+ 不要同时启用旧无作用域包 `dsh-pomodoro-overlay` 与 scoped 新包,以免两个实例读写同一运行状态。普通 `npm install` 只安装 Node 依赖,不会向 DSH profile 注册插件。
25
+
24
26
  从源码安装到 DSH 时,在本目录执行:
25
27
 
26
28
  ```bash
@@ -43,19 +45,26 @@ dsh plugin --profile web add "$(pwd)"
43
45
  - **数字不透明度**:0–100%,默认 10% / 30%。
44
46
  5. 查看使用所选字体的草稿预览,点击「保存设置」;如需还原未保存草稿,点击「放弃修改」。
45
47
 
46
- **配置生效规则:不打断当前计时。** 字体、颜色和不透明度保存后立即应用;当前阶段的时长与截止时间不变,新时长从下一阶段开始生效。聊天区不提供控制按钮,计时会按配置自动循环。
48
+ **配置生效规则:不打断当前计时。** 字体、颜色和不透明度保存后立即应用;当前阶段的时长与截止时间不变,新时长从下一阶段开始生效。聊天区不提供控制按钮,运行中的计时会按配置自动循环;旧版暂停快照见下文。
47
49
 
48
50
  ## 恢复与多标签语义
49
51
 
50
- - 页面关闭时没有浏览器计时器或通知在运行;但绝对时间线仍有效,重开后会落到当前应有阶段。
51
- - 长时间离线按完整周期做算术跳跃,不逐分钟循环,也不补发历史提醒。
52
- - localStorage 不可用时自动退化为当前页面内存计时,阶段切换仍继续;刷新后可能重置。
53
- - 多个同源标签页通过 `storage` 事件尽力同步。没有 Web Locks,不承诺并发操作下的严格 exactly-once;本插件也不发送完成通知,因此不存在通知风暴。
52
+ - 页面关闭时没有浏览器计时器或通知在运行;运行中的绝对时间线仍有效,重开后会落到当前应有阶段,暂停快照则继续保持暂停。
53
+ - 运行中的计时长时间离线后按完整周期做算术跳跃,不逐分钟循环,也不补发历史提醒。
54
+ - **旧版暂停快照**:旧版本留下的 `running: false` 状态会原样恢复,当前聊天区又没有“继续”按钮,因此不会自行恢复自动循环。若要放弃旧暂停状态并重新开始,可在浏览器开发者工具控制台执行以下命令;这会重置当前计时,但不会修改 DSH 设置,也不要清空整个 localStorage:
55
+
56
+ ```js
57
+ localStorage.removeItem('dsh-pomodoro-overlay:state:v1')
58
+ location.reload()
59
+ ```
60
+
61
+ - localStorage 不可用时自动退化为当前页面内存计时,运行中的阶段切换仍继续;刷新后可能重置。
62
+ - 多个同源标签页通过 `storage` 事件尽力同步,暂停快照也按同一机制同步。没有 Web Locks,不承诺并发操作下的严格 exactly-once;本插件也不发送完成通知,因此不存在通知风暴。
54
63
  - 原生周期与外观配置保存在 DSH profile;运行状态保存在当前浏览器同源 localStorage,二者用途不同。
55
64
 
56
65
  ## 兼容性边界
57
66
 
58
- 已在 **DSH 0.2.1-rc.2** 的真实 Web GUI 中验证;本次环境的既有插件冲突及隔离方式见 [验证记录](docs/verification.md)。
67
+ 开发与历史 GUI 基线版本为 **DSH 0.2.1-rc.2**。历史真实 GUI 结果、当前自动化验证范围及尚未完成的 GUI 验收项均见 [验证记录](docs/verification.md),不将历史结果视为当前版本的完整验收。
59
68
 
60
69
  当前 DSH 没有公开的“聊天消息区 additive overlay”slot,因此插件使用公开的 `shell.overlay`,再只读测量以下 Conversation DOM 标记,将实际覆盖范围限制在消息区:
61
70
 
@@ -89,15 +98,15 @@ npm test # node:test
89
98
  node tools/build.mjs --check # 检查构建产物是否过时
90
99
  ```
91
100
 
92
- 测试覆盖:自动循环、精确边界、跨多个离线周期、旧/新配置语义、颜色、不透明度与字体校验、字体栈、外观即时更新、暂停继续、跳过/重置、损坏快照、存储失败、多标签旧事件、dispose、聊天区几何、Host schema、原生设置 slot,以及构建后客户端的加载/启动/清理冒烟。
101
+ 测试覆盖:自动循环、精确边界、跨多个离线周期、旧/新配置语义、颜色、不透明度与字体校验、字体栈、store 层外观即时更新语义、暂停继续、跳过/重置、损坏快照、存储失败、多标签旧事件、dispose、聊天区几何、Host schema、原生设置 slot,以及构建后客户端加载、store 启动、slots 注册和 style / store 监听 / interval 清理冒烟。客户端冒烟不挂载 `ActiveOverlay`,不等同于完整 overlay DOM 与观察器清理测试。
93
102
 
94
103
  ## 验证结果
95
104
 
96
- - `npm run verify` 通过,**38/38 自动化测试通过**;独立审查及 896 组状态机对拍未发现算术跳周期错误。
97
- - 真实 DSH GUI 已验证自动启动、1/1 分钟自动双向循环、刷新恢复、灰/红半透明配色、原生设置保存与当前截止时间不变。
98
- - 桌面与 380px 窄窗口均精确匹配聊天消息区并扣除输入框;数字无裁切,聊天区无控制按钮,非聊天视图隐藏。
99
- - 测试用的 1/1 配置已恢复为 **25/5**。
100
- - 完整结果与既有 `file-tree` / 内置 `sidebar-files` 冲突说明见 [docs/verification.md](docs/verification.md)。该冲突不是番茄钟引起的,本次未擅自修改其他插件。
105
+ - 当前发布基线为 `@tom2012/dsh-pomodoro-overlay@0.1.2`;`npm run verify` 通过,**38/38 自动化测试通过**。
106
+ - 当前七字段设置、字体配置和移除可见阶段标签均有 store 级自动化测试或构建产物静态检查;新设置窗口、DOM 外观与字体重排的真实 GUI 验收状态以验证记录为准。
107
+ - **历史真实 GUI 基线**曾验证自动启动、1/1 分钟自动双向循环、刷新恢复、灰/红配色、旧版两字段设置保存与当前截止时间不变;这些结果不等同于当前版本的完整 GUI 验收。
108
+ - 历史桌面与 380px 窄窗口测试曾验证聊天区几何、输入框扣除、数字适配和非聊天视图隐藏;当时测试的 1/1 配置已恢复为 **25/5**。
109
+ - 历史 GUI 环境的 `file-tree` / 内置 `sidebar-files` 冲突与隔离方式见 [docs/verification.md](docs/verification.md),不表示该既有冲突已在日常 GUI 中解决。
101
110
 
102
111
  ## 文件
103
112
 
@@ -112,7 +121,7 @@ node tools/build.mjs --check # 检查构建产物是否过时
112
121
  - `client/client.js`:构建产物,请勿直接编辑。
113
122
  - `docs/design.md`:交互和视觉验收标准。
114
123
  - `docs/architecture.md`:接口证据与实现决策。
115
- - `docs/verification.md`:自动化与真实 GUI 验证结果、环境限制。
124
+ - `docs/verification.md`:当前自动化结果、历史真实 GUI 基线、验收边界与环境限制。
116
125
 
117
126
  ## License
118
127
 
@@ -11,7 +11,7 @@
11
11
  3. **原生配置与设置页**:Host 用 Schemastery 声明七个 `.volatile()` 字段(一个字体、两个时长、两个颜色、两个不透明度);客户端以 `ctx.configForms.get('pomodoro-overlay')` 读取/订阅,`mutate` 一次原子保存七个字段并携带 revision。设置 UI 注册到 `settings.section`,`id: 'pomodoro'`、`order: 30`、`label: '番茄钟'`。依据:`dsh-settings/README.zh.md:10-13,28-40`、`dsh-client-ui-settings/lib/types/client/config-form-types.d.ts:5-70`、`dsh-client-ui-settings/lib/types/client/contract/slots.d.ts:62-77`,以及 `dsh-client-ui-agent-preset/lib/client.js:2455-2462` 的原生注册范例。配置 ready 前不得启动计时。
12
12
  4. **聊天区域锚点**:Conversation 根节点带 `data-conversation-content`、`data-conversation-region="chat"`,输入区带 `data-composer-seat`、`data-conversation-region="composer"`。DOM 结构见 `dsh-client-ui-conversation/lib/client.js:17855-17876`。
13
13
  5. **样式生命周期**:样式标签标 `data-plugin="@tom2012/dsh-pomodoro-overlay"`,在 `ctx.effect` 内挂载并返回清理函数,避免 HMR 时误删或被误删;参考 `dsh-todo-board/client/client.js:3607-3619`。
14
- 6. **包激活**:包的 `cordis.patch.yml` 使用 `insert` 增加一个插件服务;`package.json` 的 `dsh.bundle.patch` 指向它,`dsh.client` 声明 Web 客户端和 `slots` 注入。
14
+ 6. **包激活**:包的 `cordis.patch.yml` 使用 `insert` 增加一个插件服务;`package.json` 的 `dsh.bundle.patch` 指向它。`dsh.client` 声明 `platform: 'web'`、`immediately: true`,并通过 `dsh.client.inject` 注入 layout 与 settings 客户端依赖;`shell.overlay` 和 `settings.section` 则在运行时通过 `ctx.slots.register` 注册。
15
15
 
16
16
  ## 布局算法
17
17
 
@@ -22,14 +22,18 @@
22
22
  - 仅在聊天区内存在 `[data-chat-flow]` 时显示;selector 缺失、Chat 非活动或矩形异常时 fail-closed 隐藏,绝不退化成全屏遮挡。
23
23
  - 用 `ResizeObserver`、窗口 resize、捕获阶段 scroll 和受节流的 MutationObserver 保持位置准确;字体配置变化时也重新测量数字宽度,避免字宽差异导致裁切。
24
24
  - 整个聊天 overlay 均为 `pointer-events: none`,不渲染可见阶段标签、工具条或控制按钮;仅显示大数字,屏幕阅读器状态保留,设置页表单保持正常交互。
25
- - `data-*` 标记属于当前 DSH 内部 DOM,并非稳定选择器 API;本方案绑定已验证版本,升级后必须重跑布局冒烟测试。
25
+ - `data-*` 标记属于当前 DSH 内部 DOM,并非稳定选择器 API;本方案绑定历史 GUI 基线使用的 DSH 版本,升级后必须重跑布局验证。
26
26
 
27
27
  ## 文件结构
28
28
 
29
29
  ```text
30
30
  dsh-pomodoro-overlay/
31
+ ├── .gitignore
31
32
  ├── package.json
33
+ ├── package-lock.json
34
+ ├── pnpm-workspace.yaml
32
35
  ├── cordis.patch.yml
36
+ ├── LICENSE
33
37
  ├── lib/
34
38
  │ └── index.js # 原生配置 schema 与设置策略
35
39
  ├── src/
@@ -44,30 +48,37 @@ dsh-pomodoro-overlay/
44
48
  │ └── client.js # 构建后的 DSH 浏览器 bundle
45
49
  ├── tests/
46
50
  │ ├── timer-core.test.js
47
- │ └── browser-store.test.js
51
+ │ ├── browser-store.test.js
52
+ │ ├── chat-geometry.test.js
53
+ │ ├── client-bundle.test.js
54
+ │ ├── font.test.js
55
+ │ └── host-config.test.js
48
56
  ├── tools/
49
57
  │ ├── build.mjs
50
58
  │ └── check-package.mjs
51
59
  ├── docs/
52
60
  │ ├── design.md
53
- │ └── architecture.md
61
+ │ ├── architecture.md
62
+ │ └── verification.md
54
63
  └── README.md
55
64
  ```
56
65
 
57
66
  ## 状态与配置
58
67
 
68
+ - npm 包、Host 插件服务、浏览器 ModuleLoader 与样式生命周期标识均为 `@tom2012/dsh-pomodoro-overlay`;Cordis patch ID 和 ConfigForm ID 保持为 `pomodoro-overlay`,浏览器存储键保持为 `dsh-pomodoro-overlay:state:v1`,因此作用域迁移不改变既有配置与时间线的读取键。
59
69
  - DSH 原生配置:`{ fontFamily, focusMinutes, breakMinutes, focusColor, breakColor, focusOpacity, breakOpacity }`,由 ConfigForm 读取、跨页面订阅和原子写入。字体默认等线;不透明度在 profile 中为 0–1,在设置 UI 中为 0–100%。
60
70
  - `dsh-pomodoro-overlay:state:v1`:当前阶段、是否运行、阶段开始时间、绝对截止时间、阶段时长、暂停剩余时间和更新时间。
61
- - 客户端收到 `status === 'ready'` 的有效配置后才启动;之后配置变更通过订阅送入同一 store。
62
- - 显示 tick 不写入 localStorage;只有初始化、用户操作、自然阶段切换和外部状态同步才写入。
71
+ - 客户端收到 `status === 'ready'` 的有效配置后才初始化 store;之后配置变更通过订阅送入同一 store。
72
+ - 显示 tick 不写入 localStorage;只有初始化、内部状态机操作、自然阶段切换和外部状态同步才写入。
63
73
  - 所有运行显示都读取当前时间,不在 tick 中做 `remaining -= 1`。
64
74
  - 配置修改不重建当前阶段;状态机在下一次阶段切换时读取新时长,overlay 则在保存后立即读取新字体、颜色与不透明度。
65
- - 阶段过期追赶最多先走两次切换,之后按完整「专注 + 休息」周期做算术跳跃,避免长时间关闭后逐分钟循环。
75
+ - 旧版 `running: false` 快照会原样恢复并保持暂停;当前聊天区没有继续按钮。需要重新开始时,删除该插件的 localStorage 运行状态键并刷新,即可按当前配置新建运行中的专注阶段;DSH 配置不受影响。
76
+ - 阶段过期追赶先最多进行两次逐边界切换;若仍然过期且存在完整过去周期,则按完整「专注 + 休息」周期做算术跳跃,必要时再逐边界切换一次以落到当前阶段,避免长时间关闭后逐分钟循环。
66
77
 
67
78
  ## 构建与测试
68
79
 
69
80
  - 浏览器客户端零 npm 运行时依赖,React 由 DSH 宿主提供;Host 使用 `@deepseek-ai/schemastery` 声明配置。
70
81
  - `esbuild` 仅作开发依赖,把 `src/` 打成单个 client bundle,React 保持 external。
71
- - Node 内置 `node:test` 覆盖计时核心与浏览器存储逻辑。
72
- - 包检查验证入口、patch、bundle 声明和构建产物一致。
73
- - 最终通过 `dsh plugin --profile web add <本地目录>` 安装。Host schema 变更后必须由用户在**外部 Terminal** 重载同一 DSH Web 服务,再在既有 URL 做 GUI 验证;禁止从 DSH 会话内部终止自己的宿主进程。
82
+ - Node 内置 `node:test` 的六个测试文件共 38 项测试,覆盖计时核心、浏览器存储、聊天区几何、Host 配置、字体栈,以及构建后客户端加载、store / slots 和部分清理的有限冒烟;完整范围见 `docs/verification.md`。
83
+ - `tools/check-package.mjs` 验证入口、patch 与 bundle 的静态约束,不做逐字新鲜度比较;`npm run build` 负责重建产物,另可运行 `node tools/build.mjs --check` 逐字检查产物是否过时。`npm run verify` 先构建再执行静态检查和测试。
84
+ - 通过 `dsh plugin --profile web add @tom2012/dsh-pomodoro-overlay` 从 npm 安装,或通过 `dsh plugin --profile web add <本地目录>` 从源码安装。Host schema 变更后必须由用户在**外部 Terminal** 重载同一 DSH Web 服务,再在既有 URL 做 GUI 验证;禁止从 DSH 会话内部终止自己的宿主进程。
package/docs/design.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  为 DeepSeek Harness Web 设计一个低干扰、自动运行的番茄钟插件:
6
6
 
7
- - 插件安装并启动后,无需点击即自动进入「专注 → 休息 → 专注」循环。
7
+ - 新计时或已运行的计时无需点击即自动进入「专注 → 休息 → 专注」循环;旧版暂停快照按原状态保留,不自动恢复运行。
8
8
  - 在 DSH 设置窗口的独立「番茄钟」页配置时钟字体,以及两种阶段的时长、颜色与数字不透明度。
9
9
  - 倒计时铺满当前聊天消息区域,但不覆盖侧栏、顶部导航和底部输入框。
10
10
  - 默认字体为等线(DengXian),专注为浅灰 10% 不透明度,休息为红色 30% 不透明度;用户可保存自定义外观。
@@ -28,7 +28,7 @@
28
28
  | 专注大数字 | 默认 `#9ca3af` + 10% 不透明度;颜色与不透明度均可配置 |
29
29
  | 休息大数字 | 默认 `#ef4444` + 30% 不透明度;颜色与不透明度均可配置 |
30
30
  | 字体 | 默认等线(DengXian),支持自定义单本机字体名称与常用候选;无远程字体请求,保留 `font-variant-numeric: tabular-nums` |
31
- | 数字尺寸 | 根据聊天区实际宽高和文本测量结果自适应,保留约 4% 横向安全边距 |
31
+ | 数字尺寸 | 根据聊天区实际宽高和文本测量结果自适应;可用宽度为区域宽度减 32px,可用高度为区域高度减 64px,两者最低均按 32px 计算 |
32
32
  | 控件 | 使用 `--dsw-alias-*` 背景、边框、正文和品牌色令牌 |
33
33
  | 动效 | 默认克制;减少动态效果偏好下取消非必要过渡 |
34
34
 
@@ -38,13 +38,13 @@
38
38
 
39
39
  默认配置:字体等线;专注 25 分钟 / `#9ca3af` / 10% 不透明度;休息 5 分钟 / `#ef4444` / 30% 不透明度。
40
40
 
41
- - **首次启动**:立即开始 25 分钟专注阶段。
42
- - **自然结束**:自动切换到另一阶段,无限循环。
43
- - **纯展示**:聊天区不提供暂停、跳过或重置入口,阶段按时间线自动推进。
41
+ - **首次启动**:没有有效快照时,原生配置 ready 后按默认 25 分钟开始专注阶段;已保存快照按原状态恢复。
42
+ - **自然结束**:运行中的计时自动切换到另一阶段,无限循环。
43
+ - **纯展示**:聊天区不提供暂停、继续、跳过或重置入口;运行中的阶段按时间线推进,旧版暂停快照保持暂停。
44
44
  - **修改配置**:当前计时不打断;字体、颜色和不透明度保存后立即生效,新时长从下一阶段生效。
45
- - **刷新、切标签页、浏览器休眠**:显示值始终由 `Date.now()` 与绝对截止时间计算,不依赖 `setInterval` 累减。
46
- - **关闭后重开**:恢复持久化状态;已过期的阶段按时间线推进到当前应有阶段。
47
- - **多标签页**:通过 `storage` 事件同步状态,各标签页不分别累计计时。
45
+ - **刷新、切标签页、浏览器休眠**:运行中显示值由 `Date.now()` 与绝对截止时间计算;暂停时使用保存的剩余时间。二者都不依赖 `setInterval` 累减。
46
+ - **关闭后重开**:恢复持久化状态;运行中已过期的阶段按时间线推进到当前应有阶段,暂停快照不自动推进。
47
+ - **多标签页**:通过 `storage` 事件同步运行或暂停状态,各标签页不分别累计计时。
48
48
 
49
49
  ## 配置约束
50
50
 
@@ -60,13 +60,13 @@
60
60
  ## 验收场景
61
61
 
62
62
  1. 首次安装启动后自动开始,不需要额外点击。
63
- 2. 工作阶段为浅灰半透明,休息阶段为红色半透明;不显示可见阶段文字,屏幕阅读器仍可获取阶段。
63
+ 2. 默认配置下,工作阶段为浅灰半透明,休息阶段为红色半透明;不显示可见阶段文字,屏幕阅读器仍可获取阶段。
64
64
  3. 大数字仅覆盖聊天消息区,不遮挡侧栏和输入框,不阻断消息操作。
65
65
  4. 修改周期后当前阶段不被打断,下一阶段采用新值。
66
66
  5. 聊天区不显示暂停、跳过、重置或工具条,且 overlay 全部鼠标穿透。
67
- 6. 页面切到后台再返回、刷新页面后,剩余时间与实际经过时间一致。
68
- 7. 模拟一次性跨过多个阶段,恢复到当前正确阶段,不重复补发历史提醒。
69
- 8. 两个标签页中的阶段、剩余时间和暂停状态保持一致。
67
+ 6. 运行中的计时在页面切到后台再返回、刷新页面后,剩余时间与实际经过时间一致;暂停快照仍显示保存的剩余时间。
68
+ 7. 模拟运行中的一次性跨阶段,恢复到当前正确阶段,不重复补发历史提醒;暂停快照不被自动推进。
69
+ 8. 两个标签页中的阶段、剩余时间和运行或暂停状态通过 `storage` 事件同步。
70
70
  9. 浅色、深色、窄屏和减少动态效果模式下均可用;设置页表单可键盘操作。
71
71
  10. DSH 设置窗口出现独立「番茄钟」导航;七个字段可键盘编辑,草稿预览正确,保存后外观立即应用且当前 `endsAt` 不变;字体切换后数字重新适配且不裁切。
72
72
  11. 插件卸载或 HMR 清理后,计时器、事件监听器、样式和 DOM 均被释放。
@@ -3,17 +3,25 @@
3
3
  验证日期:2026-10-25
4
4
  目标版本:DSH `0.2.1-rc.2`
5
5
  GUI:`https://dsh.zhbc.bid:3003/`(不记录认证参数)
6
- 方式:正式 `dsh plugin --profile web add` 本地 link 安装,重启原部署,在隔离 Chrome 中运行真实 Host/Client bundle。
6
+ 历史真实 GUI 方法:正式 `dsh plugin --profile web add` 本地 link 安装,重启原部署,在隔离 Chrome 中运行当时的 Host/Client bundle。当前修订的验证范围见下文,不与历史结果混用。
7
7
 
8
8
  ## 自动化
9
9
 
10
10
  - `npm run verify`:通过。
11
- - `node:test`:**38/38 通过**(覆盖原生设置 slot、外观与字体校验、字体栈及即时外观更新)。
12
- - 独立只读审查:无阻断、高、中严重度问题;额外以逐步推进 oracle 对拍 `settleState` 的 896 组边界,全部一致。
13
- - 构建后客户端冒烟:ModuleLoader 加载、配置 ready 后自动启动、slots 注册、样式/监听器/计时器清理通过。
14
- - `npm pack --dry-run`:包内容检查通过。
11
+ - `node:test`:**38/38 通过**(覆盖原生设置 slot、外观与字体校验、字体栈及 store 层外观即时更新语义;不是 DOM 样式验收)。
12
+ - 历史独立只读审查:当时无阻断、高、中严重度问题;逐步推进 oracle 对拍 `settleState` 的 896 组边界全部一致。此后未修改 `settleState` 的阶段推进算法。
13
+ - 构建后客户端冒烟:ModuleLoader 加载、配置 ready 后 store 启动、slots 注册,以及 `style.remove`、store 的 `storage` / `focus` / `pageshow` / `visibilitychange` 监听和 interval 清理通过。测试的 React 桩不会挂载 `ActiveOverlay`,因此不宣称 `ResizeObserver` / `MutationObserver`、窗口 resize / scroll、rAF / timeout 或 overlay DOM 清理已做真实 DOM 测试。
14
+ - `npm publish --dry-run`:当前发布包内容检查通过。
15
15
 
16
- ## 当前开发修订:原生设置窗口与外观配置(2026-10-25)
16
+ ## 当前发布基线:0.1.2(2026-10-25)
17
+
18
+ - npm 包及运行时包标识为 `@tom2012/dsh-pomodoro-overlay`,发布版本为 `0.1.2`;GitHub 仓库继续使用 `zbc0315/dsh-pomodoro-overlay`。
19
+ - Cordis patch ID 与 ConfigForm ID 保持 `pomodoro-overlay`,localStorage 键保持 `dsh-pomodoro-overlay:state:v1`;作用域迁移不更改这些持久化读取键。
20
+ - 当前聊天区只显示大倒计时,不显示可见阶段标签、工具条或控制按钮;屏幕阅读器状态保留。
21
+ - 旧版 `running: false` 快照会继续保持暂停;README 已说明仅删除 `dsh-pomodoro-overlay:state:v1` 并刷新的重置方法,不影响 DSH 配置。
22
+ - 当前版本完成自动化测试、构建产物静态检查和 npm 发布演练。下述历史 GUI 结果仅作回归基线,不作为当前七字段设置、字体保存或无阶段标签 UI 已完成真实 GUI 验收的证明。
23
+
24
+ ## 当前功能:原生设置窗口与外观配置(2026-10-25)
17
25
 
18
26
  - 设置入口已从 `plugins.bundle.config` 迁移到 DSH 设置窗口的 `settings.section`,导航 ID 为 `pomodoro`。
19
27
  - Host schema 和 ConfigForm 已扩展为七字段:全局字体、专注/休息时长、`#RRGGBB` 颜色和 0–1 不透明度;设置 UI 显示 0–100%。
@@ -73,7 +81,7 @@ GUI:`https://dsh.zhbc.bid:3003/`(不记录认证参数)
73
81
  - 隔离浏览器中的运行状态已重置为运行中的 25 分钟专注。
74
82
  - 测试 Chrome 已关闭,临时 profile、重启脚本和临时日志已删除。
75
83
 
76
- ## 本次 GUI 环境备注(既有冲突)
84
+ ## 历史 GUI 环境备注(既有冲突)
77
85
 
78
86
  未隔离的首次启动出现:
79
87
 
@@ -89,6 +97,6 @@ web boot: 1 entry did not activate
89
97
  slot "sidebar.right.tab.files.actions" is already declared
90
98
  ```
91
99
 
92
- 只读检查确认,既有 `@tom/dsh-file-tree` 与 DSH 内置 `@deepseek-ai/dsh-client-ui-sidebar-files` 同时声明了这个 slot;番茄钟没有声明或修改该 slot。为让本次番茄钟自测能够进入真实聊天区,仅在隔离 Chrome 的 boot 清单中临时跳过了重复的内置 sidebar-files 客户端,并关闭该测试页的 HMR 以防完整清单再次注入。没有因此修改 DSH、file-tree 或 profile。
100
+ 只读检查确认,既有 `@tom/dsh-file-tree` 与 DSH 内置 `@deepseek-ai/dsh-client-ui-sidebar-files` 同时声明了这个 slot;番茄钟没有声明或修改该 slot。为让该次历史番茄钟自测能够进入真实聊天区,仅在隔离 Chrome 的 boot 清单中临时跳过了重复的内置 sidebar-files 客户端,并关闭该测试页的 HMR 以防完整清单再次注入。没有因此修改 DSH、file-tree 或 profile。
93
101
 
94
- 因此:**番茄钟本身的真实 GUI 检查全部通过,但这不表示当前未隔离的日常 GUI 已解决上述既有冲突。** 日常 GUI 若要正常启动,需要另行处理 file-tree 与内置 sidebar-files 的重复声明;本次任务没有擅自卸载或改写它们。
102
+ 因此:**上述历史版本的番茄钟真实 GUI 检查全部通过,但这既不表示当前修订已完成全部 GUI 验收,也不表示未隔离的日常 GUI 已解决上述既有冲突。** 日常 GUI 若要正常启动,需要另行处理 file-tree 与内置 sidebar-files 的重复声明;历史测试没有擅自卸载或改写它们。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tom2012/dsh-pomodoro-overlay",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Automatic focus/break Pomodoro cycles with a chat-sized translucent countdown for DeepSeek Harness Web.",
5
5
  "type": "module",
6
6
  "license": "MIT",