dsh-notify-yimit 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.en.md +3 -3
- package/README.md +1 -1
- package/cordis.patch.yml +3 -3
- package/lib/client.js +26 -26
- package/lib/index.js +12 -12
- package/lib/toast-host.ps1 +5 -5
- package/lib/typert.host.js +15 -15
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -48,8 +48,8 @@ Then **restart dsh web** (host-side plugins need a restart) and enable it in Set
|
|
|
48
48
|
```sh
|
|
49
49
|
dsh plugin --profile web add dsh-notify-yimit
|
|
50
50
|
# or manually:
|
|
51
|
-
# ~/.dsh/profiles/web/package.json → dependencies: "dsh-notify": "^0.1.0"
|
|
52
|
-
# ~/.dsh/profiles/web/package.json → dsh.profile.bundles: add "dsh-notify"
|
|
51
|
+
# ~/.dsh/profiles/web/package.json → dependencies: "dsh-notify-yimit": "^0.1.0"
|
|
52
|
+
# ~/.dsh/profiles/web/package.json → dsh.profile.bundles: add "dsh-notify-yimit"
|
|
53
53
|
pnpm install # inside the profile
|
|
54
54
|
```
|
|
55
55
|
|
|
@@ -83,7 +83,7 @@ host: session/event(turn/start|assistant/chunk|tool/call|turn/end|session/title)
|
|
|
83
83
|
client: settings config → dispatch:
|
|
84
84
|
- system → Web Notification (tag replaced per session:type, onclick jumps to session)
|
|
85
85
|
- custom → only acknowledges events (no in-page overlay; desktop toasts are handled by the host)
|
|
86
|
-
- session deep link: listens to #dsh-notify/session=<id> (the toast "Jump to session" channel) → ctx.sessions.open
|
|
86
|
+
- session deep link: listens to #dsh-notify-yimit/session=<id> (the toast "Jump to session" channel) → ctx.sessions.open
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
## Config storage
|
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ host: session/event(turn/start|assistant/chunk|tool/call|turn/end|session/title)
|
|
|
80
80
|
client: 设置页「通知」配置 → 分发:
|
|
81
81
|
- system → Web Notification(tag 按 会话:类型 替换,onclick 跳转会话)
|
|
82
82
|
- custom → 只消费回执(不渲染页面内浮层;桌面浮窗由 host 负责)
|
|
83
|
-
- 会话深链接:监听 #dsh-notify/session=<id>(桌面浮窗"跳转会话"通道)→ ctx.sessions.open
|
|
83
|
+
- 会话深链接:监听 #dsh-notify-yimit/session=<id>(桌面浮窗"跳转会话"通道)→ ctx.sessions.open
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
## 配置存储
|
package/cordis.patch.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# dsh-notify bundle patch: one host row over the web profile.
|
|
1
|
+
# dsh-notify-yimit bundle patch: one host row over the web profile.
|
|
2
2
|
# The row name resolves from the profile's own node_modules where
|
|
3
3
|
# `dsh plugin --profile web add <path>` installed this package.
|
|
4
4
|
- insert:
|
|
5
|
-
- id: dsh-notify
|
|
6
|
-
name: dsh-notify
|
|
5
|
+
- id: dsh-notify-yimit
|
|
6
|
+
name: dsh-notify-yimit
|
package/lib/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dsh-notify 浏览器端 bundle(单文件,经 __ModuleLoader__ 加载,零构建)。
|
|
2
|
+
* dsh-notify-yimit 浏览器端 bundle(单文件,经 __ModuleLoader__ 加载,零构建)。
|
|
3
3
|
*
|
|
4
4
|
* 提供两块界面:
|
|
5
5
|
* - settings.section「通知」:插件总开关、通知方式三选一(system 系统通知 /
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
window.__ModuleLoader__.load({
|
|
18
|
-
id: 'dsh-notify',
|
|
18
|
+
id: 'dsh-notify-yimit',
|
|
19
19
|
factory: (require) => {
|
|
20
20
|
var module = { exports: {} }
|
|
21
21
|
var exports = module.exports
|
|
@@ -26,7 +26,7 @@ window.__ModuleLoader__.load({
|
|
|
26
26
|
// ── 样式 ────────────────────────────────────────────────────────────────
|
|
27
27
|
|
|
28
28
|
const css = [
|
|
29
|
-
'/* dsh-notify: 设置页与自定义通知浮层 */',
|
|
29
|
+
'/* dsh-notify-yimit: 设置页与自定义通知浮层 */',
|
|
30
30
|
// 设置页
|
|
31
31
|
'.dn-root{display:flex;flex-direction:column;gap:20px;padding:4px 2px 24px;font-size:13px;color:var(--dsw-alias-label-primary)}',
|
|
32
32
|
'.dn-block{display:flex;flex-direction:column;gap:10px}',
|
|
@@ -86,10 +86,10 @@ window.__ModuleLoader__.load({
|
|
|
86
86
|
'.dn-card-btn.primary{background:color-mix(in srgb,currentColor 18%,transparent)}',
|
|
87
87
|
'.dn-card-bar{height:2px;background:color-mix(in srgb,currentColor 25%,transparent);transform-origin:left}',
|
|
88
88
|
].join('\n')
|
|
89
|
-
const cssTagId = 'dsh-notify/client.css'
|
|
89
|
+
const cssTagId = 'dsh-notify-yimit/client.css'
|
|
90
90
|
if (typeof document !== 'undefined' && document.querySelector('style[data-plugin-css=' + JSON.stringify(cssTagId) + ']') === null) {
|
|
91
91
|
const tag = document.createElement('style')
|
|
92
|
-
tag.dataset.plugin = 'dsh-notify'
|
|
92
|
+
tag.dataset.plugin = 'dsh-notify-yimit'
|
|
93
93
|
tag.dataset.pluginCss = cssTagId
|
|
94
94
|
tag.textContent = css
|
|
95
95
|
document.head.appendChild(tag)
|
|
@@ -195,7 +195,7 @@ window.__ModuleLoader__.load({
|
|
|
195
195
|
// ── 线路数据校验(与服务端 zod 清单对应,宽松校验) ──────────────────────
|
|
196
196
|
|
|
197
197
|
function fail(path) {
|
|
198
|
-
throw new Error('dsh-notify: 服务端数据非法 (' + path + ')')
|
|
198
|
+
throw new Error('dsh-notify-yimit: 服务端数据非法 (' + path + ')')
|
|
199
199
|
}
|
|
200
200
|
function needStr(v, path) {
|
|
201
201
|
if (typeof v !== 'string') fail(path)
|
|
@@ -281,29 +281,29 @@ window.__ModuleLoader__.load({
|
|
|
281
281
|
// ── RPC 贡献(与服务端 ./typert 清单一一对应) ───────────────────────────
|
|
282
282
|
|
|
283
283
|
const CONTRIBUTION = {
|
|
284
|
-
package: 'dsh-notify',
|
|
284
|
+
package: 'dsh-notify-yimit',
|
|
285
285
|
descriptors: [
|
|
286
286
|
{
|
|
287
|
-
id: 'dsh-notify#notify/getState', service: 'notify', namespace: 'notify', method: 'getState',
|
|
287
|
+
id: 'dsh-notify-yimit#notify/getState', service: 'notify', namespace: 'notify', method: 'getState',
|
|
288
288
|
invocation: { kind: 'direct' }, parameters: [],
|
|
289
|
-
result: { mode: 'strict', typeSymbol: 'dsh-notify#NotifyState', schema: stateCodec },
|
|
289
|
+
result: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyState', schema: stateCodec },
|
|
290
290
|
},
|
|
291
291
|
{
|
|
292
|
-
id: 'dsh-notify#notify/updateConfig', service: 'notify', namespace: 'notify', method: 'updateConfig',
|
|
292
|
+
id: 'dsh-notify-yimit#notify/updateConfig', service: 'notify', namespace: 'notify', method: 'updateConfig',
|
|
293
293
|
invocation: { kind: 'direct' },
|
|
294
|
-
parameters: [{ name: 'patch', wire: 'patch', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify#NotifyConfigPatch', schema: patchCodec } }],
|
|
295
|
-
result: { mode: 'strict', typeSymbol: 'dsh-notify#NotifyConfig', schema: configCodec },
|
|
294
|
+
parameters: [{ name: 'patch', wire: 'patch', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyConfigPatch', schema: patchCodec } }],
|
|
295
|
+
result: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyConfig', schema: configCodec },
|
|
296
296
|
},
|
|
297
297
|
{
|
|
298
|
-
id: 'dsh-notify#notify/ackEvents', service: 'notify', namespace: 'notify', method: 'ackEvents',
|
|
298
|
+
id: 'dsh-notify-yimit#notify/ackEvents', service: 'notify', namespace: 'notify', method: 'ackEvents',
|
|
299
299
|
invocation: { kind: 'direct' },
|
|
300
|
-
parameters: [{ name: 'ids', wire: 'ids', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify#EventIds', schema: codecOf((v) => Array.isArray(v) ? v.map((x) => String(x)) : []) } }],
|
|
301
|
-
result: { mode: 'strict', typeSymbol: 'dsh-notify#AckResult', schema: ackCodec },
|
|
300
|
+
parameters: [{ name: 'ids', wire: 'ids', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#EventIds', schema: codecOf((v) => Array.isArray(v) ? v.map((x) => String(x)) : []) } }],
|
|
301
|
+
result: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#AckResult', schema: ackCodec },
|
|
302
302
|
},
|
|
303
303
|
{
|
|
304
|
-
id: 'dsh-notify#notify/listBrowsers', service: 'notify', namespace: 'notify', method: 'listBrowsers',
|
|
304
|
+
id: 'dsh-notify-yimit#notify/listBrowsers', service: 'notify', namespace: 'notify', method: 'listBrowsers',
|
|
305
305
|
invocation: { kind: 'direct' }, parameters: [],
|
|
306
|
-
result: { mode: 'strict', typeSymbol: 'dsh-notify#BrowserList', schema: browsersCodec },
|
|
306
|
+
result: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#BrowserList', schema: browsersCodec },
|
|
307
307
|
},
|
|
308
308
|
],
|
|
309
309
|
}
|
|
@@ -640,7 +640,7 @@ window.__ModuleLoader__.load({
|
|
|
640
640
|
const remote = ctx.remote
|
|
641
641
|
if (remote === undefined || typeof remote.$mount !== 'function') return
|
|
642
642
|
const unmount = await remote.$mount(CONTRIBUTION)
|
|
643
|
-
ctx.effect(() => () => { unmount() }, 'dsh-notify: remote contribution')
|
|
643
|
+
ctx.effect(() => () => { unmount() }, 'dsh-notify-yimit: remote contribution')
|
|
644
644
|
const notify = ctx.get('remote.notify')
|
|
645
645
|
if (notify === undefined) return
|
|
646
646
|
|
|
@@ -701,22 +701,22 @@ window.__ModuleLoader__.load({
|
|
|
701
701
|
|
|
702
702
|
void reload()
|
|
703
703
|
void loadBrowsers()
|
|
704
|
-
ctx.effect(() => ctx.on('connection/reset', () => { void reload(); void loadBrowsers() }), 'dsh-notify: reconnect reload')
|
|
704
|
+
ctx.effect(() => ctx.on('connection/reset', () => { void reload(); void loadBrowsers() }), 'dsh-notify-yimit: reconnect reload')
|
|
705
705
|
// system 模式走浏览器通知:250ms 轮询把平均延迟从 ~500ms 压到 ~125ms,感知为"即时"。
|
|
706
706
|
const pollTimer = setInterval(() => { void reload() }, 250)
|
|
707
|
-
ctx.effect(() => () => { clearInterval(pollTimer) }, 'dsh-notify: poll timer')
|
|
707
|
+
ctx.effect(() => () => { clearInterval(pollTimer) }, 'dsh-notify-yimit: poll timer')
|
|
708
708
|
const onVisible = () => { if (document.visibilityState === 'visible') void reload() }
|
|
709
709
|
document.addEventListener('visibilitychange', onVisible)
|
|
710
|
-
ctx.effect(() => () => { document.removeEventListener('visibilitychange', onVisible) }, 'dsh-notify: visibility reload')
|
|
710
|
+
ctx.effect(() => () => { document.removeEventListener('visibilitychange', onVisible) }, 'dsh-notify-yimit: visibility reload')
|
|
711
711
|
|
|
712
712
|
const sessions = ctx.get('sessions')
|
|
713
713
|
const slots = ctx.get('slots')
|
|
714
714
|
if (slots === undefined) return
|
|
715
715
|
|
|
716
|
-
// 会话深链接(桌面浮窗"跳转会话"通道):监听 #dsh-notify/session=<id>。
|
|
716
|
+
// 会话深链接(桌面浮窗"跳转会话"通道):监听 #dsh-notify-yimit/session=<id>。
|
|
717
717
|
const openFromHash = () => {
|
|
718
718
|
try {
|
|
719
|
-
const m = /#dsh-notify\/session=([^&]+)/.exec(window.location.hash)
|
|
719
|
+
const m = /#dsh-notify-yimit\/session=([^&]+)/.exec(window.location.hash)
|
|
720
720
|
if (m !== null && typeof sessions?.open === 'function') {
|
|
721
721
|
sessions.open(decodeURIComponent(m[1]))
|
|
722
722
|
const clean = window.location.href.split('#')[0]
|
|
@@ -726,7 +726,7 @@ window.__ModuleLoader__.load({
|
|
|
726
726
|
}
|
|
727
727
|
window.addEventListener('hashchange', openFromHash)
|
|
728
728
|
openFromHash()
|
|
729
|
-
ctx.effect(() => () => window.removeEventListener('hashchange', openFromHash), 'dsh-notify: hash listener')
|
|
729
|
+
ctx.effect(() => () => window.removeEventListener('hashchange', openFromHash), 'dsh-notify-yimit: hash listener')
|
|
730
730
|
|
|
731
731
|
const injected = () => ({ hooks: { notify: store }, api, sessions })
|
|
732
732
|
const sectionInjected = () => ({ hooks: { notify: store }, api })
|
|
@@ -741,7 +741,7 @@ window.__ModuleLoader__.load({
|
|
|
741
741
|
if (sectionActive.gen !== gen) return
|
|
742
742
|
const dispose = slots.register({
|
|
743
743
|
name: 'settings.section',
|
|
744
|
-
id: 'dsh-notify',
|
|
744
|
+
id: 'dsh-notify-yimit',
|
|
745
745
|
order: 60,
|
|
746
746
|
label: () => makeT(detectBrowserLocale())('sectionLabel'),
|
|
747
747
|
inject: sectionInjected,
|
|
@@ -766,7 +766,7 @@ window.__ModuleLoader__.load({
|
|
|
766
766
|
if (overlayActive.gen !== gen) return
|
|
767
767
|
const dispose = slots.register({
|
|
768
768
|
name: 'shell.overlay',
|
|
769
|
-
id: 'dsh-notify',
|
|
769
|
+
id: 'dsh-notify-yimit',
|
|
770
770
|
order: 10,
|
|
771
771
|
inject: injected,
|
|
772
772
|
}, NotifyOverlay)
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dsh-notify 宿主插件。
|
|
2
|
+
* dsh-notify-yimit-yimit 宿主插件。
|
|
3
3
|
*
|
|
4
4
|
* 单一 Loader 行(见 cordis.patch.yml)挂载本模块,职责:
|
|
5
|
-
* 1. 持久化插件配置($DSH_HOME/storages/dsh-notify/config.json):总开关、通知方式
|
|
5
|
+
* 1. 持久化插件配置($DSH_HOME/storages/dsh-notify-yimit/config.json):总开关、通知方式
|
|
6
6
|
* (system 系统通知 / custom 自定义样式 / off 关闭,默认 off)、自定义通知的最大
|
|
7
7
|
* 同时显示数、显示时长、背景色与文字色;
|
|
8
8
|
* 2. 监听主机事件流,为每个会话维护轻量状态机并生成"通知事件":
|
|
@@ -26,7 +26,7 @@ import { spawn } from 'node:child_process'
|
|
|
26
26
|
import { fileURLToPath } from 'node:url'
|
|
27
27
|
import { resolveDshHome } from '@deepseek-ai/dsh-home-paths'
|
|
28
28
|
|
|
29
|
-
export const name = 'dsh-notify'
|
|
29
|
+
export const name = 'dsh-notify-yimit'
|
|
30
30
|
|
|
31
31
|
// ── 配置 ───────────────────────────────────────────────────────────────────
|
|
32
32
|
|
|
@@ -106,10 +106,10 @@ function mergeConfigPatch(base, patch) {
|
|
|
106
106
|
return out
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
/** 配置存储:$DSH_HOME/storages/dsh-notify/config.json(临时文件 + 原子重命名,写防抖)。 */
|
|
109
|
+
/** 配置存储:$DSH_HOME/storages/dsh-notify-yimit/config.json(临时文件 + 原子重命名,写防抖)。 */
|
|
110
110
|
function openConfig() {
|
|
111
111
|
const home = resolveDshHome()
|
|
112
|
-
const dir = path.join(home, 'storages', 'dsh-notify')
|
|
112
|
+
const dir = path.join(home, 'storages', 'dsh-notify-yimit')
|
|
113
113
|
const file = path.join(dir, 'config.json')
|
|
114
114
|
let loaded = null
|
|
115
115
|
try {
|
|
@@ -130,7 +130,7 @@ function openConfig() {
|
|
|
130
130
|
fs.renameSync(tmp, file)
|
|
131
131
|
} catch (error) {
|
|
132
132
|
// 配置写盘失败不应影响插件主流程,仅记录。
|
|
133
|
-
console.warn(`[dsh-notify] 配置写盘失败: ${String(error)}`)
|
|
133
|
+
console.warn(`[dsh-notify-yimit] 配置写盘失败: ${String(error)}`)
|
|
134
134
|
}
|
|
135
135
|
}, 200)
|
|
136
136
|
}
|
|
@@ -223,7 +223,7 @@ function detectBrowsers() {
|
|
|
223
223
|
|
|
224
224
|
export function apply(ctx) {
|
|
225
225
|
const store = openConfig()
|
|
226
|
-
ctx.effect(() => () => store.close(), 'dsh-notify: config close')
|
|
226
|
+
ctx.effect(() => () => store.close(), 'dsh-notify-yimit: config close')
|
|
227
227
|
|
|
228
228
|
/** 每会话状态:标题、状态位、最近一次运行中事件(用于节流合并)、等待类型、防抖时间戳。 */
|
|
229
229
|
const states = new Map()
|
|
@@ -270,7 +270,7 @@ export function apply(ctx) {
|
|
|
270
270
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
271
271
|
})
|
|
272
272
|
} catch (error) {
|
|
273
|
-
console.warn(`[dsh-notify] 浮窗宿主启动失败: ${String(error)}`)
|
|
273
|
+
console.warn(`[dsh-notify-yimit] 浮窗宿主启动失败: ${String(error)}`)
|
|
274
274
|
host = null
|
|
275
275
|
hostAlive = false
|
|
276
276
|
return
|
|
@@ -290,7 +290,7 @@ export function apply(ctx) {
|
|
|
290
290
|
buf = buf.slice(nl + 1)
|
|
291
291
|
if (line.length === 0) continue
|
|
292
292
|
let msg
|
|
293
|
-
try { msg = JSON.parse(line) } catch { console.warn(`[dsh-notify] 浮窗回传解析失败: ${line}`); continue }
|
|
293
|
+
try { msg = JSON.parse(line) } catch { console.warn(`[dsh-notify-yimit] 浮窗回传解析失败: ${line}`); continue }
|
|
294
294
|
if (msg === null || typeof msg !== 'object') continue
|
|
295
295
|
if (msg.type === 'pos' && typeof msg.key === 'string') {
|
|
296
296
|
const rec = activeToasts.get(msg.key)
|
|
@@ -450,7 +450,7 @@ export function apply(ctx) {
|
|
|
450
450
|
offsetY,
|
|
451
451
|
sessionId: String(ev.sessionId),
|
|
452
452
|
baseUrl: baseUrlOf(),
|
|
453
|
-
winTitle: `dsh-notify-${key}`,
|
|
453
|
+
winTitle: `dsh-notify-yimit-${key}`,
|
|
454
454
|
}
|
|
455
455
|
if (typeof cfg.browser === 'string' && cfg.browser.length > 0) payload.browserPath = cfg.browser
|
|
456
456
|
if (!ensureHost()) return
|
|
@@ -472,7 +472,7 @@ export function apply(ctx) {
|
|
|
472
472
|
activeToasts.clear()
|
|
473
473
|
toastOrder.length = 0
|
|
474
474
|
pendingClose.clear()
|
|
475
|
-
}, 'dsh-notify: toast cleanup')
|
|
475
|
+
}, 'dsh-notify-yimit: toast cleanup')
|
|
476
476
|
|
|
477
477
|
// 插件加载时预热一次宿主:把 ~1s 的 WPF 冷启动变成一次性成本,之后每个通知近实时。
|
|
478
478
|
spawnHost()
|
|
@@ -712,5 +712,5 @@ export function apply(ctx) {
|
|
|
712
712
|
})
|
|
713
713
|
ctx.provide('notify', service)
|
|
714
714
|
|
|
715
|
-
console.log('[dsh-notify] 已加载(默认关闭;请在 设置 → 通知 中开启)')
|
|
715
|
+
console.log('[dsh-notify-yimit] 已加载(默认关闭;请在 设置 → 通知 中开启)')
|
|
716
716
|
}
|
package/lib/toast-host.ps1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<#
|
|
2
|
-
dsh-notify 常驻浮窗宿主(Windows PowerShell + WPF)。
|
|
3
|
-
由 dsh-notify 宿主插件在加载时 spawn 一次并常驻:所有桌面浮窗都在本进程内创建,
|
|
2
|
+
dsh-notify-yimit 常驻浮窗宿主(Windows PowerShell + WPF)。
|
|
3
|
+
由 dsh-notify-yimit 宿主插件在加载时 spawn 一次并常驻:所有桌面浮窗都在本进程内创建,
|
|
4
4
|
WPF 程序集只加载一次,通知创建延迟从 ~1s 冷启动降到 ~10ms(根治"总感觉慢")。
|
|
5
5
|
|
|
6
6
|
协议(UTF-8,一行一个 JSON):
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{"cmd":"show","key":"running:s1","instance":1,"title":"...","text":"...",
|
|
9
9
|
"bg":"#286ebd","fg":"#e6edf3","durationSec":8,"sticky":true,"offsetY":0,
|
|
10
10
|
"sessionId":"s1","baseUrl":"http://127.0.0.1:3080",
|
|
11
|
-
"browserPath":"","winTitle":"dsh-notify-running:s1"}
|
|
11
|
+
"browserPath":"","winTitle":"dsh-notify-yimit-running:s1"}
|
|
12
12
|
{"cmd":"text","key":...,"text":"..."} # 原地更新内容(不重弹、零延迟)
|
|
13
13
|
{"cmd":"move","key":...,"top":588} # 平滑移动(220ms QuadraticEase)
|
|
14
14
|
{"cmd":"close","key":...} # 160ms 淡出 + 20px 下坠后关闭
|
|
@@ -27,7 +27,7 @@ Add-Type -AssemblyName WindowsBase
|
|
|
27
27
|
|
|
28
28
|
# WPF 必须运行在 STA 主线程(Windows PowerShell 5.1 控制台主线程为 STA)。
|
|
29
29
|
if ([System.Threading.Thread]::CurrentThread.ApartmentState -ne [System.Threading.ApartmentState]::STA) {
|
|
30
|
-
[Console]::Error.WriteLine("dsh-notify: 宿主需要 STA 主线程(当前 $([System.Threading.Thread]::CurrentThread.ApartmentState))")
|
|
30
|
+
[Console]::Error.WriteLine("dsh-notify-yimit: 宿主需要 STA 主线程(当前 $([System.Threading.Thread]::CurrentThread.ApartmentState))")
|
|
31
31
|
exit 1
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -211,7 +211,7 @@ function New-ToastWindow($cmd) {
|
|
|
211
211
|
if (-not [string]::IsNullOrEmpty([string]$cmd.sessionId)) {
|
|
212
212
|
# 跳转会始终打开浏览器(功能恒开启):用指定浏览器(空 = 系统默认)打开 DSH 并定位会话。
|
|
213
213
|
$jumpBtn = New-ToastButton "跳转会话" ({
|
|
214
|
-
$url = "$($cmd.baseUrl)/#dsh-notify/session=$($cmd.sessionId)"
|
|
214
|
+
$url = "$($cmd.baseUrl)/#dsh-notify-yimit/session=$($cmd.sessionId)"
|
|
215
215
|
try {
|
|
216
216
|
if (-not [string]::IsNullOrEmpty([string]$cmd.browserPath)) {
|
|
217
217
|
Start-Process -FilePath ([string]$cmd.browserPath) -ArgumentList $url
|
package/lib/typert.host.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dsh-notify 的 Host 面 Typert 清单(由 typert-loader 自动扫描注册)。
|
|
2
|
+
* dsh-notify-yimit 的 Host 面 Typert 清单(由 typert-loader 自动扫描注册)。
|
|
3
3
|
* 手写清单,结构与 @deepseek-ai/dsh-typert-generator 产物一致:
|
|
4
4
|
* `./typert` 导出 TYPERT,invocations 的 codec 必须是 zod v4 实例。
|
|
5
5
|
*/
|
|
@@ -63,19 +63,19 @@ const listBrowsersSchema = z.object({
|
|
|
63
63
|
|
|
64
64
|
const patchSchema = z.record(z.string(), z.unknown())
|
|
65
65
|
|
|
66
|
-
const _state$codec = { mode: 'strict', typeSymbol: 'dsh-notify#NotifyState', schema: getStateSchema }
|
|
67
|
-
const _config$codec = { mode: 'strict', typeSymbol: 'dsh-notify#NotifyConfig', schema: configSchema }
|
|
68
|
-
const _patch$codec = { mode: 'strict', typeSymbol: 'dsh-notify#NotifyConfigPatch', schema: patchSchema }
|
|
69
|
-
const _ack$codec = { mode: 'strict', typeSymbol: 'dsh-notify#AckResult', schema: ackSchema }
|
|
70
|
-
const _browsers$codec = { mode: 'strict', typeSymbol: 'dsh-notify#BrowserList', schema: listBrowsersSchema }
|
|
66
|
+
const _state$codec = { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyState', schema: getStateSchema }
|
|
67
|
+
const _config$codec = { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyConfig', schema: configSchema }
|
|
68
|
+
const _patch$codec = { mode: 'strict', typeSymbol: 'dsh-notify-yimit#NotifyConfigPatch', schema: patchSchema }
|
|
69
|
+
const _ack$codec = { mode: 'strict', typeSymbol: 'dsh-notify-yimit#AckResult', schema: ackSchema }
|
|
70
|
+
const _browsers$codec = { mode: 'strict', typeSymbol: 'dsh-notify-yimit#BrowserList', schema: listBrowsersSchema }
|
|
71
71
|
|
|
72
72
|
export const TYPERT = {
|
|
73
|
-
package: 'dsh-notify',
|
|
73
|
+
package: 'dsh-notify-yimit',
|
|
74
74
|
face: 'host',
|
|
75
75
|
schemas: [],
|
|
76
76
|
invocations: [
|
|
77
77
|
{
|
|
78
|
-
id: 'dsh-notify#notify/getState',
|
|
78
|
+
id: 'dsh-notify-yimit#notify/getState',
|
|
79
79
|
service: 'notify',
|
|
80
80
|
namespace: 'notify',
|
|
81
81
|
method: 'getState',
|
|
@@ -84,7 +84,7 @@ export const TYPERT = {
|
|
|
84
84
|
result: _state$codec,
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
|
-
id: 'dsh-notify#notify/updateConfig',
|
|
87
|
+
id: 'dsh-notify-yimit#notify/updateConfig',
|
|
88
88
|
service: 'notify',
|
|
89
89
|
namespace: 'notify',
|
|
90
90
|
method: 'updateConfig',
|
|
@@ -95,18 +95,18 @@ export const TYPERT = {
|
|
|
95
95
|
result: _config$codec,
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
|
-
id: 'dsh-notify#notify/ackEvents',
|
|
98
|
+
id: 'dsh-notify-yimit#notify/ackEvents',
|
|
99
99
|
service: 'notify',
|
|
100
100
|
namespace: 'notify',
|
|
101
101
|
method: 'ackEvents',
|
|
102
102
|
invocation: { kind: 'direct' },
|
|
103
103
|
parameters: [
|
|
104
|
-
{ name: 'ids', wire: 'ids', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify#EventIds', schema: z.array(z.string()) } },
|
|
104
|
+
{ name: 'ids', wire: 'ids', source: 'json', codec: { mode: 'strict', typeSymbol: 'dsh-notify-yimit#EventIds', schema: z.array(z.string()) } },
|
|
105
105
|
],
|
|
106
106
|
result: _ack$codec,
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
id: 'dsh-notify#notify/listBrowsers',
|
|
109
|
+
id: 'dsh-notify-yimit#notify/listBrowsers',
|
|
110
110
|
service: 'notify',
|
|
111
111
|
namespace: 'notify',
|
|
112
112
|
method: 'listBrowsers',
|
|
@@ -118,10 +118,10 @@ export const TYPERT = {
|
|
|
118
118
|
model: {
|
|
119
119
|
services: [
|
|
120
120
|
{
|
|
121
|
-
description: 'dsh-notify 通知服务(ctx.notify):插件配置与通知事件队列。Notification config and event queue service (ctx.notify).',
|
|
122
|
-
summary: 'dsh-notify 通知配置与事件队列服务 (dsh-notify notification config & event queue service)。',
|
|
121
|
+
description: 'dsh-notify-yimit 通知服务(ctx.notify):插件配置与通知事件队列。Notification config and event queue service (ctx.notify).',
|
|
122
|
+
summary: 'dsh-notify-yimit 通知配置与事件队列服务 (dsh-notify-yimit notification config & event queue service)。',
|
|
123
123
|
tags: [],
|
|
124
|
-
jsDoc: '/** dsh-notify 通知配置与事件队列服务(ctx.notify)。dsh-notify notification config & event queue service (ctx.notify). */',
|
|
124
|
+
jsDoc: '/** dsh-notify-yimit 通知配置与事件队列服务(ctx.notify)。dsh-notify-yimit notification config & event queue service (ctx.notify). */',
|
|
125
125
|
key: 'notify',
|
|
126
126
|
exportName: 'NotifyService',
|
|
127
127
|
members: [
|
package/package.json
CHANGED