dsh-notify-say 0.4.57 → 0.4.58

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 CHANGED
@@ -3,6 +3,10 @@
3
3
  > 本文件由 `tools/release-build.ps1` 从开发提交自动生成,**请勿手工编辑**。
4
4
  > 只列面向使用者的变更(新增功能与修复),不含内部维护提交。
5
5
 
6
+ ## v0.4.58 — 2026-10-18
7
+
8
+ - feat(ui): v0.4.58 —— 自重载入口并入「版本与更新」
9
+
6
10
  ## v0.4.57 — 2026-10-18
7
11
 
8
12
  - fix(reload): v0.4.57 —— 自重载改为「点一次重载一次」(修宿主崩溃根因)
package/lib/client.js CHANGED
@@ -1834,7 +1834,7 @@ window.__ModuleLoader__.load({
1834
1834
  onClick: toggleAdv,
1835
1835
  }, '高级设置' + (advOpen ? ' ▾' : ' ▸')),
1836
1836
  h('div', { style: S.sectionDesc },
1837
- '给每种提醒单独设声音来源、日志与诊断、版本更新、开发者选项。点标题展开。'),
1837
+ '给每种提醒单独设声音来源、看日志与诊断、检查版本更新。点标题展开。'),
1838
1838
  ))
1839
1839
 
1840
1840
  if (advOpen) {
@@ -1849,7 +1849,8 @@ window.__ModuleLoader__.load({
1849
1849
  ['sound', '按事件定制声音', '给每种提醒单独指定音源;不改就跟随上面的「声音来源」。'],
1850
1850
  ['diag', '诊断与日志', '日志详细度,以及导出脱敏后的诊断文件。'],
1851
1851
  ['update', '版本与更新', '查看运行中的版本、检查有没有新版。'],
1852
- ['dev', '开发者选项', '实验性功能,普通使用不需要开。'],
1852
+ // 开发者选项已合并(v0.4.58):它原本只有「实验性提示 + 重载按钮」,
1853
+ // 重载搬进「版本与更新」后就没有内容了 —— 留一个空组是纯噪音。
1853
1854
  ]
1854
1855
  function toggleAdvSec(id) {
1855
1856
  avset(function (prev) {
@@ -2316,44 +2317,40 @@ window.__ModuleLoader__.load({
2316
2317
  rows.push(h('div', { key: 'up-offline', style: S.subHint },
2317
2318
  '检查更新会访问 npm registry 与 GitHub(每 24 小时最多一次)。'
2318
2319
  + '通知与语音不依赖它;网络不可用时照常工作。'))
2319
- }
2320
- if (id === 'dev') {
2321
- // 明确告知这是实验性功能(用户要求,v0.4.54)。
2322
- rows.push(h('div', { key: 'dev-warn', style: S.subHint },
2323
- '⚠️ 实验性:依赖宿主内部结构与 Node 模块加载机制,'
2324
- + 'DSH 升级后可能失效。失效时只报错,不影响播报。'))
2325
- // ── 一次性自重载(v0.4.57)────────────────────────────────
2320
+
2321
+ // ── 让新版本生效(v0.4.58 起从开发者选项搬来)──────────────
2322
+ //
2323
+ // 用户 2026-10-18 指出:既然重载改成"点一下试一次"了,
2324
+ // 那它就该在**更新流程**里,而不是藏在开发者选项。
2326
2325
  //
2327
- // 用户 2026-10-18 明确要求:「点一下重载一下」,
2328
- // 不要"开了就一直重载"。所以这里**没有开关**,只有一个按钮。
2326
+ // 这个判断是对的 —— 需要的时刻正是"我刚装完新版本,
2327
+ // 想让它生效"。**位置本身就是信息**。
2329
2328
  //
2330
- // 为什么把自动监听删了:2026-10-18 实测它把宿主拖崩 ——
2331
- // watcher 在我改 UI 期间触发了 40 多次失败重载,每次 dispose
2332
- // 都释放宿主仍在用的会话引用,最后渲染进程崩在损坏的 client 包上。
2333
- rows.push(h('div', { key: 'dr-row', style: S.row },
2329
+ // ⚠️ 能力边界写在旁边,不能让人以为点一下就能替代重启。
2330
+ rows.push(h('div', { key: 'rl-row', style: S.row },
2334
2331
  h('button', {
2335
2332
  type: 'button',
2336
2333
  disabled: rlState.busy,
2337
2334
  style: S.btn,
2338
2335
  onClick: function () { doReload() },
2339
2336
  }, rlState.busy ? '重载中…' : '重载现在生效'),
2340
- h('span', { style: S.hint }, '点一次试一次,不会自动重复'),
2337
+ h('span', { style: S.hint },
2338
+ (vi && vi.needsRestart)
2339
+ ? ('磁盘上是 v' + vIns + ',运行中是 v' + vRun + ' —— 点这里试着直接换过来')
2340
+ : '点一次试一次,不会自动重复'),
2341
2341
  ))
2342
- rows.push(h('div', { key: 'dr-hint', style: S.subHint },
2343
- '用途:改完 lib/ 下的代码后,不想重启 DSH 就点一下。'
2344
- + '**只对同一路径上的代码有效**;如果刚用 dsh plugin update '
2345
- + '升级了版本,新版本装在另一个路径,自重载做不到,必须重启。'))
2346
2342
  if (rlState.msg) {
2347
- rows.push(h('div', { key: 'dr-msg', style: S.ok }, rlState.msg))
2343
+ rows.push(h('div', { key: 'rl-msg', style: S.ok }, rlState.msg))
2348
2344
  }
2349
2345
  if (rlState.err) {
2350
- rows.push(h('div', { key: 'dr-err', style: S.err }, rlState.err))
2346
+ rows.push(h('div', { key: 'rl-err', style: S.err }, rlState.err))
2351
2347
  }
2352
- // 重载后宿主里的会话引用会被释放 —— 用户必须知道要刷新页面,
2353
- // 否则会遇到"侧边栏点不开"却不知道为什么。
2354
- rows.push(h('div', { key: 'dr-warn', style: S.subHint },
2355
- '重载会重建插件实例,宿主里已打开的会话引用会失效。'
2356
- + '重载成功后请**刷新页面**;不行就重启 DSH。'))
2348
+ rows.push(h('div', { key: 'rl-hint', style: S.subHint },
2349
+ '⚠️ 实验性:依赖宿主内部结构与 Node 模块加载机制,DSH 升级后可能失效;'
2350
+ + '失效时只报错,不影响播报。它只能重新导入「同一路径上的」代码 —— '
2351
+ + '若刚用 dsh plugin update 升级,新版本装在另一个路径,'
2352
+ + '这一步做不到,必须重启 DSH。'
2353
+ + '重载会重建插件实例,已打开的会话引用会失效,成功后请刷新页面。'))
2357
2354
  }
2358
2355
  }
2359
2356
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-notify-say",
3
- "version": "0.4.57",
3
+ "version": "0.4.58",
4
4
  "description": "Desktop notifications for DSH Desktop that actually speak: Windows TTS out of the box (zero download), VOICEVOX voice packs optional, a selectable system-sound fallback, and an idle gate that waits for running subagents before saying the turn is done. Includes a settings-page GUI (sound source, per-event overrides, jump-back-to-session, cooldowns) and a self hot-reload for development.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -282,9 +282,12 @@ test('N3: 高级设置默认折叠;展开后四个子组默认也收起', asyn
282
282
  // 展开高级设置:四个子组标题出现,但内容仍收起
283
283
  {
284
284
  const { text } = renderWith(card, 'tts', { advOpen: true });
285
- for (const t of ['按事件定制声音', '诊断与日志', '版本与更新', '开发者选项']) {
285
+ // v0.4.58:开发者选项已合并进「版本与更新」(它的唯一内容就是重载按钮,
286
+ // 而重载现在属于更新流程)。空组是纯噪音,所以从三个子组开始。
287
+ for (const t of ['按事件定制声音', '诊断与日志', '版本与更新']) {
286
288
  assert.ok(has(text, t), `展开后应出现子组「${t}」`);
287
289
  }
290
+ assert.ok(!has(text, '开发者选项'), '开发者选项子组应已合并');
288
291
  // 内容仍收起:不该看到具体控件
289
292
  assert.ok(!has(text, '跟随默认'), '子组默认收起,不应显示按事件覆盖的下拉');
290
293
  // ⚠️ 不能断言 '日志详细度':它出现在子组的**说明文字**里