@zaofan/dsh-qqbot 0.9.6 → 1.0.1

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.
Files changed (110) hide show
  1. package/README.md +400 -344
  2. package/README_EN.md +313 -281
  3. package/client/qqbot-settings.js +431 -10
  4. package/dist/channel-tools.d.ts +1 -1
  5. package/dist/channel-tools.d.ts.map +1 -1
  6. package/dist/channel-tools.js +166 -15
  7. package/dist/channel-tools.js.map +1 -1
  8. package/dist/commands/approve.d.ts +17 -0
  9. package/dist/commands/approve.d.ts.map +1 -0
  10. package/dist/commands/approve.js +24 -0
  11. package/dist/commands/approve.js.map +1 -0
  12. package/dist/commands/botplay.d.ts +15 -0
  13. package/dist/commands/botplay.d.ts.map +1 -0
  14. package/dist/commands/botplay.js +34 -0
  15. package/dist/commands/botplay.js.map +1 -0
  16. package/dist/commands/exit.d.ts +7 -0
  17. package/dist/commands/exit.d.ts.map +1 -0
  18. package/dist/commands/exit.js +85 -0
  19. package/dist/commands/exit.js.map +1 -0
  20. package/dist/commands/index.d.ts.map +1 -1
  21. package/dist/commands/index.js +14 -1
  22. package/dist/commands/index.js.map +1 -1
  23. package/dist/commands/outmode.d.ts +7 -3
  24. package/dist/commands/outmode.d.ts.map +1 -1
  25. package/dist/commands/outmode.js +19 -9
  26. package/dist/commands/outmode.js.map +1 -1
  27. package/dist/commands/permission.d.ts +18 -0
  28. package/dist/commands/permission.d.ts.map +1 -0
  29. package/dist/commands/permission.js +43 -0
  30. package/dist/commands/permission.js.map +1 -0
  31. package/dist/commands/session.d.ts +5 -1
  32. package/dist/commands/session.d.ts.map +1 -1
  33. package/dist/commands/session.js +51 -5
  34. package/dist/commands/session.js.map +1 -1
  35. package/dist/config.d.ts +73 -0
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +89 -0
  38. package/dist/config.js.map +1 -1
  39. package/dist/features/approval-switch.d.ts +22 -0
  40. package/dist/features/approval-switch.d.ts.map +1 -0
  41. package/dist/features/approval-switch.js +10 -0
  42. package/dist/features/approval-switch.js.map +1 -0
  43. package/dist/features/botplay.d.ts +141 -0
  44. package/dist/features/botplay.d.ts.map +1 -0
  45. package/dist/features/botplay.js +558 -0
  46. package/dist/features/botplay.js.map +1 -0
  47. package/dist/features/extension-store.d.ts +27 -0
  48. package/dist/features/extension-store.d.ts.map +1 -0
  49. package/dist/features/extension-store.js +152 -0
  50. package/dist/features/extension-store.js.map +1 -0
  51. package/dist/features/group-hub.d.ts +40 -0
  52. package/dist/features/group-hub.d.ts.map +1 -0
  53. package/dist/features/group-hub.js +174 -0
  54. package/dist/features/group-hub.js.map +1 -0
  55. package/dist/features/group-join-request.d.ts.map +1 -1
  56. package/dist/features/group-join-request.js +35 -33
  57. package/dist/features/group-join-request.js.map +1 -1
  58. package/dist/features/qq-approval.d.ts.map +1 -1
  59. package/dist/features/qq-approval.js +3 -1
  60. package/dist/features/qq-approval.js.map +1 -1
  61. package/dist/features/scheduler.d.ts.map +1 -1
  62. package/dist/features/scheduler.js +2 -1
  63. package/dist/features/scheduler.js.map +1 -1
  64. package/dist/gateway/bootstrap.d.ts.map +1 -1
  65. package/dist/gateway/bootstrap.js +91 -11
  66. package/dist/gateway/bootstrap.js.map +1 -1
  67. package/dist/gateway/data-root.d.ts +15 -0
  68. package/dist/gateway/data-root.d.ts.map +1 -0
  69. package/dist/gateway/data-root.js +59 -0
  70. package/dist/gateway/data-root.js.map +1 -0
  71. package/dist/gateway/debounce.d.ts.map +1 -1
  72. package/dist/gateway/debounce.js +3 -2
  73. package/dist/gateway/debounce.js.map +1 -1
  74. package/dist/gateway/middleware-setup.d.ts +1 -1
  75. package/dist/gateway/middleware-setup.d.ts.map +1 -1
  76. package/dist/gateway/middleware-setup.js +42 -14
  77. package/dist/gateway/middleware-setup.js.map +1 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +22 -2
  80. package/dist/index.js.map +1 -1
  81. package/dist/middleware/attachment.d.ts.map +1 -1
  82. package/dist/middleware/attachment.js +2 -1
  83. package/dist/middleware/attachment.js.map +1 -1
  84. package/dist/middleware/media-history.d.ts +2 -0
  85. package/dist/middleware/media-history.d.ts.map +1 -1
  86. package/dist/middleware/media-history.js +6 -1
  87. package/dist/middleware/media-history.js.map +1 -1
  88. package/dist/middleware/sticker-capture.d.ts.map +1 -1
  89. package/dist/middleware/sticker-capture.js +2 -2
  90. package/dist/middleware/sticker-capture.js.map +1 -1
  91. package/dist/model/model-resolver.d.ts +12 -0
  92. package/dist/model/model-resolver.d.ts.map +1 -1
  93. package/dist/model/model-resolver.js +24 -0
  94. package/dist/model/model-resolver.js.map +1 -1
  95. package/dist/model/prefs-store.d.ts +16 -0
  96. package/dist/model/prefs-store.d.ts.map +1 -1
  97. package/dist/model/prefs-store.js +48 -0
  98. package/dist/model/prefs-store.js.map +1 -1
  99. package/dist/session/session-manager.d.ts +41 -2
  100. package/dist/session/session-manager.d.ts.map +1 -1
  101. package/dist/session/session-manager.js +185 -21
  102. package/dist/session/session-manager.js.map +1 -1
  103. package/dist/transport/attachment.d.ts.map +1 -1
  104. package/dist/transport/attachment.js +2 -1
  105. package/dist/transport/attachment.js.map +1 -1
  106. package/dist/transport/inbound.d.ts.map +1 -1
  107. package/dist/transport/inbound.js +9 -1
  108. package/dist/transport/inbound.js.map +1 -1
  109. package/package.json +1 -1
  110. package/settings-host.js +177 -52
package/dist/config.js CHANGED
@@ -19,6 +19,14 @@ export const DEFAULT_GROUP_PROMPT = [
19
19
  '把图删掉话照样完整;一次最多一张;发离谱/冒犯/色气/羞辱人的图=人设崩塌,永远不许。',
20
20
  '【提问卡片(ask_user_question)·QQ】在 QQ 会话里调用 ask_user_question 提问:选项会以按钮卡片发出,可点权限默认只绑「当前对话发起者本人」(群聊=刚与你对话的那位群友,私聊=对方),只有 TA 能点、别人点了会被拒,不会误答;同一问题会同步出现在 Web 浮层,任一端作答即结算、另一端自动失效。**可以显式指定某位群友来答(指定权限)**:把 <@对方openid> 直接写进本次提问的 question(或 header)文本里(例如 question 写成「<@对方openid> 要帮你找这个游戏吗?」),卡片权限就会精确绑给该 openid——只有 TA 能点;也可以先按【@ 人的方法】点名 TA 再提问(效果相同)。不确定该问谁、或想让对方自己答时才不写(保持默认给当前对话者)。',
21
21
  ].join('\n');
22
+ /**
23
+ * 通道固定注入上下文(2026-09-09): 与可编辑群守则(groupPrompt)无关、无条件注入每个 QQ 会话,
24
+ * 保证任何 AI/任何预设都会收到 QQ 通道的基础使用规则(即使群守则被清空/覆盖)。
25
+ */
26
+ export const FIXED_CHANNEL_CONTEXT = [
27
+ '【@ 人的方法】当你要对特定某人说话,在回复文本里直接写 <@对方openid>(无斜杠)就能在 QQ 群里 @ 到对方(高亮显示),例如 <@E9020753E73AD84C10A79B6006E96C63> 起床啦。如果别人@你,你用 @对方 回复;也可以主动 @别人。',
28
+ '【富媒体】你在 QQ 里能真的发图/文件/语音/视频:在回复正文里写 MEDIA:image|路径(两端加英文方括号)即发图,file/voice/video 同理,标记不显示;想撤回自己的消息单独输出一行 RECALL(两端加英文方括号)。',
29
+ ].join('\n');
22
30
  // ── 共享字段子 schema(主 ConfigSchema 与 EditableConfigSchema 复用) ──
23
31
  const debounceSchema = Schema.object({
24
32
  enabled: Schema.boolean().default(true).description('延迟聚合总开关(防"连发N句只回第一句": 消息先攒窗口, 人停口或攒够条数才一次综合回)'),
@@ -112,21 +120,99 @@ const scheduleTargetSchema = Schema.object({
112
120
  const scheduleSchema = Schema.object({
113
121
  targets: Schema.array(scheduleTargetSchema).default([]).description('定时目标列表(每个群/人一组,下面挂时刻)'),
114
122
  }).default({ targets: [] }).description('定时唤醒(M3): 每天固定时刻主动找聊天');
123
+ // ── botplay 互动事件(schema, 2026-09-08) ──
124
+ const botplayActionSchema = Schema.object({
125
+ type: Schema.union(['reply_text', 'jump_url', 'callback', 'command']).default('reply_text').description('行为类型: reply_text=回指定文本 / jump_url=跳转 / callback=仅结算 / command=点击执行斜杠命令(如 bot-status)'),
126
+ text: Schema.string().default('').description('reply_text: 回复文本; command: 斜杠命令名(不带/, 如 bot-status)'),
127
+ url: Schema.string().default('').description('jump_url: 跳转链接'),
128
+ }).default({ type: 'reply_text', text: '', url: '' }).description('按钮 bot(非LLM)动作');
129
+ const botplayEffectSchema = Schema.object({
130
+ mode: Schema.union(['no_append', 'append_silent', 'append_wake']).default('no_append').description('LLM 三档影响: no_append=纯bot行为AI不知 / append_silent=记录进上下文不唤醒 / append_wake=记录并唤醒AI'),
131
+ contextText: Schema.string().default('').description('自定义记录文本(支持 {label} 占位); 空=默认「bot 发送了卡片, 用户点击了按钮」'),
132
+ }).default({ mode: 'no_append', contextText: '' }).description('点击对 LLM 的影响');
133
+ const botplayButtonSchema = Schema.object({
134
+ id: Schema.string().required().description('按钮 id(回调 data 编码 事件id::按钮id; 建议 [a-zA-Z0-9_-])'),
135
+ label: Schema.string().required().description('按钮显示文字'),
136
+ visitedLabel: Schema.string().description('点击后显示文字, 留空=label'),
137
+ style: Schema.number().default(1).description('0灰 1蓝'),
138
+ botAction: botplayActionSchema,
139
+ llmEffect: botplayEffectSchema,
140
+ }).default({
141
+ id: '', label: '', visitedLabel: '', style: 1,
142
+ botAction: { type: 'reply_text', text: '', url: '' },
143
+ llmEffect: { mode: 'no_append', contextText: '' },
144
+ }).description('按钮');
145
+ const botplayPermSchema = Schema.object({
146
+ type: Schema.union(['all', 'triggerer', 'owner', 'users']).default('all').description('权限: all=所有人 / triggerer=仅触发者本人 / owner=主人白名单 / users=指定openid'),
147
+ userIds: Schema.array(Schema.string()).default([]).description('users 时填 openid 列表'),
148
+ }).default({ type: 'all', userIds: [] }).description('权限');
149
+ const botplayEventSchema = Schema.object({
150
+ id: Schema.string().required().description('事件唯一 id(斜杠 /botplay 触发用; 建议 [a-zA-Z0-9_-])'),
151
+ name: Schema.string().required().description('事件显示名(/botplay 列表显示)'),
152
+ maxClicks: Schema.number().default(0).description('接受点击数: 0=不限; N=单次触发最多点N次(点满失效)'),
153
+ expireSec: Schema.number().default(600).description('发卡后有效期(秒), 超时按钮失效'),
154
+ perm: botplayPermSchema,
155
+ buttonsPerRow: Schema.number().min(1).max(5).default(1).description('每行几个按钮(1~5, 默认1竖排; QQ 上限 5行×5钮)'),
156
+ buttons: Schema.array(botplayButtonSchema).default([]).description('按钮列表(QQ限制: 最多5行)'),
157
+ }).default({
158
+ id: '', name: '', maxClicks: 0, expireSec: 600,
159
+ perm: { type: 'all', userIds: [] },
160
+ buttonsPerRow: 1,
161
+ buttons: [],
162
+ }).description('botplay 互动事件');
163
+ /** Phase1 内置演示事件(仅当用户从未配置时生效; 保存后以用户配置为准) */
164
+ const DEMO_BOTPLAY_EVENTS = [
165
+ {
166
+ id: 'checkin',
167
+ name: '签到',
168
+ maxClicks: 0,
169
+ expireSec: 600,
170
+ perm: { type: 'triggerer', userIds: [] },
171
+ buttons: [{
172
+ id: 'b1',
173
+ label: '✅ 签到',
174
+ visitedLabel: '已签到',
175
+ style: 1,
176
+ botAction: { type: 'reply_text', text: '✅ 签到成功 +1 🎉', url: '' },
177
+ llmEffect: { mode: 'no_append', contextText: '' },
178
+ }],
179
+ },
180
+ {
181
+ id: 'fortune',
182
+ name: '今日运势',
183
+ maxClicks: 0,
184
+ expireSec: 600,
185
+ perm: { type: 'triggerer', userIds: [] },
186
+ buttons: [{
187
+ id: 'b1',
188
+ label: '🔮 抽一签',
189
+ visitedLabel: '已抽取',
190
+ style: 1,
191
+ botAction: { type: 'callback', text: '', url: '' },
192
+ llmEffect: { mode: 'append_wake', contextText: '用户点击了「{name}」的抽签按钮, 想看看今天的运势' },
193
+ }],
194
+ },
195
+ ];
115
196
  const groupAdminSchema = Schema.object({
116
197
  enabled: Schema.boolean().default(false).description('QQ 群管理总开关(入群审批/禁言等; 需机器人为群管理员)'),
117
198
  owners: Schema.array(Schema.string()).default([]).description('允许操作的主人 openid 白名单(空=不校验; 群管理操作仅建议主人使用)'),
118
199
  manageGroup: Schema.string().default('').description('对话内默认管理群 group_openid(web/非群会话时群工具用它; QQ 群会话自动用当前群)'),
119
200
  watchJoinRequests: Schema.boolean().default(false).description('订阅"入群申请"实时事件(GROUP_JOIN_REQUEST)并自动提醒(改后需重启生效)'),
120
201
  notifyInGroup: Schema.boolean().default(true).description('收到入群申请事件时, 在该群内发一条 bot 提醒(需机器人=群管理员)'),
202
+ hubSessionId: Schema.string().default('').description('群组管理器会话 id: 各群群事件(入群申请/新成员加入/被拉群)汇总注入此会话(dock 群组管理 tab 一键设置; 须绑定某 QQ 群/私聊)'),
203
+ hubNotify: Schema.boolean().default(true).description('群事件转发到群组管理器(默认开; 注入成功则不再群内提醒)'),
121
204
  }).default({
122
205
  enabled: false,
123
206
  owners: [],
124
207
  manageGroup: '',
125
208
  watchJoinRequests: false,
126
209
  notifyInGroup: true,
210
+ hubSessionId: '',
211
+ hubNotify: true,
127
212
  }).description('QQ 群管理');
128
213
  /** Web 设置页可编辑项的 schema(behavior/sticker.gates/injectRules/groupPrompt/schedule) */
129
214
  export const EditableConfigSchema = Schema.object({
215
+ dataRoot: Schema.string().description('插件数据根目录(可选; 缺省=cwd): 表情包/.qqbot/.qqbot-extensions 统一挂其下, 与工作区其他文件分离'),
130
216
  behavior: behaviorSchema,
131
217
  groupAdmin: groupAdminSchema,
132
218
  sticker: Schema.object({
@@ -140,6 +226,7 @@ export const EditableConfigSchema = Schema.object({
140
226
  enableApprovals: Schema.boolean().default(false).description('QQ 远程审批: dsh 权限申请发到 QQ, 用 /approve CODE 放行(保存后对新请求生效)'),
141
227
  approvalTimeoutMs: Schema.number().default(120000).description('QQ 权限申请等待时长(ms), 超时自动拒绝'),
142
228
  outboundMode: Schema.union(['adaptive', 'active', 'passive', 'silent', 'nothink']).default('adaptive').description('出站模式: 适配主动(默认)=收到新消息后前5次带msg_id被动回复, 超出/无新消息自动转主动(保连发); 被动=全程带回复id(连发受QQ上限); 完全不出站=思考但不发(静默); 完全不思考=QQ入站不唤醒LLM(仅记录, 仅设置页可配)'),
229
+ botplayEvents: Schema.array(botplayEventSchema).default(DEMO_BOTPLAY_EVENTS).description('botplay 互动事件(dock🎮装配器编辑, 保存即热更; /botplay 触发发卡)'),
143
230
  });
144
231
  export const ConfigSchema = Schema.object({
145
232
  appId: Schema.string().default('').description('QQ Bot AppID'),
@@ -148,6 +235,7 @@ export const ConfigSchema = Schema.object({
148
235
  model: Schema.string().description('Model name'),
149
236
  preset: Schema.string().description('Agent preset id'),
150
237
  cwd: Schema.string().description('Agent working directory'),
238
+ dataRoot: Schema.string().description('插件数据根目录(可选; 缺省=cwd): 表情包/.qqbot/.qqbot-extensions 统一挂其下, 与工作区其他文件分离'),
151
239
  settingsNs: Schema.string().description('Web 设置命名空间(多账号时每实例唯一, 默认 im-qqbot)'),
152
240
  requireMention: Schema.boolean().default(true).description('群聊是否需要@bot触发'),
153
241
  groupPrompt: Schema.string().default(DEFAULT_GROUP_PROMPT).description('群聊常驻守则(默认表情包礼仪, 可清空关闭)'),
@@ -202,5 +290,6 @@ export const ConfigSchema = Schema.object({
202
290
  enableApprovals: Schema.boolean().default(false).description('通过 QQ 接收并处理 dsh 一次性权限申请(远程审批: 发起者用 /approve CODE 放行)'),
203
291
  approvalTimeoutMs: Schema.number().default(120000).description('QQ 权限申请超时(ms), 超时自动拒绝'),
204
292
  outboundMode: Schema.union(['adaptive', 'active', 'passive', 'silent', 'nothink']).default('adaptive').description('出站模式: 适配主动(默认)=收到新消息后前5次带msg_id被动回复, 超出/无新消息自动转主动(连发不受限); 被动=携带msg_id回复(连发受QQ回复同一消息上限); 完全不出站=思考但不发(静默); 完全不思考=QQ入站不唤醒LLM, 仅记录上下文(仅设置页可配, 防机器人自锁)'),
293
+ botplayEvents: Schema.array(botplayEventSchema).default(DEMO_BOTPLAY_EVENTS).description('botplay 互动事件(装配器编辑; /botplay 触发发卡)'),
205
294
  });
206
295
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,MAAM,MAAM,0BAA0B,CAAC;AA2N9C;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,uFAAuF;IACvF,+FAA+F;IAC/F,4CAA4C;IAC5C,qDAAqD;IACrD,6CAA6C;IAC7C,kXAAkX;CACnX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,2IAA2I;IAC3I,2HAA2H;CAC5H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,+DAA+D;AAE/D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC;IACpG,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC;IACvF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC;IAClF,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC;CAC1F,CAAC,CAAC,OAAO,CAAC;IACT,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,IAAI;CACrB,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAEpC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC;IACrF,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACtF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACnF,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC,OAAO,CAAC;IACT,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,IAAI;KACrB;CACF,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEvB,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;IAC1E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAC7E,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IAC1E,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;IAC9E,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAChF,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACtF,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;CAChF,CAAC,CAAC,OAAO,CAAC;IACT,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,CAAC;IACf,mBAAmB,EAAE,CAAC;IACtB,WAAW,EAAE,CAAC;IACd,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAEnC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;IACzD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;QAC9D,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;QAC7D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;QACnE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC;QACnF,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;KACzF,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;CAC5E,CAAC,CAAC;AAEH,wBAAwB;AACxB,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC;IAC1G,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC;CAC3D,CAAC,CAAC,OAAO,CAAC;IACT,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,EAAE;CACX,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEvB,gCAAgC;AAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;IACtF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,8BAA8B,CAAC;IAChF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;CAC/E,CAAC,CAAC,OAAO,CAAC;IACT,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;CACV,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAE5B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC;CAC7F,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAEjE,yCAAyC;AACzC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,sFAAsF,CAAC;IAC/L,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC;IACpG,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;CAC/D,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAEpF,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,gFAAgF,CAAC;IACpL,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kDAAkD,CAAC;CACzG,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAE9E,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,gDAAgD,CAAC;IAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;IACtD,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;CAC/B,CAAC,CAAC,OAAO,CAAC;IACT,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAC7C,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IACpD,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;CAClD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAErB,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,+DAA+D,CAAC;IACtJ,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC;CACrF,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,4CAA4C,CAAC;IACxF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,sBAAsB,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC;IACnF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACxE,IAAI,EAAE,iBAAiB;IACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC;IACtG,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;CACvF,CAAC,CAAC,OAAO,CAAC;IACT,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG;IAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAClC,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,EAAE;CACZ,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAE/B,6CAA6C;AAC7C,MAAM,mBAAmB,GAAyB;IAChD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,OAAO,EAAE,CAAC;gBACR,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,MAAM;gBACb,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE;gBAChE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;aAClD,CAAC;KACH;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,OAAO,EAAE,CAAC;gBACR,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,QAAQ;gBACf,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;gBAClD,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,8BAA8B,EAAE;aAChF,CAAC;KACH;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC;IACxG,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC;IAC3G,iBAAiB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC;IAChH,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC;IACjG,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,4EAA4E,CAAC;IACnI,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,+BAA+B,CAAC;CACvF,CAAC,CAAC,OAAO,CAAC;IACT,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,iBAAiB,EAAE,KAAK;IACxB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAEzB,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAA2B,MAAM,CAAC,MAAM,CAAC;IACxE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,qEAAqE,CAAC;IAC5G,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,KAAK,EAAE,kBAAkB;QACzB,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC;QACpF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;KACvE,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAChG,QAAQ,EAAE,cAAc;IACxB,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,uDAAuD,CAAC;IACrH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC;IACzF,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,6HAA6H,CAAC;IACjP,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,mBAA4B,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC;CACrJ,CAAC,CAAC;AAiEH,MAAM,CAAC,MAAM,YAAY,GAA0B,MAAM,CAAC,MAAM,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACtD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,qEAAqE,CAAC;IAC5G,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,oCAAoC,CAAC;IAC7E,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IAC1E,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAChG,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAC9D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC;IACtE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAC1E,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;IACrF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;IAC7D,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;QAC/F,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;QACzE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;QAChG,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;KAC3E,CAAC,CAAC,OAAO,CAAC;QACT,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,EAAE;KACf,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IACtB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;QAC3E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC;QAC/E,KAAK,EAAE,kBAAkB;QACzB,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC;QAC9F,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC;KACzF,CAAC,CAAC,OAAO,CAAC;QACT,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE;YACL,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,CAAC;YACf,mBAAmB,EAAE,CAAC;YACtB,WAAW,EAAE,CAAC;YACd,iBAAiB,EAAE,IAAI;YACvB,eAAe,EAAE,CAAC;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;SACb;QACD,cAAc,EAAE,KAAK;QACrB,SAAS,EAAE,EAAE;KACd,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC;IACzG,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,gBAAgB;IAC5B,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IACtF,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,sDAAsD,CAAC;IACpH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC;IACvF,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,mJAAmJ,CAAC;IACvQ,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,mBAA4B,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC;CACxI,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * approval-switch.ts — QQ 远程审批开关切换共享注册表(2026-09-08)
3
+ *
4
+ * 供斜杠命令(/approve)切换「QQ 远程审批」总开关:
5
+ * - 切换由 bootstrap/index 注册的实现完成 → ①改内存 live config(立即热生效,
6
+ * dispatch 每次 request 现读 config.enableApprovals); ②经 settings 服务持久化。
7
+ * - 轻量版: 不学 DLive 社区版逐会话 ask/never 策略(那套要持久化"始终允许"清单),
8
+ * 只切总开关 + 状态查询; 主人要更细再扩。
9
+ */
10
+ type Writer = (enable: boolean) => Promise<{
11
+ ok: boolean;
12
+ msg: string;
13
+ enable: boolean;
14
+ }>;
15
+ export declare function setApprovalSwitchWriter(fn: Writer | undefined): void;
16
+ export declare function switchApprovals(enable: boolean): Promise<{
17
+ ok: boolean;
18
+ msg: string;
19
+ enable: boolean;
20
+ }>;
21
+ export {};
22
+ //# sourceMappingURL=approval-switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-switch.d.ts","sourceRoot":"","sources":["../../src/features/approval-switch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAI1F,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAG7G"}
@@ -0,0 +1,10 @@
1
+ let writer;
2
+ export function setApprovalSwitchWriter(fn) {
3
+ writer = fn;
4
+ }
5
+ export async function switchApprovals(enable) {
6
+ if (!writer)
7
+ return { ok: false, msg: '审批开关切换器未注册(插件未就绪)', enable };
8
+ return writer(enable);
9
+ }
10
+ //# sourceMappingURL=approval-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-switch.js","sourceRoot":"","sources":["../../src/features/approval-switch.ts"],"names":[],"mappings":"AAWA,IAAI,MAA0B,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,EAAsB;IAC5D,MAAM,GAAG,EAAE,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAe;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * botplay.ts — botplay 互动事件装配器(2026-09-08, Phase1 MVP)
3
+ *
4
+ * 设计定稿见工作区 参考文档/botplay互动事件装配器_设计完整稿.md(唯一权威):
5
+ * 一句话本质 = 自定义 bot 互动事件: ①bot(非LLM)发出什么交互卡片 →
6
+ * ②用户点哪个按钮 → ③这件事要不要/怎么影响 LLM, 全部可配置。
7
+ *
8
+ * 本文件职责(参照 qq-approval.ts / qq-user-questions.ts 的注册表范式):
9
+ * - BotplayController: 发卡(trigger) + interaction 回调结算(handleInteraction)
10
+ * + append 三档(no_append / append_silent / append_wake)
11
+ * - 事件配置从 live config(config.botplayEvents, settings 同源热更)现读;
12
+ * dock「🎮 互动事件」装配器编辑后保存即热更, 无需重启。
13
+ * - /botplay 命令经 triggerBotplay() 模块级注册表触发(仿 outbound-mode-switch)。
14
+ *
15
+ * Phase1 MVP 范围: schema 最小集(id/name/buttons[label,botAction.reply_text,
16
+ * llmEffect.mode]/maxClicks/expireSec); perm 默认 all, triggerer 推荐;
17
+ * 行为类型 reply_text 落地, jump_url/callback 预留。
18
+ */
19
+ import type { ReplyTarget } from '@tencent-connect/qqbot-nodejs';
20
+ import type { QQBotSender } from '../transport/outbound-buffer.js';
21
+ import type { SessionManager } from '../session/index.js';
22
+ import type { Logger } from '../types.js';
23
+ import type { BotplayButtonConfig, BotplayEventConfig } from '../config.js';
24
+ export interface BotplayTriggerResult {
25
+ ok: boolean;
26
+ msg: string;
27
+ }
28
+ /**
29
+ * 构造事件卡片 keyboard(官方 msg_type=2 + keyboard)。
30
+ * QQ 限制: rows ≤5 行 × 5 按钮/行; 默认每行1个(竖排, 字宽不截断),
31
+ * 事件 buttonsPerRow(1~5)可设每行多个(Phase2)。
32
+ * permission: 按事件 perm 决定 —— all→type2所有人 / triggerer→type0 指定触发者 /
33
+ * owner→type0 主人白名单 / users→type0 指定 openid。
34
+ * 按钮 action.type 按 botAction 区分(Phase2):
35
+ * reply_text/callback/command → 1 回调按钮(点击回后台, data=bp:card:btn)
36
+ * jump_url → 0 跳转按钮(data=http(s) 链接, 点击直接跳不走回调)
37
+ */
38
+ export declare function botplayKeyboard(cardId: string, buttons: BotplayButtonConfig[], perm: NonNullable<BotplayEventConfig['perm']>, ownerIds: string[], triggererId?: string, buttonsPerRow?: number): {
39
+ content: {
40
+ rows: unknown[];
41
+ };
42
+ };
43
+ /** 从 interaction button_data 解析 cardId + buttonId; 非 botplay 按钮返回 null */
44
+ export declare function parseBotplayButton(data: string | undefined): {
45
+ cardId: string;
46
+ buttonId: string;
47
+ } | null;
48
+ export declare function parseCatalogButton(data: string | undefined): {
49
+ page: number;
50
+ key: string;
51
+ } | null;
52
+ export declare class BotplayController {
53
+ private readonly manager;
54
+ private readonly sender;
55
+ private readonly logger;
56
+ /** live 事件配置 getter(config.botplayEvents, 每次现读支持热更) */
57
+ private readonly eventsGetter;
58
+ /** 主人 openid 白名单 getter(config.groupAdmin.owners; perm=owner 用) */
59
+ private readonly ownersGetter;
60
+ /** 台账 dataDir getter(表情包目录; 点击人昵称反查, 与 dock 禁言面板同源) */
61
+ private readonly ledgerDataDirGetter;
62
+ private readonly cards;
63
+ constructor(manager: SessionManager, sender: QQBotSender, logger: Logger,
64
+ /** live 事件配置 getter(config.botplayEvents, 每次现读支持热更) */
65
+ eventsGetter: () => BotplayEventConfig[],
66
+ /** 主人 openid 白名单 getter(config.groupAdmin.owners; perm=owner 用) */
67
+ ownersGetter: () => string[],
68
+ /** 台账 dataDir getter(表情包目录; 点击人昵称反查, 与 dock 禁言面板同源) */
69
+ ledgerDataDirGetter: () => string);
70
+ /** 指令型按钮执行器(bootstrap 注入: 执行斜杠命令并返回文本) */
71
+ private commandExecutor;
72
+ setCommandExecutor(fn: ((cmdName: string, target: ReplyTarget) => Promise<string>) | undefined): void;
73
+ /** 列出所有事件(公开, dock/命令共用) */
74
+ listEvents(): BotplayEventConfig[];
75
+ /** 按事件 id 精确查(live 现读) */
76
+ findEvent(eventId: string): BotplayEventConfig | undefined;
77
+ /**
78
+ * 触发发卡(/botplay 事件名)。定位会话用命令上下文所在 scope/peerId,
79
+ * 归属人 = 触发者本人 openid(group=c2c 同 senderId)。
80
+ */
81
+ trigger(target: ReplyTarget, eventId: string, triggererId: string): Promise<BotplayTriggerResult>;
82
+ /** 发送事件目录卡(/botplay 无参 或 目录卡翻页; 点事件名按钮 → handleInteraction 直接触发) */
83
+ sendCatalog(target: ReplyTarget, page?: number): Promise<BotplayTriggerResult>;
84
+ /**
85
+ * interaction 回调结算(bootstrap interaction 分发转发; type=11 消息按钮)。
86
+ * 流程: 解析 bp:<cardId>:<buttonId> → 查卡(过期/点满) → 查事件配置(live)
87
+ * → 校验按钮存在与点击人权限 → 执行 botAction → 按 llmEffect.mode append/唤醒。
88
+ * @returns true = 已被 botplay 消费(调用方无需其它处理)
89
+ */
90
+ handleInteraction(event: unknown, replyTarget: ReplyTarget): Promise<boolean>;
91
+ /**
92
+ * 点击人可读标签(与 dock 禁言面板/审批同源的昵称反查):
93
+ * ①群成员台账 group-members.jsonl(gid:mid → name, 由 chat-ledger 中间件持续记录)
94
+ * ②私聊台账 known-chats.jsonl(c2c:id → name)
95
+ * ③会话最近 user/message 消息壳 [昵称 (openid)] 兜底
96
+ * ④全 miss 回落 openid。
97
+ */
98
+ private clickerLabel;
99
+ /** 权限判定: all 放行 / triggerer=触发者本人 / owner=主人白名单 / users=指定 openid */
100
+ private checkPerm;
101
+ /**
102
+ * append 三档落点: 往该 peer 的会话写上下文/唤醒 AI。
103
+ * ⚠️ 会话不在内存(重启后未恢复/被 idle 回收)→ getOrCreate 恢复/重建(不触发回合),
104
+ * 保证 append/injectToPeer 有 record 可挂 —— 这是"点击没反应"的常见根因。
105
+ */
106
+ private applyEffect;
107
+ private safeReply;
108
+ /** 清理全部活动卡(dispose 用) */
109
+ clear(): void;
110
+ /** 扫掉过期卡(Phase2: 定期/触发时调用, 防内存积压) */
111
+ sweepExpired(): number;
112
+ /** 活动卡数量(诊断用) */
113
+ get cardCount(): number;
114
+ }
115
+ export declare function registerBotplayController(ns: string, c: BotplayController | undefined): void;
116
+ /** /botplay 命令触发入口: bootstrap 注册实现(带 sender/manager) */
117
+ type TriggerFn = (target: ReplyTarget, eventId: string, triggererId: string) => Promise<BotplayTriggerResult>;
118
+ export declare function setBotplayTriggerImpl(fn: TriggerFn | undefined): void;
119
+ export declare function triggerBotplay(target: ReplyTarget, eventId: string, triggererId: string): Promise<BotplayTriggerResult>;
120
+ /** 事件目录卡入口: bootstrap 注册实现(带 sender/manager); /botplay 无参调用 */
121
+ type CatalogFn = (target: ReplyTarget, page: number) => Promise<BotplayTriggerResult>;
122
+ export declare function setBotplayCatalogImpl(fn: CatalogFn | undefined): void;
123
+ export declare function botplayCatalog(target: ReplyTarget, page?: number): Promise<BotplayTriggerResult>;
124
+ /** 取某 ns 的事件列表(dock 装配器读; settings value 里其实已有, 此出口备用) */
125
+ export declare function listBotplayEventsAny(): Array<BotplayEventConfig & {
126
+ ns: string;
127
+ }>;
128
+ /** 会话定位 → ReplyTarget(命令层用; senderId 即触发者) */
129
+ export declare function resolveCommandTarget(cmdCtx: {
130
+ message?: {
131
+ kind?: string;
132
+ groupOpenid?: string;
133
+ senderId?: string;
134
+ messageId?: string;
135
+ };
136
+ }): {
137
+ target: ReplyTarget;
138
+ triggererId: string;
139
+ };
140
+ export {};
141
+ //# sourceMappingURL=botplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botplay.d.ts","sourceRoot":"","sources":["../../src/features/botplay.ts"],"names":[],"mappings":"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"}