@openclaw/msteams 2026.3.12 → 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 (175) hide show
  1. package/api.ts +3 -0
  2. package/channel-config-api.ts +1 -0
  3. package/channel-plugin-api.ts +2 -0
  4. package/config-api.ts +4 -0
  5. package/contract-api.ts +4 -0
  6. package/index.ts +15 -12
  7. package/openclaw.plugin.json +553 -1
  8. package/package.json +46 -12
  9. package/runtime-api.ts +73 -0
  10. package/secret-contract-api.ts +5 -0
  11. package/setup-entry.ts +13 -0
  12. package/setup-plugin-api.ts +3 -0
  13. package/src/ai-entity.ts +7 -0
  14. package/src/approval-auth.ts +44 -0
  15. package/src/attachments/bot-framework.test.ts +461 -0
  16. package/src/attachments/bot-framework.ts +362 -0
  17. package/src/attachments/download.ts +63 -19
  18. package/src/attachments/graph.test.ts +416 -0
  19. package/src/attachments/graph.ts +163 -72
  20. package/src/attachments/html.ts +33 -1
  21. package/src/attachments/payload.ts +1 -1
  22. package/src/attachments/remote-media.test.ts +137 -0
  23. package/src/attachments/remote-media.ts +75 -8
  24. package/src/attachments/shared.test.ts +161 -9
  25. package/src/attachments/shared.ts +193 -26
  26. package/src/attachments/types.ts +10 -0
  27. package/src/attachments.graph.test.ts +342 -0
  28. package/src/attachments.helpers.test.ts +246 -0
  29. package/src/attachments.test-helpers.ts +17 -0
  30. package/src/attachments.test.ts +174 -437
  31. package/src/attachments.ts +5 -5
  32. package/src/block-streaming-config.test.ts +61 -0
  33. package/src/channel-api.ts +1 -0
  34. package/src/channel.actions.test.ts +742 -0
  35. package/src/channel.directory.test.ts +148 -14
  36. package/src/channel.runtime.ts +56 -0
  37. package/src/channel.setup.ts +77 -0
  38. package/src/channel.test.ts +128 -0
  39. package/src/channel.ts +1077 -395
  40. package/src/config-schema.ts +6 -0
  41. package/src/config-ui-hints.ts +12 -0
  42. package/src/conversation-store-fs.test.ts +4 -5
  43. package/src/conversation-store-fs.ts +35 -51
  44. package/src/conversation-store-helpers.test.ts +202 -0
  45. package/src/conversation-store-helpers.ts +105 -0
  46. package/src/conversation-store-memory.ts +27 -23
  47. package/src/conversation-store.shared.test.ts +225 -0
  48. package/src/conversation-store.ts +30 -0
  49. package/src/directory-live.test.ts +156 -0
  50. package/src/directory-live.ts +7 -4
  51. package/src/doctor.ts +27 -0
  52. package/src/errors.test.ts +64 -1
  53. package/src/errors.ts +50 -9
  54. package/src/feedback-reflection-prompt.ts +117 -0
  55. package/src/feedback-reflection-store.ts +114 -0
  56. package/src/feedback-reflection.test.ts +237 -0
  57. package/src/feedback-reflection.ts +283 -0
  58. package/src/file-consent-helpers.test.ts +83 -0
  59. package/src/file-consent-helpers.ts +64 -11
  60. package/src/file-consent-invoke.ts +150 -0
  61. package/src/file-consent.test.ts +363 -0
  62. package/src/file-consent.ts +165 -4
  63. package/src/graph-chat.ts +5 -3
  64. package/src/graph-group-management.test.ts +318 -0
  65. package/src/graph-group-management.ts +168 -0
  66. package/src/graph-members.test.ts +89 -0
  67. package/src/graph-members.ts +48 -0
  68. package/src/graph-messages.actions.test.ts +243 -0
  69. package/src/graph-messages.read.test.ts +391 -0
  70. package/src/graph-messages.search.test.ts +213 -0
  71. package/src/graph-messages.test-helpers.ts +50 -0
  72. package/src/graph-messages.ts +534 -0
  73. package/src/graph-teams.test.ts +215 -0
  74. package/src/graph-teams.ts +114 -0
  75. package/src/graph-thread.test.ts +246 -0
  76. package/src/graph-thread.ts +146 -0
  77. package/src/graph-upload.test.ts +258 -0
  78. package/src/graph-upload.ts +87 -8
  79. package/src/graph.test.ts +516 -0
  80. package/src/graph.ts +233 -21
  81. package/src/inbound.test.ts +156 -1
  82. package/src/inbound.ts +101 -1
  83. package/src/media-helpers.ts +1 -1
  84. package/src/mentions.test.ts +27 -18
  85. package/src/mentions.ts +2 -2
  86. package/src/messenger.test.ts +522 -45
  87. package/src/messenger.ts +133 -52
  88. package/src/monitor-handler/access.ts +125 -0
  89. package/src/monitor-handler/inbound-media.test.ts +289 -0
  90. package/src/monitor-handler/inbound-media.ts +57 -5
  91. package/src/monitor-handler/message-handler-mock-support.test-support.ts +28 -0
  92. package/src/monitor-handler/message-handler.authz.test.ts +588 -74
  93. package/src/monitor-handler/message-handler.dm-media.test.ts +54 -0
  94. package/src/monitor-handler/message-handler.test-support.ts +100 -0
  95. package/src/monitor-handler/message-handler.thread-parent.test.ts +223 -0
  96. package/src/monitor-handler/message-handler.thread-session.test.ts +77 -0
  97. package/src/monitor-handler/message-handler.ts +477 -174
  98. package/src/monitor-handler/reaction-handler.test.ts +267 -0
  99. package/src/monitor-handler/reaction-handler.ts +210 -0
  100. package/src/monitor-handler/thread-session.ts +17 -0
  101. package/src/monitor-handler.adaptive-card.test.ts +162 -0
  102. package/src/monitor-handler.feedback-authz.test.ts +314 -0
  103. package/src/monitor-handler.file-consent.test.ts +301 -106
  104. package/src/monitor-handler.sso.test.ts +563 -0
  105. package/src/monitor-handler.test-helpers.ts +180 -0
  106. package/src/monitor-handler.ts +459 -115
  107. package/src/monitor-handler.types.ts +27 -0
  108. package/src/monitor-types.ts +1 -0
  109. package/src/monitor.lifecycle.test.ts +74 -10
  110. package/src/monitor.test.ts +35 -1
  111. package/src/monitor.ts +143 -46
  112. package/src/oauth.flow.ts +77 -0
  113. package/src/oauth.shared.ts +37 -0
  114. package/src/oauth.test.ts +305 -0
  115. package/src/oauth.token.ts +158 -0
  116. package/src/oauth.ts +130 -0
  117. package/src/outbound.test.ts +10 -11
  118. package/src/outbound.ts +62 -44
  119. package/src/pending-uploads-fs.test.ts +246 -0
  120. package/src/pending-uploads-fs.ts +235 -0
  121. package/src/pending-uploads.test.ts +173 -0
  122. package/src/pending-uploads.ts +34 -2
  123. package/src/policy.test.ts +34 -40
  124. package/src/policy.ts +5 -5
  125. package/src/polls.test.ts +106 -5
  126. package/src/polls.ts +15 -7
  127. package/src/presentation.ts +68 -0
  128. package/src/probe.test.ts +27 -8
  129. package/src/probe.ts +43 -9
  130. package/src/reply-dispatcher.test.ts +437 -0
  131. package/src/reply-dispatcher.ts +259 -73
  132. package/src/reply-stream-controller.test.ts +235 -0
  133. package/src/reply-stream-controller.ts +147 -0
  134. package/src/resolve-allowlist.test.ts +105 -1
  135. package/src/resolve-allowlist.ts +112 -7
  136. package/src/runtime.ts +6 -3
  137. package/src/sdk-types.ts +43 -3
  138. package/src/sdk.test.ts +666 -0
  139. package/src/sdk.ts +867 -16
  140. package/src/secret-contract.ts +49 -0
  141. package/src/secret-input.ts +1 -1
  142. package/src/send-context.ts +76 -9
  143. package/src/send.test.ts +389 -5
  144. package/src/send.ts +140 -32
  145. package/src/sent-message-cache.ts +30 -18
  146. package/src/session-route.ts +40 -0
  147. package/src/setup-core.ts +160 -0
  148. package/src/setup-surface.test.ts +202 -0
  149. package/src/setup-surface.ts +320 -0
  150. package/src/sso-token-store.test.ts +72 -0
  151. package/src/sso-token-store.ts +166 -0
  152. package/src/sso.ts +300 -0
  153. package/src/storage.ts +1 -1
  154. package/src/store-fs.ts +2 -2
  155. package/src/streaming-message.test.ts +262 -0
  156. package/src/streaming-message.ts +297 -0
  157. package/src/test-runtime.ts +1 -1
  158. package/src/thread-parent-context.test.ts +224 -0
  159. package/src/thread-parent-context.ts +159 -0
  160. package/src/token.test.ts +237 -50
  161. package/src/token.ts +162 -7
  162. package/src/user-agent.test.ts +86 -0
  163. package/src/user-agent.ts +53 -0
  164. package/src/webhook-timeouts.ts +27 -0
  165. package/src/welcome-card.test.ts +81 -0
  166. package/src/welcome-card.ts +57 -0
  167. package/test-api.ts +1 -0
  168. package/tsconfig.json +16 -0
  169. package/CHANGELOG.md +0 -101
  170. package/src/file-lock.ts +0 -1
  171. package/src/graph-users.test.ts +0 -66
  172. package/src/onboarding.ts +0 -381
  173. package/src/polls-store.test.ts +0 -38
  174. package/src/revoked-context.test.ts +0 -39
  175. package/src/token-response.test.ts +0 -23
package/api.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { msteamsPlugin } from "./src/channel.js";
2
+ export { createMSTeamsSetupWizardBase, msteamsSetupAdapter } from "./src/setup-core.js";
3
+ export { msteamsSetupWizard, openDelegatedOAuthUrl } from "./src/setup-surface.js";
@@ -0,0 +1 @@
1
+ export { MSTeamsChannelConfigSchema } from "./src/config-schema.js";
@@ -0,0 +1,2 @@
1
+ export { msteamsPlugin } from "./src/channel.js";
2
+ export type { ChannelPlugin } from "./src/channel-api.js";
package/config-api.ts ADDED
@@ -0,0 +1,4 @@
1
+ export {
2
+ buildChannelConfigSchema,
3
+ MSTeamsConfigSchema,
4
+ } from "openclaw/plugin-sdk/bundled-channel-config-schema";
@@ -0,0 +1,4 @@
1
+ export {
2
+ collectRuntimeConfigAssignments,
3
+ secretTargetRegistryEntries,
4
+ } from "./src/secret-contract.js";
package/index.ts CHANGED
@@ -1,17 +1,20 @@
1
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk/msteams";
2
- import { emptyPluginConfigSchema } from "openclaw/plugin-sdk/msteams";
3
- import { msteamsPlugin } from "./src/channel.js";
4
- import { setMSTeamsRuntime } from "./src/runtime.js";
1
+ import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
5
2
 
6
- const plugin = {
3
+ export default defineBundledChannelEntry({
7
4
  id: "msteams",
8
5
  name: "Microsoft Teams",
9
6
  description: "Microsoft Teams channel plugin (Bot Framework)",
10
- configSchema: emptyPluginConfigSchema(),
11
- register(api: OpenClawPluginApi) {
12
- setMSTeamsRuntime(api.runtime);
13
- api.registerChannel({ plugin: msteamsPlugin });
7
+ importMetaUrl: import.meta.url,
8
+ plugin: {
9
+ specifier: "./channel-plugin-api.js",
10
+ exportName: "msteamsPlugin",
14
11
  },
15
- };
16
-
17
- export default plugin;
12
+ secrets: {
13
+ specifier: "./secret-contract-api.js",
14
+ exportName: "channelSecrets",
15
+ },
16
+ runtime: {
17
+ specifier: "./runtime-api.js",
18
+ exportName: "setMSTeamsRuntime",
19
+ },
20
+ });
@@ -1,9 +1,561 @@
1
1
  {
2
2
  "id": "msteams",
3
- "channels": ["msteams"],
3
+ "activation": {
4
+ "onStartup": false
5
+ },
6
+ "channels": [
7
+ "msteams"
8
+ ],
9
+ "channelEnvVars": {
10
+ "msteams": [
11
+ "MSTEAMS_APP_ID",
12
+ "MSTEAMS_APP_PASSWORD",
13
+ "MSTEAMS_TENANT_ID"
14
+ ]
15
+ },
4
16
  "configSchema": {
5
17
  "type": "object",
6
18
  "additionalProperties": false,
7
19
  "properties": {}
20
+ },
21
+ "channelConfigs": {
22
+ "msteams": {
23
+ "schema": {
24
+ "$schema": "http://json-schema.org/draft-07/schema#",
25
+ "type": "object",
26
+ "properties": {
27
+ "enabled": {
28
+ "type": "boolean"
29
+ },
30
+ "capabilities": {
31
+ "type": "array",
32
+ "items": {
33
+ "type": "string"
34
+ }
35
+ },
36
+ "dangerouslyAllowNameMatching": {
37
+ "type": "boolean"
38
+ },
39
+ "markdown": {
40
+ "type": "object",
41
+ "properties": {
42
+ "tables": {
43
+ "type": "string",
44
+ "enum": [
45
+ "off",
46
+ "bullets",
47
+ "code",
48
+ "block"
49
+ ]
50
+ }
51
+ },
52
+ "additionalProperties": false
53
+ },
54
+ "configWrites": {
55
+ "type": "boolean"
56
+ },
57
+ "appId": {
58
+ "type": "string"
59
+ },
60
+ "appPassword": {
61
+ "anyOf": [
62
+ {
63
+ "type": "string"
64
+ },
65
+ {
66
+ "oneOf": [
67
+ {
68
+ "type": "object",
69
+ "properties": {
70
+ "source": {
71
+ "type": "string",
72
+ "const": "env"
73
+ },
74
+ "provider": {
75
+ "type": "string",
76
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
77
+ },
78
+ "id": {
79
+ "type": "string",
80
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
81
+ }
82
+ },
83
+ "required": [
84
+ "source",
85
+ "provider",
86
+ "id"
87
+ ],
88
+ "additionalProperties": false
89
+ },
90
+ {
91
+ "type": "object",
92
+ "properties": {
93
+ "source": {
94
+ "type": "string",
95
+ "const": "file"
96
+ },
97
+ "provider": {
98
+ "type": "string",
99
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
100
+ },
101
+ "id": {
102
+ "type": "string"
103
+ }
104
+ },
105
+ "required": [
106
+ "source",
107
+ "provider",
108
+ "id"
109
+ ],
110
+ "additionalProperties": false
111
+ },
112
+ {
113
+ "type": "object",
114
+ "properties": {
115
+ "source": {
116
+ "type": "string",
117
+ "const": "exec"
118
+ },
119
+ "provider": {
120
+ "type": "string",
121
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
122
+ },
123
+ "id": {
124
+ "type": "string"
125
+ }
126
+ },
127
+ "required": [
128
+ "source",
129
+ "provider",
130
+ "id"
131
+ ],
132
+ "additionalProperties": false
133
+ }
134
+ ]
135
+ }
136
+ ]
137
+ },
138
+ "tenantId": {
139
+ "type": "string"
140
+ },
141
+ "authType": {
142
+ "type": "string",
143
+ "enum": [
144
+ "secret",
145
+ "federated"
146
+ ]
147
+ },
148
+ "certificatePath": {
149
+ "type": "string"
150
+ },
151
+ "certificateThumbprint": {
152
+ "type": "string"
153
+ },
154
+ "useManagedIdentity": {
155
+ "type": "boolean"
156
+ },
157
+ "managedIdentityClientId": {
158
+ "type": "string"
159
+ },
160
+ "webhook": {
161
+ "type": "object",
162
+ "properties": {
163
+ "port": {
164
+ "type": "integer",
165
+ "exclusiveMinimum": 0,
166
+ "maximum": 9007199254740991
167
+ },
168
+ "path": {
169
+ "type": "string"
170
+ }
171
+ },
172
+ "additionalProperties": false
173
+ },
174
+ "dmPolicy": {
175
+ "default": "pairing",
176
+ "type": "string",
177
+ "enum": [
178
+ "pairing",
179
+ "allowlist",
180
+ "open",
181
+ "disabled"
182
+ ]
183
+ },
184
+ "allowFrom": {
185
+ "type": "array",
186
+ "items": {
187
+ "type": "string"
188
+ }
189
+ },
190
+ "defaultTo": {
191
+ "type": "string"
192
+ },
193
+ "groupAllowFrom": {
194
+ "type": "array",
195
+ "items": {
196
+ "type": "string"
197
+ }
198
+ },
199
+ "groupPolicy": {
200
+ "default": "allowlist",
201
+ "type": "string",
202
+ "enum": [
203
+ "open",
204
+ "disabled",
205
+ "allowlist"
206
+ ]
207
+ },
208
+ "contextVisibility": {
209
+ "type": "string",
210
+ "enum": [
211
+ "all",
212
+ "allowlist",
213
+ "allowlist_quote"
214
+ ]
215
+ },
216
+ "textChunkLimit": {
217
+ "type": "integer",
218
+ "exclusiveMinimum": 0,
219
+ "maximum": 9007199254740991
220
+ },
221
+ "chunkMode": {
222
+ "type": "string",
223
+ "enum": [
224
+ "length",
225
+ "newline"
226
+ ]
227
+ },
228
+ "typingIndicator": {
229
+ "type": "boolean"
230
+ },
231
+ "blockStreaming": {
232
+ "type": "boolean"
233
+ },
234
+ "blockStreamingCoalesce": {
235
+ "type": "object",
236
+ "properties": {
237
+ "minChars": {
238
+ "type": "integer",
239
+ "exclusiveMinimum": 0,
240
+ "maximum": 9007199254740991
241
+ },
242
+ "maxChars": {
243
+ "type": "integer",
244
+ "exclusiveMinimum": 0,
245
+ "maximum": 9007199254740991
246
+ },
247
+ "idleMs": {
248
+ "type": "integer",
249
+ "minimum": 0,
250
+ "maximum": 9007199254740991
251
+ }
252
+ },
253
+ "additionalProperties": false
254
+ },
255
+ "mediaAllowHosts": {
256
+ "type": "array",
257
+ "items": {
258
+ "type": "string"
259
+ }
260
+ },
261
+ "mediaAuthAllowHosts": {
262
+ "type": "array",
263
+ "items": {
264
+ "type": "string"
265
+ }
266
+ },
267
+ "requireMention": {
268
+ "type": "boolean"
269
+ },
270
+ "historyLimit": {
271
+ "type": "integer",
272
+ "minimum": 0,
273
+ "maximum": 9007199254740991
274
+ },
275
+ "dmHistoryLimit": {
276
+ "type": "integer",
277
+ "minimum": 0,
278
+ "maximum": 9007199254740991
279
+ },
280
+ "dms": {
281
+ "type": "object",
282
+ "propertyNames": {
283
+ "type": "string"
284
+ },
285
+ "additionalProperties": {
286
+ "type": "object",
287
+ "properties": {
288
+ "historyLimit": {
289
+ "type": "integer",
290
+ "minimum": 0,
291
+ "maximum": 9007199254740991
292
+ }
293
+ },
294
+ "additionalProperties": false
295
+ }
296
+ },
297
+ "replyStyle": {
298
+ "type": "string",
299
+ "enum": [
300
+ "thread",
301
+ "top-level"
302
+ ]
303
+ },
304
+ "teams": {
305
+ "type": "object",
306
+ "propertyNames": {
307
+ "type": "string"
308
+ },
309
+ "additionalProperties": {
310
+ "type": "object",
311
+ "properties": {
312
+ "requireMention": {
313
+ "type": "boolean"
314
+ },
315
+ "tools": {
316
+ "type": "object",
317
+ "properties": {
318
+ "allow": {
319
+ "type": "array",
320
+ "items": {
321
+ "type": "string"
322
+ }
323
+ },
324
+ "alsoAllow": {
325
+ "type": "array",
326
+ "items": {
327
+ "type": "string"
328
+ }
329
+ },
330
+ "deny": {
331
+ "type": "array",
332
+ "items": {
333
+ "type": "string"
334
+ }
335
+ }
336
+ },
337
+ "additionalProperties": false
338
+ },
339
+ "toolsBySender": {
340
+ "type": "object",
341
+ "propertyNames": {
342
+ "type": "string"
343
+ },
344
+ "additionalProperties": {
345
+ "type": "object",
346
+ "properties": {
347
+ "allow": {
348
+ "type": "array",
349
+ "items": {
350
+ "type": "string"
351
+ }
352
+ },
353
+ "alsoAllow": {
354
+ "type": "array",
355
+ "items": {
356
+ "type": "string"
357
+ }
358
+ },
359
+ "deny": {
360
+ "type": "array",
361
+ "items": {
362
+ "type": "string"
363
+ }
364
+ }
365
+ },
366
+ "additionalProperties": false
367
+ }
368
+ },
369
+ "replyStyle": {
370
+ "type": "string",
371
+ "enum": [
372
+ "thread",
373
+ "top-level"
374
+ ]
375
+ },
376
+ "channels": {
377
+ "type": "object",
378
+ "propertyNames": {
379
+ "type": "string"
380
+ },
381
+ "additionalProperties": {
382
+ "type": "object",
383
+ "properties": {
384
+ "requireMention": {
385
+ "type": "boolean"
386
+ },
387
+ "tools": {
388
+ "type": "object",
389
+ "properties": {
390
+ "allow": {
391
+ "type": "array",
392
+ "items": {
393
+ "type": "string"
394
+ }
395
+ },
396
+ "alsoAllow": {
397
+ "type": "array",
398
+ "items": {
399
+ "type": "string"
400
+ }
401
+ },
402
+ "deny": {
403
+ "type": "array",
404
+ "items": {
405
+ "type": "string"
406
+ }
407
+ }
408
+ },
409
+ "additionalProperties": false
410
+ },
411
+ "toolsBySender": {
412
+ "type": "object",
413
+ "propertyNames": {
414
+ "type": "string"
415
+ },
416
+ "additionalProperties": {
417
+ "type": "object",
418
+ "properties": {
419
+ "allow": {
420
+ "type": "array",
421
+ "items": {
422
+ "type": "string"
423
+ }
424
+ },
425
+ "alsoAllow": {
426
+ "type": "array",
427
+ "items": {
428
+ "type": "string"
429
+ }
430
+ },
431
+ "deny": {
432
+ "type": "array",
433
+ "items": {
434
+ "type": "string"
435
+ }
436
+ }
437
+ },
438
+ "additionalProperties": false
439
+ }
440
+ },
441
+ "replyStyle": {
442
+ "type": "string",
443
+ "enum": [
444
+ "thread",
445
+ "top-level"
446
+ ]
447
+ }
448
+ },
449
+ "additionalProperties": false
450
+ }
451
+ }
452
+ },
453
+ "additionalProperties": false
454
+ }
455
+ },
456
+ "mediaMaxMb": {
457
+ "type": "number",
458
+ "exclusiveMinimum": 0
459
+ },
460
+ "sharePointSiteId": {
461
+ "type": "string"
462
+ },
463
+ "heartbeat": {
464
+ "type": "object",
465
+ "properties": {
466
+ "showOk": {
467
+ "type": "boolean"
468
+ },
469
+ "showAlerts": {
470
+ "type": "boolean"
471
+ },
472
+ "useIndicator": {
473
+ "type": "boolean"
474
+ }
475
+ },
476
+ "additionalProperties": false
477
+ },
478
+ "healthMonitor": {
479
+ "type": "object",
480
+ "properties": {
481
+ "enabled": {
482
+ "type": "boolean"
483
+ }
484
+ },
485
+ "additionalProperties": false
486
+ },
487
+ "responsePrefix": {
488
+ "type": "string"
489
+ },
490
+ "welcomeCard": {
491
+ "type": "boolean"
492
+ },
493
+ "promptStarters": {
494
+ "type": "array",
495
+ "items": {
496
+ "type": "string"
497
+ }
498
+ },
499
+ "groupWelcomeCard": {
500
+ "type": "boolean"
501
+ },
502
+ "feedbackEnabled": {
503
+ "type": "boolean"
504
+ },
505
+ "feedbackReflection": {
506
+ "type": "boolean"
507
+ },
508
+ "feedbackReflectionCooldownMs": {
509
+ "type": "integer",
510
+ "minimum": 0,
511
+ "maximum": 9007199254740991
512
+ },
513
+ "delegatedAuth": {
514
+ "type": "object",
515
+ "properties": {
516
+ "enabled": {
517
+ "type": "boolean"
518
+ },
519
+ "scopes": {
520
+ "type": "array",
521
+ "items": {
522
+ "type": "string"
523
+ }
524
+ }
525
+ },
526
+ "additionalProperties": false
527
+ },
528
+ "sso": {
529
+ "type": "object",
530
+ "properties": {
531
+ "enabled": {
532
+ "type": "boolean"
533
+ },
534
+ "connectionName": {
535
+ "type": "string"
536
+ }
537
+ },
538
+ "additionalProperties": false
539
+ }
540
+ },
541
+ "required": [
542
+ "dmPolicy",
543
+ "groupPolicy"
544
+ ],
545
+ "additionalProperties": false
546
+ },
547
+ "label": "Microsoft Teams",
548
+ "description": "Teams SDK; enterprise support.",
549
+ "uiHints": {
550
+ "": {
551
+ "label": "MS Teams",
552
+ "help": "Microsoft Teams channel provider configuration and provider-specific policy toggles. Use this section to isolate Teams behavior from other enterprise chat providers."
553
+ },
554
+ "configWrites": {
555
+ "label": "MS Teams Config Writes",
556
+ "help": "Allow Microsoft Teams to write config in response to channel events/commands (default: true)."
557
+ }
558
+ }
559
+ }
8
560
  }
9
561
  }