@cometchat/skills 4.4.2 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +44 -0
  4. package/LICENSE +21 -0
  5. package/MIGRATING.md +187 -0
  6. package/README.md +52 -156
  7. package/RULES.md +125 -0
  8. package/bin/cometchat-skills.mjs +1280 -0
  9. package/bin/legacy-skills.json +95 -0
  10. package/catalogs/android-v6.json +1646 -0
  11. package/catalogs/flutter-v6.json +651 -0
  12. package/catalogs/ios-v5.json +1383 -0
  13. package/catalogs/rn-calls-v5.json +134 -0
  14. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  15. package/catalogs/rn-sdk-v4.json +672 -0
  16. package/catalogs/rn-v5.json +449 -0
  17. package/catalogs/rn-v5.symbols.txt +216 -0
  18. package/catalogs/sdk-android-v5.json +514 -0
  19. package/contracts.android-calls-v5.json +122 -0
  20. package/contracts.android-v6.json +135 -0
  21. package/contracts.angular-v5.json +694 -0
  22. package/contracts.flutter-calls-v5.json +77 -0
  23. package/contracts.flutter-v6.json +126 -0
  24. package/contracts.ios-calls-v5.json +67 -0
  25. package/contracts.ios-v5.json +436 -0
  26. package/contracts.json +82 -0
  27. package/contracts.rn-calls-v5.json +77 -0
  28. package/contracts.rn-v5.json +727 -0
  29. package/contracts.sdk-android-v5.json +15 -0
  30. package/contracts.web-calls-v5.json +45 -0
  31. package/features.android-calls-v5.json +246 -0
  32. package/features.android-v6.json +65 -0
  33. package/features.angular-v5.json +521 -0
  34. package/features.flutter-calls-v5.json +286 -0
  35. package/features.flutter-v6.json +484 -0
  36. package/features.ios-calls-v5.json +236 -0
  37. package/features.ios-v5.json +573 -0
  38. package/features.json +61 -0
  39. package/features.rn-calls-v5.json +187 -0
  40. package/features.rn-v5.json +614 -0
  41. package/features.sdk-android-v5.json +40 -0
  42. package/features.sdk-jsv4.json +24 -0
  43. package/features.web-calls-v5.json +108 -0
  44. package/package.json +156 -74
  45. package/peers.yaml +355 -0
  46. package/registry/README.md +31 -0
  47. package/registry/android-calls-v5.json +94 -0
  48. package/registry/android-v6.json +177 -0
  49. package/registry/angular-v5.json +154 -0
  50. package/registry/flutter-calls-v5.json +94 -0
  51. package/registry/flutter-v6.json +159 -0
  52. package/registry/ios-calls-v5.json +99 -0
  53. package/registry/ios-v5.json +152 -0
  54. package/registry/rn-calls-v5.json +99 -0
  55. package/registry/rn-v5.json +169 -0
  56. package/registry/sdk-android-v5.json +93 -0
  57. package/registry/sdk-jsv4.json +93 -0
  58. package/registry/web-calls-v5.json +94 -0
  59. package/registry/web-v7.json +154 -0
  60. package/skills/cometchat/SKILL.md +47 -2096
  61. package/skills/cometchat-a11y/SKILL.md +44 -472
  62. package/skills/cometchat-analytics/SKILL.md +61 -0
  63. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  67. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  68. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  69. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  70. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  71. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  72. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  73. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  74. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  75. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  76. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  77. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  78. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  79. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  80. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  81. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  82. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  83. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  84. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  85. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  86. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  87. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  88. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  89. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  90. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  91. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  92. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  93. package/skills/cometchat-android-v6-production/SKILL.md +41 -179
  94. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  95. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  96. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  97. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  98. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  99. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  100. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  101. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  102. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  103. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  104. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  105. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  106. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  107. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  108. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  109. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  110. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  111. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  112. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  113. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  114. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  115. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  116. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  117. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  118. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  119. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  120. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  121. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  122. package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
  123. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  124. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  125. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  126. package/skills/cometchat-audit/SKILL.md +61 -0
  127. package/skills/cometchat-compliance/SKILL.md +63 -0
  128. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  129. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  130. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  131. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  132. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  133. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  134. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  135. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  136. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  137. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  138. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  139. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  140. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  141. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  142. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  143. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  144. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  145. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  146. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
  147. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  148. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  149. package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
  150. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  151. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  152. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  153. package/skills/cometchat-i18n/SKILL.md +35 -404
  154. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  155. package/skills/cometchat-ios-components/SKILL.md +44 -834
  156. package/skills/cometchat-ios-core/SKILL.md +182 -1068
  157. package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
  158. package/skills/cometchat-ios-core/references/docs-map.md +124 -0
  159. package/skills/cometchat-ios-core/references/install.md +23 -0
  160. package/skills/cometchat-ios-core/references/layout.md +219 -0
  161. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  162. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  163. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  164. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  165. package/skills/cometchat-ios-features/SKILL.md +29 -738
  166. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  167. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  168. package/skills/cometchat-ios-production/SKILL.md +67 -723
  169. package/skills/cometchat-ios-push/SKILL.md +24 -602
  170. package/skills/cometchat-ios-testing/SKILL.md +36 -355
  171. package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
  172. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  173. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  174. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  175. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  176. package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
  177. package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
  178. package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
  179. package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
  180. package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
  181. package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
  182. package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
  183. package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
  184. package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
  185. package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
  186. package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
  187. package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
  188. package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
  189. package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
  190. package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
  191. package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
  192. package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
  193. package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
  194. package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
  195. package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
  196. package/skills/cometchat-moderation/SKILL.md +58 -0
  197. package/skills/cometchat-onboarding/SKILL.md +92 -0
  198. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  199. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  200. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  201. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  202. package/skills/cometchat-onboarding/references/platforms.md +105 -0
  203. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  204. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  205. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  206. package/skills/cometchat-react-native-core/SKILL.md +335 -0
  207. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  208. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  209. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  210. package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
  211. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  212. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  213. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  214. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  215. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  216. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  217. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  218. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  219. package/skills/cometchat-react-native-production/SKILL.md +79 -0
  220. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  221. package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
  222. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  223. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  224. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  225. package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
  226. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  227. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  228. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  229. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  230. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  231. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  232. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  233. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  234. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  235. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  236. package/skills/cometchat-react-v7-core/references/layout.md +150 -0
  237. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  238. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  239. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  240. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  241. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  242. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  243. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  244. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  245. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  246. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  247. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  248. package/skills/cometchat-react-v7-production/SKILL.md +84 -0
  249. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  250. package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
  251. package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
  252. package/skills/cometchat-security/SKILL.md +80 -0
  253. package/skills/cometchat-self-host/SKILL.md +56 -0
  254. package/test-suite/README.md +70 -0
  255. package/test-suite/catalogs/android-calls-v5.json +830 -0
  256. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  257. package/test-suite/catalogs/android-v6.json +1646 -0
  258. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  259. package/test-suite/catalogs/angular-v5.json +7587 -0
  260. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  261. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  262. package/test-suite/catalogs/flutter-v6.json +651 -0
  263. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  264. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  265. package/test-suite/catalogs/ios-v5.json +1383 -0
  266. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  267. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  268. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  269. package/test-suite/catalogs/rn-v5.json +449 -0
  270. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  271. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  272. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  273. package/test-suite/catalogs/web-calls-v5.json +195 -0
  274. package/test-suite/catalogs/web-v7.json +1243 -0
  275. package/test-suite/scripts/build-registry.mjs +113 -0
  276. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  277. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  278. package/test-suite/scripts/lint-skills.mjs +932 -0
  279. package/test-suite/scripts/measure-tokens.mjs +169 -0
  280. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  281. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  282. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  283. package/test-suite/scripts/verify-catalog.mjs +242 -0
  284. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  285. package/test-suite/scripts/verify-detection.mjs +178 -0
  286. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  287. package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
  288. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  289. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  290. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  291. package/test-suite/typecheck/angular-v5/package.json +21 -0
  292. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  293. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  294. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  295. package/test-suite/typecheck/web-v7/package.json +18 -0
  296. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  297. package/bin/install.js +0 -1003
  298. package/skills/.claude-plugin/marketplace.json +0 -86
  299. package/skills/cometchat/references/asking-questions.md +0 -48
  300. package/skills/cometchat-android-v5/SKILL.md +0 -121
  301. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  302. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  303. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  304. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  305. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  306. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  307. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  308. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  309. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  310. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  311. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  312. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  313. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  314. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  315. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  316. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  317. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  318. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  319. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  320. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  321. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  322. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  323. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  324. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  325. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  326. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  327. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  328. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  329. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  330. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  331. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  332. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  333. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  334. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  335. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  336. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  337. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  338. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  339. package/skills/cometchat-android-v6/SKILL.md +0 -108
  340. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  341. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  342. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  343. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  344. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  345. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  346. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  347. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  348. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  349. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  350. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  351. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  352. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  353. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  354. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  355. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  356. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  357. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  358. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  359. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  360. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  361. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  362. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  363. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  364. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  365. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  366. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  367. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  368. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  369. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  370. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  371. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  372. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  373. package/skills/cometchat-angular-components/SKILL.md +0 -235
  374. package/skills/cometchat-angular-core/SKILL.md +0 -386
  375. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  376. package/skills/cometchat-angular-features/SKILL.md +0 -329
  377. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  378. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  379. package/skills/cometchat-angular-production/SKILL.md +0 -564
  380. package/skills/cometchat-angular-push/SKILL.md +0 -389
  381. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  382. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  383. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  384. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  385. package/skills/cometchat-calls/SKILL.md +0 -364
  386. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  387. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  388. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  389. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  390. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  391. package/skills/cometchat-components/SKILL.md +0 -1142
  392. package/skills/cometchat-core/SKILL.md +0 -1048
  393. package/skills/cometchat-customization/SKILL.md +0 -580
  394. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  395. package/skills/cometchat-features/SKILL.md +0 -861
  396. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  397. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  398. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  399. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  400. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  401. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  402. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  403. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  404. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  405. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  406. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  407. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  408. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  409. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  410. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  411. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  412. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  413. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  414. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  415. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  416. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  417. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  418. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  419. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  420. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  421. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  422. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  423. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  424. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  425. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  426. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  427. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  428. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  429. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  430. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  431. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  432. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  433. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  434. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  435. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  436. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  437. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  438. package/skills/cometchat-ios/SKILL.md +0 -325
  439. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  440. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  441. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  442. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  443. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  444. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  445. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  446. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  447. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  448. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  449. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  450. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  451. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  452. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  453. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  454. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  455. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  456. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  457. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  458. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  459. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  460. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  461. package/skills/cometchat-native-calls/SKILL.md +0 -671
  462. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  463. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  464. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  465. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  466. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  467. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  468. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  469. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  470. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  471. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  472. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  473. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  474. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  475. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  476. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  477. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  478. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  479. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  480. package/skills/cometchat-native-components/SKILL.md +0 -628
  481. package/skills/cometchat-native-core/SKILL.md +0 -679
  482. package/skills/cometchat-native-customization/SKILL.md +0 -716
  483. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  484. package/skills/cometchat-native-features/SKILL.md +0 -638
  485. package/skills/cometchat-native-placement/SKILL.md +0 -509
  486. package/skills/cometchat-native-production/SKILL.md +0 -700
  487. package/skills/cometchat-native-push/SKILL.md +0 -594
  488. package/skills/cometchat-native-testing/SKILL.md +0 -582
  489. package/skills/cometchat-native-theming/SKILL.md +0 -681
  490. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  491. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  492. package/skills/cometchat-placement/SKILL.md +0 -1360
  493. package/skills/cometchat-production/SKILL.md +0 -1027
  494. package/skills/cometchat-react-calls/SKILL.md +0 -752
  495. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  496. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  497. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  498. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  499. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  500. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  501. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  502. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  503. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  504. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  505. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  506. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  507. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  508. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  509. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  510. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  511. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  512. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  513. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  514. package/skills/cometchat-react-push/SKILL.md +0 -634
  515. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  516. package/skills/cometchat-react-testing/SKILL.md +0 -413
  517. package/skills/cometchat-theming/SKILL.md +0 -498
  518. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,861 +0,0 @@
1
- ---
2
- name: cometchat-features
3
- description: Add features (calls, reactions, polls, file sharing, presence, etc.) to an already-integrated CometChat project. Routes to the right sub-flow based on feature type — default (already enabled), extension (API toggle), ai-feature (API toggle + OpenAI key), dashboard-only (third-party config), package-install (calls), or component-swap (rich text).
4
- license: "MIT"
5
- compatibility: "Node.js >=18; @cometchat/chat-uikit-react ^6; integration must already be applied"
6
- metadata:
7
- author: "CometChat"
8
- version: "3.0.0"
9
- tags: "cometchat features extensions calls reactions polls ai-features"
10
- ---
11
-
12
- > **Ground truth:** the 5-tier feature catalog `packages/registry/v6/features/catalog.json` + the per-platform UI Kit `defaultExtensions[]`. (Official docs linked below.) Verify symbols against the installed package/source before relying on them.
13
-
14
- > **Scope — this IS the web / React features skill** (`@cometchat/chat-uikit-react`). Web/React intentionally has no separate "react-features" skill: this one is it. Each other family has its own features skill (native / angular / android-v5 / android-v6 / ios / flutter-v6). **Flutter V5 has none — it proxies to `cometchat-flutter-v6-features`** for enablement: feature *enablement* is the SDK/dashboard `apply-feature` path (identical across V5/V6); only the in-UI wiring differs, and V5 is legacy/maintenance-only. The `apply-feature` CLI + the 5-tier taxonomy below apply to all families.
15
-
16
- > **Companion skills:** `cometchat-core` covers initialization and the
17
- > provider pattern; `cometchat-customization` is the next step when a
18
- > feature is enabled but needs visual customization;
19
- > `cometchat-troubleshooting` handles post-feature-enable failures.
20
-
21
- ## Purpose
22
-
23
- This skill teaches Claude how CometChat features are structured and
24
- what work is actually required to enable each one. Most features require
25
- **zero code** — they are either already built into the UI Kit, toggled
26
- via the `cometchat apply-feature` CLI (which hits the dashboard API),
27
- or activated by a single npm install. Understanding which type a feature
28
- is prevents unnecessary work.
29
-
30
- ---
31
-
32
- ## 1. Use this skill when
33
-
34
- The user wants to add a specific feature to an already-integrated CometChat
35
- project. Trigger phrases:
36
-
37
- - `/cometchat features` (or invoke the cometchat-features skill via your agent's mechanism — keyword "cometchat feature" or "add chat feature" works in most agents)
38
- - `/cometchat features <name>` (e.g. `/cometchat features reactions`)
39
- - `/cometchat <feature>` (e.g. `/cometchat polls`, `/cometchat calls`)
40
- - "add reactions to my chat"
41
- - "add video calling"
42
- - "enable polls"
43
- - "add file sharing"
44
- - "enable smart replies"
45
- - "add typing indicators"
46
-
47
- ## 2. Preconditions
48
-
49
- The user must have an existing integration:
50
-
51
- ```bash
52
- npx @cometchat/skills-cli info --json
53
- ```
54
-
55
- If `integrated` is `false`, **stop** and tell the user to run `/cometchat`
56
- first to create the integration.
57
-
58
- ## 3. The 5 feature categories (customer-facing) — and what work each needs
59
-
60
- CometChat's canonical "Feature Availability" model sorts every feature into **5 categories by the work needed** (the catalog encodes this per-feature as `tier` + the operative columns `code` / `dashboard_settings` / `builder`; run `cometchat features info <id> --json`).
61
-
62
- > **Canonical public decision-reference (source of truth):** [Features & Extensions Guide](https://www.cometchat.com/docs/fundamentals/features-and-extensions-guide) on the public docs. It is the authoritative, always-current matrix of *which integration method supports each feature* (UI Kit / UI Kit Builder / Widget Builder / SDK), *what dashboard setup it needs*, and *whether code is required*. **When the local `catalog.json` and this page disagree, the docs page wins** — the catalog is a build-time snapshot derived from the same model and can lag a release. For any "can the builder do X? / is feature Y code-or-dashboard?" decision, consult this page (WebFetch it, or query the docs MCP) rather than answering from memory or a stale snapshot.
63
-
64
-
65
-
66
- | Tier | Category | Work needed | Example |
67
- |---|---|---|---|
68
- | **1** | Core Messaging (Zero Setup) | Nothing — renders out of the box | Typing Indicators |
69
- | **2** | Builder-Enabled (Config + UI Toggle) | Enable via Dashboard API; toggle/place in the UI Kit Builder | Polls |
70
- | **3** | Config-Only (Dashboard-Driven) | Enable via Dashboard API; works automatically | Link Preview |
71
- | **4** | Config + Settings (Smart) | Dashboard API + extra settings (API keys, thresholds) — no code | Smart Replies |
72
- | **5** | SDK-Integrated (Config + Code) | Dashboard API + **custom client code** | Bitly |
73
-
74
- Tiers 1–4 need **no client code** (`code: "none"`). **Tier 5 needs code — and the implementation already lives in the docs.** When a feature's `code` is `custom-code` or `steps-in-docs` (i.e. `auto_wired_in_uikit: false`), the flow is: flip the dashboard toggle (`apply-feature <id>`), then **fetch the reference implementation from the docs (`docs_topic`, via the docs MCP) and adapt it — do NOT hand-roll.** A few Core features carry `code: "stitch-components"` (e.g. Threaded Conversations, Advanced Search): no extension, but you **compose existing kit components** — the kit sample apps show the wiring (see [[uikit-local-clones-canonical-source]]). The 14 code-needed extensions: bitly, message-shortcuts, pin-message, rich-media-preview, save-message, tinyurl, voice-transcription, giphy, reminders, stipop, tenor, disappearing-messages, chatwoot, intercom.
75
-
76
- > T2 vs T3 is a Builder-surface nuance (does the Builder expose a placement/toggle for it). Operationally both are "enable via Dashboard, no code" — the `builder: "toggle"` flag marks the ones the Builder surfaces.
77
-
78
- ---
79
-
80
- ## 3b. Enablement mechanism (how the CLI flips each on)
81
-
82
- Independently of the 5 customer-facing tiers above, the catalog tags each feature with an **enablement mechanism** — what the CLI's `apply-feature` actually does:
83
-
84
- - **default (compiled-in):** Shipped inside the UI Kit component bundle
85
- unconditionally. CometChat builds reactions, typing indicators,
86
- mentions, etc. into `CometChatMessageList` and `CometChatMessageComposer`
87
- at compile time. The feature is always present; the only question is
88
- whether the prop that surfaces it is enabled. No action needed.
89
-
90
- - **extension (backend boolean toggle):** Pure on/off backend extension.
91
- The CLI's `apply-feature` command flips the toggle via the same REST
92
- API the dashboard UI uses (`POST /apps/{id}/extensions`), so no
93
- browser visit required. Once enabled, the UI Kit renders the matching
94
- UI automatically **only for the auto-wired subset** (`auto_wired_in_uikit: true`,
95
- `code: "none"`); the rest (tier 5) need client code from the docs. Examples: polls, link-preview,
96
- message-translation, stickers.
97
-
98
- - **ai-feature (backend AI toggle + OpenAI key):** Same API path as
99
- extensions but split out because the AI feature requires an OpenAI
100
- API key on the app's AI settings (`PUT /apps/{id}/ai/settings`)
101
- before the toggle (`POST /apps/{id}/features/ai.{key}/enabled`)
102
- succeeds. The CLI handles both calls in one invocation when given
103
- `--openai-key sk-…`. Examples: smart-replies, conversation-summary,
104
- conversation-starter.
105
-
106
- - **dashboard-only (third-party config):** Requires entering config
107
- the user has to fetch themselves — third-party API keys (Giphy,
108
- Stipop, Tenor), webhooks (Chatwoot), or multi-field choices
109
- (disappearing-messages interval, message-shortcuts list). The CLI
110
- cannot automate these; the skill prints the dashboard path and
111
- stops.
112
-
113
- - **package-install (separate SDK):** Voice/video calling requires
114
- `@cometchat/calls-sdk-javascript` because it links against browser
115
- media APIs that would bloat every integration if bundled unconditionally.
116
- Once installed, the UI Kit detects it via dynamic import.
117
-
118
- - **component-swap (variant component):** Replaces one UI Kit component
119
- with a drop-in variant whose default behavior differs (e.g.
120
- `CometChatCompactMessageComposer` enables rich text by default).
121
- The CLI does a safe word-boundary replace in `state.files_owned`.
122
- Requires `cometchat apply` to have run (i.e. web/RN integrations
123
- only — native cohorts can't use this path).
124
-
125
- ---
126
-
127
- ## 4. The feature catalog
128
-
129
- ### Type 1 — Default features (~14, already enabled in UI Kit)
130
-
131
- These are already part of the components your integration uses. The skill's
132
- job is to **tell the user they're already there** and point at the relevant
133
- component:
134
-
135
- - Instant Messaging
136
- - Media Sharing (file/image/audio/video)
137
- - Read Receipts
138
- - Mark as Unread
139
- - Typing Indicator
140
- - User Presence (online/offline)
141
- - Reactions
142
- - Mentions (incl. @all)
143
- - Threaded Conversations
144
- - Quoted Replies
145
- - Group Chat
146
- - Report Message
147
- - Conversation/Advanced Search
148
-
149
- For these: query the docs MCP for the feature's component/usage docs, show
150
- the user where it is in their integration. **No code changes needed.**
151
-
152
- ### Type 2a — Extensions (pure boolean, CLI-toggleable)
153
-
154
- These are backend extensions enabled by a single API call (`POST /apps/{id}/extensions`).
155
- Use the CLI — no browser visit required:
156
-
157
- ```bash
158
- cometchat apply-feature <id>
159
- ```
160
-
161
- For native cohorts (iOS / Android / Flutter / Angular) where there's no
162
- `.cometchat/state.json`, pass `--app-id` explicitly:
163
-
164
- ```bash
165
- cometchat apply-feature <id> --app-id <your-app-id>
166
- ```
167
-
168
- Once enabled, the UI Kit auto-integrates them. **No code changes needed — for the auto-wired subset.**
169
-
170
- > ⚠️ **The "no code needed" pitch only holds for ~7 of 24 dashboard-toggle features (ENG-35721).** The dashboard exposes 24 extensions; only the ones marked `auto_wired_in_uikit: true` in the CLI's catalog (~7 — Link Preview, Polls, Stickers, Message Translation, Smart Replies, Conversation Starter, and a handful more) render automatically via the kit's bubbles + composer. The other ~17 (Bitly, TinyURL, Voice Transcription, Reminders, Save Message, Pin Message, etc.) require **either a kit prop opt-in OR a small component-side handler** — `apply-feature <id>` flips the dashboard toggle but does NOT wire client-side rendering for those. **Before promising "no code needed" to the customer**, run `cometchat features info <id> --json` and check the `auto_wired_in_uikit` field; if `false`, set expectations honestly and emit the wiring code.
171
-
172
- > ⚠️ **`features enable` has TWO unstated prereqs (ENG-35721):**
173
- > 1. **`auth login` must have completed** — the toggle is gated on the dashboard bearer token. The CLI's "no app" error says nothing about login; running `cometchat features enable <id>` cold (after only `provision setup`) fails with a misleading message. Run `cometchat auth status --json` first; if `"logged-out"`, run `cometchat auth login` before any `features enable`.
174
- > 2. **Either `.cometchat/config.json` OR `--app-id <id>`** — the toggle needs an app context. If the user pasted credentials manually (the dispatcher's Step 2d path) they may NOT have a `.cometchat/config.json` yet. **Manual `.env` users:** run `cometchat config save --app-id <id> --region <region> --json` to bridge into `.cometchat/config.json` before `apply-feature`, OR pass `--app-id` on every `apply-feature` call.
175
-
176
- > **Note:** Conversation and Advanced Search has its own toggle on the
177
- > Features page. It is on by default but can be disabled. If a user
178
- > reports that search is missing, check this toggle.
179
-
180
- **Extensions — User Experience:**
181
- Avatar, Bitly, Link Preview, Message Shortcuts, Pin Message, Rich
182
- Media Preview, Save Message, Thumbnail Generation, TinyURL, Voice
183
- Transcription
184
-
185
- **Extensions — User Engagement:**
186
- Giphy, Message Translation, Polls, Reminders,
187
- Stickers, Stipop, Tenor
188
-
189
- > ⚠️ **Broadcast was removed (ENG-35699).** Earlier versions of this skill listed "Broadcast" here, but the CLI's 40-feature catalog has no `broadcast` or `broadcast-message` id — `cometchat-skills-cli features info broadcast` returns "not found." Broadcast as a *use case* is achievable via standard CometChat extensions (one-to-many group messages with `subscribePresenceForAllUsers`) or via Custom Messages — but there is no "Broadcast" extension toggle in the dashboard today. If a customer asks for broadcast functionality, route them at custom messages + a server-side fan-out webhook, not a feature toggle.
190
-
191
- **Extensions — Collaboration:**
192
- Collaborative Document, Collaborative Whiteboard
193
-
194
- **Extensions — Security:**
195
- Disappearing Messages, E2E Encryption (Enterprise plan only)
196
-
197
- **Extensions — Moderation (LEGACY — prefer Rules Management, see §"Moderation" below):**
198
- Data Masking, Image Moderation, Profanity Filter, Sentiment Analysis,
199
- XSS Filter, Human Moderation, Report User, Slow Mode,
200
- Virus/Malware Scanner. ⚠️ Deprecated; don't run alongside moderation Rules (double-processes every message).
201
-
202
- **Notifications extensions** (Chat & Messaging → Features):
203
- Email Notification, Push Notification, SMS Notification
204
-
205
- **Extensions — Customer Support:**
206
- Chatwoot, Intercom
207
-
208
- ### Type 2b — AI features (CLI-toggleable, OpenAI key required)
209
-
210
- `smart-replies`, `conversation-summary`, `conversation-starter`. These
211
- need an OpenAI API key on the app's AI settings before the toggle
212
- succeeds. The CLI does both calls in one invocation:
213
-
214
- ```bash
215
- cometchat apply-feature smart-replies --openai-key sk-...
216
- # native:
217
- cometchat apply-feature smart-replies --app-id <id> --openai-key sk-...
218
- ```
219
-
220
- After the first AI feature is enabled the key is stored on the app, so
221
- subsequent ai-feature applies don't need `--openai-key` repeated.
222
-
223
- Get an OpenAI key: https://platform.openai.com/api-keys
224
-
225
- ### Type 2c — Dashboard-only (third-party config required)
226
-
227
- These extensions require config the user has to provide themselves
228
- (third-party API keys / webhooks / multi-field setup) — `apply-feature`
229
- returns `manual-action-required` and prints the dashboard path. The
230
- CLI cannot automate these:
231
-
232
- - **Third-party API keys:** Giphy, Stipop, Tenor, Intercom
233
- - **Webhooks:** Chatwoot
234
- - **Multi-field config:** Message Shortcuts (shortcut list), Disappearing Messages (interval)
235
-
236
- Manual flow for these:
237
- 1. https://app.cometchat.com → select your app
238
- 2. Sidebar → Chat & Messaging → Features
239
- 3. Find the extension, enter the third-party config, toggle ON
240
-
241
- ### Moderation — use Rules Management (NOT the legacy extensions)
242
-
243
- **The canonical moderation system is Rules Management**, not the old per-extension
244
- toggles. Configure rules once in the Dashboard (**Moderation → Settings → Rules**,
245
- or the `/moderation/rules` REST API — also `/moderation/{keywords,reasons,
246
- blocked-messages,flagged-messages,reviewed-messages}`) and they auto-apply to every
247
- message with **no client code** (the UI Kit + SDK enforce them seamlessly). Docs:
248
- `moderation/overview` + `moderation/rules-management`.
249
-
250
- > ⚠️ **Do NOT run legacy moderation extensions AND Rules on the same app.** The
251
- > legacy extensions (Data Masking, Image Moderation, Profanity Filter, Sentiment
252
- > Analysis, XSS Filter, Slow Mode, Virus/Malware Scanner) are **deprecated**. If
253
- > both a legacy extension and a Rule are active, **every message is processed
254
- > twice** → delays + perf issues. Disable the legacy extensions (Dashboard →
255
- > Extensions) before creating Rules. `apply-feature <legacy-id>` still works but
256
- > emits this same warning — prefer Rules.
257
-
258
- - **Notifications** (separate, unaffected): Email, Push, SMS — Sidebar →
259
- **Extensions** → configure + enable.
260
-
261
- After enabling any feature, run `cometchat verify` to ensure the
262
- existing integration still passes. No code changes are needed — the
263
- UI Kit picks up enabled features automatically.
264
-
265
- ### Type 3 — Package-install features (4, calls)
266
-
267
- These require installing `@cometchat/calls-sdk-javascript`. Once installed,
268
- the UI Kit auto-detects it and surfaces the call UI in CometChatMessageHeader,
269
- CometChatConversations, etc.
270
-
271
- - Call Buttons (in message headers)
272
- - Incoming Call notifications
273
- - Outgoing Call interface
274
- - Call Logs (call history)
275
-
276
- For these, the user opting in IS consent — run the install directly:
277
-
278
- ```bash
279
- npm install @cometchat/calls-sdk-javascript@^5
280
- npx @cometchat/skills-cli verify --json
281
- ```
282
-
283
- The UI Kit's `initiateAfterLogin()` auto-calls `enableCalling()` after the
284
- package is installed. No manual wiring needed for default call buttons in
285
- CometChatMessageHeader. Restart the dev server.
286
-
287
- ### Type 5 — Custom message types (APPEND, never REPLACE — ENG-35706)
288
-
289
- When a customer wants to send a new message type (location, product card, custom event), the V6 React kit ships a templates API that is **dangerously easy to misuse.** Two testers hit the same trap: they added one custom template and watched ALL existing bubbles (text, image, audio, video, file) disappear AND the composer's entire attachment menu (Camera/Image/Video/File/Whiteboard/Document) get replaced by their one new attachment.
290
-
291
- **Cause:** `<CometChatMessageList templates={[locationTemplate]} />` and `<CometChatMessageComposer attachmentOptions={[locationOption]} />` **REPLACE** the kit's built-in templates / options rather than appending to them.
292
-
293
- **Correct pattern — always merge with the kit's defaults:**
294
-
295
- ```tsx
296
- import {
297
- CometChatMessageList,
298
- CometChatMessageComposer,
299
- CometChatMessageTemplate, // the kit's template class — verified export (src/index.ts:79)
300
- CometChatMessageComposerAction, // attachment-menu action class
301
- CometChatUIKit, // exposes getDataSource()
302
- CometChatUIKitConstants, // MessageTypes / MessageCategory enums
303
- } from "@cometchat/chat-uikit-react";
304
-
305
- // 1. Build your custom template with the kit's CometChatMessageTemplate class.
306
- // ⚠️ It is `new CometChatMessageTemplate(...)` (UI Kit) — NOT
307
- // `new CometChat.MessageTemplate(...)`. The Chat SDK has no MessageTemplate
308
- // export; that form does not exist and will not compile.
309
- const locationTemplate = new CometChatMessageTemplate({
310
- type: "location",
311
- category: CometChatUIKitConstants.MessageCategory.custom, // "custom"
312
- contentView: (message, alignment) => <LocationBubble message={message} />,
313
- // headerView / footerView / bottomView / bubbleView / statusInfoView / options
314
- // all inherit the kit's defaults when omitted.
315
- });
316
-
317
- // 2. Merge with the kit's defaults — DO NOT pass only your template.
318
- // CometChatUIKit.getDataSource() is the public accessor; it returns the same
319
- // DataSource as ChatConfigurator.getDataSource() (the latter is internal).
320
- const defaultTemplates = CometChatUIKit.getDataSource().getAllMessageTemplates();
321
- const mergedTemplates = [...defaultTemplates, locationTemplate];
322
-
323
- <CometChatMessageList templates={mergedTemplates} />
324
- ```
325
-
326
- **Same rule for attachment options.** `getAttachmentOptions` takes a `ComposerId` (`{ user?, group?, parentMessageId? }`) **AND a required second argument** (`additionalConfigurations`), then append your action:
327
-
328
- ```tsx
329
- // ComposerId = { parentMessageId, user, group } — all three keys, values nullable.
330
- const composerId = {
331
- parentMessageId: null,
332
- user: selectedUser?.getUid() ?? null,
333
- group: selectedGroup?.getGuid() ?? null,
334
- };
335
- // ⚠️ MUST pass a defined object as the 2nd arg. The extension data sources
336
- // (Polls, Collaborative Document/Whiteboard) read `messageToReplyRef` off it
337
- // WITHOUT optional chaining — passing nothing/undefined throws at runtime:
338
- // "Cannot read properties of undefined (reading 'messageToReplyRef')"
339
- // (Verified against the official v6 sample app's live-location feature.)
340
- const additionalConfigurations = { messageToReplyRef: { current: null } };
341
- const defaultAttachments = CometChatUIKit.getDataSource().getAttachmentOptions(
342
- composerId,
343
- additionalConfigurations,
344
- );
345
- const mergedAttachments = [...defaultAttachments, new CometChatMessageComposerAction({
346
- id: "send-location",
347
- title: "Location",
348
- iconURL: "/icons/location.svg",
349
- onClick: () => { /* open location picker */ },
350
- })];
351
-
352
- <CometChatMessageComposer attachmentOptions={mergedAttachments} />
353
- ```
354
-
355
- **Also**: when sending the custom message, set both `receiverType` AND `type` correctly. Two testers hit `"Cannot determine message recipient"` because they passed a partial `CustomMessage` constructor. Use the full form:
356
-
357
- ```tsx
358
- const msg = new CometChat.CustomMessage(
359
- receiverID, // who to send to (required)
360
- receiverType, // CometChat.RECEIVER_TYPE.USER or .GROUP (required — this is the field testers missed)
361
- "location", // custom type identifier
362
- { lat, lng, label } // your payload
363
- );
364
- CometChat.sendCustomMessage(msg);
365
- ```
366
-
367
- > **Custom type sends + renders live, but vanishes on reload?** The custom message
368
- > appears immediately (the `ccMessageSent` event), but to **fetch it from history**
369
- > you must include your custom category + type in the list's `messagesRequestBuilder`.
370
- > Extend the kit's defaults (don't hand-list them) — append to
371
- > `getAllMessageCategories()` + `getAllMessageTypes()`:
372
- >
373
- > ```tsx
374
- > const categories = CometChatUIKit.getDataSource().getAllMessageCategories();
375
- > if (!categories.includes(CometChatUIKitConstants.MessageCategory.custom))
376
- > categories.push(CometChatUIKitConstants.MessageCategory.custom);
377
- > const types = CometChatUIKit.getDataSource().getAllMessageTypes();
378
- > if (!types.includes("location")) types.push("location");
379
- >
380
- > const messagesRequestBuilder = new CometChat.MessagesRequestBuilder()
381
- > .setCategories(categories).setTypes(types).hideReplies(true).setLimit(30);
382
- >
383
- > <CometChatMessageList templates={mergedTemplates} messagesRequestBuilder={messagesRequestBuilder} />
384
- > ```
385
- > (Verified against the official v6 sample app's live-location feature.) Tip: on the
386
- > `CustomMessage`, call `setConversationText("Live Location")` so it reads nicely as
387
- > the conversation-list preview, and `setSender(loggedInUser)` for optimistic render.
388
-
389
- #### Override an existing message type's bubble (text / image / etc.)
390
-
391
- Same templates API — fetch all, replace `contentView` (or `bubbleView` for the whole bubble) on the matching template, pass the array. There is NO separate "override" call; you reuse `getAllMessageTemplates()`:
392
-
393
- ```tsx
394
- const templates = CometChatUIKit.getDataSource().getAllMessageTemplates();
395
- const withCustomTextBubble = templates.map((t) => {
396
- if (
397
- t.type === CometChatUIKitConstants.MessageTypes.text &&
398
- t.category === CometChatUIKitConstants.MessageCategory.message
399
- ) {
400
- t.contentView = (message, alignment) => <MyTextBubble message={message} />;
401
- // or t.bubbleView = (...) => <... /> to replace the ENTIRE bubble (header+content+footer)
402
- }
403
- return t;
404
- });
405
-
406
- <CometChatMessageList templates={withCustomTextBubble} />
407
- ```
408
-
409
- (`CometChatUIKit.getDataSource().getMessageTemplate(type, category)` returns a single template if you'd rather fetch just one — but you still pass the full array to the `templates` prop.)
410
-
411
- #### Add a custom message option (Forward-style long-press action)
412
-
413
- Message options live on each template's `options` function. Override it and **merge with the kit defaults** (same REPLACE-vs-APPEND rule) via `getMessageOptions`. Custom actions use `CometChatActionsIcon` (NOT `CometChatMessageComposerAction` — that's composer-only):
414
-
415
- ```tsx
416
- import { CometChatActionsIcon } from "@cometchat/chat-uikit-react";
417
-
418
- const templates = CometChatUIKit.getDataSource().getAllMessageTemplates();
419
- const withForward = templates.map((t) => {
420
- if (t.type === CometChatUIKitConstants.MessageTypes.text) {
421
- t.options = (loggedInUser, message, group) => {
422
- // getMessageOptions(loggedInUser, messageObject, group?, additionalParams?)
423
- const options = CometChatUIKit.getDataSource().getMessageOptions(loggedInUser, message, group);
424
- options.push(
425
- new CometChatActionsIcon({
426
- id: "forward",
427
- title: "Forward",
428
- iconURL: "/icons/forward.svg",
429
- onClick: (id) => { /* open your forward-to picker → CometChat.sendMessage(...) */ },
430
- })
431
- );
432
- return options;
433
- };
434
- }
435
- return t;
436
- });
437
-
438
- <CometChatMessageList templates={withForward} />
439
- ```
440
-
441
- "Forward" is not a built-in kit option, so it's added as a custom `CometChatActionsIcon`. The built-ins (reply, edit, delete, react, …) come from `getMessageOptions` — keep them by merging, don't return only your action.
442
-
443
- > ⚠️ **Kit-side limitation (ENG-35706):** custom message send sometimes **replaces** an existing message in the list in real-time (UI-side overwrite, not server-side). No client workaround today; file a kit ticket if you observe this and document for the customer.
444
-
445
- #### Text formatters (inline text styling — mentions, URLs, custom @/#/! tokens)
446
-
447
- Text formatters transform message text inline. The kit ships `CometChatMentionsFormatter`, `CometChatUrlsFormatter`, `CometChatMarkdownFormatter` (all subclasses of the base `CometChatTextFormatter`). **Same APPEND-not-REPLACE rule** as templates/options: passing a bare `textFormatters={[...]}` array drops the built-ins — start from `getAllTextFormatters({})` and append. (Pattern verified against the kit sample app `sample-app/src/components/CometChatMessages/CometChatMessages.tsx`.)
448
-
449
- ```tsx
450
- import {
451
- CometChatUIKit,
452
- CometChatMessageList,
453
- CometChatTextFormatter,
454
- } from "@cometchat/chat-uikit-react";
455
-
456
- // getAllTextFormatters({}) returns the kit defaults (mentions, URLs, …).
457
- // START here and append — don't hand the component a bare array.
458
- const formatters: CometChatTextFormatter[] =
459
- CometChatUIKit.getDataSource().getAllTextFormatters({});
460
-
461
- // Append your own: subclass CometChatTextFormatter (override its regex + view
462
- // hooks) and push it. See the per-pattern guides below for full subclasses.
463
- // formatters.push(new MyHashtagFormatter());
464
-
465
- <CometChatMessageList textFormatters={formatters} />;
466
- ```
467
-
468
- > **Guides (canonical subclass examples):** custom-text-formatter-guide, mentions-formatter-guide, url-formatter-guide, shortcut-formatter-guide — all under `ui-kit/react/` (query the docs MCP, or `documentation/docs/ui-kit/react/*-formatter-guide.mdx` locally). Each shows a complete `CometChatTextFormatter` subclass (regex + `getFormattedText` + a custom view).
469
-
470
- ### Type 6 — Dashboard-AI mode (UI-side side-effects — ENG-35706)
471
-
472
- When the customer enables the AI Agent on the dashboard (e.g. `aiAssistant: true` for an app), the SAME `<CometChatMessageList>` renders with thread reply buttons + call buttons that don't make sense in an AI-only conversation surface.
473
-
474
- **Detect AI mode and branch the layout:**
475
-
476
- ```tsx
477
- // Read app's AI config from the dashboard via the CLI
478
- // npx @cometchat/skills-cli features info ai-assistant --json
479
- // → { enabled: true, models: [...], ... }
480
-
481
- const isAiMode = aiAssistantConfig?.enabled === true;
482
-
483
- <CometChatMessageList
484
- user={selectedUser}
485
- group={selectedGroup}
486
- // AI conversations shouldn't show "Reply in Thread" / "Message Privately" / call buttons
487
- hideReplyInThreadOption={true}
488
- // (call buttons live on CometChatMessageHeader, NOT MessageList — hide them there)
489
- />
490
- <CometChatMessageHeader
491
- user={selectedUser}
492
- hideVideoCallButton={isAiMode}
493
- hideVoiceCallButton={isAiMode}
494
- />
495
- ```
496
-
497
- The kit doesn't auto-detect dashboard AI mode and adjust its layout — that's a kit-side gap (filed as part of ENG-35706). Until the kit ships a built-in `aiMode` prop, the skill must read the dashboard flag via `features info ai-assistant --json` (see ENG-35716 dispatcher rule) and gate the relevant buttons.
498
-
499
- ### Type 4 — Component-swap features (drop-in variant)
500
-
501
- Some features require swapping one component for a variant that has
502
- different default behavior. The CLI handles the swap automatically —
503
- it walks `state.files_owned`, performs a word-boundary regex replace,
504
- updates `state.json` checksums, and records the applied feature so
505
- re-runs are no-ops. Idempotent.
506
-
507
- Currently available:
508
-
509
- - `rich-text-formatting` — swaps `CometChatMessageComposer` →
510
- `CometChatCompactMessageComposer` (the compact variant enables rich
511
- text formatting by default; the regular composer has
512
- `enableRichTextEditor=false` baked in)
513
-
514
- ```bash
515
- npx @cometchat/skills-cli apply-feature rich-text-formatting
516
- ```
517
-
518
- Do NOT hand-edit the swap. The CLI is the source of truth. If future
519
- SDK releases add new variant components, they will follow this same
520
- `apply-feature <id>` pattern.
521
-
522
- ---
523
-
524
- ## 4b. Deep patterns for three most-requested features
525
-
526
- For calls, AI smart replies, and presence, the catalog above only says "install a package" or "toggle in dashboard." Here are the concrete compositional patterns so common requests don't require a docs MCP round-trip.
527
-
528
- ### Calls (audio + video)
529
-
530
- After `npm install @cometchat/calls-sdk-javascript`, call buttons auto-appear in `CometChatMessageHeader` and the call UI renders in place. **No manual wiring needed** for basic 1:1 audio/video calls.
531
-
532
- For custom integration — e.g. putting a "Start video call" button outside the message header, or handling an incoming call notification in a custom way — use `CometChatCallButtons` + `CometChatIncomingCall` + `CometChatOngoingCall`:
533
-
534
- ```tsx
535
- import { useState, useEffect } from "react";
536
- import {
537
- CometChatCallButtons,
538
- CometChatIncomingCall,
539
- CometChatOngoingCall,
540
- } from "@cometchat/chat-uikit-react";
541
- import { CometChat } from "@cometchat/chat-sdk-javascript";
542
-
543
- export function CustomCallUI({ targetUser }: { targetUser: CometChat.User }) {
544
- const [ongoingCall, setOngoingCall] = useState<CometChat.Call>();
545
-
546
- useEffect(() => {
547
- // Listen for call state changes
548
- const listenerId = "custom-call-listener";
549
- CometChat.addCallListener(
550
- listenerId,
551
- new CometChat.CallListener({
552
- onOutgoingCallAccepted: (call: CometChat.Call) => setOngoingCall(call),
553
- onIncomingCallCancelled: () => setOngoingCall(undefined),
554
- // CallListener uses onCallEndedMessageReceived (NOT onCallEnded — that's
555
- // an OngoingCallListener callback, passed to CallSettingsBuilder).
556
- onCallEndedMessageReceived: () => setOngoingCall(undefined),
557
- }),
558
- );
559
- return () => CometChat.removeCallListener(listenerId);
560
- }, []);
561
-
562
- return (
563
- <>
564
- <CometChatCallButtons user={targetUser} />
565
- <CometChatIncomingCall />
566
- {ongoingCall && <CometChatOngoingCall call={ongoingCall} />}
567
- </>
568
- );
569
- }
570
- ```
571
-
572
- **Common gotchas — UI Kit path:**
573
- - Calls require a logged-in CometChat user on *both* sides. Test from two browsers (or incognito) logged in as different UIDs.
574
- - `CometChatIncomingCall` must be mounted globally (e.g. in your provider or layout) so incoming calls ring on every page.
575
- - Group calls use `CometChat.Group` instead of `CometChat.User` on `CometChatCallButtons`.
576
-
577
- **Common gotchas — SDK-only path (no UI Kit components, ENG-35707 Birendra follow-up):**
578
-
579
- When the integrator opts out of `<CometChatCallButtons>` / `<CometChatIncomingCall>` / `<CometChatOngoingCall>` and builds the call surface directly on the Calls SDK, the UI-Kit gotchas above don't apply but a different set kicks in:
580
-
581
- - **`CometChat.CALL_TYPE.AUDIO` vs `.VIDEO` (Chat SDK)** are NOT the same as **`CometChatCalls.constants.TYPE.VOICE` / `.VIDEO` (Calls SDK)** — use Chat SDK enum on the `Call` entity, Calls SDK enum on `CallSettings`. See `cometchat-react-calls` §4c constants table.
582
- - **`setIsAudioOnlyCall(true)` on `CallSettingsBuilder`** for voice calls — without it, voice calls still acquire the camera (just don't render it).
583
- - **`joinSession` MUST fire after the container is mounted** — don't call it inside the `onOutgoingCallAccepted` listener directly; set state and let a `useEffect(phase, containerRef)` join when the ref + phase agree. The natural site fires before the in-call panel renders.
584
- - **Group calls have no "ring a group" primitive** — use a CustomMessage broadcast + a shared sessionId; the UI Kit's `CometChatCallButtons` for groups sends a `meeting`-type CustomMessage, not `initiateCall`. SDK-only mirrors that.
585
- - **Default call types** — 1:1 = video, group = voice (mirroring the kit's defaults). If you build custom buttons, replicate this so customers' integrations behave consistently.
586
- - **`CometChatCalls.login` is mandatory on raw-SDK paths** (NOT when using the UI Kit, where `enableCalls = true` / kit-managed init auto-logs the Calls SDK). On raw SDK, after Chat SDK login, separately call `CometChatCalls.login(uid, apiKey)` — without it, `generateToken` returns 401.
587
-
588
- These map to the React-specific recipes in `cometchat-react-calls` §4c. Same primitives apply across families; container-mount race + ref-state coordination is generic.
589
-
590
- ### AI smart replies
591
-
592
- Smart replies is an `ai-feature`. Enable with one CLI call (the first time also sets the OpenAI key on the app):
593
-
594
- ```bash
595
- cometchat apply-feature smart-replies --openai-key sk-...
596
- # native cohorts: add --app-id <your-app-id>
597
- ```
598
-
599
- **No code changes are required** — the `CometChatMessageComposer` automatically renders suggested replies as chips above the input when there's a recent incoming message.
600
-
601
- For a custom UI — e.g. showing smart replies inline instead of above the composer, or only for certain conversation types — you read the extension data from the incoming message and render your own chips:
602
-
603
- ```tsx
604
- function SmartReplyChips({ message }: { message: CometChat.BaseMessage }) {
605
- const metadata = message.getMetadata() as Record<string, unknown> | undefined;
606
- const extensions = (metadata?.["@injected"] as Record<string, unknown>)?.["extensions"] as
607
- | Record<string, unknown>
608
- | undefined;
609
- const smartReply = extensions?.["smart-reply"] as { reply_positive?: string; reply_neutral?: string; reply_negative?: string } | undefined;
610
-
611
- if (!smartReply) return null;
612
-
613
- const replies = [smartReply.reply_positive, smartReply.reply_neutral, smartReply.reply_negative].filter(Boolean) as string[];
614
- return (
615
- <div style={{ display: "flex", gap: 8, padding: 8 }}>
616
- {replies.map((r) => (
617
- <button key={r} onClick={() => sendTextMessage(r)}>{r}</button>
618
- ))}
619
- </div>
620
- );
621
- }
622
- ```
623
-
624
- Smart replies are server-generated and attached to messages via the `@injected.extensions.smart-reply` metadata path — the AI feature runs on CometChat's backend, not in your code.
625
-
626
- ### Presence (online / offline status)
627
-
628
- Presence is a **default feature** (Type 1) — online status indicators appear automatically on user avatars in `CometChatConversations`, `CometChatUsers`, and `CometChatGroupMembers`. Nothing to install, nothing to enable.
629
-
630
- For custom UI that needs to know a specific user's online state — e.g. a "Sold by Aria Chen · online now" label on a product page — subscribe to user events:
631
-
632
- ```tsx
633
- import { useEffect, useState } from "react";
634
- import { CometChat } from "@cometchat/chat-sdk-javascript";
635
-
636
- export function useUserPresence(uid: string): "online" | "offline" | "unknown" {
637
- const [status, setStatus] = useState<"online" | "offline" | "unknown">("unknown");
638
-
639
- useEffect(() => {
640
- // 1. Fetch initial state
641
- CometChat.getUser(uid).then((u) => {
642
- setStatus(u.getStatus() === "online" ? "online" : "offline");
643
- });
644
-
645
- // 2. Subscribe to live changes
646
- const listenerId = `presence-${uid}`;
647
- CometChat.addUserListener(
648
- listenerId,
649
- new CometChat.UserListener({
650
- onUserOnline: (user: CometChat.User) => {
651
- if (user.getUid() === uid) setStatus("online");
652
- },
653
- onUserOffline: (user: CometChat.User) => {
654
- if (user.getUid() === uid) setStatus("offline");
655
- },
656
- }),
657
- );
658
- return () => CometChat.removeUserListener(listenerId);
659
- }, [uid]);
660
-
661
- return status;
662
- }
663
- ```
664
-
665
- **Common gotchas:**
666
- - Presence events only fire for users the current user has interacted with (conversation exists, in same group, etc.). For arbitrary UIDs with no prior interaction, you may need to call `CometChat.getUser(uid)` periodically instead.
667
- - `getStatus()` returns `"online"` or `"offline"` — also check `getLastActiveAt()` for a "last seen X ago" timestamp.
668
- - "Last seen" is disabled by default on free-tier apps. Enable it in the dashboard (Settings → Chat → Last Seen).
669
-
670
- ---
671
-
672
- ## 5. Docs lookup contract
673
-
674
- For any feature question not in our local catalog (`cometchat features
675
- info`), the canonical CometChat docs are the source of truth for:
676
-
677
- - **Feature/method availability matrix** — [Features & Extensions Guide](https://www.cometchat.com/docs/fundamentals/features-and-extensions-guide): which of UI Kit / UI Kit Builder / Widget Builder / SDK supports each feature, dashboard setup, and code-required flags. **This page outranks the local `catalog.json` snapshot when they disagree.**
678
- - Per-feature SDK reference (props, callbacks, builders, events)
679
- - Per-feature configuration details beyond the dashboard path above
680
- - Feature compatibility notes (which features need backend setup,
681
- which auto-wire, which require explicit `setExtensions([...])`)
682
-
683
- The docs MCP at `cometchat-docs` is the **best** way to query them when
684
- available, but it is **not** a hard requirement.
685
-
686
- **Hard rules:**
687
-
688
- 1. **Look up the docs before answering** any feature question that's not
689
- in our local catalog. Never invent feature config from training-data
690
- memory. Use whichever lookup path is available, in order:
691
- - **(a) docs MCP** — query the `cometchat-docs` MCP tool if your agent
692
- has it. Richest path.
693
- - **(b) install the MCP, if your agent supports it** — Claude Code:
694
- `claude mcp add --transport http cometchat-docs
695
- https://www.cometchat.com/docs/mcp`. Other agents (Cursor, Codex,
696
- Cline, …) configure MCP their own way, or not at all — do NOT block.
697
- - **(c) fetch/search the public docs** — same content at the canonical
698
- URLs below, or web-search `site:cometchat.com/docs`. Universal
699
- fallback; never STOP and dead-end the user when the MCP isn't
700
- installed — fall through to (c).
701
- 2. **Use `cometchat apply-feature <id>` for extension and ai-feature
702
- types.** The CLI is the canonical path. Only fall back to the
703
- dashboard URL when the CLI returns `manual-action-required`,
704
- `auth-required`, or `error`.
705
- 4. **Canonical reference URLs** (use as starting points if the agent
706
- doesn't have an MCP query handy):
707
- - Extensions: https://www.cometchat.com/docs/ui-kit/react/extensions
708
- - AI features: https://www.cometchat.com/docs/ui-kit/react/ai-features
709
- - Calls: https://www.cometchat.com/docs/ui-kit/react/call-features
710
- - Core features: https://www.cometchat.com/docs/ui-kit/react/core-features
711
-
712
- ---
713
-
714
- ## 6. Steps
715
-
716
- ### Step 1 — Read state
717
-
718
- ```bash
719
- npx @cometchat/skills-cli info --json
720
- ```
721
-
722
- If not integrated, stop. Otherwise note the framework + experience so you
723
- can find the right files.
724
-
725
- ### Step 2 — Determine feature
726
-
727
- If the user named a feature, use it. Otherwise list the categories above
728
- and ask which feature they want.
729
-
730
- ### Step 3 — Classify the feature
731
-
732
- Match the feature name against the 4 types in section 4. If you don't know
733
- the type, query the docs MCP first.
734
-
735
- ### Step 4 — Execute the right sub-flow
736
-
737
- - **Default:** show the user it's already there. Point at the component.
738
- Use `npx @cometchat/skills-cli features info <id>` to surface
739
- the walkthrough verbatim.
740
- - **CRITICAL — if the user explicitly wants a UI element to surface
741
- the default feature** (e.g. "implement conversation search",
742
- "add a search bar", "show typing indicators in the header",
743
- "expose mentions in the composer"), **do NOT add a new component
744
- yet**. Most default features are exposed via PROPS on the
745
- components your integration already mounts:
746
- - "search bar" → `showSearchBar` on `CometChatConversations`
747
- (and `onSearchBarClicked` to swap in `<CometChatSearch>` for
748
- advanced dual-scope search if the user wants that)
749
- - "filter conversations / messages" → `conversationsRequestBuilder`
750
- / `messagesRequestBuilder`
751
- - "custom empty / error / loading state" → `emptyView`,
752
- `errorView`, `loadingView` on the list components (verified vs the v6
753
- React kit; the `*StateView` form is only on `CometChatNotificationFeed`)
754
- - "custom message bubble" → `templates` prop on
755
- `CometChatMessageList` (NOT a custom bubble component)
756
- - "hide / disable a sub-feature" → `disable*` boolean props
757
- - "click handler" → `onItemClick`, `onMessageClick`,
758
- `onSearchBarClicked`, `onBack`
759
- - "custom subtitle / status / timestamp" → `subtitleView`,
760
- `statusView`, `timestampView`
761
- Process before any code change:
762
- 1. Read the files in `.cometchat/state.json` `files_owned` and
763
- grep for the `<CometChat[A-Z]` JSX components actually in use:
764
- ```bash
765
- grep -hoE '<CometChat[A-Z][a-zA-Z]*' \
766
- $(jq -r '.files_owned[]' .cometchat/state.json 2>/dev/null) \
767
- 2>/dev/null | sort -u
768
- ```
769
- 2. Query the docs MCP for `"<ComponentName> props"` for each one.
770
- 3. If a prop matches the user's intent, **add the prop and stop**.
771
- No new components, no custom CSS, no new files.
772
- 4. Only if no prop matches, route to the `cometchat-customization`
773
- skill for the full four-tier discovery.
774
- - **Extension / AI feature:** run `cometchat apply-feature <id>`. The
775
- CLI hits the dashboard API directly using the bearer token from
776
- `cometchat auth login` (stored in the OS keychain). For native
777
- cohorts (iOS / Android / Flutter / Angular), pass `--app-id <id>`
778
- explicitly because there's no `.cometchat/state.json`. AI features
779
- also take `--openai-key sk-…` the first time:
780
-
781
- ```bash
782
- # Web/RN (state.json present):
783
- cometchat apply-feature polls
784
- cometchat apply-feature smart-replies --openai-key sk-...
785
-
786
- # Native (stateless):
787
- cometchat apply-feature polls --app-id A1B2C3
788
- cometchat apply-feature smart-replies --app-id A1B2C3 --openai-key sk-...
789
- ```
790
-
791
- Response shapes (`--json`):
792
- - `"status": "applied"` → done. Tell the user to hard-refresh
793
- (Cmd+Shift+R) the browser tab running their dev server.
794
- - `"status": "already-applied"` → the feature is already enabled
795
- in this integration's `state.applied_features`.
796
- - `"status": "auth-required"` → run `cometchat auth login` first.
797
- - `"status": "openai-key-required"` (ai-feature only) → re-run
798
- with `--openai-key sk-…`.
799
- - `"status": "error"` → surface `next_steps` verbatim.
800
-
801
- **Only fall back to the dashboard** when the CLI returns `error` or
802
- isn't available. Manual flow for extensions: app.cometchat.com →
803
- *Chat & Messaging → Features → flip Status toggle*.
804
-
805
- **Note:** if the feature has `auto_wired_in_uikit: false` in the
806
- catalog (most non-default extensions), the toggle alone isn't
807
- enough — you also need to register the extension via
808
- `UIKitSettingsBuilder.setExtensions([...])` before `init`. Query
809
- the docs MCP for the exact builder syntax.
810
-
811
- - **Dashboard-only:** the CLI returns `manual-action-required` and
812
- prints the dashboard path. These need third-party config (Giphy
813
- API key, Chatwoot webhook, etc.) that only the user can supply.
814
- Walk them through the dashboard.
815
-
816
- - **Package-install (calls):** run `npm install @cometchat/calls-sdk-javascript`
817
- directly. The user opted in, that IS consent.
818
-
819
- - **Component-swap:** run `cometchat apply-feature <id>` (web/RN
820
- only — needs `state.json`). The CLI handles the swap
821
- deterministically. Do NOT hand-edit.
822
-
823
- ### Step 5 — Verify
824
-
825
- ```bash
826
- npx @cometchat/skills-cli verify --json
827
- ```
828
-
829
- Surface any failed checks verbatim. If anything looks off after enabling
830
- a feature (drift, unexpected build error, env warning), run
831
- `cometchat doctor` for combined drift + env + AST diagnostics with
832
- per-issue fix instructions, or route to the `cometchat-troubleshooting`
833
- skill for deeper triage.
834
-
835
- ## Hard rules
836
-
837
- - Never modify a project without an existing CometChat integration.
838
- - Always query the docs MCP for SDK reference (do not invent function names).
839
- - For component-swap, extension, and ai-feature types, always use
840
- `cometchat apply-feature <id>` — the CLI is the source of truth,
841
- never hand-edit and never tell the user to navigate the dashboard
842
- unless the CLI itself returns `manual-action-required`.
843
- - For ai-feature types, the OpenAI key prerequisite is the only
844
- manual input — pass it as `--openai-key sk-…` the first time per
845
- app.
846
- - For native cohorts (iOS / Android / Flutter / Angular), always
847
- pass `--app-id <id>` because their projects don't write
848
- `.cometchat/state.json`.
849
- - For package-install features (calls), the user opting in IS consent —
850
- run `npm install <package>` directly.
851
- - For dashboard-only features (third-party API keys, webhooks,
852
- multi-field config), walk the user through the dashboard — these
853
- cannot be automated.
854
- - Always use `npx @cometchat/skills-cli`.
855
-
856
- ## Sources
857
-
858
- - [Core features](https://www.cometchat.com/docs/ui-kit/react/core-features)
859
- - [Extensions](https://www.cometchat.com/docs/ui-kit/react/extensions)
860
- - [AI features](https://www.cometchat.com/docs/ui-kit/react/ai-features)
861
- - [Call features](https://www.cometchat.com/docs/ui-kit/react/call-features)