dsh-messager 0.3.5 → 0.3.6
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 +5 -4
- package/README.md +5 -4
- package/lib/channels/dingtalk.d.ts +3 -5
- package/lib/channels/dingtalk.d.ts.map +1 -1
- package/lib/channels/dingtalk.js +3 -6
- package/lib/channels/dingtalk.js.map +1 -1
- package/lib/channels/discord.d.ts +2 -3
- package/lib/channels/discord.d.ts.map +1 -1
- package/lib/channels/discord.js +2 -3
- package/lib/channels/discord.js.map +1 -1
- package/lib/channels/feishu.d.ts +3 -14
- package/lib/channels/feishu.d.ts.map +1 -1
- package/lib/channels/feishu.js +6 -15
- package/lib/channels/feishu.js.map +1 -1
- package/lib/channels/telegram.d.ts.map +1 -1
- package/lib/channels/telegram.js +0 -1
- package/lib/channels/telegram.js.map +1 -1
- package/lib/channels/wecom.d.ts +1 -1
- package/lib/channels/wecom.d.ts.map +1 -1
- package/lib/channels/wecom.js +1 -2
- package/lib/channels/wecom.js.map +1 -1
- package/lib/client.js +188 -35
- package/lib/client.js.map +1 -1
- package/lib/config-route.d.ts +18 -7
- package/lib/config-route.d.ts.map +1 -1
- package/lib/config-route.js +59 -16
- package/lib/config-route.js.map +1 -1
- package/lib/config-shared.d.ts +1 -1
- package/lib/config-shared.d.ts.map +1 -1
- package/lib/config-shared.js +1 -1
- package/lib/config-shared.js.map +1 -1
- package/lib/config.d.ts +0 -6
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +0 -1
- package/lib/config.js.map +1 -1
- package/lib/environment.d.ts +68 -0
- package/lib/environment.d.ts.map +1 -0
- package/lib/environment.js +87 -0
- package/lib/environment.js.map +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +69 -14
- package/lib/index.js.map +1 -1
- package/lib/templates.d.ts +1 -3
- package/lib/templates.d.ts.map +1 -1
- package/lib/templates.js +1 -3
- package/lib/templates.js.map +1 -1
- package/lib/types/client/card-controller.d.ts +51 -1
- package/lib/types/client/card-controller.d.ts.map +1 -1
- package/lib/types/client/desktop.d.ts +30 -0
- package/lib/types/client/desktop.d.ts.map +1 -0
- package/lib/types/client/diff.d.ts +20 -2
- package/lib/types/client/diff.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +10 -2
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/section.d.ts.map +1 -1
- package/lib/types/client/settings-form.d.ts +8 -1
- package/lib/types/client/settings-form.d.ts.map +1 -1
- package/lib/types/config-shared.d.ts +1 -1
- package/lib/types/config-shared.d.ts.map +1 -1
- package/lib/types/config.d.ts +0 -6
- package/lib/types/config.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -18,7 +18,8 @@ import { createDiscordChannel } from './channels/discord.js';
|
|
|
18
18
|
import { createDingtalkChannel } from './channels/dingtalk.js';
|
|
19
19
|
import { createTelegramChannel } from './channels/telegram.js';
|
|
20
20
|
import { resolveNamespace } from './settings.js';
|
|
21
|
-
import { mountConfigRoutes } from './config-route.js';
|
|
21
|
+
import { mountConfigRoutes, sameOrigin } from './config-route.js';
|
|
22
|
+
import { applyEnvironmentDefaults, detectHostKind, environmentDefaults } from './environment.js';
|
|
22
23
|
export const name = 'dsh-messager';
|
|
23
24
|
/**
|
|
24
25
|
* ⚠️ 必须从**入口模块**导出 `Config` schema。
|
|
@@ -112,6 +113,23 @@ function sessionTitleOf(session) {
|
|
|
112
113
|
}
|
|
113
114
|
/** 已扫描过日志且确认无标题的会话(避免对无标题会话反复全量扫描大日志)。 */
|
|
114
115
|
const noTitleSessions = new Set();
|
|
116
|
+
/**
|
|
117
|
+
* 读取本插件命名空间的「用户显式设置过」层(`settings.describe().user`)。
|
|
118
|
+
*
|
|
119
|
+
* - **不传** `redactSecrets`:脱敏会删掉 secret 叶子,使 `userSet` 判断失真;
|
|
120
|
+
* 这里只判断「键是否存在」,不读取、不记录、不外传任何值。
|
|
121
|
+
* - 服务或命名空间不可知时返回 `undefined`,调用方据此**跳过**环境默认值
|
|
122
|
+
* (宁可退回旧行为,也不覆盖用户写在 profile patch 里的显式选择)。
|
|
123
|
+
*/
|
|
124
|
+
function userLayerOf(settingsCtx) {
|
|
125
|
+
if (settingsCtx === undefined)
|
|
126
|
+
return undefined;
|
|
127
|
+
const settings = settingsCtx.get('settings');
|
|
128
|
+
if (settings === undefined)
|
|
129
|
+
return undefined;
|
|
130
|
+
const namespace = resolveNamespace(settingsCtx);
|
|
131
|
+
return settings.describe().find(row => row.ns === namespace)?.user;
|
|
132
|
+
}
|
|
115
133
|
/** 标题兜底:实时 map 缺失时从会话日志补取一次;新标题事件到达时解除负缓存。 */
|
|
116
134
|
function ensureSessionTitle(dispatcher, session) {
|
|
117
135
|
const sessionId = session.id;
|
|
@@ -135,7 +153,19 @@ function ensureSessionTitle(dispatcher, session) {
|
|
|
135
153
|
*/
|
|
136
154
|
export function apply(ctx, config) {
|
|
137
155
|
/**
|
|
138
|
-
*
|
|
156
|
+
* 宿主形态(v0.3.6 智能默认):桌面壳托管的 Electron 宿主下,`system` 通道默认关闭
|
|
157
|
+
* —— 桌面版的原生通知只能由窗口页面投递,host 半边只有 node-notifier(SnoreToast)。
|
|
158
|
+
* 详见 src/environment.ts 的模块说明。
|
|
159
|
+
*/
|
|
160
|
+
const hostKind = detectHostKind(process.env, process.versions, typeof process.send === 'function');
|
|
161
|
+
/** settings 上下文(可用时):**只**用于读取「用户显式设置过」的层,不读配置值本身。 */
|
|
162
|
+
let settingsCtx;
|
|
163
|
+
/**
|
|
164
|
+
* 读取当前有效配置 = 合并终值(schema 默认 → base → user)+ 环境默认值。
|
|
165
|
+
*
|
|
166
|
+
* 环境默认值**只覆盖用户没显式设置过的叶子**(`describe().user` 键存在即用户写过);
|
|
167
|
+
* 用户层不可知(无 settings 服务)时**不套**环境默认值,宁可退回旧行为,
|
|
168
|
+
* 也不能覆盖用户写在 profile patch 里的显式选择。
|
|
139
169
|
*
|
|
140
170
|
* ⚠️ 关键:**每次用时读取 volatile 引用**,绝不缓存配置快照。
|
|
141
171
|
*
|
|
@@ -148,7 +178,11 @@ export function apply(ctx, config) {
|
|
|
148
178
|
* Loader 会**就地更新** volatile 引用(`Entry._commitVolatile`),所以这里
|
|
149
179
|
* 每次调用都能拿到最新值 —— 这也是 DSH 官方插件(如 pwsh-local)的惯例用法。
|
|
150
180
|
*/
|
|
151
|
-
const readConfig = () =>
|
|
181
|
+
const readConfig = () => {
|
|
182
|
+
const base = resolveConfig(config);
|
|
183
|
+
const user = userLayerOf(settingsCtx);
|
|
184
|
+
return user === undefined ? base : applyEnvironmentDefaults(base, user, environmentDefaults(hostKind));
|
|
185
|
+
};
|
|
152
186
|
/** 按签名缓存的通道构建(配置变化时自动重建)。 */
|
|
153
187
|
let channelCache;
|
|
154
188
|
const channelsFor = (current) => {
|
|
@@ -166,19 +200,40 @@ export function apply(ctx, config) {
|
|
|
166
200
|
logDebug: (message) => ctx.logger.debug(`[dsh-messager] ${message}`),
|
|
167
201
|
},
|
|
168
202
|
});
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
203
|
+
// settings 上下文(可选):既供「用户层」判定(智能默认),也供下方配置路由。
|
|
204
|
+
// 本插件的**自身配置值**仍只从 Loader 的 volatile 引用读取(见 readConfig),
|
|
205
|
+
// settings 在这里不参与读值,只用来判断「用户有没有显式设置过某个字段」。
|
|
206
|
+
ctx.inject(['settings'], (settingsContext) => {
|
|
207
|
+
settingsCtx = settingsContext;
|
|
208
|
+
settingsContext.effect(() => () => { settingsCtx = undefined; }, 'dsh-messager: settings handle');
|
|
209
|
+
// 配置读写路由(webServer 通道):浏览器端经此读写本插件命名空间,
|
|
210
|
+
// 不受 Web 设置白名单门控(dsh-market 同款「正门」)。仅 Web 环境挂载;
|
|
211
|
+
// headless profile 无 webServer 服务时本 inject 不执行,不影响通知功能。
|
|
212
|
+
settingsContext.inject(['webServer'], (webCtx) => {
|
|
213
|
+
const settingsService = webCtx.get('settings');
|
|
178
214
|
if (settingsService === undefined)
|
|
179
215
|
return;
|
|
180
|
-
|
|
181
|
-
|
|
216
|
+
/**
|
|
217
|
+
* 访问守卫:宿主连接服务是官方为「另一条 Web 路由」提供的鉴权正门
|
|
218
|
+
* (`ctx.connection.requestRejection`,与宿主 `/api` 同一套 cookie 判定)。
|
|
219
|
+
* 它不看 Origin/Referer —— 桌面壳转发请求时会删掉 Origin、只留
|
|
220
|
+
* `referer: dsh-app://app/`,用来源头判定必然误伤(v0.3.5 起桌面版保存必 403)。
|
|
221
|
+
* 每次请求求值:connection 服务可能晚于本插件可用。
|
|
222
|
+
* 服务缺席(无 client-connection 的部署)时退回来源校验,只防浏览器跨站。
|
|
223
|
+
*/
|
|
224
|
+
const guard = (request) => {
|
|
225
|
+
const connection = webCtx.get('connection');
|
|
226
|
+
if (connection !== undefined)
|
|
227
|
+
return connection.requestRejection(request);
|
|
228
|
+
return sameOrigin(request) ? undefined : 403;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* 视图里的「有效值」必须与 host 端实际使用的值一致 —— 否则设置页会显示
|
|
232
|
+
* 「系统通知:开」而 host 实际按环境默认值关闭,用户改不动也看不懂。
|
|
233
|
+
*/
|
|
234
|
+
const effectiveValue = (value, user) => applyEnvironmentDefaults(value, user, environmentDefaults(hostKind));
|
|
235
|
+
const disposeRoutes = mountConfigRoutes(webCtx.webServer, settingsService, resolveNamespace(webCtx), guard, effectiveValue);
|
|
236
|
+
webCtx.effect(() => disposeRoutes, 'dsh-messager: config routes');
|
|
182
237
|
});
|
|
183
238
|
});
|
|
184
239
|
// 会话事件:会话标题、交互信号(审批/提问)、turn/end 结束原因。
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/templates.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 纯函数;verbosity(内容繁复度)按通道取值:
|
|
4
4
|
* - minimal:只有标题
|
|
5
5
|
* - normal:+ 会话标题 / 工具名 / 结束原因 / 错误摘要
|
|
6
|
-
* - detailed:+ turn/step
|
|
6
|
+
* - detailed:+ turn/step 与交互原因
|
|
7
7
|
*/
|
|
8
8
|
import type { Config, Verbosity } from './config.ts';
|
|
9
9
|
import type { Signal, TurnEndReason } from './signals.ts';
|
|
@@ -13,8 +13,6 @@ export interface NotificationPayload {
|
|
|
13
13
|
sessionId: string;
|
|
14
14
|
title: string;
|
|
15
15
|
body: string;
|
|
16
|
-
/** 打开 DSH 的地址(system 通道点击 / 飞书卡片按钮)。 */
|
|
17
|
-
url: string;
|
|
18
16
|
}
|
|
19
17
|
/** 渲染上下文。 */
|
|
20
18
|
export interface RenderContext {
|
package/lib/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEzD,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEzD,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,SAAS,CAAA;CACrB;AAaD,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAU3F;AAED,mCAAmC;AACnC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,mBAAmB;AACnB,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAIlD;AAeD,2BAA2B;AAC3B,wBAAgB,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CA+BjD;AAED,cAAc;AACd,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,mBAAmB,CAOrE"}
|
package/lib/templates.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 纯函数;verbosity(内容繁复度)按通道取值:
|
|
4
4
|
* - minimal:只有标题
|
|
5
5
|
* - normal:+ 会话标题 / 工具名 / 结束原因 / 错误摘要
|
|
6
|
-
* - detailed:+ turn/step
|
|
6
|
+
* - detailed:+ turn/step 与交互原因
|
|
7
7
|
*/
|
|
8
8
|
const KIND_TITLES = {
|
|
9
9
|
interaction: '需要交互',
|
|
@@ -90,7 +90,6 @@ export function bodyOf(ctx) {
|
|
|
90
90
|
if (signal.kind === 'interaction' && signal.reason !== undefined) {
|
|
91
91
|
lines.push(`原因:${signal.reason}`);
|
|
92
92
|
}
|
|
93
|
-
lines.push(`打开:${ctx.config.message.guiUrl}`);
|
|
94
93
|
}
|
|
95
94
|
return lines.join('\n');
|
|
96
95
|
}
|
|
@@ -101,7 +100,6 @@ export function renderPayload(ctx) {
|
|
|
101
100
|
sessionId: ctx.signal.sessionId,
|
|
102
101
|
title: titleOf(ctx),
|
|
103
102
|
body: bodyOf(ctx),
|
|
104
|
-
url: ctx.config.message.guiUrl,
|
|
105
103
|
};
|
|
106
104
|
}
|
|
107
105
|
//# sourceMappingURL=templates.js.map
|
package/lib/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,23 @@ export interface CardFieldSpec {
|
|
|
37
37
|
secret?: boolean;
|
|
38
38
|
/** 门控开关:开关关闭时该字段不可见且保存计划跳过(如第三方通道的子配置)。 */
|
|
39
39
|
hiddenUnless?: FieldHiddenUnless;
|
|
40
|
+
/**
|
|
41
|
+
* 桌面版(DSH Desktop)下隐藏:该字段在此环境「没必要打开」,开了反而重复提醒。
|
|
42
|
+
* 仅当**用户层没写过该组**时隐藏;用户显式设置过则照常显示,便于他改回来。
|
|
43
|
+
* 判定见 visibleFields()。
|
|
44
|
+
*
|
|
45
|
+
* ⚠️ **当前没有任何字段标记它**:v0.3.6 真机验证发现「隐藏」会连唯一的兜底路径
|
|
46
|
+
* (host 的 system 通道)一起藏掉 —— 渲染端 toast 被系统丢弃时用户将无路可走,
|
|
47
|
+
* 故桌面版改为「照常显示 + 一句说明」。机制保留备用。
|
|
48
|
+
*/
|
|
49
|
+
desktopHidden?: true;
|
|
50
|
+
/**
|
|
51
|
+
* 桌面版专用文案键。桌面版里「浏览器通知」实际由**应用本体**投递成系统通知,
|
|
52
|
+
* 沿用浏览器文案会误导;有该键时桌面版优先用它(见 labelKeyFor)。
|
|
53
|
+
*/
|
|
54
|
+
desktopLabel?: string;
|
|
55
|
+
/** 桌面版专用 hint 键(与 desktopLabel 同理)。 */
|
|
56
|
+
desktopHint?: string;
|
|
40
57
|
}
|
|
41
58
|
/** 字段渲染状态。 */
|
|
42
59
|
export interface CardFieldState {
|
|
@@ -85,6 +102,8 @@ export interface MessagerCardFace {
|
|
|
85
102
|
discard(): void;
|
|
86
103
|
/** 翻译函数(键 → 当前语言文案);未接入 locale 时原样返回键。 */
|
|
87
104
|
t(key: string): string;
|
|
105
|
+
/** 是否运行在桌面版窗口:分区据此显示「某些开关已隐藏」的说明。 */
|
|
106
|
+
desktop: boolean;
|
|
88
107
|
}
|
|
89
108
|
/** 一条嵌套路径写操作(与 settings.mutate 的 SettingsPathOpView 同构)。 */
|
|
90
109
|
export type ScopeWriteOp = {
|
|
@@ -120,6 +139,27 @@ export declare function fieldKey(group: string, field: string): string;
|
|
|
120
139
|
* hiddenUnless 指定的开关字段当前(含草稿)不为 true 时,该字段不渲染。
|
|
121
140
|
*/
|
|
122
141
|
export declare function isFieldGated(spec: CardFieldSpec, fields: Readonly<Record<string, CardFieldState>>): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* 计算当前环境下**可见**的字段清单(纯函数,可单测)。
|
|
144
|
+
*
|
|
145
|
+
* 标记了 `desktopHidden` 的字段在桌面版会隐藏(用户层写过该组时除外)。
|
|
146
|
+
* 📌 当前 CARD_FIELDS 里**没有**这样的字段 —— v0.3.6 实测发现渲染端 toast 可能被系统丢弃
|
|
147
|
+
* (Windows 未登记应用),隐藏 host 通道开关会让用户无兜底可用,故改为「显示 + 说明」。
|
|
148
|
+
* 机制保留:将来若有「开了只会重复」的字段,标记即可。
|
|
149
|
+
*/
|
|
150
|
+
export declare function visibleFields(fields: readonly CardFieldSpec[], options: {
|
|
151
|
+
desktop: boolean;
|
|
152
|
+
user?: unknown;
|
|
153
|
+
}): CardFieldSpec[];
|
|
154
|
+
/**
|
|
155
|
+
* 字段的渲染文案键:桌面版有专用文案时优先。
|
|
156
|
+
*
|
|
157
|
+
* 用途:桌面版里 `browser` 通道的产物是**应用原生通知**(Windows toast / macOS
|
|
158
|
+
* 通知中心,署名是应用本体),不是「浏览器通知」,沿用浏览器文案会误导用户。
|
|
159
|
+
*/
|
|
160
|
+
export declare function labelKeyFor(spec: CardFieldSpec, desktop: boolean): string;
|
|
161
|
+
/** 字段的 hint 键(桌面版优先 desktopHint);无 hint 返回 undefined。 */
|
|
162
|
+
export declare function hintKeyFor(spec: CardFieldSpec, desktop: boolean): string | undefined;
|
|
123
163
|
export declare class MessagerCardController {
|
|
124
164
|
private readonly scope;
|
|
125
165
|
private readonly fields;
|
|
@@ -128,7 +168,13 @@ export declare class MessagerCardController {
|
|
|
128
168
|
private saving;
|
|
129
169
|
private failed;
|
|
130
170
|
private cache;
|
|
131
|
-
|
|
171
|
+
/** 是否运行在桌面版窗口(决定 desktopHidden 字段是否隐藏)。 */
|
|
172
|
+
private readonly desktop;
|
|
173
|
+
constructor(scope: ScopeLike, fields: readonly CardFieldSpec[],
|
|
174
|
+
/** 运行环境:桌面版窗口下隐藏「没必要打开」的字段(见 visibleFields)。 */
|
|
175
|
+
options?: {
|
|
176
|
+
desktop?: boolean;
|
|
177
|
+
});
|
|
132
178
|
/** 槽位注入面。 */
|
|
133
179
|
inject(): MessagerCardFace;
|
|
134
180
|
/**
|
|
@@ -140,6 +186,10 @@ export declare class MessagerCardController {
|
|
|
140
186
|
getSnapshot(): MessagerCardState;
|
|
141
187
|
private compute;
|
|
142
188
|
private effectiveValue;
|
|
189
|
+
/** 当前环境下可见的字段(桌面版隐藏 system 组等,见 visibleFields)。 */
|
|
190
|
+
private visibleSpecs;
|
|
191
|
+
/** 单个字段在当前环境下是否可见(同一批 spec 对象,恒等比较即可)。 */
|
|
192
|
+
private isVisible;
|
|
143
193
|
private groupValue;
|
|
144
194
|
private baseValue;
|
|
145
195
|
private userHas;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-controller.d.ts","sourceRoot":"","sources":["../../../src/client/card-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,cAAc;AACd,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEnE,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kBAAkB;IAClB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"card-controller.d.ts","sourceRoot":"","sources":["../../../src/client/card-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 桌面版(DSH Desktop)窗口判定。
|
|
3
|
+
*
|
|
4
|
+
* 官方标记:桌面壳的 preload 在窗口里 `contextBridge.exposeInMainWorld('dshDesktopBoot', …)`
|
|
5
|
+
* (asar 内 `lib/preload-app.cjs`);DSH 自己的前端也用
|
|
6
|
+
* `globalThis.dshDesktopBoot !== undefined` 决定 boot 通道(桌面走 IPC 取启动清单,
|
|
7
|
+
* 浏览器读 HTML 里的 `__DSH_BOOT__`)。所以这是「我在桌面窗口里」的权威信号。
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ 仅 client 端可用(host 端没有 window;host 侧的等价判定见 src/environment.ts)。
|
|
10
|
+
*/
|
|
11
|
+
/** 判断给定全局对象是否处于桌面版窗口(可传替身便于单测)。 */
|
|
12
|
+
export declare function isDesktopWindow(target?: unknown): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* 「用户现在没在看这个窗口」判定 —— 决定 `onlyWhenHidden` 是否放行通知。
|
|
15
|
+
*
|
|
16
|
+
* - 浏览器(`dsh web`):页面 `hidden`(切走标签页 / 最小化)即为没在看;
|
|
17
|
+
* - **桌面版:`visibilityState` 只在窗口最小化或被隐藏时才变 `hidden`**,
|
|
18
|
+
* 窗口被别的窗口盖住、失去焦点时它仍是 `visible`。若只看 `visibilityState`,
|
|
19
|
+
* 用户切到别的应用去干活时永远不会收到通知 —— 所以桌面版把**失去焦点**也算没在看。
|
|
20
|
+
*
|
|
21
|
+
* @param options.desktop - 是否桌面版窗口(见 isDesktopWindow)。
|
|
22
|
+
* @param options.visibilityState - `document.visibilityState`。
|
|
23
|
+
* @param options.hasFocus - `document.hasFocus()`。
|
|
24
|
+
*/
|
|
25
|
+
export declare function isWindowBackgrounded(options: {
|
|
26
|
+
desktop: boolean;
|
|
27
|
+
visibilityState: string;
|
|
28
|
+
hasFocus: boolean;
|
|
29
|
+
}): boolean;
|
|
30
|
+
//# sourceMappingURL=desktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../../src/client/desktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,MAAM,GAAE,OAAoB,GAAG,OAAO,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;CAClB,GAAG,OAAO,CAGV"}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* 客户端会话状态 diff(纯函数,可单测):
|
|
3
3
|
* - sessionStatus.pendingInteraction 从无到有 → 需要交互(橙点)
|
|
4
4
|
* - running true→false 且会话不在主视图 → 任务完成(绿点)
|
|
5
|
+
* - `api-session/error`(宿主转发事件)→ 任务出错
|
|
5
6
|
*/
|
|
6
7
|
import type { SessionSummary } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
7
8
|
import type { SessionStatusSnapshot } from '@deepseek-ai/dsh-client-ui-session/client';
|
|
8
9
|
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
9
|
-
export type ClientNoticeKind = 'interaction' | 'completed';
|
|
10
|
+
export type ClientNoticeKind = 'interaction' | 'completed' | 'error';
|
|
10
11
|
export type ClientInteractionKind = 'approval' | 'plan-review' | 'question';
|
|
11
12
|
export interface ClientNotice {
|
|
12
13
|
kind: ClientNoticeKind;
|
|
@@ -15,11 +16,20 @@ export interface ClientNotice {
|
|
|
15
16
|
interaction?: ClientInteractionKind;
|
|
16
17
|
/** 会话显示标题(displayTitle)。 */
|
|
17
18
|
title?: string;
|
|
19
|
+
/** error 的错误摘要(来自 `api-session/error` 的第二个参数)。 */
|
|
20
|
+
message?: string;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* 对比两次列表快照。首次出现的会话只建立基线、不通知;被移除的会话不通知。
|
|
24
|
+
*
|
|
25
|
+
* @param options.ignoreMainView - 忽略「会话是否正被主视图持有」这条过滤(v0.3.6 起):
|
|
26
|
+
* 窗口/minimized 到后台(用户没在看)时,**当前打开的那个会话**完成了也应该提醒 ——
|
|
27
|
+
* 否则「跑一个任务、切走」这个最常见用法永远收不到完成通知。
|
|
28
|
+
* 页面可见但仍要通知(`onlyWhenHidden=false`)时保持过滤:那时用户正看着它。
|
|
21
29
|
*/
|
|
22
|
-
export declare function diffSessionSummaries(previous: Readonly<Record<SessionId, SessionSummary>>, next: Readonly<Record<SessionId, SessionSummary
|
|
30
|
+
export declare function diffSessionSummaries(previous: Readonly<Record<SessionId, SessionSummary>>, next: Readonly<Record<SessionId, SessionSummary>>, options?: {
|
|
31
|
+
ignoreMainView?: boolean;
|
|
32
|
+
}): ClientNotice[];
|
|
23
33
|
/** 仅把 DSH Web UI 有专用展示语义的待交互 kind 映射为通知类型。 */
|
|
24
34
|
export declare function clientInteractionKindOf(kind: string): ClientInteractionKind | undefined;
|
|
25
35
|
/**
|
|
@@ -31,7 +41,15 @@ export declare function clientInteractionKindOf(kind: string): ClientInteraction
|
|
|
31
41
|
export declare function triggerAllows(notice: ClientNotice, triggers: {
|
|
32
42
|
interaction: boolean;
|
|
33
43
|
completed: boolean;
|
|
44
|
+
error: boolean;
|
|
34
45
|
}): boolean;
|
|
35
46
|
/** 对比两次 uiSession 统一状态快照。 */
|
|
36
47
|
export declare function diffPendingInteractions(previous: SessionStatusSnapshot, next: SessionStatusSnapshot, summaries: Readonly<Record<SessionId, SessionSummary>>): ClientNotice[];
|
|
48
|
+
/**
|
|
49
|
+
* `api-session/error`(宿主 `agent/error` 的客户端转发事件)→ 任务出错通知。
|
|
50
|
+
*
|
|
51
|
+
* 会话标题从当前列表摘要里取;取不到就只发错误摘要。
|
|
52
|
+
* 桌面版默认只用渲染端通道,这条是「关掉 system 通道后仍能收到错误提醒」的前提。
|
|
53
|
+
*/
|
|
54
|
+
export declare function errorNotice(sessionId: SessionId, message: string, summaries: Readonly<Record<SessionId, SessionSummary>>): ClientNotice;
|
|
37
55
|
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/client/diff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/client/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAA;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAA;AACpE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAA;AAE3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EACrD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EACjD,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,YAAY,EAAE,CAchB;AAED,8CAA8C;AAC9C,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CASvF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACrE,OAAO,CAMT;AAED,6BAA6B;AAC7B,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,EAAE,qBAAqB,EAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,GACrD,YAAY,EAAE,CAgBhB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,GACrD,YAAY,CAQd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAoBlD,eAAO,MAAM,IAAI,iBAAiB,CAAA;AAElC,8CAA8C;AAC9C,eAAO,MAAM,SAAS,iBAAiB,CAAA;AAEvC,sDAAsD;AACtD,eAAO,MAAM,MAAM,UAAyD,CAAA;AAoI5E,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAkHxC"}
|
|
@@ -12,9 +12,11 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
12
12
|
export declare const zh: {
|
|
13
13
|
nav: string;
|
|
14
14
|
'section.description': string;
|
|
15
|
+
'section.description.desktop': string;
|
|
15
16
|
'group.triggers': string;
|
|
16
17
|
'group.system': string;
|
|
17
18
|
'group.browser': string;
|
|
19
|
+
'group.browser.desktop': string;
|
|
18
20
|
'group.feishu': string;
|
|
19
21
|
'group.wecom': string;
|
|
20
22
|
'group.discord': string;
|
|
@@ -28,8 +30,10 @@ export declare const zh: {
|
|
|
28
30
|
'field.system.icon': string;
|
|
29
31
|
'field.system.verbosity': string;
|
|
30
32
|
'field.browser.enabled': string;
|
|
33
|
+
'field.browser.enabled.desktop': string;
|
|
31
34
|
'field.browser.icon': string;
|
|
32
35
|
'field.browser.onlyWhenHidden': string;
|
|
36
|
+
'field.browser.onlyWhenHidden.desktop': string;
|
|
33
37
|
'field.browser.verbosity': string;
|
|
34
38
|
'field.feishu.enabled': string;
|
|
35
39
|
'field.feishu.webhookUrl': string;
|
|
@@ -57,10 +61,10 @@ export declare const zh: {
|
|
|
57
61
|
'field.telegram.verbosity': string;
|
|
58
62
|
'field.message.titlePrefix': string;
|
|
59
63
|
'field.message.includeSessionTitle': string;
|
|
60
|
-
'field.message.guiUrl': string;
|
|
61
64
|
'hint.system.icon': string;
|
|
62
65
|
'hint.secret': string;
|
|
63
66
|
'hint.message.titlePrefix': string;
|
|
67
|
+
'hint.desktopFallback': string;
|
|
64
68
|
'action.save': string;
|
|
65
69
|
'action.saving': string;
|
|
66
70
|
'action.discard': string;
|
|
@@ -76,9 +80,11 @@ export declare const zh: {
|
|
|
76
80
|
export declare const en: {
|
|
77
81
|
nav: string;
|
|
78
82
|
'section.description': string;
|
|
83
|
+
'section.description.desktop': string;
|
|
79
84
|
'group.triggers': string;
|
|
80
85
|
'group.system': string;
|
|
81
86
|
'group.browser': string;
|
|
87
|
+
'group.browser.desktop': string;
|
|
82
88
|
'group.feishu': string;
|
|
83
89
|
'group.wecom': string;
|
|
84
90
|
'group.discord': string;
|
|
@@ -92,8 +98,10 @@ export declare const en: {
|
|
|
92
98
|
'field.system.icon': string;
|
|
93
99
|
'field.system.verbosity': string;
|
|
94
100
|
'field.browser.enabled': string;
|
|
101
|
+
'field.browser.enabled.desktop': string;
|
|
95
102
|
'field.browser.icon': string;
|
|
96
103
|
'field.browser.onlyWhenHidden': string;
|
|
104
|
+
'field.browser.onlyWhenHidden.desktop': string;
|
|
97
105
|
'field.browser.verbosity': string;
|
|
98
106
|
'field.feishu.enabled': string;
|
|
99
107
|
'field.feishu.webhookUrl': string;
|
|
@@ -121,10 +129,10 @@ export declare const en: {
|
|
|
121
129
|
'field.telegram.verbosity': string;
|
|
122
130
|
'field.message.titlePrefix': string;
|
|
123
131
|
'field.message.includeSessionTitle': string;
|
|
124
|
-
'field.message.guiUrl': string;
|
|
125
132
|
'hint.system.icon': string;
|
|
126
133
|
'hint.secret': string;
|
|
127
134
|
'hint.message.titlePrefix': string;
|
|
135
|
+
'hint.desktopFallback': string;
|
|
128
136
|
'action.save': string;
|
|
129
137
|
'action.saving': string;
|
|
130
138
|
'action.discard': string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,2CAA2C;QAC3C,cAAc,EAAE,MAAM,OAAO,EAAE,CAAA;KAChC;CACF;AAED,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,2CAA2C;QAC3C,cAAc,EAAE,MAAM,OAAO,EAAE,CAAA;KAChC;CACF;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEd,CAAA;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEd,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/client/section.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5D,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/client/section.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5D,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AA0ClG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAsB1D"}
|
|
@@ -8,15 +8,22 @@
|
|
|
8
8
|
import type { MessagerCardActions, MessagerCardState } from './card-controller.js';
|
|
9
9
|
/** 分组标题的翻译键(键见 locales.ts;导出供字典一致性测试)。 */
|
|
10
10
|
export declare const GROUP_TITLE_KEYS: Record<string, string>;
|
|
11
|
+
/**
|
|
12
|
+
* 桌面版专用分组标题(当前只有 browser):桌面版里那条通道产出的是**应用原生通知**,
|
|
13
|
+
* 不是"浏览器通知"。键集必须与 locales.ts 一致(字典一致性测试覆盖)。
|
|
14
|
+
*/
|
|
15
|
+
export declare const GROUP_TITLE_KEYS_DESKTOP: Record<string, string>;
|
|
11
16
|
/**
|
|
12
17
|
* 设置表单体:全部字段分组 + 底部操作栏。
|
|
13
18
|
* @param state - 控制器快照(useMessagerCard 的返回)。
|
|
14
19
|
* @param actions - 控制器动作(edit/reset/save/discard)。
|
|
15
20
|
* @param t - 翻译函数(键 → 当前语言文案)。
|
|
21
|
+
* @param desktop - 桌面版窗口:分组标题与字段文案走桌面变体(见 GROUP_TITLE_KEYS_DESKTOP)。
|
|
16
22
|
*/
|
|
17
|
-
export declare function MessagerSettingsForm({ state, actions, t }: {
|
|
23
|
+
export declare function MessagerSettingsForm({ state, actions, t, desktop }: {
|
|
18
24
|
state: MessagerCardState;
|
|
19
25
|
actions: MessagerCardActions;
|
|
20
26
|
t: (key: string) => string;
|
|
27
|
+
desktop?: boolean;
|
|
21
28
|
}): import("react").JSX.Element;
|
|
22
29
|
//# sourceMappingURL=settings-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client/settings-form.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAiB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEjG,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUnD,CAAA;
|
|
1
|
+
{"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client/settings-form.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAiB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEjG,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUnD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE3D,CAAA;AAgTD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAe,EAAE,EAAE;IAC3E,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,+BA8EA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 配置路由的跨端共享类型(host 与浏览器 client 共用,不得 import 任何
|
|
3
3
|
* Node/浏览器专属模块)。
|
|
4
4
|
*/
|
|
5
|
-
/** 配置路由路径(挂在 DSH webServer
|
|
5
|
+
/** 配置路由路径(挂在 DSH webServer 上;访问经宿主鉴权,见 src/config-route.ts)。 */
|
|
6
6
|
export declare const CONFIG_PATH = "/dsh-messager/config";
|
|
7
7
|
/** client ScopeLike 快照同构的配置视图。 */
|
|
8
8
|
export interface ConfigView {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-shared.d.ts","sourceRoot":"","sources":["../../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,
|
|
1
|
+
{"version":3,"file":"config-shared.d.ts","sourceRoot":"","sources":["../../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gEAAgE;AAChE,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
|
package/lib/types/config.d.ts
CHANGED
|
@@ -111,8 +111,6 @@ export interface MessageConfig {
|
|
|
111
111
|
titlePrefix?: string;
|
|
112
112
|
/** 正文是否附带会话标题。 */
|
|
113
113
|
includeSessionTitle: boolean;
|
|
114
|
-
/** GUI 地址,用于通知中的“打开”链接/按钮。 */
|
|
115
|
-
guiUrl: string;
|
|
116
114
|
}
|
|
117
115
|
export interface Config {
|
|
118
116
|
triggers: TriggerConfig;
|
|
@@ -231,11 +229,9 @@ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
|
|
|
231
229
|
message: Schema<Schemastery.ObjectS<NoInfer<{
|
|
232
230
|
titlePrefix: Schema<string, string, "volatile">;
|
|
233
231
|
includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
|
|
234
|
-
guiUrl: Schema<string, string, "volatile-defined">;
|
|
235
232
|
}>>, Schemastery.ObjectT<NoInfer<{
|
|
236
233
|
titlePrefix: Schema<string, string, "volatile">;
|
|
237
234
|
includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
|
|
238
|
-
guiUrl: Schema<string, string, "volatile-defined">;
|
|
239
235
|
}>>, "plain">;
|
|
240
236
|
}>>, Schemastery.ObjectT<NoInfer<{
|
|
241
237
|
triggers: Schema<Schemastery.ObjectS<NoInfer<{
|
|
@@ -342,11 +338,9 @@ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
|
|
|
342
338
|
message: Schema<Schemastery.ObjectS<NoInfer<{
|
|
343
339
|
titlePrefix: Schema<string, string, "volatile">;
|
|
344
340
|
includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
|
|
345
|
-
guiUrl: Schema<string, string, "volatile-defined">;
|
|
346
341
|
}>>, Schemastery.ObjectT<NoInfer<{
|
|
347
342
|
titlePrefix: Schema<string, string, "volatile">;
|
|
348
343
|
includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
|
|
349
|
-
guiUrl: Schema<string, string, "volatile-defined">;
|
|
350
344
|
}>>, "plain">;
|
|
351
345
|
}>>, "plain">;
|
|
352
346
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEjE,eAAe;AACf,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEzD,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,oCAAoC;AACpC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,qCAAqC;AACrC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,iBAAiB;AACjB,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+CAA+C;IAC/C,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gCAAgC;IAChC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,cAAc;AACd,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,mBAAmB,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|