@openclaw/qqbot 2026.5.1-beta.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 (187) hide show
  1. package/api.ts +56 -0
  2. package/channel-plugin-api.ts +1 -0
  3. package/dist/.boundary-tsc.stamp +1 -0
  4. package/dist/.boundary-tsc.tsbuildinfo +1 -0
  5. package/index.ts +29 -0
  6. package/openclaw.plugin.json +814 -0
  7. package/package.json +66 -0
  8. package/runtime-api.ts +9 -0
  9. package/setup-entry.ts +9 -0
  10. package/setup-plugin-api.ts +3 -0
  11. package/skills/qqbot-channel/SKILL.md +262 -0
  12. package/skills/qqbot-channel/references/api_references.md +521 -0
  13. package/skills/qqbot-media/SKILL.md +37 -0
  14. package/skills/qqbot-remind/SKILL.md +153 -0
  15. package/src/bridge/approval/capability.ts +237 -0
  16. package/src/bridge/approval/handler-runtime.ts +204 -0
  17. package/src/bridge/bootstrap.ts +135 -0
  18. package/src/bridge/channel-entry.ts +18 -0
  19. package/src/bridge/commands/framework-context-adapter.ts +60 -0
  20. package/src/bridge/commands/framework-registration.ts +47 -0
  21. package/src/bridge/commands/from-parser.test.ts +86 -0
  22. package/src/bridge/commands/from-parser.ts +60 -0
  23. package/src/bridge/commands/result-dispatcher.ts +76 -0
  24. package/src/bridge/config-shared.ts +132 -0
  25. package/src/bridge/config.ts +111 -0
  26. package/src/bridge/gateway.ts +174 -0
  27. package/src/bridge/logger.ts +31 -0
  28. package/src/bridge/narrowing.ts +31 -0
  29. package/src/bridge/plugin-version.test.ts +146 -0
  30. package/src/bridge/plugin-version.ts +102 -0
  31. package/src/bridge/runtime.ts +25 -0
  32. package/src/bridge/sdk-adapter.ts +131 -0
  33. package/src/bridge/setup/finalize.ts +144 -0
  34. package/src/bridge/setup/surface.ts +34 -0
  35. package/src/bridge/tools/channel.ts +58 -0
  36. package/src/bridge/tools/index.ts +15 -0
  37. package/src/bridge/tools/remind.test.ts +124 -0
  38. package/src/bridge/tools/remind.ts +91 -0
  39. package/src/channel.setup.ts +33 -0
  40. package/src/channel.ts +288 -0
  41. package/src/command-auth.test.ts +62 -0
  42. package/src/config-schema.ts +84 -0
  43. package/src/config.test.ts +364 -0
  44. package/src/engine/access/access-control.test.ts +198 -0
  45. package/src/engine/access/access-control.ts +226 -0
  46. package/src/engine/access/index.ts +16 -0
  47. package/src/engine/access/resolve-policy.test.ts +59 -0
  48. package/src/engine/access/resolve-policy.ts +57 -0
  49. package/src/engine/access/sender-match.test.ts +60 -0
  50. package/src/engine/access/sender-match.ts +55 -0
  51. package/src/engine/access/types.ts +53 -0
  52. package/src/engine/adapter/audio.port.ts +27 -0
  53. package/src/engine/adapter/commands.port.ts +22 -0
  54. package/src/engine/adapter/history.port.ts +52 -0
  55. package/src/engine/adapter/index.ts +139 -0
  56. package/src/engine/adapter/mention-gate.port.ts +50 -0
  57. package/src/engine/adapter/types.ts +38 -0
  58. package/src/engine/api/api-client.ts +212 -0
  59. package/src/engine/api/media-chunked.test.ts +336 -0
  60. package/src/engine/api/media-chunked.ts +622 -0
  61. package/src/engine/api/media.ts +218 -0
  62. package/src/engine/api/messages.ts +293 -0
  63. package/src/engine/api/retry.ts +217 -0
  64. package/src/engine/api/routes.ts +95 -0
  65. package/src/engine/api/token.ts +271 -0
  66. package/src/engine/approval/index.test.ts +22 -0
  67. package/src/engine/approval/index.ts +224 -0
  68. package/src/engine/commands/builtin/log-helpers.ts +319 -0
  69. package/src/engine/commands/builtin/register-all.ts +17 -0
  70. package/src/engine/commands/builtin/register-approve.ts +201 -0
  71. package/src/engine/commands/builtin/register-basic.ts +95 -0
  72. package/src/engine/commands/builtin/register-clear-storage.ts +187 -0
  73. package/src/engine/commands/builtin/register-logs.ts +20 -0
  74. package/src/engine/commands/builtin/register-streaming.ts +137 -0
  75. package/src/engine/commands/builtin/state.ts +31 -0
  76. package/src/engine/commands/slash-command-auth.ts +48 -0
  77. package/src/engine/commands/slash-command-handler.ts +146 -0
  78. package/src/engine/commands/slash-commands-impl.test.ts +8 -0
  79. package/src/engine/commands/slash-commands-impl.ts +61 -0
  80. package/src/engine/commands/slash-commands.ts +199 -0
  81. package/src/engine/config/credential-backup.test.ts +88 -0
  82. package/src/engine/config/credential-backup.ts +107 -0
  83. package/src/engine/config/credentials.ts +76 -0
  84. package/src/engine/config/group.test.ts +234 -0
  85. package/src/engine/config/group.ts +299 -0
  86. package/src/engine/config/resolve.test.ts +152 -0
  87. package/src/engine/config/resolve.ts +283 -0
  88. package/src/engine/config/setup-logic.ts +84 -0
  89. package/src/engine/engine-import-boundary.test.ts +73 -0
  90. package/src/engine/gateway/codec.ts +47 -0
  91. package/src/engine/gateway/constants.ts +117 -0
  92. package/src/engine/gateway/event-dispatcher.ts +177 -0
  93. package/src/engine/gateway/gateway-connection.ts +371 -0
  94. package/src/engine/gateway/gateway.ts +291 -0
  95. package/src/engine/gateway/inbound-attachments.test.ts +126 -0
  96. package/src/engine/gateway/inbound-attachments.ts +360 -0
  97. package/src/engine/gateway/inbound-context.ts +195 -0
  98. package/src/engine/gateway/inbound-pipeline.self-echo.test.ts +218 -0
  99. package/src/engine/gateway/inbound-pipeline.ts +235 -0
  100. package/src/engine/gateway/interaction-handler.ts +220 -0
  101. package/src/engine/gateway/message-queue.test.ts +282 -0
  102. package/src/engine/gateway/message-queue.ts +499 -0
  103. package/src/engine/gateway/outbound-dispatch.test.ts +231 -0
  104. package/src/engine/gateway/outbound-dispatch.ts +575 -0
  105. package/src/engine/gateway/reconnect.ts +199 -0
  106. package/src/engine/gateway/stages/access-stage.ts +132 -0
  107. package/src/engine/gateway/stages/assembly-stage.ts +156 -0
  108. package/src/engine/gateway/stages/content-stage.test.ts +77 -0
  109. package/src/engine/gateway/stages/content-stage.ts +77 -0
  110. package/src/engine/gateway/stages/envelope-stage.test.ts +152 -0
  111. package/src/engine/gateway/stages/envelope-stage.ts +144 -0
  112. package/src/engine/gateway/stages/group-gate-stage.ts +292 -0
  113. package/src/engine/gateway/stages/index.ts +18 -0
  114. package/src/engine/gateway/stages/quote-stage.ts +113 -0
  115. package/src/engine/gateway/stages/refidx-stage.ts +62 -0
  116. package/src/engine/gateway/stages/stub-contexts.ts +116 -0
  117. package/src/engine/gateway/types.ts +264 -0
  118. package/src/engine/gateway/typing-keepalive.ts +79 -0
  119. package/src/engine/group/activation.test.ts +114 -0
  120. package/src/engine/group/activation.ts +147 -0
  121. package/src/engine/group/history.test.ts +314 -0
  122. package/src/engine/group/history.ts +321 -0
  123. package/src/engine/group/mention.test.ts +141 -0
  124. package/src/engine/group/mention.ts +197 -0
  125. package/src/engine/group/message-gating.test.ts +188 -0
  126. package/src/engine/group/message-gating.ts +216 -0
  127. package/src/engine/messaging/decode-media-path.ts +82 -0
  128. package/src/engine/messaging/media-source.ts +215 -0
  129. package/src/engine/messaging/media-type-detect.ts +37 -0
  130. package/src/engine/messaging/outbound-audio-port.ts +38 -0
  131. package/src/engine/messaging/outbound-deliver.ts +810 -0
  132. package/src/engine/messaging/outbound-media-send.ts +702 -0
  133. package/src/engine/messaging/outbound-reply.ts +27 -0
  134. package/src/engine/messaging/outbound-result-helpers.ts +54 -0
  135. package/src/engine/messaging/outbound-types.ts +45 -0
  136. package/src/engine/messaging/outbound.ts +485 -0
  137. package/src/engine/messaging/reply-dispatcher.ts +597 -0
  138. package/src/engine/messaging/reply-limiter.ts +164 -0
  139. package/src/engine/messaging/sender.ts +729 -0
  140. package/src/engine/messaging/streaming-c2c.ts +1192 -0
  141. package/src/engine/messaging/streaming-media-send.ts +544 -0
  142. package/src/engine/messaging/target-parser.ts +104 -0
  143. package/src/engine/ref/format-message-ref.ts +142 -0
  144. package/src/engine/ref/format-ref-entry.test.ts +60 -0
  145. package/src/engine/ref/format-ref-entry.ts +27 -0
  146. package/src/engine/ref/store.ts +224 -0
  147. package/src/engine/ref/types.ts +27 -0
  148. package/src/engine/session/known-users.ts +254 -0
  149. package/src/engine/session/session-store.ts +284 -0
  150. package/src/engine/tools/channel-api.ts +244 -0
  151. package/src/engine/tools/remind-logic.test.ts +280 -0
  152. package/src/engine/tools/remind-logic.ts +377 -0
  153. package/src/engine/types.ts +313 -0
  154. package/src/engine/utils/attachment-tags.test.ts +186 -0
  155. package/src/engine/utils/attachment-tags.ts +174 -0
  156. package/src/engine/utils/audio.test.ts +250 -0
  157. package/src/engine/utils/audio.ts +585 -0
  158. package/src/engine/utils/data-paths.ts +38 -0
  159. package/src/engine/utils/diagnostics.ts +109 -0
  160. package/src/engine/utils/file-utils.test.ts +72 -0
  161. package/src/engine/utils/file-utils.ts +225 -0
  162. package/src/engine/utils/format.test.ts +68 -0
  163. package/src/engine/utils/format.ts +70 -0
  164. package/src/engine/utils/image-size.test.ts +158 -0
  165. package/src/engine/utils/image-size.ts +249 -0
  166. package/src/engine/utils/log.test.ts +28 -0
  167. package/src/engine/utils/log.ts +61 -0
  168. package/src/engine/utils/media-tags.test.ts +32 -0
  169. package/src/engine/utils/media-tags.ts +177 -0
  170. package/src/engine/utils/payload.test.ts +68 -0
  171. package/src/engine/utils/payload.ts +145 -0
  172. package/src/engine/utils/platform-storage-laziness.test.ts +65 -0
  173. package/src/engine/utils/platform.test.ts +148 -0
  174. package/src/engine/utils/platform.ts +343 -0
  175. package/src/engine/utils/request-context.ts +60 -0
  176. package/src/engine/utils/string-normalize.ts +91 -0
  177. package/src/engine/utils/stt.test.ts +104 -0
  178. package/src/engine/utils/stt.ts +100 -0
  179. package/src/engine/utils/text-parsing.test.ts +29 -0
  180. package/src/engine/utils/text-parsing.ts +155 -0
  181. package/src/engine/utils/upload-cache.ts +96 -0
  182. package/src/engine/utils/voice-text.ts +15 -0
  183. package/src/exec-approvals.ts +218 -0
  184. package/src/manifest-schema.test.ts +56 -0
  185. package/src/qqbot-test-support.ts +29 -0
  186. package/src/types.ts +210 -0
  187. package/tsconfig.json +16 -0
@@ -0,0 +1,814 @@
1
+ {
2
+ "id": "qqbot",
3
+ "activation": {
4
+ "onStartup": false
5
+ },
6
+ "channels": [
7
+ "qqbot"
8
+ ],
9
+ "channelEnvVars": {
10
+ "qqbot": [
11
+ "QQBOT_APP_ID",
12
+ "QQBOT_CLIENT_SECRET"
13
+ ]
14
+ },
15
+ "enabledByDefault": true,
16
+ "skills": [
17
+ "./skills"
18
+ ],
19
+ "configSchema": {
20
+ "type": "object",
21
+ "additionalProperties": true,
22
+ "$defs": {
23
+ "audioFormatPolicy": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "properties": {
27
+ "sttDirectFormats": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "string"
31
+ }
32
+ },
33
+ "uploadDirectFormats": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "string"
37
+ }
38
+ },
39
+ "transcodeEnabled": {
40
+ "type": "boolean"
41
+ }
42
+ }
43
+ },
44
+ "stt": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "properties": {
48
+ "enabled": {
49
+ "type": "boolean"
50
+ },
51
+ "provider": {
52
+ "type": "string"
53
+ },
54
+ "baseUrl": {
55
+ "type": "string"
56
+ },
57
+ "apiKey": {
58
+ "type": "string"
59
+ },
60
+ "model": {
61
+ "type": "string"
62
+ }
63
+ }
64
+ },
65
+ "secretRef": {
66
+ "type": "object",
67
+ "additionalProperties": false,
68
+ "properties": {
69
+ "source": {
70
+ "type": "string",
71
+ "enum": [
72
+ "env",
73
+ "file",
74
+ "exec"
75
+ ]
76
+ },
77
+ "provider": {
78
+ "type": "string"
79
+ },
80
+ "id": {
81
+ "type": "string"
82
+ }
83
+ },
84
+ "required": [
85
+ "source",
86
+ "provider",
87
+ "id"
88
+ ]
89
+ },
90
+ "secretInput": {
91
+ "anyOf": [
92
+ {
93
+ "type": "string",
94
+ "minLength": 1
95
+ },
96
+ {
97
+ "$ref": "#/$defs/secretRef"
98
+ }
99
+ ]
100
+ },
101
+ "account": {
102
+ "type": "object",
103
+ "additionalProperties": true,
104
+ "properties": {
105
+ "enabled": {
106
+ "type": "boolean"
107
+ },
108
+ "name": {
109
+ "type": "string"
110
+ },
111
+ "appId": {
112
+ "type": "string"
113
+ },
114
+ "clientSecret": {
115
+ "$ref": "#/$defs/secretInput"
116
+ },
117
+ "clientSecretFile": {
118
+ "type": "string"
119
+ },
120
+ "allowFrom": {
121
+ "type": "array",
122
+ "items": {
123
+ "type": "string"
124
+ }
125
+ },
126
+ "systemPrompt": {
127
+ "type": "string"
128
+ },
129
+ "markdownSupport": {
130
+ "type": "boolean"
131
+ },
132
+ "voiceDirectUploadFormats": {
133
+ "type": "array",
134
+ "items": {
135
+ "type": "string"
136
+ }
137
+ },
138
+ "audioFormatPolicy": {
139
+ "$ref": "#/$defs/audioFormatPolicy"
140
+ },
141
+ "urlDirectUpload": {
142
+ "type": "boolean"
143
+ },
144
+ "upgradeUrl": {
145
+ "type": "string"
146
+ },
147
+ "upgradeMode": {
148
+ "type": "string",
149
+ "enum": [
150
+ "doc",
151
+ "hot-reload"
152
+ ]
153
+ },
154
+ "streaming": {
155
+ "anyOf": [
156
+ {
157
+ "type": "boolean"
158
+ },
159
+ {
160
+ "type": "object",
161
+ "additionalProperties": true,
162
+ "properties": {
163
+ "mode": {
164
+ "type": "string",
165
+ "enum": [
166
+ "off",
167
+ "partial"
168
+ ],
169
+ "default": "partial"
170
+ },
171
+ "c2cStreamApi": {
172
+ "type": "boolean",
173
+ "description": "Use QQ C2C official stream_messages API (single-message typing-style updates)."
174
+ }
175
+ }
176
+ }
177
+ ]
178
+ }
179
+ }
180
+ }
181
+ },
182
+ "properties": {
183
+ "enabled": {
184
+ "type": "boolean"
185
+ },
186
+ "name": {
187
+ "type": "string"
188
+ },
189
+ "appId": {
190
+ "type": "string"
191
+ },
192
+ "clientSecret": {
193
+ "$ref": "#/$defs/secretInput"
194
+ },
195
+ "clientSecretFile": {
196
+ "type": "string"
197
+ },
198
+ "allowFrom": {
199
+ "type": "array",
200
+ "items": {
201
+ "type": "string"
202
+ }
203
+ },
204
+ "systemPrompt": {
205
+ "type": "string"
206
+ },
207
+ "markdownSupport": {
208
+ "type": "boolean"
209
+ },
210
+ "voiceDirectUploadFormats": {
211
+ "type": "array",
212
+ "items": {
213
+ "type": "string"
214
+ }
215
+ },
216
+ "audioFormatPolicy": {
217
+ "$ref": "#/$defs/audioFormatPolicy"
218
+ },
219
+ "stt": {
220
+ "$ref": "#/$defs/stt"
221
+ },
222
+ "urlDirectUpload": {
223
+ "type": "boolean"
224
+ },
225
+ "upgradeUrl": {
226
+ "type": "string"
227
+ },
228
+ "upgradeMode": {
229
+ "type": "string",
230
+ "enum": [
231
+ "doc",
232
+ "hot-reload"
233
+ ]
234
+ },
235
+ "streaming": {
236
+ "anyOf": [
237
+ {
238
+ "type": "boolean"
239
+ },
240
+ {
241
+ "type": "object",
242
+ "additionalProperties": false,
243
+ "properties": {
244
+ "mode": {
245
+ "type": "string",
246
+ "enum": [
247
+ "off",
248
+ "partial"
249
+ ],
250
+ "default": "partial"
251
+ },
252
+ "c2cStreamApi": {
253
+ "type": "boolean",
254
+ "description": "Use QQ C2C official stream_messages API (single-message typing-style updates)."
255
+ }
256
+ }
257
+ }
258
+ ]
259
+ },
260
+ "accounts": {
261
+ "type": "object",
262
+ "additionalProperties": {
263
+ "$ref": "#/$defs/account"
264
+ }
265
+ },
266
+ "defaultAccount": {
267
+ "type": "string"
268
+ }
269
+ }
270
+ },
271
+ "channelConfigs": {
272
+ "qqbot": {
273
+ "schema": {
274
+ "$schema": "http://json-schema.org/draft-07/schema#",
275
+ "type": "object",
276
+ "properties": {
277
+ "enabled": {
278
+ "type": "boolean"
279
+ },
280
+ "name": {
281
+ "type": "string"
282
+ },
283
+ "appId": {
284
+ "type": "string"
285
+ },
286
+ "clientSecret": {
287
+ "anyOf": [
288
+ {
289
+ "type": "string"
290
+ },
291
+ {
292
+ "oneOf": [
293
+ {
294
+ "type": "object",
295
+ "properties": {
296
+ "source": {
297
+ "type": "string",
298
+ "const": "env"
299
+ },
300
+ "provider": {
301
+ "type": "string",
302
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
303
+ },
304
+ "id": {
305
+ "type": "string",
306
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
307
+ }
308
+ },
309
+ "required": [
310
+ "source",
311
+ "provider",
312
+ "id"
313
+ ],
314
+ "additionalProperties": false
315
+ },
316
+ {
317
+ "type": "object",
318
+ "properties": {
319
+ "source": {
320
+ "type": "string",
321
+ "const": "file"
322
+ },
323
+ "provider": {
324
+ "type": "string",
325
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
326
+ },
327
+ "id": {
328
+ "type": "string"
329
+ }
330
+ },
331
+ "required": [
332
+ "source",
333
+ "provider",
334
+ "id"
335
+ ],
336
+ "additionalProperties": false
337
+ },
338
+ {
339
+ "type": "object",
340
+ "properties": {
341
+ "source": {
342
+ "type": "string",
343
+ "const": "exec"
344
+ },
345
+ "provider": {
346
+ "type": "string",
347
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
348
+ },
349
+ "id": {
350
+ "type": "string"
351
+ }
352
+ },
353
+ "required": [
354
+ "source",
355
+ "provider",
356
+ "id"
357
+ ],
358
+ "additionalProperties": false
359
+ }
360
+ ]
361
+ }
362
+ ]
363
+ },
364
+ "clientSecretFile": {
365
+ "type": "string"
366
+ },
367
+ "allowFrom": {
368
+ "type": "array",
369
+ "items": {
370
+ "anyOf": [
371
+ {
372
+ "type": "string"
373
+ },
374
+ {
375
+ "type": "number"
376
+ }
377
+ ]
378
+ }
379
+ },
380
+ "groupAllowFrom": {
381
+ "type": "array",
382
+ "items": {
383
+ "anyOf": [
384
+ {
385
+ "type": "string"
386
+ },
387
+ {
388
+ "type": "number"
389
+ }
390
+ ]
391
+ }
392
+ },
393
+ "dmPolicy": {
394
+ "type": "string",
395
+ "enum": [
396
+ "open",
397
+ "allowlist",
398
+ "disabled"
399
+ ]
400
+ },
401
+ "groupPolicy": {
402
+ "type": "string",
403
+ "enum": [
404
+ "open",
405
+ "allowlist",
406
+ "disabled"
407
+ ]
408
+ },
409
+ "systemPrompt": {
410
+ "type": "string"
411
+ },
412
+ "markdownSupport": {
413
+ "type": "boolean"
414
+ },
415
+ "voiceDirectUploadFormats": {
416
+ "type": "array",
417
+ "items": {
418
+ "type": "string"
419
+ }
420
+ },
421
+ "audioFormatPolicy": {
422
+ "type": "object",
423
+ "properties": {
424
+ "sttDirectFormats": {
425
+ "type": "array",
426
+ "items": {
427
+ "type": "string"
428
+ }
429
+ },
430
+ "uploadDirectFormats": {
431
+ "type": "array",
432
+ "items": {
433
+ "type": "string"
434
+ }
435
+ },
436
+ "transcodeEnabled": {
437
+ "type": "boolean"
438
+ }
439
+ },
440
+ "additionalProperties": false
441
+ },
442
+ "urlDirectUpload": {
443
+ "type": "boolean"
444
+ },
445
+ "upgradeUrl": {
446
+ "type": "string"
447
+ },
448
+ "upgradeMode": {
449
+ "type": "string",
450
+ "enum": [
451
+ "doc",
452
+ "hot-reload"
453
+ ]
454
+ },
455
+ "streaming": {
456
+ "anyOf": [
457
+ {
458
+ "type": "boolean"
459
+ },
460
+ {
461
+ "type": "object",
462
+ "properties": {
463
+ "mode": {
464
+ "default": "partial",
465
+ "type": "string",
466
+ "enum": [
467
+ "off",
468
+ "partial"
469
+ ]
470
+ },
471
+ "c2cStreamApi": {
472
+ "type": "boolean"
473
+ }
474
+ },
475
+ "required": [
476
+ "mode"
477
+ ],
478
+ "additionalProperties": {}
479
+ }
480
+ ]
481
+ },
482
+ "execApprovals": {
483
+ "type": "object",
484
+ "properties": {
485
+ "enabled": {
486
+ "anyOf": [
487
+ {
488
+ "type": "boolean"
489
+ },
490
+ {
491
+ "type": "string",
492
+ "const": "auto"
493
+ }
494
+ ]
495
+ },
496
+ "approvers": {
497
+ "type": "array",
498
+ "items": {
499
+ "type": "string"
500
+ }
501
+ },
502
+ "agentFilter": {
503
+ "type": "array",
504
+ "items": {
505
+ "type": "string"
506
+ }
507
+ },
508
+ "sessionFilter": {
509
+ "type": "array",
510
+ "items": {
511
+ "type": "string"
512
+ }
513
+ },
514
+ "target": {
515
+ "type": "string",
516
+ "enum": [
517
+ "dm",
518
+ "channel",
519
+ "both"
520
+ ]
521
+ }
522
+ },
523
+ "additionalProperties": false
524
+ },
525
+ "stt": {
526
+ "type": "object",
527
+ "properties": {
528
+ "enabled": {
529
+ "type": "boolean"
530
+ },
531
+ "provider": {
532
+ "type": "string"
533
+ },
534
+ "baseUrl": {
535
+ "type": "string"
536
+ },
537
+ "apiKey": {
538
+ "type": "string"
539
+ },
540
+ "model": {
541
+ "type": "string"
542
+ }
543
+ },
544
+ "additionalProperties": false
545
+ },
546
+ "accounts": {
547
+ "type": "object",
548
+ "properties": {},
549
+ "additionalProperties": {
550
+ "type": "object",
551
+ "properties": {
552
+ "enabled": {
553
+ "type": "boolean"
554
+ },
555
+ "name": {
556
+ "type": "string"
557
+ },
558
+ "appId": {
559
+ "type": "string"
560
+ },
561
+ "clientSecret": {
562
+ "anyOf": [
563
+ {
564
+ "type": "string"
565
+ },
566
+ {
567
+ "oneOf": [
568
+ {
569
+ "type": "object",
570
+ "properties": {
571
+ "source": {
572
+ "type": "string",
573
+ "const": "env"
574
+ },
575
+ "provider": {
576
+ "type": "string",
577
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
578
+ },
579
+ "id": {
580
+ "type": "string",
581
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
582
+ }
583
+ },
584
+ "required": [
585
+ "source",
586
+ "provider",
587
+ "id"
588
+ ],
589
+ "additionalProperties": false
590
+ },
591
+ {
592
+ "type": "object",
593
+ "properties": {
594
+ "source": {
595
+ "type": "string",
596
+ "const": "file"
597
+ },
598
+ "provider": {
599
+ "type": "string",
600
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
601
+ },
602
+ "id": {
603
+ "type": "string"
604
+ }
605
+ },
606
+ "required": [
607
+ "source",
608
+ "provider",
609
+ "id"
610
+ ],
611
+ "additionalProperties": false
612
+ },
613
+ {
614
+ "type": "object",
615
+ "properties": {
616
+ "source": {
617
+ "type": "string",
618
+ "const": "exec"
619
+ },
620
+ "provider": {
621
+ "type": "string",
622
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
623
+ },
624
+ "id": {
625
+ "type": "string"
626
+ }
627
+ },
628
+ "required": [
629
+ "source",
630
+ "provider",
631
+ "id"
632
+ ],
633
+ "additionalProperties": false
634
+ }
635
+ ]
636
+ }
637
+ ]
638
+ },
639
+ "clientSecretFile": {
640
+ "type": "string"
641
+ },
642
+ "allowFrom": {
643
+ "type": "array",
644
+ "items": {
645
+ "anyOf": [
646
+ {
647
+ "type": "string"
648
+ },
649
+ {
650
+ "type": "number"
651
+ }
652
+ ]
653
+ }
654
+ },
655
+ "groupAllowFrom": {
656
+ "type": "array",
657
+ "items": {
658
+ "anyOf": [
659
+ {
660
+ "type": "string"
661
+ },
662
+ {
663
+ "type": "number"
664
+ }
665
+ ]
666
+ }
667
+ },
668
+ "dmPolicy": {
669
+ "type": "string",
670
+ "enum": [
671
+ "open",
672
+ "allowlist",
673
+ "disabled"
674
+ ]
675
+ },
676
+ "groupPolicy": {
677
+ "type": "string",
678
+ "enum": [
679
+ "open",
680
+ "allowlist",
681
+ "disabled"
682
+ ]
683
+ },
684
+ "systemPrompt": {
685
+ "type": "string"
686
+ },
687
+ "markdownSupport": {
688
+ "type": "boolean"
689
+ },
690
+ "voiceDirectUploadFormats": {
691
+ "type": "array",
692
+ "items": {
693
+ "type": "string"
694
+ }
695
+ },
696
+ "audioFormatPolicy": {
697
+ "type": "object",
698
+ "properties": {
699
+ "sttDirectFormats": {
700
+ "type": "array",
701
+ "items": {
702
+ "type": "string"
703
+ }
704
+ },
705
+ "uploadDirectFormats": {
706
+ "type": "array",
707
+ "items": {
708
+ "type": "string"
709
+ }
710
+ },
711
+ "transcodeEnabled": {
712
+ "type": "boolean"
713
+ }
714
+ },
715
+ "additionalProperties": false
716
+ },
717
+ "urlDirectUpload": {
718
+ "type": "boolean"
719
+ },
720
+ "upgradeUrl": {
721
+ "type": "string"
722
+ },
723
+ "upgradeMode": {
724
+ "type": "string",
725
+ "enum": [
726
+ "doc",
727
+ "hot-reload"
728
+ ]
729
+ },
730
+ "streaming": {
731
+ "anyOf": [
732
+ {
733
+ "type": "boolean"
734
+ },
735
+ {
736
+ "type": "object",
737
+ "properties": {
738
+ "mode": {
739
+ "default": "partial",
740
+ "type": "string",
741
+ "enum": [
742
+ "off",
743
+ "partial"
744
+ ]
745
+ },
746
+ "c2cStreamApi": {
747
+ "type": "boolean"
748
+ }
749
+ },
750
+ "required": [
751
+ "mode"
752
+ ],
753
+ "additionalProperties": {}
754
+ }
755
+ ]
756
+ },
757
+ "execApprovals": {
758
+ "type": "object",
759
+ "properties": {
760
+ "enabled": {
761
+ "anyOf": [
762
+ {
763
+ "type": "boolean"
764
+ },
765
+ {
766
+ "type": "string",
767
+ "const": "auto"
768
+ }
769
+ ]
770
+ },
771
+ "approvers": {
772
+ "type": "array",
773
+ "items": {
774
+ "type": "string"
775
+ }
776
+ },
777
+ "agentFilter": {
778
+ "type": "array",
779
+ "items": {
780
+ "type": "string"
781
+ }
782
+ },
783
+ "sessionFilter": {
784
+ "type": "array",
785
+ "items": {
786
+ "type": "string"
787
+ }
788
+ },
789
+ "target": {
790
+ "type": "string",
791
+ "enum": [
792
+ "dm",
793
+ "channel",
794
+ "both"
795
+ ]
796
+ }
797
+ },
798
+ "additionalProperties": false
799
+ }
800
+ },
801
+ "additionalProperties": {}
802
+ }
803
+ },
804
+ "defaultAccount": {
805
+ "type": "string"
806
+ }
807
+ },
808
+ "additionalProperties": {}
809
+ },
810
+ "label": "QQ Bot",
811
+ "description": "connect to QQ via official QQ Bot API with group chat and direct message support."
812
+ }
813
+ }
814
+ }