@cometchat/skills-cli 2.4.0 → 2.4.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.
@@ -10,120 +10,224 @@
10
10
  "dashboard-only": "Requires entering third-party config the user has to fetch themselves (Giphy/Stipop/Tenor API key, Chatwoot webhook URL, Intercom token, etc.) or making a multi-field configuration choice (Disappearing Messages interval, Message Shortcuts list). The CLI cannot automate these — falls back to opening the dashboard. `dashboard_path` is load-bearing for these entries.",
11
11
  "package-install": "Requires installing an additional npm package. The UI Kit's initiateAfterLogin() auto-calls enableCalling() which detects the calls SDK and wires up call buttons. Currently calls only.",
12
12
  "component-swap": "Requires replacing one UI Kit component with a drop-in variant. One-line change. The SDK currently ships exactly one such variant (CometChatCompactMessageComposer for rich text formatting); more variants will become catalog entries here as the SDK adds them.",
13
- "moderation": "Backend moderation feature with configuration. Like 'extension' but takes a `config` payload (keyword lists, sensitivity levels, severity thresholds, quarantine action). The CLI's `apply-feature` walks an interactive config-collection step, then POSTs to /apps/{appId}/extensions/{id}/config plus the standard enable POST. `config_schema` describes the fields the user must supply.",
13
+ "moderation": "⚠️ LEGACY moderation extension (config payload: keyword lists, sensitivity, thresholds, quarantine action). The CLI's `apply-feature` POSTs to /apps/{appId}/extensions/{id}/config + enable. **DEPRECATED in favor of Rules Management** — the canonical moderation system (Dashboard → Moderation → Settings → Rules, or the /moderation/rules REST API: rules, keywords, reasons, blocked/flagged/reviewed-messages). Rules auto-apply to all messages with NO client code. CONFLICT: do NOT run a legacy moderation extension AND Rules on the same app — each message gets processed twice (delays + perf issues); disable the legacy extension first. See docs/moderation/overview.",
14
14
  "calls-feature": "Calls SDK feature configured via CallSettingsBuilder (no backend toggle, no extension). The CLI's `apply-feature` command verifies the calls SDK is installed and points the agent at the matching per-family reference doc (e.g. `cometchat-react-calls/references/raise-hand.md`). The `reference_topic` field maps to the file slug; the `settings_flag` field is the CallSettingsBuilder method involved. Idempotency: persisted in state.applied_features."
15
15
  },
16
+ "tiers": {
17
+ "1": "Core Messaging (Zero Setup) — out of the box, no config or code (e.g. Typing Indicators).",
18
+ "2": "Builder-Enabled (Config + UI Toggle) — enable via Dashboard API; toggleable/placeable in the UI Kit Builder / Widget Builder (e.g. Polls).",
19
+ "3": "Config-Only (Dashboard-Driven) — enable via Dashboard API; works automatically, no UI or code (e.g. Link Preview).",
20
+ "4": "Config + Settings (Smart) — enable via Dashboard API + additional dashboard settings (API keys, rules, thresholds); no client code (e.g. Smart Replies).",
21
+ "5": "SDK-Integrated (Config + Code) — enable via Dashboard API + custom client code. THE IMPLEMENTATION IS IN THE DOCS (`docs_topic`) — fetch and wire it, do not hand-roll (e.g. Bitly).",
22
+ "_comment": "The product's canonical 5-category model (the 'Feature Availability' matrix — columns API Call / Code / Additional Settings are the operative truth, captured per-feature as enable_api(implied by type)/code/dashboard_settings/builder). `feature_types` above is the CLI's enablement MECHANISM; `tier` is the customer-facing WORK-NEEDED category."
23
+ },
24
+ "code_legend": {
25
+ "_comment": "Per-feature `code` field = what client work is needed (from the matrix's Code column).",
26
+ "none": "No client code — the UI Kit renders it automatically once enabled (auto_wired_in_uikit:true).",
27
+ "stitch-components": "No extension code, but you COMPOSE existing kit components to surface it — see the kit sample apps for the wiring.",
28
+ "steps-in-docs": "Follow the documented steps at `docs_topic` to wire it client-side.",
29
+ "custom-code": "Substantial custom implementation — the reference code lives at `docs_topic`; fetch and adapt it."
30
+ },
16
31
  "features": [
17
32
  {
18
33
  "id": "instant-messaging",
19
34
  "name": "Instant Messaging",
20
35
  "type": "default",
21
36
  "description": "Real-time text messaging via CometChatMessageList + CometChatMessageComposer. The core of every chat experience.",
22
- "components": ["CometChatMessageList", "CometChatMessageComposer"],
23
- "docs_topic": "core-features#instant-messaging"
37
+ "components": [
38
+ "CometChatMessageList",
39
+ "CometChatMessageComposer"
40
+ ],
41
+ "docs_topic": "core-features#instant-messaging",
42
+ "tier": 1,
43
+ "code": "none",
44
+ "builder": "toggle",
45
+ "dashboard_settings": null
24
46
  },
25
47
  {
26
48
  "id": "media-sharing",
27
49
  "name": "Media Sharing",
28
50
  "type": "default",
29
51
  "description": "Send images, videos, audio, and documents within conversations. Built into CometChatMessageComposer's ActionSheet.",
30
- "components": ["CometChatMessageComposer"],
31
- "docs_topic": "core-features#media-sharing"
52
+ "components": [
53
+ "CometChatMessageComposer"
54
+ ],
55
+ "docs_topic": "core-features#media-sharing",
56
+ "tier": 1,
57
+ "code": "none",
58
+ "builder": "toggle",
59
+ "dashboard_settings": null
32
60
  },
33
61
  {
34
62
  "id": "read-receipts",
35
63
  "name": "Read Receipts",
36
64
  "type": "default",
37
65
  "description": "See when messages have been delivered and read. Visible in message bubbles and the Conversations list.",
38
- "components": ["CometChatMessageList", "CometChatConversations"],
39
- "docs_topic": "core-features#read-receipts"
66
+ "components": [
67
+ "CometChatMessageList",
68
+ "CometChatConversations"
69
+ ],
70
+ "docs_topic": "core-features#read-receipts",
71
+ "tier": 1,
72
+ "code": "none",
73
+ "builder": "toggle",
74
+ "dashboard_settings": null
40
75
  },
41
76
  {
42
77
  "id": "mark-as-unread",
43
78
  "name": "Mark as Unread",
44
79
  "type": "default",
45
80
  "description": "Manually mark conversations or messages as unread.",
46
- "components": ["CometChatMessageList"],
47
- "docs_topic": "core-features#mark-as-unread"
81
+ "components": [
82
+ "CometChatMessageList"
83
+ ],
84
+ "docs_topic": "core-features#mark-as-unread",
85
+ "tier": 1,
86
+ "code": "none",
87
+ "builder": "toggle",
88
+ "dashboard_settings": null
48
89
  },
49
90
  {
50
91
  "id": "typing-indicator",
51
92
  "name": "Typing Indicator",
52
93
  "type": "default",
53
94
  "description": "Real-time typing awareness. Shows in CometChatMessageHeader and CometChatConversations.",
54
- "components": ["CometChatMessageHeader", "CometChatConversations"],
55
- "docs_topic": "core-features#typing-indicator"
95
+ "components": [
96
+ "CometChatMessageHeader",
97
+ "CometChatConversations"
98
+ ],
99
+ "docs_topic": "core-features#typing-indicator",
100
+ "tier": 1,
101
+ "code": "none",
102
+ "builder": "toggle",
103
+ "dashboard_settings": null
56
104
  },
57
105
  {
58
106
  "id": "user-presence",
59
107
  "name": "User Presence",
60
108
  "type": "default",
61
109
  "description": "Online/offline status across Conversations, Message Header, Users, and Group Members.",
62
- "components": ["CometChatConversations", "CometChatMessageHeader", "CometChatUsers", "CometChatGroupMembers"],
63
- "docs_topic": "core-features#user-presence"
110
+ "components": [
111
+ "CometChatConversations",
112
+ "CometChatMessageHeader",
113
+ "CometChatUsers",
114
+ "CometChatGroupMembers"
115
+ ],
116
+ "docs_topic": "core-features#user-presence",
117
+ "tier": 1,
118
+ "code": "none",
119
+ "builder": "toggle",
120
+ "dashboard_settings": null
64
121
  },
65
122
  {
66
123
  "id": "reactions",
67
124
  "name": "Reactions",
68
125
  "type": "default",
69
126
  "description": "React to messages with emojis without typing a full response.",
70
- "components": ["CometChatMessageList"],
71
- "docs_topic": "core-features#reactions"
127
+ "components": [
128
+ "CometChatMessageList"
129
+ ],
130
+ "docs_topic": "core-features#reactions",
131
+ "tier": 1,
132
+ "code": "none",
133
+ "builder": "toggle",
134
+ "dashboard_settings": null
72
135
  },
73
136
  {
74
137
  "id": "mentions",
75
138
  "name": "Mentions",
76
139
  "type": "default",
77
140
  "description": "Address specific users with @username, including @all for groups.",
78
- "components": ["CometChatMessageComposer", "CometChatMessageList"],
79
- "docs_topic": "core-features#mentions"
141
+ "components": [
142
+ "CometChatMessageComposer",
143
+ "CometChatMessageList"
144
+ ],
145
+ "docs_topic": "core-features#mentions",
146
+ "tier": 1,
147
+ "code": "none",
148
+ "builder": "toggle",
149
+ "dashboard_settings": null
80
150
  },
81
151
  {
82
152
  "id": "threaded-conversations",
83
153
  "name": "Threaded Conversations",
84
154
  "type": "default",
85
155
  "description": "Reply to specific messages in a thread, keeping conversations organized.",
86
- "components": ["CometChatMessageList", "CometChatThreadHeader"],
87
- "docs_topic": "core-features#threaded-conversations"
156
+ "components": [
157
+ "CometChatMessageList",
158
+ "CometChatThreadHeader"
159
+ ],
160
+ "docs_topic": "core-features#threaded-conversations",
161
+ "tier": 1,
162
+ "code": "stitch-components",
163
+ "builder": "toggle",
164
+ "dashboard_settings": null
88
165
  },
89
166
  {
90
167
  "id": "quoted-replies",
91
168
  "name": "Quoted Replies",
92
169
  "type": "default",
93
170
  "description": "Quote a specific message when replying to maintain context.",
94
- "components": ["CometChatMessageComposer", "CometChatMessageList"],
95
- "docs_topic": "core-features#quoted-replies"
171
+ "components": [
172
+ "CometChatMessageComposer",
173
+ "CometChatMessageList"
174
+ ],
175
+ "docs_topic": "core-features#quoted-replies",
176
+ "tier": 1,
177
+ "code": "none",
178
+ "builder": "toggle",
179
+ "dashboard_settings": null
96
180
  },
97
181
  {
98
182
  "id": "group-chat",
99
183
  "name": "Group Chat",
100
184
  "type": "default",
101
185
  "description": "Multi-participant conversations via CometChatGroups.",
102
- "components": ["CometChatGroups"],
103
- "docs_topic": "core-features#group-chat"
186
+ "components": [
187
+ "CometChatGroups"
188
+ ],
189
+ "docs_topic": "core-features#group-chat",
190
+ "tier": 1,
191
+ "code": "none",
192
+ "builder": "toggle",
193
+ "dashboard_settings": null
104
194
  },
105
195
  {
106
196
  "id": "report-message",
107
197
  "name": "Report Message",
108
198
  "type": "default",
109
199
  "description": "Users can flag inappropriate messages with predefined reasons.",
110
- "components": ["CometChatMessageList"],
111
- "docs_topic": "core-features#report-message"
200
+ "components": [
201
+ "CometChatMessageList"
202
+ ],
203
+ "docs_topic": "core-features#report-message",
204
+ "tier": 1,
205
+ "code": "none",
206
+ "builder": "toggle",
207
+ "dashboard_settings": null
112
208
  },
113
209
  {
114
210
  "id": "search",
115
211
  "name": "Conversation and Advanced Search",
116
212
  "type": "default",
117
213
  "description": "Full-text search across conversations, messages, and media.",
118
- "components": ["CometChatSearch"],
119
- "docs_topic": "core-features#search"
214
+ "components": [
215
+ "CometChatSearch"
216
+ ],
217
+ "docs_topic": "core-features#search",
218
+ "tier": 1,
219
+ "code": "stitch-components",
220
+ "builder": "toggle",
221
+ "dashboard_settings": null
120
222
  },
121
223
  {
122
224
  "id": "moderation",
123
225
  "name": "Moderation (overview)",
124
226
  "type": "default",
125
- "description": "Umbrella entry moderation is the family of seven configurable backend features below (profanity-filter, image-moderation, data-masking, sentiment-analysis, xss-filter, slow-mode, virus-malware-scanner). Each has its own catalog entry of type 'moderation' that the CLI can configure interactively.",
126
- "components": ["CometChatMessageList"],
227
+ "description": "Umbrella entry. The CANONICAL moderation system is **Rules Management** — Dashboard → Moderation → Settings → Rules (or the /moderation/rules REST API: rules, keywords, reasons, blocked/flagged/reviewed-messages). Configure rules once; they auto-apply to every message with NO client code (UI Kit/SDK handle it). The seven entries below (profanity-filter, image-moderation, data-masking, sentiment-analysis, xss-filter, slow-mode, virus-malware-scanner) are the **LEGACY extensions** — still toggle-able but deprecated. ⚠️ Never run a legacy extension AND Rules on the same app: each message is processed twice (delays + perf). Prefer Rules; if migrating, disable the legacy extensions first. Docs: moderation/overview + moderation/rules-management.",
228
+ "components": [
229
+ "CometChatMessageList"
230
+ ],
127
231
  "docs_topic": "core-features#moderation"
128
232
  },
129
233
  {
@@ -132,16 +236,58 @@
132
236
  "type": "moderation",
133
237
  "extension_id": "profanity-filter",
134
238
  "description": "Detects and filters profane language from messages. Replaces matched words with asterisks or rejects the message outright.",
135
- "components": ["CometChatMessageList", "CometChatMessageComposer"],
239
+ "components": [
240
+ "CometChatMessageList",
241
+ "CometChatMessageComposer"
242
+ ],
136
243
  "config_schema": {
137
- "case_sensitivity": { "type": "enum", "values": ["case-sensitive", "case-insensitive"], "default": "case-insensitive", "prompt": "Case sensitivity for keyword matching?" },
138
- "filter_profanities_for": { "type": "enum", "values": ["all", "specific-roles"], "default": "all", "prompt": "Apply filter to all users or specific roles?" },
139
- "specific_roles": { "type": "array<string>", "when": { "filter_profanities_for": "specific-roles" }, "prompt": "Comma-separated role names" },
140
- "profane_words": { "type": "array<string>", "default": [], "prompt": "Custom words to add to the profanity list (comma-separated; empty for default list only)" },
141
- "white_listed_words": { "type": "array<string>", "default": [], "prompt": "Words to whitelist that would otherwise match (comma-separated)" },
142
- "rule": { "type": "enum", "values": ["mask", "drop", "tag"], "default": "mask", "prompt": "What to do with matched messages? (mask: replace with ****, drop: reject, tag: deliver but flag)" }
244
+ "case_sensitivity": {
245
+ "type": "enum",
246
+ "values": [
247
+ "case-sensitive",
248
+ "case-insensitive"
249
+ ],
250
+ "default": "case-insensitive",
251
+ "prompt": "Case sensitivity for keyword matching?"
252
+ },
253
+ "filter_profanities_for": {
254
+ "type": "enum",
255
+ "values": [
256
+ "all",
257
+ "specific-roles"
258
+ ],
259
+ "default": "all",
260
+ "prompt": "Apply filter to all users or specific roles?"
261
+ },
262
+ "specific_roles": {
263
+ "type": "array<string>",
264
+ "when": {
265
+ "filter_profanities_for": "specific-roles"
266
+ },
267
+ "prompt": "Comma-separated role names"
268
+ },
269
+ "profane_words": {
270
+ "type": "array<string>",
271
+ "default": [],
272
+ "prompt": "Custom words to add to the profanity list (comma-separated; empty for default list only)"
273
+ },
274
+ "white_listed_words": {
275
+ "type": "array<string>",
276
+ "default": [],
277
+ "prompt": "Words to whitelist that would otherwise match (comma-separated)"
278
+ },
279
+ "rule": {
280
+ "type": "enum",
281
+ "values": [
282
+ "mask",
283
+ "drop",
284
+ "tag"
285
+ ],
286
+ "default": "mask",
287
+ "prompt": "What to do with matched messages? (mask: replace with ****, drop: reject, tag: deliver but flag)"
288
+ }
143
289
  },
144
- "docs_topic": "extensions#profanity-filter"
290
+ "docs_topic": "moderation/rules-management"
145
291
  },
146
292
  {
147
293
  "id": "image-moderation",
@@ -149,15 +295,50 @@
149
295
  "type": "moderation",
150
296
  "extension_id": "image-moderation",
151
297
  "description": "Detects unsafe content in images (NSFW, violence, etc.) using ML-based classification. Configurable confidence thresholds.",
152
- "components": ["CometChatMessageList"],
298
+ "components": [
299
+ "CometChatMessageList"
300
+ ],
153
301
  "config_schema": {
154
- "explicit_threshold": { "type": "number", "min": 0, "max": 100, "default": 70, "prompt": "Threshold for explicit content (0-100; lower = stricter)" },
155
- "suggestive_threshold": { "type": "number", "min": 0, "max": 100, "default": 70, "prompt": "Threshold for suggestive content" },
156
- "violence_threshold": { "type": "number", "min": 0, "max": 100, "default": 70, "prompt": "Threshold for violent content" },
157
- "drugs_threshold": { "type": "number", "min": 0, "max": 100, "default": 70, "prompt": "Threshold for drug-related content" },
158
- "rule": { "type": "enum", "values": ["block", "blur", "tag"], "default": "blur", "prompt": "Action for flagged images?" }
302
+ "explicit_threshold": {
303
+ "type": "number",
304
+ "min": 0,
305
+ "max": 100,
306
+ "default": 70,
307
+ "prompt": "Threshold for explicit content (0-100; lower = stricter)"
308
+ },
309
+ "suggestive_threshold": {
310
+ "type": "number",
311
+ "min": 0,
312
+ "max": 100,
313
+ "default": 70,
314
+ "prompt": "Threshold for suggestive content"
315
+ },
316
+ "violence_threshold": {
317
+ "type": "number",
318
+ "min": 0,
319
+ "max": 100,
320
+ "default": 70,
321
+ "prompt": "Threshold for violent content"
322
+ },
323
+ "drugs_threshold": {
324
+ "type": "number",
325
+ "min": 0,
326
+ "max": 100,
327
+ "default": 70,
328
+ "prompt": "Threshold for drug-related content"
329
+ },
330
+ "rule": {
331
+ "type": "enum",
332
+ "values": [
333
+ "block",
334
+ "blur",
335
+ "tag"
336
+ ],
337
+ "default": "blur",
338
+ "prompt": "Action for flagged images?"
339
+ }
159
340
  },
160
- "docs_topic": "extensions#image-moderation"
341
+ "docs_topic": "moderation/rules-management"
161
342
  },
162
343
  {
163
344
  "id": "data-masking",
@@ -165,16 +346,47 @@
165
346
  "type": "moderation",
166
347
  "extension_id": "data-masking",
167
348
  "description": "Masks PII (phone numbers, email addresses, credit cards, SSNs) in messages. Critical for healthcare, fintech, marketplace apps.",
168
- "components": ["CometChatMessageList"],
349
+ "components": [
350
+ "CometChatMessageList"
351
+ ],
169
352
  "config_schema": {
170
- "mask_phone": { "type": "boolean", "default": true, "prompt": "Mask phone numbers?" },
171
- "mask_email": { "type": "boolean", "default": true, "prompt": "Mask email addresses?" },
172
- "mask_ssn": { "type": "boolean", "default": false, "prompt": "Mask US Social Security Numbers?" },
173
- "mask_credit_card": { "type": "boolean", "default": true, "prompt": "Mask credit card numbers?" },
174
- "custom_patterns": { "type": "array<{name:string,regex:string}>", "default": [], "prompt": "Custom regex patterns to mask (e.g. internal IDs)" },
175
- "rule": { "type": "enum", "values": ["mask", "drop", "tag"], "default": "mask", "prompt": "Action for messages containing matched data?" }
353
+ "mask_phone": {
354
+ "type": "boolean",
355
+ "default": true,
356
+ "prompt": "Mask phone numbers?"
357
+ },
358
+ "mask_email": {
359
+ "type": "boolean",
360
+ "default": true,
361
+ "prompt": "Mask email addresses?"
362
+ },
363
+ "mask_ssn": {
364
+ "type": "boolean",
365
+ "default": false,
366
+ "prompt": "Mask US Social Security Numbers?"
367
+ },
368
+ "mask_credit_card": {
369
+ "type": "boolean",
370
+ "default": true,
371
+ "prompt": "Mask credit card numbers?"
372
+ },
373
+ "custom_patterns": {
374
+ "type": "array<{name:string,regex:string}>",
375
+ "default": [],
376
+ "prompt": "Custom regex patterns to mask (e.g. internal IDs)"
377
+ },
378
+ "rule": {
379
+ "type": "enum",
380
+ "values": [
381
+ "mask",
382
+ "drop",
383
+ "tag"
384
+ ],
385
+ "default": "mask",
386
+ "prompt": "Action for messages containing matched data?"
387
+ }
176
388
  },
177
- "docs_topic": "extensions#data-masking"
389
+ "docs_topic": "moderation/overview"
178
390
  },
179
391
  {
180
392
  "id": "sentiment-analysis",
@@ -182,12 +394,29 @@
182
394
  "type": "moderation",
183
395
  "extension_id": "sentiment-analysis",
184
396
  "description": "Detects negative sentiment / toxicity in messages. Optionally surfaces a 'View confidently' confirm dialog before showing flagged messages.",
185
- "components": ["CometChatMessageList"],
397
+ "components": [
398
+ "CometChatMessageList"
399
+ ],
186
400
  "config_schema": {
187
- "threshold": { "type": "number", "min": 0, "max": 100, "default": 50, "prompt": "Sentiment threshold (0-100; lower = more aggressive)" },
188
- "rule": { "type": "enum", "values": ["confirm-view", "tag", "drop"], "default": "confirm-view", "prompt": "Action for flagged messages?" }
401
+ "threshold": {
402
+ "type": "number",
403
+ "min": 0,
404
+ "max": 100,
405
+ "default": 50,
406
+ "prompt": "Sentiment threshold (0-100; lower = more aggressive)"
407
+ },
408
+ "rule": {
409
+ "type": "enum",
410
+ "values": [
411
+ "confirm-view",
412
+ "tag",
413
+ "drop"
414
+ ],
415
+ "default": "confirm-view",
416
+ "prompt": "Action for flagged messages?"
417
+ }
189
418
  },
190
- "docs_topic": "extensions#sentiment-analysis"
419
+ "docs_topic": "moderation/rules-management"
191
420
  },
192
421
  {
193
422
  "id": "xss-filter",
@@ -195,12 +424,31 @@
195
424
  "type": "moderation",
196
425
  "extension_id": "xss-filter",
197
426
  "description": "Strips HTML/script injection from messages before delivery. Critical for chat surfaces that render rich text.",
198
- "components": ["CometChatMessageList"],
427
+ "components": [
428
+ "CometChatMessageList"
429
+ ],
199
430
  "config_schema": {
200
- "strict_mode": { "type": "boolean", "default": true, "prompt": "Strict mode (blocks all HTML; safer)?" },
201
- "allowed_tags": { "type": "array<string>", "default": ["b", "i", "u", "strong", "em"], "when": { "strict_mode": false }, "prompt": "Allowed HTML tags (when strict mode off)" }
431
+ "strict_mode": {
432
+ "type": "boolean",
433
+ "default": true,
434
+ "prompt": "Strict mode (blocks all HTML; safer)?"
435
+ },
436
+ "allowed_tags": {
437
+ "type": "array<string>",
438
+ "default": [
439
+ "b",
440
+ "i",
441
+ "u",
442
+ "strong",
443
+ "em"
444
+ ],
445
+ "when": {
446
+ "strict_mode": false
447
+ },
448
+ "prompt": "Allowed HTML tags (when strict mode off)"
449
+ }
202
450
  },
203
- "docs_topic": "extensions#xss-filter"
451
+ "docs_topic": "moderation/overview"
204
452
  },
205
453
  {
206
454
  "id": "slow-mode",
@@ -208,13 +456,36 @@
208
456
  "type": "moderation",
209
457
  "extension_id": "slow-mode",
210
458
  "description": "Rate-limits how often a user can post in a conversation/group. Reduces spam in busy channels.",
211
- "components": ["CometChatMessageComposer"],
459
+ "components": [
460
+ "CometChatMessageComposer"
461
+ ],
212
462
  "config_schema": {
213
- "interval_seconds": { "type": "number", "min": 1, "max": 3600, "default": 5, "prompt": "Minimum seconds between messages from the same user" },
214
- "applies_to": { "type": "enum", "values": ["all", "groups-only", "specific-groups"], "default": "groups-only", "prompt": "Apply slow mode where?" },
215
- "specific_group_ids": { "type": "array<string>", "when": { "applies_to": "specific-groups" }, "prompt": "Group IDs (comma-separated)" }
463
+ "interval_seconds": {
464
+ "type": "number",
465
+ "min": 1,
466
+ "max": 3600,
467
+ "default": 5,
468
+ "prompt": "Minimum seconds between messages from the same user"
469
+ },
470
+ "applies_to": {
471
+ "type": "enum",
472
+ "values": [
473
+ "all",
474
+ "groups-only",
475
+ "specific-groups"
476
+ ],
477
+ "default": "groups-only",
478
+ "prompt": "Apply slow mode where?"
479
+ },
480
+ "specific_group_ids": {
481
+ "type": "array<string>",
482
+ "when": {
483
+ "applies_to": "specific-groups"
484
+ },
485
+ "prompt": "Group IDs (comma-separated)"
486
+ }
216
487
  },
217
- "docs_topic": "extensions#slow-mode"
488
+ "docs_topic": "moderation/overview"
218
489
  },
219
490
  {
220
491
  "id": "virus-malware-scanner",
@@ -222,22 +493,52 @@
222
493
  "type": "moderation",
223
494
  "extension_id": "virus-malware-scanner",
224
495
  "description": "Scans uploaded files (images, documents, archives) for malware before delivery. Required for healthcare, legal, finance apps.",
225
- "components": ["CometChatMessageList", "CometChatMessageComposer"],
496
+ "components": [
497
+ "CometChatMessageList",
498
+ "CometChatMessageComposer"
499
+ ],
226
500
  "config_schema": {
227
- "scan_images": { "type": "boolean", "default": true, "prompt": "Scan image uploads?" },
228
- "scan_documents": { "type": "boolean", "default": true, "prompt": "Scan document uploads (.pdf, .docx, etc.)?" },
229
- "scan_archives": { "type": "boolean", "default": true, "prompt": "Scan archive uploads (.zip, .tar.gz)?" },
230
- "rule": { "type": "enum", "values": ["block", "quarantine", "tag"], "default": "block", "prompt": "Action when malware detected?" }
501
+ "scan_images": {
502
+ "type": "boolean",
503
+ "default": true,
504
+ "prompt": "Scan image uploads?"
505
+ },
506
+ "scan_documents": {
507
+ "type": "boolean",
508
+ "default": true,
509
+ "prompt": "Scan document uploads (.pdf, .docx, etc.)?"
510
+ },
511
+ "scan_archives": {
512
+ "type": "boolean",
513
+ "default": true,
514
+ "prompt": "Scan archive uploads (.zip, .tar.gz)?"
515
+ },
516
+ "rule": {
517
+ "type": "enum",
518
+ "values": [
519
+ "block",
520
+ "quarantine",
521
+ "tag"
522
+ ],
523
+ "default": "block",
524
+ "prompt": "Action when malware detected?"
525
+ }
231
526
  },
232
- "docs_topic": "extensions#virus-malware-scanner"
527
+ "docs_topic": "moderation/rules-management"
233
528
  },
234
529
  {
235
530
  "id": "bitly",
531
+ "extension_id": "url-shortener-bitly",
236
532
  "name": "Bitly URL Shortening",
237
533
  "type": "extension",
238
534
  "description": "Automatically shorten long URLs in messages using Bitly.",
239
- "dashboard_path": "Extensions → Bitly → Toggle on",
240
- "docs_topic": "extensions#bitly"
535
+ "dashboard_path": "Chat & Messaging Features → Bitly → Toggle on",
536
+ "docs_topic": "extensions#bitly",
537
+ "tier": 5,
538
+ "code": "custom-code",
539
+ "builder": "code",
540
+ "dashboard_settings": "Configure Bitly Key from Dashboard",
541
+ "auto_wired_in_uikit": false
241
542
  },
242
543
  {
243
544
  "id": "link-preview",
@@ -245,40 +546,65 @@
245
546
  "type": "extension",
246
547
  "auto_wired_in_uikit": true,
247
548
  "description": "Show URL previews with title, description, and thumbnail. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
248
- "dashboard_path": "Extensions → Link Preview → Toggle on",
249
- "docs_topic": "extensions#link-preview"
549
+ "dashboard_path": "Chat & Messaging Features → Link Preview → Toggle on",
550
+ "docs_topic": "extensions#link-preview",
551
+ "tier": 2,
552
+ "code": "none",
553
+ "builder": "toggle",
554
+ "dashboard_settings": null
250
555
  },
251
556
  {
252
557
  "id": "message-shortcuts",
253
558
  "name": "Message Shortcuts",
254
559
  "type": "dashboard-only",
255
560
  "description": "Expand predefined short codes into full messages.",
256
- "dashboard_path": "Extensions → Message Shortcuts → Configure shortcuts",
257
- "docs_topic": "extensions#message-shortcuts"
561
+ "dashboard_path": "Chat & Messaging Features → Message Shortcuts → Configure shortcuts",
562
+ "docs_topic": "extensions#message-shortcuts",
563
+ "tier": 5,
564
+ "code": "steps-in-docs",
565
+ "builder": "code",
566
+ "dashboard_settings": "Configure predefined templates at global level",
567
+ "auto_wired_in_uikit": false
258
568
  },
259
569
  {
260
570
  "id": "pin-message",
261
571
  "name": "Pin Message",
262
572
  "type": "extension",
263
573
  "description": "Pin important messages for easy access.",
264
- "dashboard_path": "Extensions → Pin Message → Toggle on",
265
- "docs_topic": "extensions#pin-message"
574
+ "dashboard_path": "Chat & Messaging Features → Pin Message → Toggle on",
575
+ "docs_topic": "extensions#pin-message",
576
+ "tier": 5,
577
+ "code": "steps-in-docs",
578
+ "builder": "code",
579
+ "dashboard_settings": null,
580
+ "auto_wired_in_uikit": false
266
581
  },
267
582
  {
268
583
  "id": "rich-media-preview",
584
+ "extension_id": "rich-media",
269
585
  "name": "Rich Media Preview",
270
586
  "type": "extension",
271
587
  "description": "Generate rich preview panels for URLs via iFramely.",
272
- "dashboard_path": "Extensions → Rich Media Preview → Toggle on",
273
- "docs_topic": "extensions#rich-media-preview"
588
+ "dashboard_path": "Chat & Messaging Features → Rich Media Preview → Toggle on",
589
+ "docs_topic": "extensions#rich-media-preview",
590
+ "tier": 5,
591
+ "code": "custom-code",
592
+ "builder": "code",
593
+ "dashboard_settings": "API Key",
594
+ "auto_wired_in_uikit": false
274
595
  },
275
596
  {
276
597
  "id": "save-message",
277
598
  "name": "Save Message",
278
599
  "type": "extension",
279
600
  "description": "Bookmark messages privately for later.",
280
- "dashboard_path": "Extensions → Save Message → Toggle on",
281
- "docs_topic": "extensions#save-message"
601
+ "dashboard_path": "Chat & Messaging Features → Save Message → Toggle on",
602
+ "docs_topic": "extensions#save-message",
603
+ "tier": 5,
604
+ "code": "custom-code",
605
+ "builder": "code",
606
+ "dashboard_settings": null,
607
+ "auto_wired_in_uikit": false
282
608
  },
283
609
  {
284
610
  "id": "thumbnail-generation",
@@ -286,32 +612,52 @@
286
612
  "type": "extension",
287
613
  "auto_wired_in_uikit": true,
288
614
  "description": "Auto-generate thumbnails for shared media to reduce bandwidth. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
289
- "dashboard_path": "Extensions → Thumbnail Generation → Toggle on",
290
- "docs_topic": "extensions#thumbnail-generation"
615
+ "dashboard_path": "Chat & Messaging Features → Thumbnail Generation → Toggle on",
616
+ "docs_topic": "extensions#thumbnail-generation",
617
+ "tier": 2,
618
+ "code": "none",
619
+ "builder": "toggle",
620
+ "dashboard_settings": null
291
621
  },
292
622
  {
293
623
  "id": "tinyurl",
624
+ "extension_id": "url-shortener-tinyurl",
294
625
  "name": "TinyURL Shortening",
295
626
  "type": "extension",
296
627
  "description": "Shorten URLs using TinyURL service.",
297
- "dashboard_path": "Extensions → TinyURL → Toggle on",
298
- "docs_topic": "extensions#tinyurl"
628
+ "dashboard_path": "Chat & Messaging Features → TinyURL → Toggle on",
629
+ "docs_topic": "extensions#tinyurl",
630
+ "tier": 5,
631
+ "code": "custom-code",
632
+ "builder": "code",
633
+ "dashboard_settings": "Configure Key on Dashboard",
634
+ "auto_wired_in_uikit": false
299
635
  },
300
636
  {
301
637
  "id": "voice-transcription",
302
638
  "name": "Voice Transcription",
303
639
  "type": "extension",
304
640
  "description": "Convert audio messages to text automatically.",
305
- "dashboard_path": "Extensions → Voice Transcription → Toggle on",
306
- "docs_topic": "extensions#voice-transcription"
641
+ "dashboard_path": "Chat & Messaging Features → Voice Transcription → Toggle on",
642
+ "docs_topic": "extensions#voice-transcription",
643
+ "tier": 5,
644
+ "code": "custom-code",
645
+ "builder": "code",
646
+ "dashboard_settings": "Configure Key on Dashboard",
647
+ "auto_wired_in_uikit": false
307
648
  },
308
649
  {
309
650
  "id": "giphy",
310
651
  "name": "Giphy GIFs",
311
652
  "type": "dashboard-only",
312
653
  "description": "Search and share GIFs from Giphy.",
313
- "dashboard_path": "Extensions → Giphy → Configure API key",
314
- "docs_topic": "extensions#giphy"
654
+ "dashboard_path": "Chat & Messaging Features → Giphy → Configure API key",
655
+ "docs_topic": "extensions#giphy",
656
+ "tier": 5,
657
+ "code": "custom-code",
658
+ "builder": "code",
659
+ "dashboard_settings": "Configure Key on Dashboard",
660
+ "auto_wired_in_uikit": false
315
661
  },
316
662
  {
317
663
  "id": "message-translation",
@@ -319,8 +665,12 @@
319
665
  "type": "extension",
320
666
  "auto_wired_in_uikit": true,
321
667
  "description": "Translate messages into the user's locale. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
322
- "dashboard_path": "Extensions → Message Translation → Toggle on",
323
- "docs_topic": "extensions#message-translation"
668
+ "dashboard_path": "Chat & Messaging Features → Message Translation → Toggle on",
669
+ "docs_topic": "extensions#message-translation",
670
+ "tier": 2,
671
+ "code": "none",
672
+ "builder": "toggle",
673
+ "dashboard_settings": null
324
674
  },
325
675
  {
326
676
  "id": "polls",
@@ -328,16 +678,25 @@
328
678
  "type": "extension",
329
679
  "auto_wired_in_uikit": true,
330
680
  "description": "Create polls in group discussions with preset answers. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
331
- "dashboard_path": "Extensions → Polls → Toggle on",
332
- "docs_topic": "extensions#polls"
681
+ "dashboard_path": "Chat & Messaging Features → Polls → Toggle on",
682
+ "docs_topic": "extensions#polls",
683
+ "tier": 2,
684
+ "code": "none",
685
+ "builder": "toggle",
686
+ "dashboard_settings": null
333
687
  },
334
688
  {
335
689
  "id": "reminders",
336
690
  "name": "Reminders",
337
691
  "type": "extension",
338
692
  "description": "Set message reminders or personal notifications via bot.",
339
- "dashboard_path": "Extensions → Reminders → Toggle on",
340
- "docs_topic": "extensions#reminders"
693
+ "dashboard_path": "Chat & Messaging Features → Reminders → Toggle on",
694
+ "docs_topic": "extensions#reminders",
695
+ "tier": 5,
696
+ "code": "steps-in-docs",
697
+ "builder": "code",
698
+ "dashboard_settings": null,
699
+ "auto_wired_in_uikit": false
341
700
  },
342
701
  {
343
702
  "id": "stickers",
@@ -345,66 +704,105 @@
345
704
  "type": "extension",
346
705
  "auto_wired_in_uikit": true,
347
706
  "description": "Send pre-designed stickers in conversations. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
348
- "dashboard_path": "Extensions → Stickers → Toggle on",
349
- "docs_topic": "extensions#stickers"
707
+ "dashboard_path": "Chat & Messaging Features → Stickers → Toggle on",
708
+ "docs_topic": "extensions#stickers",
709
+ "tier": 4,
710
+ "code": "none",
711
+ "builder": "toggle",
712
+ "dashboard_settings": "All the sticker need to be enable via API"
350
713
  },
351
714
  {
352
715
  "id": "stipop",
353
716
  "name": "Stipop Sticker Library",
354
717
  "type": "dashboard-only",
355
718
  "description": "Integrates the Stipop sticker library.",
356
- "dashboard_path": "Extensions → Stipop → Configure API key",
357
- "docs_topic": "extensions#stipop"
719
+ "dashboard_path": "Chat & Messaging Features → Stipop → Configure API key",
720
+ "docs_topic": "extensions#stipop",
721
+ "tier": 5,
722
+ "code": "custom-code",
723
+ "builder": "code",
724
+ "dashboard_settings": "Configure Key on Dashboard",
725
+ "auto_wired_in_uikit": false
358
726
  },
359
727
  {
360
728
  "id": "tenor",
361
729
  "name": "Tenor GIFs",
362
730
  "type": "dashboard-only",
363
731
  "description": "Search and share GIFs from Tenor.",
364
- "dashboard_path": "Extensions → Tenor → Configure API key",
365
- "docs_topic": "extensions#tenor"
732
+ "dashboard_path": "Chat & Messaging Features → Tenor → Configure API key",
733
+ "docs_topic": "extensions#tenor",
734
+ "tier": 5,
735
+ "code": "custom-code",
736
+ "builder": "code",
737
+ "dashboard_settings": "Configure Key on Dashboard",
738
+ "auto_wired_in_uikit": false
366
739
  },
367
740
  {
368
741
  "id": "collaborative-document",
742
+ "extension_id": "document",
369
743
  "name": "Collaborative Document",
370
744
  "type": "extension",
371
745
  "auto_wired_in_uikit": true,
372
746
  "description": "Real-time shared document editing. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
373
- "dashboard_path": "Extensions → Collaborative Document → Toggle on",
374
- "docs_topic": "extensions#collaborative-document"
747
+ "dashboard_path": "Chat & Messaging Features → Collaborative Document → Toggle on",
748
+ "docs_topic": "extensions#collaborative-document",
749
+ "tier": 2,
750
+ "code": "none",
751
+ "builder": "toggle",
752
+ "dashboard_settings": null
375
753
  },
376
754
  {
377
755
  "id": "collaborative-whiteboard",
756
+ "extension_id": "whiteboard",
378
757
  "name": "Collaborative Whiteboard",
379
758
  "type": "extension",
380
759
  "auto_wired_in_uikit": true,
381
760
  "description": "Shared whiteboard for drawing and brainstorming. UI decorator auto-attached by the UI Kit (in defaultExtensions[]).",
382
- "dashboard_path": "Extensions → Collaborative Whiteboard → Toggle on",
383
- "docs_topic": "extensions#collaborative-whiteboard"
761
+ "dashboard_path": "Chat & Messaging Features → Collaborative Whiteboard → Toggle on",
762
+ "docs_topic": "extensions#collaborative-whiteboard",
763
+ "tier": 2,
764
+ "code": "none",
765
+ "builder": "toggle",
766
+ "dashboard_settings": null
384
767
  },
385
768
  {
386
769
  "id": "disappearing-messages",
387
770
  "name": "Disappearing Messages",
388
771
  "type": "dashboard-only",
389
772
  "description": "Messages auto-delete after a specified interval.",
390
- "dashboard_path": "Extensions → Disappearing Messages → Configure interval",
391
- "docs_topic": "extensions#disappearing-messages"
773
+ "dashboard_path": "Chat & Messaging Features → Disappearing Messages → Configure interval",
774
+ "docs_topic": "extensions#disappearing-messages",
775
+ "tier": 5,
776
+ "code": "custom-code",
777
+ "builder": "code",
778
+ "dashboard_settings": null,
779
+ "auto_wired_in_uikit": false
392
780
  },
393
781
  {
394
782
  "id": "chatwoot",
395
783
  "name": "Chatwoot Integration",
396
784
  "type": "dashboard-only",
397
785
  "description": "Route messages to Chatwoot for customer support.",
398
- "dashboard_path": "Extensions → Chatwoot → Configure webhook",
399
- "docs_topic": "extensions#chatwoot"
786
+ "dashboard_path": "Chat & Messaging Features → Chatwoot → Configure webhook",
787
+ "docs_topic": "extensions#chatwoot",
788
+ "tier": 5,
789
+ "code": "custom-code",
790
+ "builder": "code",
791
+ "dashboard_settings": "Configure Key on Dashboard",
792
+ "auto_wired_in_uikit": false
400
793
  },
401
794
  {
402
795
  "id": "intercom",
403
796
  "name": "Intercom Integration",
404
797
  "type": "dashboard-only",
405
798
  "description": "Integrate Intercom for in-app customer support.",
406
- "dashboard_path": "Extensions → Intercom → Configure API key",
407
- "docs_topic": "extensions#intercom"
799
+ "dashboard_path": "Chat & Messaging Features → Intercom → Configure API key",
800
+ "docs_topic": "extensions#intercom",
801
+ "tier": 5,
802
+ "code": "custom-code",
803
+ "builder": "code",
804
+ "dashboard_settings": "Configure Key on Dashboard",
805
+ "auto_wired_in_uikit": false
408
806
  },
409
807
  {
410
808
  "id": "conversation-starter",
@@ -413,8 +811,12 @@
413
811
  "ai_key": "conversation-starter",
414
812
  "requires": "openai-key",
415
813
  "description": "AI-generated opening messages for new chats.",
416
- "dashboard_path": "AI Features → Conversation Starter → Toggle on",
417
- "docs_topic": "ai-features#conversation-starter"
814
+ "dashboard_path": "Chat & Messaging → Features → Conversation Starter → Toggle on",
815
+ "docs_topic": "ai-features#conversation-starter",
816
+ "tier": 4,
817
+ "code": "none",
818
+ "builder": "toggle",
819
+ "dashboard_settings": "Configure Key on Dashboard"
418
820
  },
419
821
  {
420
822
  "id": "smart-replies",
@@ -423,8 +825,12 @@
423
825
  "ai_key": "smart-replies",
424
826
  "requires": "openai-key",
425
827
  "description": "AI-generated contextual response suggestions.",
426
- "dashboard_path": "AI Features → Smart Replies → Toggle on",
427
- "docs_topic": "ai-features#smart-replies"
828
+ "dashboard_path": "Chat & Messaging → Features → Smart Replies → Toggle on",
829
+ "docs_topic": "ai-features#smart-replies",
830
+ "tier": 4,
831
+ "code": "none",
832
+ "builder": "toggle",
833
+ "dashboard_settings": "Configure Key on Dashboard"
428
834
  },
429
835
  {
430
836
  "id": "conversation-summary",
@@ -433,8 +839,12 @@
433
839
  "ai_key": "conversation-summary",
434
840
  "requires": "openai-key",
435
841
  "description": "AI-generated recaps of extended conversations.",
436
- "dashboard_path": "AI Features → Conversation Summary → Toggle on",
437
- "docs_topic": "ai-features#conversation-summary"
842
+ "dashboard_path": "Chat & Messaging → Features → Conversation Summary → Toggle on",
843
+ "docs_topic": "ai-features#conversation-summary",
844
+ "tier": 4,
845
+ "code": "none",
846
+ "builder": "toggle",
847
+ "dashboard_settings": "Configure Key on Dashboard"
438
848
  },
439
849
  {
440
850
  "id": "calls",
@@ -450,7 +860,11 @@
450
860
  "react-native-callstats",
451
861
  "@react-native-community/netinfo"
452
862
  ],
453
- "components": ["CometChatIncomingCall", "CometChatOutgoingCall", "CometChatCallLogs"],
863
+ "components": [
864
+ "CometChatIncomingCall",
865
+ "CometChatOutgoingCall",
866
+ "CometChatCallLogs"
867
+ ],
454
868
  "docs_topic": "call-features"
455
869
  },
456
870
  {
@@ -466,30 +880,53 @@
466
880
  "id": "call-recording",
467
881
  "name": "Call Recording",
468
882
  "type": "calls-feature",
469
- "description": "Record calls to cloud storage. Built into Calls SDK; configured via CallSettingsBuilder. Server-side recording requires the Recording add-on enabled on your CometChat plan.",
883
+ "description": "Server-side call recording to cloud storage. Configured via CallSettingsBuilder (startRecordingOnCallStart, or call startRecording()/stopRecording() at runtime). ENABLEMENT IS NOT SELF-SERVICE: 'Recording must be enabled for your CometChat app — contact CometChat support' (plan add-on). There is no dashboard toggle / API call the CLI can flip. Recordings are then accessed via the Dashboard call logs or the Call Logs API.",
470
884
  "settings_flag": "startRecordingOnCallStart",
885
+ "requires_dashboard_setup": true,
886
+ "enablement": "contact-support",
471
887
  "reference_topic": "recording",
472
- "platforms_supported": ["web", "react-native", "angular", "ios", "android-v5", "android-v6", "flutter-v5", "flutter-v6"],
888
+ "platforms_supported": [
889
+ "web",
890
+ "react-native",
891
+ "angular",
892
+ "ios",
893
+ "android-v5",
894
+ "android-v6",
895
+ "flutter-v5",
896
+ "flutter-v6"
897
+ ],
473
898
  "docs_topic": "calls/recording"
474
899
  },
475
900
  {
476
901
  "id": "screen-share",
477
902
  "name": "Screen Sharing",
478
903
  "type": "calls-feature",
479
- "description": "Share screen during a call. Built into Calls SDK; configured via CallSettingsBuilder hideScreenShareButton flag. Mobile platforms have OS-level gating (iOS broadcast extension, Android MediaProjection).",
480
- "settings_flag": "hideScreenShareButton",
904
+ "description": "Share screen during a call. Built into Calls SDK; the button shows by default — toggle via CallSettingsBuilder showScreenShareButton(bool) (default-mode / CometChatOngoingCall), or the session-settings object field hideScreenSharingButton (joinSession mode). Mobile platforms have OS-level gating (iOS broadcast extension, Android MediaProjection).",
905
+ "settings_flag": "showScreenShareButton",
481
906
  "reference_topic": "screen-sharing",
482
- "platforms_supported": ["web", "react-native", "angular", "ios", "android-v5", "android-v6", "flutter-v5", "flutter-v6"],
907
+ "platforms_supported": [
908
+ "web",
909
+ "react-native",
910
+ "angular",
911
+ "ios",
912
+ "android-v5",
913
+ "android-v6",
914
+ "flutter-v5",
915
+ "flutter-v6"
916
+ ],
483
917
  "docs_topic": "calls/screen-sharing"
484
918
  },
485
919
  {
486
920
  "id": "virtual-background",
487
921
  "name": "Virtual Background",
488
922
  "type": "calls-feature",
489
- "description": "Blur or replace the user's background during a call. JavaScript-only feature — not available on iOS/Android/RN browsers (mobile webviews don't ship the ML Kit needed).",
490
- "settings_flag": "hideVirtualBackgroundButton",
923
+ "description": "Blur or replace the user's background during a call. Toggle the control via CallSettingsBuilder showVirtualBackgroundSetting(bool); set a background with setVirtualBackground / enforceBackgroundBlur. JavaScript-only feature — not available on iOS/Android/RN browsers (mobile webviews don't ship the ML Kit needed).",
924
+ "settings_flag": "showVirtualBackgroundSetting",
491
925
  "reference_topic": "virtual-background",
492
- "platforms_supported": ["web", "angular"],
926
+ "platforms_supported": [
927
+ "web",
928
+ "angular"
929
+ ],
493
930
  "docs_topic": "calls/virtual-background"
494
931
  },
495
932
  {
@@ -499,27 +936,54 @@
499
936
  "description": "Participants can raise a hand to signal they want to speak. Built into Calls SDK.",
500
937
  "settings_flag": "hideRaiseHandButton",
501
938
  "reference_topic": "raise-hand",
502
- "platforms_supported": ["web", "react-native", "angular", "ios", "android-v5", "android-v6", "flutter-v5", "flutter-v6"],
939
+ "platforms_supported": [
940
+ "web",
941
+ "react-native",
942
+ "angular",
943
+ "ios",
944
+ "android-v5",
945
+ "android-v6",
946
+ "flutter-v5",
947
+ "flutter-v6"
948
+ ],
503
949
  "docs_topic": "calls/raise-hand"
504
950
  },
505
951
  {
506
952
  "id": "picture-in-picture",
507
953
  "name": "Picture-in-Picture",
508
954
  "type": "calls-feature",
509
- "description": "Minimize an in-progress call into a floating window so the user can keep using the rest of your app (or other apps on mobile). Per-platform constraints — iOS PIP requires a multitasking-capable iPad or iOS 15+ iPhone, Android requires API 26+.",
510
- "settings_flag": "hidePIPButton",
955
+ "description": "Minimize an in-progress call into a floating window so the user can keep using the rest of your app (or other apps on mobile). PIP is toggled via the STATIC methods CometChatCalls.enablePictureInPictureLayout() / disablePictureInPictureLayout() — NOT a CallSettingsBuilder/settings-object flag (there is no hidePIPButton). Per-platform constraints — iOS PIP requires a multitasking-capable iPad or iOS 15+ iPhone, Android requires API 26+.",
956
+ "settings_flag": "disablePictureInPictureLayout",
511
957
  "reference_topic": "picture-in-picture",
512
- "platforms_supported": ["web", "react-native", "angular", "ios", "android-v5", "android-v6", "flutter-v5", "flutter-v6"],
958
+ "platforms_supported": [
959
+ "web",
960
+ "react-native",
961
+ "angular",
962
+ "ios",
963
+ "android-v5",
964
+ "android-v6",
965
+ "flutter-v5",
966
+ "flutter-v6"
967
+ ],
513
968
  "docs_topic": "calls/picture-in-picture"
514
969
  },
515
970
  {
516
971
  "id": "idle-timeout",
517
972
  "name": "Idle Timeout",
518
973
  "type": "calls-feature",
519
- "description": "Auto-end a call after a configurable period of no activity. Prevents zombie calls + unbounded billing. Built into Calls SDK; configured via CallSettingsBuilder callIdleTime.",
520
- "settings_flag": "callIdleTime",
974
+ "description": "Auto-end a call after a configurable period of no activity. Prevents zombie calls + unbounded billing. Configured via CallSettingsBuilder setIdleTimeoutPeriod(ms) (single period, default-mode), OR the session-settings object fields idleTimeoutPeriodBeforePrompt / idleTimeoutPeriodAfterPrompt in ms (joinSession mode; AfterPrompt has a 60_000ms minimum). There is NO callIdleTime.",
975
+ "settings_flag": "setIdleTimeoutPeriod",
521
976
  "reference_topic": "idle-timeout",
522
- "platforms_supported": ["web", "react-native", "angular", "ios", "android-v5", "android-v6", "flutter-v5", "flutter-v6"],
977
+ "platforms_supported": [
978
+ "web",
979
+ "react-native",
980
+ "angular",
981
+ "ios",
982
+ "android-v5",
983
+ "android-v6",
984
+ "flutter-v5",
985
+ "flutter-v6"
986
+ ],
523
987
  "docs_topic": "calls/idle-timeout"
524
988
  }
525
989
  ]