@zaofan/dsh-qqbot 0.6.0
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/LICENSE +21 -0
- package/README.md +308 -0
- package/README_EN.md +273 -0
- package/client/qqbot-settings.js +1463 -0
- package/cordis.patch.yml +36 -0
- package/dist/api/group-admin.d.ts +112 -0
- package/dist/api/group-admin.d.ts.map +1 -0
- package/dist/api/group-admin.js +179 -0
- package/dist/api/group-admin.js.map +1 -0
- package/dist/channel-tools.d.ts +14 -0
- package/dist/channel-tools.d.ts.map +1 -0
- package/dist/channel-tools.js +880 -0
- package/dist/channel-tools.js.map +1 -0
- package/dist/commands/help.d.ts +11 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +21 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +13 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +29 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/misc.d.ts +14 -0
- package/dist/commands/misc.d.ts.map +1 -0
- package/dist/commands/misc.js +39 -0
- package/dist/commands/misc.js.map +1 -0
- package/dist/commands/model.d.ts +7 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +58 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/session.d.ts +10 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +26 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +24 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/types.d.ts +12 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/config.d.ts +205 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/features/chat-ledger.d.ts +53 -0
- package/dist/features/chat-ledger.d.ts.map +1 -0
- package/dist/features/chat-ledger.js +185 -0
- package/dist/features/chat-ledger.js.map +1 -0
- package/dist/features/face-tags.d.ts +17 -0
- package/dist/features/face-tags.d.ts.map +1 -0
- package/dist/features/face-tags.js +79 -0
- package/dist/features/face-tags.js.map +1 -0
- package/dist/features/group-join-request.d.ts +65 -0
- package/dist/features/group-join-request.d.ts.map +1 -0
- package/dist/features/group-join-request.js +190 -0
- package/dist/features/group-join-request.js.map +1 -0
- package/dist/features/history-store.d.ts +8 -0
- package/dist/features/history-store.d.ts.map +1 -0
- package/dist/features/history-store.js +24 -0
- package/dist/features/history-store.js.map +1 -0
- package/dist/features/qq-approval.d.ts +78 -0
- package/dist/features/qq-approval.d.ts.map +1 -0
- package/dist/features/qq-approval.js +165 -0
- package/dist/features/qq-approval.js.map +1 -0
- package/dist/features/schedule-store.d.ts +62 -0
- package/dist/features/schedule-store.d.ts.map +1 -0
- package/dist/features/schedule-store.js +253 -0
- package/dist/features/schedule-store.js.map +1 -0
- package/dist/features/scheduler.d.ts +9 -0
- package/dist/features/scheduler.d.ts.map +1 -0
- package/dist/features/scheduler.js +146 -0
- package/dist/features/scheduler.js.map +1 -0
- package/dist/features/sticker-gate.d.ts +90 -0
- package/dist/features/sticker-gate.d.ts.map +1 -0
- package/dist/features/sticker-gate.js +391 -0
- package/dist/features/sticker-gate.js.map +1 -0
- package/dist/features/sticker-store.d.ts +158 -0
- package/dist/features/sticker-store.d.ts.map +1 -0
- package/dist/features/sticker-store.js +676 -0
- package/dist/features/sticker-store.js.map +1 -0
- package/dist/features/sticker-tagger.d.ts +10 -0
- package/dist/features/sticker-tagger.d.ts.map +1 -0
- package/dist/features/sticker-tagger.js +139 -0
- package/dist/features/sticker-tagger.js.map +1 -0
- package/dist/gateway/bootstrap.d.ts +12 -0
- package/dist/gateway/bootstrap.d.ts.map +1 -0
- package/dist/gateway/bootstrap.js +346 -0
- package/dist/gateway/bootstrap.js.map +1 -0
- package/dist/gateway/debounce.d.ts +40 -0
- package/dist/gateway/debounce.d.ts.map +1 -0
- package/dist/gateway/debounce.js +262 -0
- package/dist/gateway/debounce.js.map +1 -0
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/middleware-setup.d.ts +12 -0
- package/dist/gateway/middleware-setup.d.ts.map +1 -0
- package/dist/gateway/middleware-setup.js +156 -0
- package/dist/gateway/middleware-setup.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +187 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/attachment.d.ts +11 -0
- package/dist/middleware/attachment.d.ts.map +1 -0
- package/dist/middleware/attachment.js +17 -0
- package/dist/middleware/attachment.js.map +1 -0
- package/dist/middleware/media-history.d.ts +30 -0
- package/dist/middleware/media-history.d.ts.map +1 -0
- package/dist/middleware/media-history.js +54 -0
- package/dist/middleware/media-history.js.map +1 -0
- package/dist/middleware/sticker-capture.d.ts +17 -0
- package/dist/middleware/sticker-capture.d.ts.map +1 -0
- package/dist/middleware/sticker-capture.js +97 -0
- package/dist/middleware/sticker-capture.js.map +1 -0
- package/dist/model/index.d.ts +10 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +9 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/model-resolver.d.ts +88 -0
- package/dist/model/model-resolver.d.ts.map +1 -0
- package/dist/model/model-resolver.js +151 -0
- package/dist/model/model-resolver.js.map +1 -0
- package/dist/model/prefs-store.d.ts +24 -0
- package/dist/model/prefs-store.d.ts.map +1 -0
- package/dist/model/prefs-store.js +126 -0
- package/dist/model/prefs-store.js.map +1 -0
- package/dist/model/settings-reader.d.ts +19 -0
- package/dist/model/settings-reader.d.ts.map +1 -0
- package/dist/model/settings-reader.js +76 -0
- package/dist/model/settings-reader.js.map +1 -0
- package/dist/model/types.d.ts +15 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +5 -0
- package/dist/model/types.js.map +1 -0
- package/dist/session/idle-evictor.d.ts +18 -0
- package/dist/session/idle-evictor.d.ts.map +1 -0
- package/dist/session/idle-evictor.js +31 -0
- package/dist/session/idle-evictor.js.map +1 -0
- package/dist/session/index.d.ts +9 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +8 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/session-manager.d.ts +97 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +624 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/types.d.ts +130 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/dist/session/workspace-attach.d.ts +22 -0
- package/dist/session/workspace-attach.d.ts.map +1 -0
- package/dist/session/workspace-attach.js +21 -0
- package/dist/session/workspace-attach.js.map +1 -0
- package/dist/setup.d.ts +25 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +198 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared/index.d.ts +7 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +7 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/scope.d.ts +14 -0
- package/dist/shared/scope.d.ts.map +1 -0
- package/dist/shared/scope.js +12 -0
- package/dist/shared/scope.js.map +1 -0
- package/dist/shared/send-helper.d.ts +11 -0
- package/dist/shared/send-helper.d.ts.map +1 -0
- package/dist/shared/send-helper.js +13 -0
- package/dist/shared/send-helper.js.map +1 -0
- package/dist/shared/utils.d.ts +28 -0
- package/dist/shared/utils.d.ts.map +1 -0
- package/dist/shared/utils.js +143 -0
- package/dist/shared/utils.js.map +1 -0
- package/dist/transport/attachment.d.ts +18 -0
- package/dist/transport/attachment.d.ts.map +1 -0
- package/dist/transport/attachment.js +106 -0
- package/dist/transport/attachment.js.map +1 -0
- package/dist/transport/chunker.d.ts +14 -0
- package/dist/transport/chunker.d.ts.map +1 -0
- package/dist/transport/chunker.js +78 -0
- package/dist/transport/chunker.js.map +1 -0
- package/dist/transport/events.d.ts +80 -0
- package/dist/transport/events.d.ts.map +1 -0
- package/dist/transport/events.js +62 -0
- package/dist/transport/events.js.map +1 -0
- package/dist/transport/inbound.d.ts +8 -0
- package/dist/transport/inbound.d.ts.map +1 -0
- package/dist/transport/inbound.js +292 -0
- package/dist/transport/inbound.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +10 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/inject-rules.d.ts +24 -0
- package/dist/transport/inject-rules.d.ts.map +1 -0
- package/dist/transport/inject-rules.js +72 -0
- package/dist/transport/inject-rules.js.map +1 -0
- package/dist/transport/outbound-buffer.d.ts +56 -0
- package/dist/transport/outbound-buffer.d.ts.map +1 -0
- package/dist/transport/outbound-buffer.js +131 -0
- package/dist/transport/outbound-buffer.js.map +1 -0
- package/dist/transport/outbound.d.ts +30 -0
- package/dist/transport/outbound.d.ts.map +1 -0
- package/dist/transport/outbound.js +139 -0
- package/dist/transport/outbound.js.map +1 -0
- package/dist/transport/rich-media.d.ts +41 -0
- package/dist/transport/rich-media.d.ts.map +1 -0
- package/dist/transport/rich-media.js +104 -0
- package/dist/transport/rich-media.js.map +1 -0
- package/dist/transport/streaming-writer.d.ts +47 -0
- package/dist/transport/streaming-writer.d.ts.map +1 -0
- package/dist/transport/streaming-writer.js +110 -0
- package/dist/transport/streaming-writer.js.map +1 -0
- package/dist/transport/tool-presenter.d.ts +38 -0
- package/dist/transport/tool-presenter.d.ts.map +1 -0
- package/dist/transport/tool-presenter.js +121 -0
- package/dist/transport/tool-presenter.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +106 -0
- package/settings-host.js +927 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh-im-qqbot 插件配置 Schema
|
|
3
|
+
*
|
|
4
|
+
* 配置入口: profile 的 cordis.patch.yml → im-qqbot config(改动热重载, 无需重启)。
|
|
5
|
+
* Web 可视化设置: 注册 im-qqbot settings 命名空间(可编辑项 = EditableConfigSchema:
|
|
6
|
+
* behavior / sticker.gates / injectRules), 用户层存 ~/.dsh/settings.yaml, live 生效。
|
|
7
|
+
* ⚠️ 本地手改功能(配置化改造, 2026-09-03)。
|
|
8
|
+
*/
|
|
9
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
10
|
+
export interface AccessControlConfig {
|
|
11
|
+
/** C2C 访问模式 */
|
|
12
|
+
c2cMode: 'open' | 'allowlist' | 'disabled';
|
|
13
|
+
/** C2C 白名单(user openid) */
|
|
14
|
+
c2cAllow: string[];
|
|
15
|
+
/** 群聊访问模式 */
|
|
16
|
+
groupMode: 'open' | 'allowlist' | 'disabled';
|
|
17
|
+
/** 群聊白名单(group openid) */
|
|
18
|
+
groupAllow: string[];
|
|
19
|
+
}
|
|
20
|
+
/** 延迟聚合(debounce)配置 — 独立于群冷却的另一套机制 */
|
|
21
|
+
export interface DebounceConfig {
|
|
22
|
+
/** 总开关。true=消息先进"待派发窗口", 静默/攒够才一次派发; false=关(走原逻辑) */
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
/** 最近说话者停止发言多少秒后触发一次派发(默认3)。0=不停顿(立即派发, 等效关掉静默等待) */
|
|
25
|
+
silenceSec: number;
|
|
26
|
+
/** 窗口内消息攒满多少条立即触发(默认10), 不等人停 */
|
|
27
|
+
maxMsgs: number;
|
|
28
|
+
/** @bot 消息是否也走延迟(默认true)。false=@到秒回(不聚合) */
|
|
29
|
+
mentionDelayed: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** 回复调度(冷却)配置 */
|
|
32
|
+
export interface BehaviorConfig {
|
|
33
|
+
/** 群普通(未@)消息回复最小间隔(秒)。0=不限制; 默认60 */
|
|
34
|
+
freeIntervalSec: number;
|
|
35
|
+
/** 被@消息回复最小间隔(秒)。0=@总是立即回 */
|
|
36
|
+
mentionIntervalSec: number;
|
|
37
|
+
/** 私聊(C2C)回复最小间隔(秒)。0=不限制 */
|
|
38
|
+
directIntervalSec: number;
|
|
39
|
+
/** 延迟聚合(防连发只回第一句; 与上面三项冷却互不干扰) */
|
|
40
|
+
debounce: DebounceConfig;
|
|
41
|
+
}
|
|
42
|
+
/** 表情包主动发送闸门(默认不限制; 总开关 enabled=false 一票关闭) */
|
|
43
|
+
export interface StickerGatesConfig {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
perTurnMax: number;
|
|
46
|
+
perWindowSec: number;
|
|
47
|
+
maxPerWindow: number;
|
|
48
|
+
dailyBudgetPerGroup: number;
|
|
49
|
+
dupTTLHours: number;
|
|
50
|
+
activityWindowSec: number;
|
|
51
|
+
activityMinMsgs: number;
|
|
52
|
+
bannedGroups: string[];
|
|
53
|
+
libRoots: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface StickerConfig {
|
|
56
|
+
/** 是否自动收藏群图片(默认开,只存本地不外发) */
|
|
57
|
+
collectEnabled: boolean;
|
|
58
|
+
/** 图库数据根目录(默认 {agent cwd}/表情包) */
|
|
59
|
+
dataDir: string;
|
|
60
|
+
/** 主动发送闸门(默认不限制) */
|
|
61
|
+
gates: StickerGatesConfig;
|
|
62
|
+
/** 新图自动打标总开关 */
|
|
63
|
+
autoTagEnabled: boolean;
|
|
64
|
+
/** 视觉CLI命令模板(含{img}占位); 空=自动探测本机视觉CLI(modlens等); 探测不到则不自动打标 */
|
|
65
|
+
visionCli: string;
|
|
66
|
+
}
|
|
67
|
+
/** 条件注入规则 */
|
|
68
|
+
export interface InjectRuleConfig {
|
|
69
|
+
id: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
conditions: {
|
|
73
|
+
hasImage: boolean;
|
|
74
|
+
hasLink: boolean;
|
|
75
|
+
contentRegex: string;
|
|
76
|
+
contentKeywords: string[];
|
|
77
|
+
matchScope: 'any' | 'all';
|
|
78
|
+
};
|
|
79
|
+
prompt: string;
|
|
80
|
+
}
|
|
81
|
+
/** 定时唤醒时刻任务(M3): 一条时刻记录, 挂在某个目标(群/人)下面 */
|
|
82
|
+
export interface ScheduledWakeTask {
|
|
83
|
+
id: string;
|
|
84
|
+
/** 每天触发时刻, 24h 本地时区 "HH:MM" */
|
|
85
|
+
time: string;
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
/** 可选: 指定这次想让她聊的方向(空=自由发挥) */
|
|
88
|
+
prompt?: string;
|
|
89
|
+
}
|
|
90
|
+
/** 定时唤醒目标(M3): 一个群/一个人, 号码只填一次, 下面挂多条时刻任务(分组) */
|
|
91
|
+
export interface ScheduleTargetConfig {
|
|
92
|
+
id: string;
|
|
93
|
+
/** 可选: 显示名/备注(帮认这个群/人) */
|
|
94
|
+
name?: string;
|
|
95
|
+
/** 目标会话: group=群(group_openid) / c2c=私聊(用户 openid) */
|
|
96
|
+
scope: 'group' | 'c2c';
|
|
97
|
+
targetId: string;
|
|
98
|
+
tasks: ScheduledWakeTask[];
|
|
99
|
+
}
|
|
100
|
+
export interface ScheduleConfig {
|
|
101
|
+
targets: ScheduleTargetConfig[];
|
|
102
|
+
}
|
|
103
|
+
/** QQ 群管理(2026-09-05): 总开关 + 主人 openid 白名单(空=不校验; 建议填主人与常用小号) */
|
|
104
|
+
export interface GroupAdminConfig {
|
|
105
|
+
enabled: boolean;
|
|
106
|
+
owners: string[];
|
|
107
|
+
/**
|
|
108
|
+
* 对话内"默认管理群"(group_openid): QQ 群会话里工具取当前群;
|
|
109
|
+
* web/非群会话时工具回退用它 —— "对话里管一个群"不依赖会话形态(2026-09-05 主人定)。
|
|
110
|
+
* 多群管理走设置 UI ⑥(P3 选群), 此字段只承载对话内单群。
|
|
111
|
+
*/
|
|
112
|
+
manageGroup: string;
|
|
113
|
+
/**
|
|
114
|
+
* 订阅入群申请事件(GROUP_JOIN_REQUEST, intent GROUP_MEMBER_EVENT 1<<24)。
|
|
115
|
+
* ⚠️ 涉及 gateway intents(连接建立时确定)→ **改后必须重启才生效**, 不是 live 热改。
|
|
116
|
+
* 需要机器人为该群管理员才会推送; 若官方未授权该 intent, 连接可能被拒(4914/4915)。
|
|
117
|
+
*/
|
|
118
|
+
watchJoinRequests: boolean;
|
|
119
|
+
/** 收到新入群申请事件时是否在该群内发一条 bot 提醒消息(默认开; 需机器人=该群管理员) */
|
|
120
|
+
notifyInGroup: boolean;
|
|
121
|
+
}
|
|
122
|
+
/** Web 设置可编辑子集(不含 appId/appSecret 等敏感/底层字段) */
|
|
123
|
+
export interface EditableConfig {
|
|
124
|
+
behavior: BehaviorConfig;
|
|
125
|
+
groupAdmin: GroupAdminConfig;
|
|
126
|
+
sticker: {
|
|
127
|
+
gates: StickerGatesConfig;
|
|
128
|
+
/** 新图后台自动识图打标(消耗视觉额度; 默认关, 开=后台自动) */
|
|
129
|
+
autoTagEnabled?: boolean;
|
|
130
|
+
/** 视觉引擎命令模板(留空自动探测) */
|
|
131
|
+
visionCli?: string;
|
|
132
|
+
};
|
|
133
|
+
injectRules: InjectRuleConfig[];
|
|
134
|
+
/** 群聊常驻守则(默认含表情包礼仪; QQ 通道级注入, 跨 preset 不碰 persona) */
|
|
135
|
+
groupPrompt?: string;
|
|
136
|
+
/** 定时唤醒任务(M3) */
|
|
137
|
+
schedule: ScheduleConfig;
|
|
138
|
+
/** QQ 远程审批开关(live 热生效: 对"保存后的新审批请求"即时生效, 无需重启) */
|
|
139
|
+
enableApprovals?: boolean;
|
|
140
|
+
/** QQ 权限申请等待时长(ms), 超时自动拒绝 */
|
|
141
|
+
approvalTimeoutMs?: number;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 群聊默认常驻守则(表情包礼仪, P2 品味层)。
|
|
145
|
+
* 由 qqbot 通道注入 agentBody(scope=group 时), 所有走 QQ 的 preset 通用, 不修改任何 persona。
|
|
146
|
+
*/
|
|
147
|
+
export declare const DEFAULT_GROUP_PROMPT: string;
|
|
148
|
+
/** Web 设置页可编辑项的 schema(behavior/sticker.gates/injectRules/groupPrompt/schedule) */
|
|
149
|
+
export declare const EditableConfigSchema: Schema<EditableConfig>;
|
|
150
|
+
export interface ImQQBotConfig {
|
|
151
|
+
/** QQ Bot AppID */
|
|
152
|
+
appId: string;
|
|
153
|
+
/** QQ Bot AppSecret */
|
|
154
|
+
appSecret: string;
|
|
155
|
+
/** dsh LLM 提供商名称 */
|
|
156
|
+
provider?: string;
|
|
157
|
+
/** 模型名称 */
|
|
158
|
+
model?: string;
|
|
159
|
+
/** Agent preset id */
|
|
160
|
+
preset?: string;
|
|
161
|
+
/** Agent 工作目录(缺省回落到进程 cwd) */
|
|
162
|
+
cwd?: string;
|
|
163
|
+
/** Web 设置命名空间(多账号时每个实例唯一, 默认 im-qqbot; 同进程多实例必须互不相同) */
|
|
164
|
+
settingsNs?: string;
|
|
165
|
+
/** 是否启用群消息 @mention 门控 */
|
|
166
|
+
requireMention: boolean;
|
|
167
|
+
/** 群聊常驻守则(默认=表情包礼仪, 通道级注入; 空=关闭) */
|
|
168
|
+
groupPrompt?: string;
|
|
169
|
+
/** 私聊额外 system prompt */
|
|
170
|
+
directPrompt?: string;
|
|
171
|
+
/** 单条消息最大长度(QQ 限制约 5000 字符) */
|
|
172
|
+
textChunkLimit: number;
|
|
173
|
+
/** 是否启用流式输出(群聊始终不启用) */
|
|
174
|
+
streaming: boolean;
|
|
175
|
+
/** 每会话最大闲置时长(ms),超时自动回收 */
|
|
176
|
+
sessionIdleTimeout: number;
|
|
177
|
+
/** 并发队列最大长度 */
|
|
178
|
+
maxQueue: number;
|
|
179
|
+
/** 处理超时(ms),超时中断当前 LLM 调用 */
|
|
180
|
+
processingTimeoutMs: number;
|
|
181
|
+
/** 群历史缓冲条数 */
|
|
182
|
+
historyLimit: number;
|
|
183
|
+
/** 访问控制 */
|
|
184
|
+
access: AccessControlConfig;
|
|
185
|
+
/** 回复调度(冷却) */
|
|
186
|
+
behavior: BehaviorConfig;
|
|
187
|
+
/** 表情包图库 */
|
|
188
|
+
sticker: StickerConfig;
|
|
189
|
+
/** 条件注入规则 */
|
|
190
|
+
injectRules: InjectRuleConfig[];
|
|
191
|
+
/** 定时唤醒任务(M3) */
|
|
192
|
+
schedule: ScheduleConfig;
|
|
193
|
+
/** QQ 群管理(入群审批/禁言等; 需机器人=群管理员) */
|
|
194
|
+
groupAdmin: GroupAdminConfig;
|
|
195
|
+
/** 是否展示工具调用成功结果(工具错误始终展示) */
|
|
196
|
+
showToolResults: boolean;
|
|
197
|
+
/** 调试模式 */
|
|
198
|
+
debug: boolean;
|
|
199
|
+
/** 通过 QQ 接收并处理 dsh 的一次性权限申请(远程审批; 思路来源见 features/qq-approval.ts 头注) */
|
|
200
|
+
enableApprovals: boolean;
|
|
201
|
+
/** QQ 权限申请等待时长(ms), 超时自动拒绝 */
|
|
202
|
+
approvalTimeoutMs: number;
|
|
203
|
+
}
|
|
204
|
+
export declare const ConfigSchema: Schema<ImQQBotConfig>;
|
|
205
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh-im-qqbot 插件配置 Schema
|
|
3
|
+
*
|
|
4
|
+
* 配置入口: profile 的 cordis.patch.yml → im-qqbot config(改动热重载, 无需重启)。
|
|
5
|
+
* Web 可视化设置: 注册 im-qqbot settings 命名空间(可编辑项 = EditableConfigSchema:
|
|
6
|
+
* behavior / sticker.gates / injectRules), 用户层存 ~/.dsh/settings.yaml, live 生效。
|
|
7
|
+
* ⚠️ 本地手改功能(配置化改造, 2026-09-03)。
|
|
8
|
+
*/
|
|
9
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
10
|
+
/**
|
|
11
|
+
* 群聊默认常驻守则(表情包礼仪, P2 品味层)。
|
|
12
|
+
* 由 qqbot 通道注入 agentBody(scope=group 时), 所有走 QQ 的 preset 通用, 不修改任何 persona。
|
|
13
|
+
*/
|
|
14
|
+
export const DEFAULT_GROUP_PROMPT = [
|
|
15
|
+
'【表情包礼仪】你有一座本地表情包库(群友存的图,带标签)。想用表情包回应时先调 list_stickers 搜库,命中后再用 send_media 发出,别发没把握的图。',
|
|
16
|
+
'只在群里正热闹、情绪正浓时,才在回复末尾附 0~1 张:满屏哈哈/笑死(爆笑)、大家"确实/我也是"(共鸣)、有人抛梗你能接住(接梗)、有人当面夸你(被夸)、轻度吐槽可以接治愈/滑稽图。',
|
|
17
|
+
'绝不发:冷场没人接话、正事/技术问答/找资源、吵架互怼中、对方难过或聊严肃事、私聊。',
|
|
18
|
+
'出手前自检,缺一不发:①库里有 9 成贴切的图;②发出来群友会心一笑;③这轮没发过、今天这群没刷过图。',
|
|
19
|
+
'把图删掉话照样完整;一次最多一张;发离谱/冒犯/色气/羞辱人的图=人设崩塌,永远不许。',
|
|
20
|
+
].join('\n');
|
|
21
|
+
// ── 共享字段子 schema(主 ConfigSchema 与 EditableConfigSchema 复用) ──
|
|
22
|
+
const debounceSchema = Schema.object({
|
|
23
|
+
enabled: Schema.boolean().default(true).description('延迟聚合总开关(防"连发N句只回第一句": 消息先攒窗口, 人停口或攒够条数才一次综合回)'),
|
|
24
|
+
silenceSec: Schema.number().min(0).default(3).description('最近说话者停止发言几秒后开口(默认3; 0=不停顿)'),
|
|
25
|
+
maxMsgs: Schema.number().min(1).default(10).description('窗口攒满几条立即开口(默认10), 不等对方停'),
|
|
26
|
+
mentionDelayed: Schema.boolean().default(true).description('@bot 消息是否也走延迟(默认是; 不勾=@到秒回)'),
|
|
27
|
+
}).default({
|
|
28
|
+
enabled: true,
|
|
29
|
+
silenceSec: 3,
|
|
30
|
+
maxMsgs: 10,
|
|
31
|
+
mentionDelayed: true,
|
|
32
|
+
}).description('延迟聚合(独立于冷却的另一套机制)');
|
|
33
|
+
const behaviorSchema = Schema.object({
|
|
34
|
+
freeIntervalSec: Schema.number().min(0).default(60).description('群普通消息回复间隔(秒),0=不限制'),
|
|
35
|
+
mentionIntervalSec: Schema.number().min(0).default(0).description('@bot回复间隔(秒),0=立即回'),
|
|
36
|
+
directIntervalSec: Schema.number().min(0).default(0).description('私聊回复间隔(秒),0=不限制'),
|
|
37
|
+
debounce: debounceSchema,
|
|
38
|
+
}).default({
|
|
39
|
+
freeIntervalSec: 60,
|
|
40
|
+
mentionIntervalSec: 0,
|
|
41
|
+
directIntervalSec: 0,
|
|
42
|
+
debounce: {
|
|
43
|
+
enabled: true,
|
|
44
|
+
silenceSec: 3,
|
|
45
|
+
maxMsgs: 10,
|
|
46
|
+
mentionDelayed: true,
|
|
47
|
+
},
|
|
48
|
+
}).description('回复调度');
|
|
49
|
+
const stickerGatesSchema = Schema.object({
|
|
50
|
+
enabled: Schema.boolean().default(false).description('闸门总开关,false=不限制'),
|
|
51
|
+
perTurnMax: Schema.number().min(0).default(0).description('每轮最多发送张数,0=不限'),
|
|
52
|
+
perWindowSec: Schema.number().min(0).default(600).description('频率窗口(秒)'),
|
|
53
|
+
maxPerWindow: Schema.number().min(0).default(0).description('每窗口每群最多张数,0=不限'),
|
|
54
|
+
dailyBudgetPerGroup: Schema.number().min(0).default(0).description('每群每日预算,0=不限'),
|
|
55
|
+
dupTTLHours: Schema.number().min(0).default(0).description('同图去重(小时),0=关'),
|
|
56
|
+
activityWindowSec: Schema.number().min(0).default(3600).description('活性窗口(秒)'),
|
|
57
|
+
activityMinMsgs: Schema.number().min(0).default(0).description('活性窗口消息下限,0=不要求'),
|
|
58
|
+
bannedGroups: Schema.array(Schema.string()).default([]).description('禁发群group_openid'),
|
|
59
|
+
libRoots: Schema.array(Schema.string()).default([]).description('表情包路径白名单(追加)'),
|
|
60
|
+
}).default({
|
|
61
|
+
enabled: false,
|
|
62
|
+
perTurnMax: 0,
|
|
63
|
+
perWindowSec: 600,
|
|
64
|
+
maxPerWindow: 0,
|
|
65
|
+
dailyBudgetPerGroup: 0,
|
|
66
|
+
dupTTLHours: 0,
|
|
67
|
+
activityWindowSec: 3600,
|
|
68
|
+
activityMinMsgs: 0,
|
|
69
|
+
bannedGroups: [],
|
|
70
|
+
libRoots: [],
|
|
71
|
+
}).description('表情包主动发送闸门(默认不限制)');
|
|
72
|
+
const injectRuleItemSchema = Schema.object({
|
|
73
|
+
id: Schema.string().required().description('规则ID'),
|
|
74
|
+
name: Schema.string().description('规则名'),
|
|
75
|
+
enabled: Schema.boolean().default(true).description('开关'),
|
|
76
|
+
conditions: Schema.object({
|
|
77
|
+
hasImage: Schema.boolean().default(false).description('消息含图片'),
|
|
78
|
+
hasLink: Schema.boolean().default(false).description('消息含链接'),
|
|
79
|
+
contentRegex: Schema.string().default('').description('正文正则,空=不启用'),
|
|
80
|
+
contentKeywords: Schema.array(Schema.string()).default([]).description('关键词(任一命中)'),
|
|
81
|
+
matchScope: Schema.union(['any', 'all']).default('any').description('any=任一命中;all=全部满足'),
|
|
82
|
+
}),
|
|
83
|
+
prompt: Schema.string().required().max(400).description('注入的系统提示文本(≤400字)'),
|
|
84
|
+
});
|
|
85
|
+
/** 一条时刻任务(挂在某个目标分组下) */
|
|
86
|
+
const scheduleTaskSchema = Schema.object({
|
|
87
|
+
id: Schema.string().required().description('任务ID(唯一)'),
|
|
88
|
+
time: Schema.string().required().pattern(/^([01]\d|2[0-3]):[0-5]\d$/).description('每天触发时刻(24h本地时区 HH:MM)'),
|
|
89
|
+
enabled: Schema.boolean().default(true).description('启用'),
|
|
90
|
+
prompt: Schema.string().description('可选: 想让她聊的方向(空=自由发挥)'),
|
|
91
|
+
}).default({
|
|
92
|
+
id: '',
|
|
93
|
+
time: '09:00',
|
|
94
|
+
enabled: true,
|
|
95
|
+
prompt: '',
|
|
96
|
+
}).description('定时时刻');
|
|
97
|
+
/** 一个目标(群/人), 号码填一次, 下面挂多个时刻 */
|
|
98
|
+
const scheduleTargetSchema = Schema.object({
|
|
99
|
+
id: Schema.string().required().description('目标ID(唯一)'),
|
|
100
|
+
name: Schema.string().description('备注名(可选,帮认这个群/人)'),
|
|
101
|
+
scope: Schema.union(['group', 'c2c']).default('group').description('group=群 / c2c=私聊'),
|
|
102
|
+
targetId: Schema.string().required().description('目标: 群group_openid 或 用户openid'),
|
|
103
|
+
tasks: Schema.array(scheduleTaskSchema).default([]).description('该目标下的定时时刻列表'),
|
|
104
|
+
}).default({
|
|
105
|
+
id: '',
|
|
106
|
+
name: '',
|
|
107
|
+
scope: 'group',
|
|
108
|
+
targetId: '',
|
|
109
|
+
tasks: [],
|
|
110
|
+
}).description('定时目标(群/人)');
|
|
111
|
+
const scheduleSchema = Schema.object({
|
|
112
|
+
targets: Schema.array(scheduleTargetSchema).default([]).description('定时目标列表(每个群/人一组,下面挂时刻)'),
|
|
113
|
+
}).default({ targets: [] }).description('定时唤醒(M3): 每天固定时刻主动找聊天');
|
|
114
|
+
const groupAdminSchema = Schema.object({
|
|
115
|
+
enabled: Schema.boolean().default(false).description('QQ 群管理总开关(入群审批/禁言等; 需机器人为群管理员)'),
|
|
116
|
+
owners: Schema.array(Schema.string()).default([]).description('允许操作的主人 openid 白名单(空=不校验; 群管理操作仅建议主人使用)'),
|
|
117
|
+
manageGroup: Schema.string().default('').description('对话内默认管理群 group_openid(web/非群会话时群工具用它; QQ 群会话自动用当前群)'),
|
|
118
|
+
watchJoinRequests: Schema.boolean().default(false).description('订阅"入群申请"实时事件(GROUP_JOIN_REQUEST)并自动提醒(改后需重启生效)'),
|
|
119
|
+
notifyInGroup: Schema.boolean().default(true).description('收到入群申请事件时, 在该群内发一条 bot 提醒(需机器人=群管理员)'),
|
|
120
|
+
}).default({
|
|
121
|
+
enabled: false,
|
|
122
|
+
owners: [],
|
|
123
|
+
manageGroup: '',
|
|
124
|
+
watchJoinRequests: false,
|
|
125
|
+
notifyInGroup: true,
|
|
126
|
+
}).description('QQ 群管理');
|
|
127
|
+
/** Web 设置页可编辑项的 schema(behavior/sticker.gates/injectRules/groupPrompt/schedule) */
|
|
128
|
+
export const EditableConfigSchema = Schema.object({
|
|
129
|
+
behavior: behaviorSchema,
|
|
130
|
+
groupAdmin: groupAdminSchema,
|
|
131
|
+
sticker: Schema.object({
|
|
132
|
+
gates: stickerGatesSchema,
|
|
133
|
+
autoTagEnabled: Schema.boolean().default(false).description('新图后台自动识图打标(耗视觉额度,默认关)'),
|
|
134
|
+
visionCli: Schema.string().default('').description('视觉引擎命令模板(留空自动探测)'),
|
|
135
|
+
}).description('表情包图库'),
|
|
136
|
+
injectRules: Schema.array(injectRuleItemSchema).default([]).description('条件注入规则'),
|
|
137
|
+
groupPrompt: Schema.string().default(DEFAULT_GROUP_PROMPT).description('群聊常驻守则(默认含表情包礼仪;可清空关闭)'),
|
|
138
|
+
schedule: scheduleSchema,
|
|
139
|
+
enableApprovals: Schema.boolean().default(false).description('QQ 远程审批: dsh 权限申请发到 QQ, 用 /approve CODE 放行(保存后对新请求生效)'),
|
|
140
|
+
approvalTimeoutMs: Schema.number().default(120000).description('QQ 权限申请等待时长(ms), 超时自动拒绝'),
|
|
141
|
+
});
|
|
142
|
+
export const ConfigSchema = Schema.object({
|
|
143
|
+
appId: Schema.string().default('').description('QQ Bot AppID'),
|
|
144
|
+
appSecret: Schema.string().default('').description('QQ Bot AppSecret'),
|
|
145
|
+
provider: Schema.string().description('LLM provider name'),
|
|
146
|
+
model: Schema.string().description('Model name'),
|
|
147
|
+
preset: Schema.string().description('Agent preset id'),
|
|
148
|
+
cwd: Schema.string().description('Agent working directory'),
|
|
149
|
+
settingsNs: Schema.string().description('Web 设置命名空间(多账号时每实例唯一, 默认 im-qqbot)'),
|
|
150
|
+
requireMention: Schema.boolean().default(true).description('群聊是否需要@bot触发'),
|
|
151
|
+
groupPrompt: Schema.string().default(DEFAULT_GROUP_PROMPT).description('群聊常驻守则(默认表情包礼仪, 可清空关闭)'),
|
|
152
|
+
directPrompt: Schema.string().description('私聊额外system prompt'),
|
|
153
|
+
textChunkLimit: Schema.number().default(4500).description('单条消息最大字符数'),
|
|
154
|
+
streaming: Schema.boolean().default(true).description('是否启用流式输出(群聊始终不启用)'),
|
|
155
|
+
sessionIdleTimeout: Schema.number().default(30 * 60 * 1000).description('会话闲置超时(ms)'),
|
|
156
|
+
maxQueue: Schema.number().default(20).description('并发队列最大长度'),
|
|
157
|
+
processingTimeoutMs: Schema.number().default(120000).description('处理超时(ms)'),
|
|
158
|
+
historyLimit: Schema.number().default(10).description('群历史缓冲条数'),
|
|
159
|
+
access: Schema.object({
|
|
160
|
+
c2cMode: Schema.union(['open', 'allowlist', 'disabled']).default('open').description('C2C访问模式'),
|
|
161
|
+
c2cAllow: Schema.array(Schema.string()).default([]).description('C2C白名单'),
|
|
162
|
+
groupMode: Schema.union(['open', 'allowlist', 'disabled']).default('open').description('群聊访问模式'),
|
|
163
|
+
groupAllow: Schema.array(Schema.string()).default([]).description('群聊白名单'),
|
|
164
|
+
}).default({
|
|
165
|
+
c2cMode: 'open',
|
|
166
|
+
c2cAllow: [],
|
|
167
|
+
groupMode: 'open',
|
|
168
|
+
groupAllow: [],
|
|
169
|
+
}).description('访问控制'),
|
|
170
|
+
behavior: behaviorSchema,
|
|
171
|
+
sticker: Schema.object({
|
|
172
|
+
collectEnabled: Schema.boolean().default(true).description('自动收藏群图片(只存本地)'),
|
|
173
|
+
dataDir: Schema.string().default('').description('图库数据根目录(默认 {agent cwd}/表情包)'),
|
|
174
|
+
gates: stickerGatesSchema,
|
|
175
|
+
autoTagEnabled: Schema.boolean().default(false).description('新图后台自动识图打标(耗视觉额度,默认关;开需可用视觉CLI)'),
|
|
176
|
+
visionCli: Schema.string().default('').description('视觉CLI命令模板(含{img}占位), 空=自动探测本机视觉CLI'),
|
|
177
|
+
}).default({
|
|
178
|
+
collectEnabled: true,
|
|
179
|
+
dataDir: '',
|
|
180
|
+
gates: {
|
|
181
|
+
enabled: false,
|
|
182
|
+
perTurnMax: 0,
|
|
183
|
+
perWindowSec: 600,
|
|
184
|
+
maxPerWindow: 0,
|
|
185
|
+
dailyBudgetPerGroup: 0,
|
|
186
|
+
dupTTLHours: 0,
|
|
187
|
+
activityWindowSec: 3600,
|
|
188
|
+
activityMinMsgs: 0,
|
|
189
|
+
bannedGroups: [],
|
|
190
|
+
libRoots: [],
|
|
191
|
+
},
|
|
192
|
+
autoTagEnabled: false,
|
|
193
|
+
visionCli: '',
|
|
194
|
+
}).description('表情包图库'),
|
|
195
|
+
injectRules: Schema.array(injectRuleItemSchema).default([]).description('条件注入规则:消息含图片/链接/自定义文本时自动插入系统提示'),
|
|
196
|
+
schedule: scheduleSchema,
|
|
197
|
+
groupAdmin: groupAdminSchema,
|
|
198
|
+
showToolResults: Schema.boolean().default(false).description('是否展示工具调用成功结果(工具错误始终展示)'),
|
|
199
|
+
debug: Schema.boolean().default(false),
|
|
200
|
+
enableApprovals: Schema.boolean().default(false).description('通过 QQ 接收并处理 dsh 一次性权限申请(远程审批: 发起者用 /approve CODE 放行)'),
|
|
201
|
+
approvalTimeoutMs: Schema.number().default(120000).description('QQ 权限申请超时(ms), 超时自动拒绝'),
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { MiddlewareContext } from '@tencent-connect/qqbot-nodejs';
|
|
2
|
+
export interface KnownChatLine {
|
|
3
|
+
ts: number;
|
|
4
|
+
scope: 'group' | 'c2c';
|
|
5
|
+
id: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
}
|
|
8
|
+
/** 群成员行(本地兜底名单: 官方成员列表未开放, 用"见过的发言者"近似) */
|
|
9
|
+
export interface KnownGroupMember {
|
|
10
|
+
ts: number;
|
|
11
|
+
gid: string;
|
|
12
|
+
mid: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
/** 台账文件路径(与图库同 dataDir, host 侧可经 sticker store 推导) */
|
|
16
|
+
export declare function ledgerPath(dataDir: string): string;
|
|
17
|
+
/** 群成员台账路径(同 dataDir) */
|
|
18
|
+
export declare function groupMembersPath(dataDir: string): string;
|
|
19
|
+
/** 由 dsh-qqbot 侧写入(中间件); host 侧只读聚合 */
|
|
20
|
+
export declare function appendLedger(dataDir: string, line: KnownChatLine): void;
|
|
21
|
+
/** 由 dsh-qqbot 侧写入一条"群成员发言"(中间件); host 侧读聚合出可禁言名单 */
|
|
22
|
+
export declare function appendGroupMember(dataDir: string, line: KnownGroupMember): void;
|
|
23
|
+
/** 读某群的本地成员清单(聚合: 每成员保留最近昵称/最近时间/发言次数, 按最近发言倒序) */
|
|
24
|
+
export declare function readGroupMembers(dataDir: string, gid?: string): Array<{
|
|
25
|
+
gid: string;
|
|
26
|
+
mid: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
lastSeen: number;
|
|
29
|
+
count: number;
|
|
30
|
+
}>;
|
|
31
|
+
/** host 侧读台账文件(不存在/坏行容错), 返回按 ts 升序的行 */
|
|
32
|
+
export declare function readLedger(dataDir: string): KnownChatLine[];
|
|
33
|
+
/**
|
|
34
|
+
* 聚合"最近聊过的对象"(供下拉): 每对象保留最近 ts/最近昵称 + 消息数。
|
|
35
|
+
* c2c 优先展示昵称; group 无群名, name=该群最近发言者昵称。
|
|
36
|
+
*/
|
|
37
|
+
export declare function aggregateKnownChats(lines: KnownChatLine[], limit?: number): Array<{
|
|
38
|
+
scope: 'group' | 'c2c';
|
|
39
|
+
id: string;
|
|
40
|
+
name?: string;
|
|
41
|
+
lastSeen: number;
|
|
42
|
+
count: number;
|
|
43
|
+
}>;
|
|
44
|
+
/** 台账文件大小(给 host 状态用; 不存在返回 0) */
|
|
45
|
+
export declare function ledgerSize(dataDir: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* 移除某群某成员的本地记录(成员已退群/禁言无效时调用, 保持本地名单干净)。
|
|
48
|
+
* 重写文件剔除该 gid+mid 的所有行; 文件不存在/无匹配则不动。
|
|
49
|
+
*/
|
|
50
|
+
export declare function removeGroupMember(dataDir: string, gid: string, mid: string): void;
|
|
51
|
+
/** 中间件: 记录见过的群/私聊 + 群内发言成员(放 mentionGate 之前, 未@消息也流经) */
|
|
52
|
+
export declare function chatLedgerRecorder(dataDir: string): (ctx: MiddlewareContext, next: () => Promise<void>) => Promise<void>;
|
|
53
|
+
//# sourceMappingURL=chat-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-ledger.d.ts","sourceRoot":"","sources":["../../src/features/chat-ledger.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAIvE;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAI/E;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBnJ;AAED,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAkB3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EAAE,EACtB,KAAK,SAAK,GACT,KAAK,CAAC;IAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB/F;AAED,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAmBjF;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAClC,KAAK,iBAAiB,EAAE,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAgBhF"}
|