@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
@@ -0,0 +1,104 @@
1
+ # Sendbird → CometChat feature map
2
+
3
+ **How to use:**
4
+ 1. For each feature the ledger shows, find its row below.
5
+ 2. Check the **CometChat id** in the TARGET family's `features.json`. Ids differ slightly per family, so match on the `id` OR the entry's `name`. Common aliases: `threaded-replies`≈`threaded-conversations`, `delivery-read-receipts`≈`read-receipts`, `typing-indicators`≈`typing-indicator`, `quoted-replies`≈`quoted-reply`, `message-search`≈`conversation-advanced-search`, `media-file-attachments`≈`media-sharing`, `users-groups`≈`group-chat`, `text-messaging`≈`instant-messaging`, `smart-reply`≈`ai-smart-replies`.
6
+ 3. **Found** → migrate, wired by the skill in *Via*.
7
+ 4. **Not found (or the id column says "none")** → search the docs at BOTH levels: the UI Kit and the Chat SDK / REST API (SKILL step 3). Documented at either → migrate; no UI Kit drop-in means build it on the SDK method in the app's own UI. Documented at neither → apply *If absent*.
8
+
9
+ **Actions under *If absent*** apply only AFTER both docs searches (UI Kit and SDK) come back empty. The table's REMOVE is never a shortcut past that check, and the report's evidence must quote both queries:
10
+ - `REMOVE` → UNSUPPORTED: remove it fully (SKILL step 6) and list it in the report.
11
+ - `CHANGE` → keep the capability on the closest CometChat equivalent, and list the difference under "Behavior changes".
12
+
13
+ **Enablement:** a feature whose `features.json` entry says `needs_dashboard`, or is an extension/AI feature, still migrates in code. Add "enable <feature> in the CometChat dashboard" to the action items. `@cometchat/skills-cli features enable` can do it after `auth login`.
14
+
15
+ **Rows are grouped by area.** Columns: Sendbird feature (signals) · CometChat id · Via · If absent.
16
+
17
+ ### Messaging basics
18
+
19
+ | Sendbird feature (signals) | CometChat id | Via | If absent |
20
+ |---|---|---|---|
21
+ | 1:1 + group chat (`GroupChannel`, `isDistinct`) | `core-chat-surface`, `users-groups`, `text-messaging` | core | — (always present) |
22
+ | Channel list with unread badges, last message (`GroupChannelList`, `unreadMessageCount`) | `core-chat-surface` | core | — |
23
+ | Edit / delete messages (`updateUserMessage`, `deleteMessage`) | `text-messaging` | core | — |
24
+ | Typing indicators (`startTyping`, `onTypingStatusUpdated`) | `typing-indicators` | core / features | CHANGE (drop the indicator) |
25
+ | Read + delivery receipts (`markAsRead`, `getReadMembers`, `onDeliveryReceiptUpdated`) | `delivery-read-receipts` | core / features | CHANGE |
26
+ | Mark as unread (`markAsUnread`) | `mark-as-unread`, else the SDK's mark-as-unread call (`/sdk/<platform>/delivery-read-receipts`; needs Enhanced Messaging Status → action item) | features / SDK | REMOVE |
27
+ | Files, images, video, multi-file (`sendFileMessage(s)`) | `media-file-attachments` | core / features | CHANGE (single file per message) |
28
+ | Voice messages (voice recorder, `VoiceMessage`) | `voice-notes` | features | REMOVE the recorder, keep audio-file playback |
29
+ | Threads (`parentMessageId`, `Thread`, `ThreadInfo`) | `threaded-replies` | features / placement | REMOVE the thread UI |
30
+ | Quote reply (`ReplyType.QUOTE_REPLY`) | `quoted-replies` | features | REMOVE |
31
+ | Reactions (`addReaction`, `onReactionUpdated`) | `reactions` | features | REMOVE |
32
+ | Custom emoji sets for reactions (`getAllEmoji`, emoji categories) | none | docs | CHANGE (the kit's default emoji) |
33
+ | Mentions (`mentionedUsers`, `MentionType`) | `mentions` | features | REMOVE the mention picker, keep plain text |
34
+ | Polls (`sb.poll`, `PollCreateParams`) | `polls` | features | REMOVE |
35
+ | Message search (`MessageSearchQuery`) | `message-search` | features / placement | REMOVE |
36
+ | Pinned messages (`pinMessage`, `pinnedMessageIds`) | `pin-message` | features | REMOVE |
37
+ | Scheduled messages (`createScheduledUserMessage`) | none | docs | REMOVE |
38
+ | Forward / copy message to another channel (`copyUserMessage`) | none | docs | REMOVE |
39
+ | Translation (`translateUserMessage`, `translationTargetLanguages`) | `message-translation` | features | REMOVE |
40
+ | Link previews (`ogMetaData`) | `link-preview` | features | CHANGE (plain links) |
41
+ | Disappearing messages / retention (`messageSurvivalSeconds`) | `disappearing-messages` | features | REMOVE |
42
+ | Custom message types, `customType`, `data`, message templates | `custom-message-types` (Angular also `card-messages`) | customization / features | CHANGE (render as text + metadata) |
43
+ | Message `metaArrays` / `data` payloads | message metadata (core SDK) | core | — |
44
+
45
+ ### Users and presence
46
+
47
+ | Sendbird feature (signals) | CometChat id | Via | If absent |
48
+ |---|---|---|---|
49
+ | Presence, last seen (`connectionStatus`, `lastSeenAt`) | `user-presence` | core | CHANGE |
50
+ | User profile: nickname, profile image, metadata (`updateCurrentUserInfo`) | user name / avatar / metadata (core SDK) | core | — |
51
+ | Block / unblock users (`blockUser`) | `block-unblock-user` (iOS), else the core SDK block-users call | core / docs | REMOVE |
52
+
53
+ ### Channels and moderation
54
+
55
+ | Sendbird feature (signals) | CometChat id | Via | If absent |
56
+ |---|---|---|---|
57
+ | Open channels (`OpenChannel`, `enter`, `OpenChannelHandler`) | `users-groups` (a **public** group) | core / components | CHANGE (members join; history persists) |
58
+ | Join a public channel / group (`OpenChannel.enter`, join button, `addMembers`) | join a public group: `CometChatGroups` (joinable list) + the SDK's `CometChat.joinGroup(guid, type)` (`/sdk/<platform>/groups-join-leave`) | components / SDK | REMOVE |
59
+ | Supergroups, broadcast channels (`isSuper`, `isBroadcast`) | `users-groups` | core | CHANGE (over 300 members → no receipts/typing; broadcast → admins-only posting only if the docs document a send restriction) |
60
+ | Ephemeral channels (`isEphemeral`) | none | docs | CHANGE (messages are now stored) |
61
+ | Channel name, cover, custom type, `data` — incl. an owner's rename / re-cover screen | group name / icon / tags / metadata; editing = the SDK's update-group call (`/sdk/<platform>/update-group`) | core / SDK | — |
62
+ | Channel metadata (`createMetaData`) | group metadata (docs) | core / docs | CHANGE |
63
+ | Metacounters (`createMetaCounters`, atomic increments) | none | docs | REMOVE (or CHANGE to group metadata, non-atomic — say which) |
64
+ | Operators, roles (`addOperators`, `role`) | group member scopes: admin / moderator / participant (`users-groups`) | components / docs | CHANGE |
65
+ | Ban / kick members, banned-members list + unban (`banUser`, `removeMember`, `BannedUserListQuery`, `unbanUser`) | group member management: the kit's members list + the SDK's banned-members request + unban (`/sdk/<platform>/group-kick-ban-members`) | components / SDK | REMOVE |
66
+ | Mute a member, freeze a channel (`muteUser`, `freeze`) | none | docs | REMOVE |
67
+ | Invitations with accept/decline (`invite`, `acceptInvitation`) | none (members are added directly) | docs | CHANGE (invite = add member) + REMOVE the accept/decline UI |
68
+ | Hide / archive channel (`hide`, `unhide`) | none | docs | REMOVE |
69
+ | Report user/message/channel (`report*`) | `report-message` / `moderation` | features | REMOVE |
70
+ | Profanity / domain / image filters (dashboard) | `moderation` | features + dashboard | action item: recreate the rules |
71
+
72
+ ### Push, calls and other products
73
+
74
+ | Sendbird feature (signals) | CometChat id | Via | If absent |
75
+ |---|---|---|---|
76
+ | Push (`registerFCMPushTokenForCurrentUser`, `registerAPNSPushTokenForCurrentUser`) | `push-notifications` | push | action item (credentials in the dashboard) |
77
+ | Push preferences: DND, per-channel mute, trigger options, snooze | notification preferences: mute/unmute conversations, DND, schedules (`/notifications/preferences`) | push / SDK | REMOVE only what the preferences page lacks (e.g. snooze) |
78
+ | Sendbird Calls: 1:1 `dial`, group `Room` | `voice-video-calls` | calls (or the headless calls peer) | REMOVE |
79
+ | AI chatbot, bot users | `ai-assistant`, `ai-agents`, `smart-reply`, `conversation-summary` | features | REMOVE |
80
+ | Sendbird Desk (tickets) | `support-integrations` | features / docs | REMOVE |
81
+ | Sendbird Live (`@sendbird/live`) | `live-streaming` | features / docs | REMOVE |
82
+ | Business Messaging / notification feed (`FeedChannel`, notification templates) | `notification-feed` / `campaigns` | features / docs | REMOVE |
83
+ | Local caching / collections (`localCacheEnabled`, `*Collection`) | none | core | CHANGE (online-first; list the offline gap) |
84
+
85
+ ### Look and feel, server
86
+
87
+ | Sendbird feature (signals) | CometChat id | Via | If absent |
88
+ |---|---|---|---|
89
+ | Theme, colors, dark mode (`colorSet`, `SBUTheme`, `setDefaultThemeMode`) | theming | customization | — |
90
+ | String sets / localization (`stringSet`, `SBUStringSet`) | localization (docs) | customization | CHANGE (the kit's defaults) |
91
+ | Webhooks (`x-sendbird-signature`) | CometChat webhooks | server (SKILL step 7) | REMOVE (and list) each event with no equivalent |
92
+ | Platform API admin calls (bulk users, channel admin) | CometChat REST (docs) | server | REMOVE the call + list it |
93
+
94
+ A feature in the ledger that has no row here: treat it like a `none` row. Check `features.json`, then the docs, then REMOVE or CHANGE, and say which in the report.
95
+
96
+ ## Deciding "unsupported" — the verification ladder (read before any REMOVE)
97
+
98
+ **An MCP search that returns NOTHING is NOT evidence of "unsupported" — nor is the MCP being down.** An empty result (or "no dedicated page") is INCONCLUSIVE: the feature is often documented under CometChat's OWN term (a vendor "voice message recorder" is CometChat's **media recorder** / **voice notes**), folded into a broader page (a composer prop, not its own page), or just ranked out of the top hits. So when the MCP doesn't surface it, walk this ladder BEFORE any verdict:
99
+
100
+ 1. **Re-query with CometChat vocabulary** — component/product names; drop over-qualifiers like the version/platform.
101
+ 2. **LIVE-FETCH the likely docs page** — `fetch_cometchat_doc_page` (or a plain fetch of the docs URL + `.md`) of the family's composer / features / component page.
102
+ 3. **Cross-check the family CATALOG** (the installed component/symbol list) — if the component is there, it IS supported, migrate it.
103
+
104
+ Mark **UNSUPPORTED only** when the CATALOG lacks it AND the live doc fetch (not merely an empty MCP search) also finds nothing. If it genuinely can't be checked (tooling down, network blocked), KEEP it and mark `needs-verification` — never REMOVE a feature you could not verify is absent. **Every UNSUPPORTED row needs evidence** in the report: the `features.json` result plus the exact UI Kit AND SDK docs queries you ran and what each returned. A REMOVE with no docs query is not allowed. Docs MCP not connected? Use a plain fetch (`RULES.md` → Fetch discipline).
@@ -0,0 +1,86 @@
1
+ <!-- family-agnostic: per-platform-by-design — this reference IS the per-platform Sendbird inventory + target-family table; one row per platform by design. -->
2
+ # Sendbird inventory — what to find, and where it goes
3
+
4
+ Search case-insensitively. Skip `node_modules/`, `Pods/`, `build/`, `.dart_tool/`, `.gradle/` and `.git/`. A package hit tells you Sendbird is present. The **import/API hits** tell you *what the app does with it*, and each one becomes a ledger row (`file:line → purpose`). The names below are the common ones, not a closed list: any identifier starting with `Sendbird`/`SendBird`/`SB` imported from a Sendbird package counts.
5
+
6
+ ## Target family (where each platform lands)
7
+ | App platform (detect `framework`) | Sendbird packages you'll see | CometChat family (`peers.yaml`) | UIKit mode → | SDK mode (own UI) → |
8
+ |---|---|---|---|---|
9
+ | React / Next / Vite / CRA / Astro / React Router | `@sendbird/uikit-react`, `sendbird-uikit` (v2), `@sendbird/chat`, `sendbird` (v3) | `react-v7` | `cometchat-react-v7-core` + `-components`/`-placement` | the core's SDK fallback (`@cometchat/chat-sdk-javascript`, docs-map → SDK docs) |
10
+ | Angular | `@sendbird/chat`, `sendbird` (no official Angular UIKit — usually SDK mode) | `angular-v5` | `cometchat-angular-v5-core` | the core's SDK fallback (JS Chat SDK) |
11
+ | React Native / Expo | `@sendbird/uikit-react-native`, `@sendbird/uikit-react-native-foundation`, `@sendbird/chat`, `@sendbird/calls-react-native` | `react-native` | `cometchat-react-native-core` | `cometchat-react-native-sdk` |
12
+ | iOS (Swift) | SPM `sendbird-chat-sdk-ios` / `sendbird-uikit-ios` / `sendbird-swiftui-ios`; pods `SendbirdChatSDK`, `SendBirdUIKit`, `SendBirdSDK` (v3), `SendBirdCalls` | `ios` | `cometchat-ios-core` (UIKit; host SwiftUI screens via a representable) | the iOS core's SDK fallback (`CometChatSDK`) |
13
+ | Android | `com.sendbird.sdk:sendbird-chat`, `com.sendbird.sdk:uikit`, `com.sendbird.sdk:uikit-compose`, `com.sendbird.sdk:sendbird-calls`, the `repo.sendbird.com` Maven repo | `android-v6` (cohort from `android_variant`: Compose → `compose-*`, Views → `kotlin-*`) | `cometchat-android-v6-core` | `cometchat-android-v5-sdk` |
14
+ | Flutter | `sendbird_uikit`, `sendbird_chat_sdk`, `sendbird_sdk` (v3) | `flutter-v6` | `cometchat-flutter-v6-core` | the Flutter core's SDK fallback (`cometchat_sdk`, re-exported by the kit) |
15
+ | Calls only (no chat) | `sendbird-calls`, `@sendbird/calls-react-native`, `SendBirdCalls`, `com.sendbird.sdk:sendbird-calls` | the matching headless calls peer (`js-calls`, `react-native-calls`, `ios-calls`, `android-calls`, `flutter-calls`) | — | `cometchat-js-v5-sdk` / `cometchat-react-native-v5-sdk` / `cometchat-ios-v5-sdk` / `cometchat-android-v5-calls-sdk` / `cometchat-flutter-v5-sdk` |
16
+ | Server (Node, Python, Go, Java, Ruby, PHP…) | HTTP to `api-<APP_ID>.sendbird.com/v3/…` with an `Api-Token` header; `sendbird-platform-sdk*` | — (REST, no UI Kit) | — | CometChat REST (`/rest-api/…`) |
17
+
18
+ A platform that isn't in this table (Vue, Svelte, Unity, .NET MAUI, Unreal…) has no family in this pack → STOP (2): report only.
19
+
20
+ ### React Native is a native platform for the build, not a web one
21
+ The migration is not done when Metro bundles: `cd ios && pod install` (the kit's Podfile needs the
22
+ `modular_headers` lines the family `-core` lists, or `pod install` itself fails), then BUILD **and
23
+ RUN** both platforms. Three failures never appear in CI — only when a person uses the app:
24
+
25
+ | Trap | What you see |
26
+ |---|---|
27
+ | React Native >= 0.87 on iOS | the kit's composer calls `InteractionManager`, removed from RN core in 0.87 — tapping send throws (`InteractionManager has been removed from react-native core`); Android is unaffected. Shim: the family `-troubleshooting` |
28
+ | a missing native peer | fails at MOUNT, and the error names the peer (`gesture-handler`, `svg`, `video`), never CometChat |
29
+ | `tsc --noEmit` | reports errors from inside the kit's own shipped source (it ships raw `src/*.tsx`), so gate on the Metro bundle — see the family `-core` -> Verify it works, which also carries the run recipe for a machine where port 8081 is taken |
30
+
31
+ ## Grep signals
32
+ **Manifests**: `package.json`, `pubspec.yaml`, `build.gradle(.kts)`, `settings.gradle(.kts)`, `gradle/libs.versions.toml`, `Podfile`, `Package.swift`, `*.xcodeproj/project.pbxproj`, `Package.resolved`, `requirements.txt`, `go.mod`, `Gemfile` and `composer.json` → `sendbird`.
33
+
34
+ **Init / auth**:
35
+ - v4 SDK: `SendbirdChat.init`, `.connect(`, `.disconnect(`, `authToken`/`accessToken`/`sessionToken`, `SessionHandler` (token refresh).
36
+ - v3 SDK: `new SendBird(`, `SendBird.getInstance()`.
37
+ - iOS: `SendbirdUI.initialize`, `SBUGlobals.currentUser`.
38
+ - Android: `SendbirdUIKit.init`, `SendbirdUIKitAdapter`.
39
+
40
+ **Providers / screens (UIKit)**:
41
+ - React:
42
+ - `SendbirdProvider`, `App` (from `@sendbird/uikit-react/App`).
43
+ - `GroupChannelList`, `GroupChannel`, `ChannelList`, `Channel`, `ChannelSettings`.
44
+ - `Thread`, `MessageSearch`, `CreateChannel`, `OpenChannel`, `OpenChannelSettings`, `EditUserProfile`.
45
+ - `useSendbirdStateContext`, `sendbirdSelectors`.
46
+ - CSS `@sendbird/uikit-react/dist/index.css`.
47
+ - React Native: `SendbirdUIKitContainer`, `createGroupChannelListFragment`, `createGroupChannelFragment`, `createGroupChannelCreateFragment`, `createGroupChannelSettingsFragment`, `useSendbirdChat`, `useConnection`, `platformServices`.
48
+ - iOS: `SBUGroupChannelListViewController`, `SBUGroupChannelViewController`, `SBUOpenChannelViewController`, `SBUCreateChannelViewController`, `SBUMessageThreadViewController`, `SBUTheme`, `SBUStringSet`; SwiftUI `GroupChannelListView`, `GroupChannelView`.
49
+ - Android: `ChannelListActivity`, `ChannelActivity`, `ChannelListFragment`, `ChannelFragment`, `OpenChannelFragment`, `MessageThreadFragment`, `SendbirdUIKit.setDefaultThemeMode`; Compose `ChannelListScreen`, `ChannelScreen`, `SendbirdUikitCompose`.
50
+ - Flutter: `SendbirdUIKit.init`, `SBUGroupChannelListScreen`, `SBUGroupChannelScreen`, `SBUTheme`.
51
+
52
+ **Channels**:
53
+ - `GroupChannel`, `OpenChannel`, `FeedChannel`.
54
+ - Creation: `createChannel`, `createChannelWithUserIds`, `GroupChannelCreateParams`, `isDistinct`, `isSuper`, `isPublic`, `isBroadcast`, `isEphemeral`, `customType`.
55
+ - Queries: `GroupChannelListQuery`, `createMyGroupChannelListQuery`, `GroupChannelCollection`.
56
+
57
+ **Messages**:
58
+ - Send: `sendUserMessage`, `sendFileMessage`, `sendFileMessages`, `sendScheduledMessage`/`createScheduledUserMessage`.
59
+ - Edit/delete: `updateUserMessage`, `deleteMessage`.
60
+ - Load: `PreviousMessageListQuery`, `getMessagesByTimestamp`, `MessageCollection`.
61
+ - Threads and replies: `parentMessageId`, `ThreadInfo`, `ReplyType`.
62
+ - Flags: `copyUserMessage`/`copyFileMessage`, `pinMessage`, `markAsRead`, `markAsDelivered`, `markAsUnread`.
63
+ - Extras: `addReaction`, `mentionedUsers`/`MentionType`, `translateUserMessage`/`translationTargetLanguages`, `ogMetaData`, `metaArrays`, `message.data`/`customType`.
64
+
65
+ **Events**: `GroupChannelHandler`, `OpenChannelHandler`, `ChannelHandler` (v3), `ConnectionHandler`, `UserEventHandler`, `addGroupChannelHandler`/`addChannelHandler`, `onMessageReceived`, `onTypingStatusUpdated`, `onReadStatus`/`onUnreadMemberStatusUpdated`, `onDeliveryReceiptUpdated`, `onReactionUpdated`.
66
+
67
+ **Users / moderation**:
68
+ - Users: `blockUser`, `unblockUser`, `ApplicationUserListQuery`, `updateCurrentUserInfo`, `UserEventHandler`.
69
+ - Channel moderation: `banUser`, `muteUser`, `freeze`, `addOperators`, `report` (`reportUser`/`reportMessage`/`reportChannel`).
70
+ - Channel data: `createMetaData`, `createMetaCounters`.
71
+ - Membership: `hide`/`unhide`, `invite`/`acceptInvitation`/`declineInvitation`, `setMyPushTriggerOption`, `setDoNotDisturb`, `setSnoozePeriod`, `setCountPreference`.
72
+
73
+ **Push**: `registerFCMPushTokenForCurrentUser`, `registerAPNSPushTokenForCurrentUser`, `registerPushToken`, `SendbirdPushHelper`, `SendbirdPushHandler`, `unregisterPushToken*`. Also check the push message payload parsing: a `sendbird` key in the notification data.
74
+
75
+ **Other products**:
76
+ - Calls: `SendBirdCall`, `SendbirdCall`, `DirectCall`, `dial(`, `Room`/`RoomType`.
77
+ - Desk: `sendbird-desk`, `SendBirdDesk`, `Ticket`.
78
+ - Live: `@sendbird/live`.
79
+ - AI chatbot: `bot`/`ai_agent` channel types, `AIChatBot`, `@sendbird/chat-ai-widget`.
80
+ - Business Messaging / Notifications: `FeedChannel`, `NotificationCollection`, message templates.
81
+
82
+ **Server**: `api-*.sendbird.com`, `Api-Token`, `/v3/users/*/token` (session tokens), `/v3/group_channels`, `/v3/open_channels`, and webhook handlers that verify `x-sendbird-signature`.
83
+
84
+ **Env / config**: `SENDBIRD_APP_ID`, `VITE_SENDBIRD_*`, `NEXT_PUBLIC_SENDBIRD_*`, `EXPO_PUBLIC_SENDBIRD_*`, `SENDBIRD_API_TOKEN`, `SendbirdAppId` in plists/`local.properties`/`--dart-define`, and CI secrets named `SENDBIRD_*`.
85
+
86
+ **Tests / mocks**: `jest.mock('@sendbird/…')`, fake `SendbirdChat`, and fixtures containing channel URLs.
@@ -0,0 +1,10 @@
1
+ # Native platforms (Android · iOS) — NOT done until the platform build passes
2
+
3
+ Editing the code is not enough on native; a migration that "looks done" here routinely fails to build or isn't actually wired. You MUST, before declaring done:
4
+ - **Bump the sample's build toolchain to the core skill's floors FIRST** (an old sample toolchain is the #1 native build failure). Android: set `gradle/wrapper/gradle-wrapper.properties` `distributionUrl` to **Gradle ≥ 8.11**, plus **AGP ≥ 8.9.1 · compileSdk 36 · minSdk 28 · Kotlin ≥ 2.1** (per the family `-core` skill's build floors — a stale wrapper gives the opaque `checkDebugAarMetadata` / "Gradle version" error). iOS: resolve the SPM (or pods) graph. Flutter: swap the dep in `pubspec.yaml`, then `flutter pub get`; the settings file is an **asset** — `cometchat-settings.json` at the project root AND listed under `flutter: assets:` in `pubspec.yaml`, or the build fails with "No file or variants found for asset".
5
+ - **The wrapper file may refuse every write.** `gradle/wrapper/gradle-wrapper.properties` is a protected path: `Edit`, `Write` and a Bash `sed` against it can each be refused. Attempt it anyway, and if every route is refused, say **exactly which commands were refused** in the report instead of reporting the bump as done — a stale wrapper is the #1 Android build failure (AGP >= 8.9.1 needs Gradle >= 8.11.1), so a silent omission here costs the whole build. **Keep shell metacharacters out of the commands you run:** a `|` (even as a sed delimiter, or inside an alternation like `(bin|all)`), a `{a,b}` brace expansion, a `$(...)` substitution or a `VAR=x cmd` env prefix is parsed as shell syntax by the command-permission layer and the WHOLE command is refused, silently. Use `/` delimiters, character classes, plain literals and separate lines before concluding an edit is impossible.
6
+ - **Confirm the kit dependency is added AND `initFromSettings` is wired** in the platform's app entry — Android `Application.onCreate`, iOS `AppDelegate`/`App`, Flutter `main`. "No kit dependency" and "no `initFromSettings` call" mean the migration is incomplete, not done.
7
+ - **Port `toCometChatId` to the CLIENT language** (Kotlin/Swift/Dart — verbatim port in `references/concept-map.md` §IDs), in its own module (Flutter: `lib/cometchat/ids.dart`; Android: `…/cometchat/Ids.kt`; iOS: `CometChat/Ids.swift`), and **call it at login** — not only in the JS data script. **The UID is `toCometChatId(<the app's existing Sendbird user id>)`** — the `SendbirdUIKit.connect('…')` / `SendbirdChat.connect` id or the app's stored user id. The core skill's "never invent a UID / `cometchat-uid-1` for a fresh app" advice does NOT apply to a migration: the identity already exists, keep it (single-prompt contract → *Keep every identity source*).
8
+ - **Update `LICENSE`/attribution/README** — a vendor copyright line is residue too.
9
+ - **RUN the platform build** (`./gradlew :app:assembleDebug` · `xcodebuild … build` · `flutter analyze && flutter build web` or `flutter build apk --debug`) and fix EVERY error. A native migration is not done until its own build passes. **Then run it** (§Verify it works): Flutter → `flutter run -d web-server --web-port 8765` via the Bash tool's **background mode** (`run_in_background`), then `sleep 20` and **Read** its output file (repeat ×3) until "is available at" or an exception shows, then **stop that task** and continue. No shell loops, `&`, `$(…)` or `timeout` (denied under headless permissions; `timeout` is absent on macOS), and never park the migration on a notification (headless: that ends the run).
10
+ - **NEVER text-replace inside `*.xcodeproj/project.pbxproj` or `*.xcscheme`.** They are structured build graphs, not manifests: a blind find-and-replace (including a residue scrub) silently breaks the build in ways the compiler cannot report. Edit only the SPM `XCRemoteSwiftPackageReference` blocks and the product-name strings you actually mean to change, and leave every `PBXFileReference`, `productReference`, Products-group child and scheme `BuildableName` intact — a product is `Foo.app` / `Foo.appex`, never bare `Foo`. **Verify after editing:** the app target still has a `productReference`, the Products group still lists it, and the scheme's `BuildableName` still ends in `.app`. If these are missing, `xcodebuild` still reports **BUILD SUCCEEDED** while Xcode's Run silently does nothing — there is no error message anywhere, so the build passing is not evidence they survived.
@@ -0,0 +1,59 @@
1
+ # Report template — `COMETCHAT_MIGRATION.md`
2
+
3
+ Write this file at the repo root, filled from the ledger. Leave out an empty section's rows, but keep its heading with "None." so the reader knows it was checked. Then END the chat reply with sections 3 and 5 pasted in full (SKILL step 11).
4
+
5
+ ```markdown
6
+ # Sendbird → CometChat migration
7
+
8
+ **Branch:** cometchat-migration (created from <base>; <n> uncommitted files came along) · **Platform:** <framework> → CometChat <family label> · **Mode:** UIKit | SDK | mixed
9
+ **Build:** ✅ passes (`<command>`) | ❌ <n> errors (listed below) · **Sendbird residue:** none | <paths>
10
+
11
+ ## 1. Summary
12
+ <2–4 sentences: what the app did with Sendbird, what it does now, the headline removals.>
13
+
14
+ ## 2. Migrated
15
+ | Sendbird feature | CometChat equivalent | Files |
16
+ |---|---|---|
17
+ | Group channels + channel list | Conversations + message pane (UI Kit) | src/chat/ChatPage.tsx, … |
18
+
19
+ ## 3. Removed — not available in CometChat
20
+ | Feature | What it did | Removed from | What users lose | Evidence (features.json · `UI Kit:` docs query → result · `SDK:` docs query → result) | Closest CometChat alternative |
21
+ |---|---|---|---|---|---|
22
+ | Scheduled messages | "Send later" in the composer menu | src/chat/Composer.tsx, src/api/schedule.ts, route /scheduled | Can't schedule a message | absent · UI Kit: `search_cometchat_docs "<feature> react ui kit"` → no page · SDK: `search_cometchat_docs "<feature> javascript sdk"` → no page | A server job that sends through the REST API at the chosen time |
23
+
24
+ ### Dev/QA-only code removed (not user features)
25
+ | Code | What it did | Removed from |
26
+ |---|---|---|
27
+ | <debug panel / event simulator / screenshot harness> | <…> | <paths> |
28
+
29
+ ## 4. Behavior changes (migrated, works differently)
30
+ - Open channels are now public groups: members join once, and history persists.
31
+
32
+ ## 5. Your action items
33
+ 1. Add your CometChat credentials (App ID, Region, Auth Key for dev) to `<untracked local env file>`. Never put them in a git-tracked file; placeholders are there now.
34
+ 2. Create a REST API key and set `COMETCHAT_REST_API_KEY` on the server (the token endpoint + the data script).
35
+ 3. Import your history: see `scripts/cometchat-migration/README.md` (dry run first).
36
+ 4. **Messages older than ~6 months were NOT imported** (<n> skipped) — CometChat's default retention window (a CometChat-side limit, not Sendbird's). To bring them over, purchase Extended Storage (contact CometChat sales), then re-run the import.
37
+ 5. **Re-host media before deleting Sendbird** (<n> attachments). CometChat stores attachment URLs by reference, not the files — re-host them to your own / CometChat media storage, or images and files break once the Sendbird URLs expire.
38
+ 6. Enable in the CometChat dashboard: <extensions / AI features the migrated features need>.
39
+ 7. Push: upload FCM/APNs credentials to CometChat (see the push setup).
40
+ 8. Point your webhooks at the new receiver and pick the events.
41
+ 9. Before production: switch from Auth Key login to server-issued auth tokens (if dev login was used).
42
+ 10. Remove the Sendbird secrets from your CI and hosting env, then delete the Sendbird app after the cut-over.
43
+
44
+ ## 6. Defaults taken (no questions were asked)
45
+ - <every decision made without asking, e.g. "UIKit mode: replaced Sendbird UIKit with the CometChat UI Kit", "voice-message recorder removed (no voice-notes in this family)">
46
+
47
+ ## 7. Verification
48
+ - Build: `<command>` → <result>
49
+ - Residue search: `sendbird` → <result>
50
+ - Tests: <ran / not present / updated n tests, removed m tests of removed features>
51
+ - Pre-existing issues (were failing before the migration): <list or none>
52
+ ```
53
+
54
+ Rules for the lists:
55
+ - Section 3's main table is for USER-facing features only. Debug panels, event simulators, doc-screenshot harnesses and demo settings go in the Dev/QA-only subsection, which needs no docs evidence. Moving a real user feature there to dodge the evidence rule is a defect.
56
+ - Every REMOVE row names the concrete files and UI entry points it touched, AND its evidence in this exact shape — `features.json`: <result> · `UI Kit:` `search_cometchat_docs "<feature> <platform> ui kit"` → <result> · `SDK:` `search_cometchat_docs "<feature> <platform> SDK"` → <result> (plus REST/live-fetch if used). A row whose cell lacks an explicit **SDK-level** query (the literal `SDK:` label or an `/sdk/` page) is graded as unevidenced, however right the removal is. "Removed polls" alone is not enough. **The Evidence cell is MANDATORY on every row and must never be blank** — this includes narrower/partial removals (e.g. "Threads overview tab" while threaded replies stay): still cite the `features.json` + UI-Kit + SDK queries that show the specific surface has no equivalent. A row with an empty Evidence cell is an incomplete report.
57
+ - **Section 3 is a TABLE, never prose.** Write every removal as a row of the 6-column table above — not as bullets, paragraphs or a list, however well written. A removal outside a table row is ungradeable and the section is read as an incomplete report. (An empty section is the one exception: keep the heading with "None.")
58
+ - "Closest CometChat alternative" must be a real, documented capability (from `features.json` or the docs), or `—`. Never invent one.
59
+ - Order the action items by what unblocks running the app first: credentials first, then data, then production hardening.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: cometchat-migrate-from-twilio
3
+ description: "Migrate an app from Twilio Conversations (or the deprecated Programmable Chat) to CometChat in ONE prompt, on any platform in this pack. Twilio is headless (no UI Kit), so this is client/SDK-mode: keep the app's own UI, swap the data layer to the CometChat Chat SDK (or, for a fresh chat UI, the CometChat UI Kit), rewrite the token server, remove features CometChat lacks, write a data-migration script, uninstall Twilio, verify the build, and end with a report. Triggers: 'migrate from Twilio to CometChat', 'migrate my app to CometChat' (Twilio detected), 'replace Twilio Conversations with CometChat', 'move off Twilio chat', 'twilio-conversations to cometchat', 'twilio programmable chat migration'."
4
+ license: "MIT"
5
+ compatibility: "FROM Twilio Conversations (`@twilio/conversations`, `twilio-conversations` iOS/Android, `twilio_conversations` Flutter) or Programmable Chat (`twilio-chat`, deprecated) → the CometChat family this pack detects. Node >=18 for the data-migration script."
6
+ metadata:
7
+ author: "CometChat"
8
+ version: "1.0.0"
9
+ tags: "cometchat migration twilio conversations programmable-chat competitor switch sdk data-import"
10
+ ---
11
+
12
+ > **Ground truth:** the TWILIO side (what to look for) is baked in `references/inventory.md` + `references/feature-map.md` — confirm each hit by reading the user's code and, where unsure, Twilio's current Conversations docs. The COMETCHAT side is never from memory: symbols from the target family's skills + catalog, feature existence from `features.json`, signatures via `cometchat-<family>-core/references/docs-map.md` (Docs MCP first — `RULES.md` → Fetch discipline). REST pages under `DOCS_BASE = https://www.cometchat.com/docs`.
13
+
14
+ ## Companion skills (read first)
15
+ - `cometchat-<family>-core` — the init → login → render (or the Chat SDK init/login) the migrated app lands on; `<family>` resolved in step 1.
16
+ - `cometchat-security` — the server token endpoint that replaces Twilio access tokens.
17
+
18
+ ## Use this skill when
19
+ "migrate my app from Twilio to CometChat", "replace Twilio Conversations", or "migrate my app to CometChat" when `npx @cometchat/skills detect --json` reports `migrate_from` vendor `twilio`. Sendbird/Stream apps → their own skills.
20
+
21
+ ## The single-prompt contract (read before step 1)
22
+ The migration request IS the approval (`RULES.md` → Competitor migration). Run every step to the end in one turn: no plan/approve gate, no questions — take the documented default and record it under *Defaults taken*. Work on a `cometchat-migration` git branch; never commit/push. You DO run the data-import script — but only at the very end and only after the user hands you the credentials (step 8); that single credential prompt is the sole exception to "no questions". Removing Twilio is the requested outcome; non-Twilio code is only rewired. Only STOP if: no Twilio usage found (hand to `cometchat`), the platform has no family in this pack (deliver the inventory as the report), or the app didn't build before you started (record it, migrate anyway, label pre-existing).
23
+
24
+ ## Twilio is headless — so this is client/SDK mode
25
+ Twilio Conversations ships **no UI Kit**; the app already has its **own chat UI** on the Twilio client. Default migration therefore **keeps that UI and swaps the data layer** to the CometChat **Chat SDK** (`cometchat-<family>-core` docs-map → SDK), mapping CometChat objects into the app's existing view models at the boundary. If the user instead wants CometChat's prebuilt UI, offer to replace their UI with the family UI Kit (a bigger change) — but the safe default is data-layer-only.
26
+
27
+ ## Migration workflow (BAKED — do every step, in order)
28
+ Every step applies to every app: users and history exist even in a small app, so steps 4 (`toCometChatId`) and 8 (data script) are ALWAYS delivered; skip only a step whose subject truly doesn't exist (no server → step 7), listed as `skipped: <why>`.
29
+ 1. **Detect.** `npx @cometchat/skills detect --json` → framework, `existing_cometchat`, `migrate_from`. Resolve `<family>` (`peers.yaml`; per-platform targets in `references/inventory.md`). Run the app's build once and record pass/fail.
30
+ 2. **Inventory.** Grep per `references/inventory.md` (packages, `Client`/`Conversations.Client`, access-token fetch, `getConversationBySid`/`create`, `sendMessage`, `getMessages`, participants, `stateChanged`/message listeners, media, attributes, push, the token server). Record each hit `file:line → purpose`.
31
+ 3. **Feature map.** For each Twilio feature, use `references/feature-map.md`, then check the CometChat id in the family's `features.json` AND the docs (UI Kit + SDK). Present → migrate. **An empty MCP search is INCONCLUSIVE, not "unsupported":** re-query with CometChat vocabulary (e.g. "media recorder"/"voice notes", not "voice message recorder"; drop version/platform over-qualifiers), then **LIVE-FETCH** the likely docs page (`fetch_cometchat_doc_page`, or a plain fetch of the docs URL + `.md`), then cross-check the family **CATALOG** (installed component/symbol list). Mark **UNSUPPORTED only** when the CATALOG lacks it AND the live doc fetch (not merely an empty MCP search) also finds nothing (then remove + list). Never call unsupported from memory or from an empty search; if it genuinely can't be verified, KEEP it + `needs-verification`.
32
+ 4. **Install CometChat + wire init/login** per `cometchat-<family>-core`. **Identity:** the CometChat UID is the app's Twilio **identity** through one shared `toCometChatId()` (`references/concept-map.md` §IDs), used by client login, the token server, and the data script.
33
+ 5. **Replace the data layer, file by file** (`references/concept-map.md`): Twilio `Client` init/token → CometChat init/login; `Conversation` → a user or group conversation; `Participant` → group member; `Message` send/get → CometChat send/messages request; `stateChanged`/`messageAdded` listeners → CometChat listeners (removed on unmount); media → attachments; `attributes` → metadata. Keep the app's UI; map at the boundary. Remove each Twilio import as its last use goes.
34
+ 6. **Remove unsupported features FULLY** — code, UI entry points, state, deps, tests. Log each for the report.
35
+ 7. **Server side.** Replace the Twilio **access-token** endpoint (API Key/Secret + Conversations Service SID → JWT) with a CometChat auth-token endpoint (`cometchat-security`; create user if missing → `POST /v3/users/{uid}/auth_tokens`). Map Twilio webhooks (`onMessageAdded`, etc.) to CometChat webhooks; drop/list any with no equivalent. Replace other Conversations REST calls with CometChat REST, or remove + list.
36
+ 8. **Data-migration script — write it, then run the import for the user.** `scripts/cometchat-migration/` per `references/data-migration.md`: export users/conversations/participants/messages from the Twilio Conversations REST API → transform with the shared `toCometChatId()` → import via the CometChat Data Import API. When the code migration is done, tell the user the **data-import script is ready** and ask for the credentials it needs — the Twilio keys (`TWILIO_ACCOUNT_SID`, `TWILIO_API_KEY`, `TWILIO_API_SECRET`, `TWILIO_CONVERSATIONS_SERVICE_SID`) and the CometChat **App ID, Region and full-access REST API key**. (This one credential prompt is the sole exception to the no-questions contract.) The moment they provide them, **RUN the import yourself** from env vars — never write secrets into a repo file: a `--dry-run` first (show counts), then the real import, then report results. Only messages within CometChat's **6-month retention window** import — tell the user to **reach out to CometChat to import messages older than 6 months**. If they decline to share credentials, leave running it as an action item.
37
+ 9. **Uninstall Twilio** — remove every Twilio dependency (`@twilio/conversations`, `twilio-conversations`, `twilio-chat`, the server `twilio` SDK) + lockfile, env vars, native config, CI secrets. Reinstall. Update the app's own docs (README/`.env.example`) and rename `twilio*` identifiers.
38
+ 10. **Verify** (§Verify it works). Fix build errors you introduced. No live tests unless asked.
39
+ 11. **Report.** Write `COMETCHAT_MIGRATION.md` from `references/report-template.md`; END the reply with its **Removed** + **Action items** lists.
40
+
41
+ ## Common pitfalls
42
+ - **Identities that CometChat rejects.** Twilio `identity` strings can hold characters CometChat UIDs can't (alpha-dash, ≤100, lowercased). Sanitize with one shared function everywhere.
43
+ - **1:1 vs group.** A Twilio conversation with exactly two participants → a CometChat **user** conversation, not a two-person group.
44
+ - **Optimistic send / pagination / listeners** differ — see `references/concept-map.md` behavioral gotchas; keep the app's UX identical, only the data source changes.
45
+ - **Access token ≠ Auth Key.** Twilio's client token maps to a CometChat **auth token** (server-minted), not the Auth Key. Never ship the Auth Key.
46
+ - **Half-removed features / left-behind listeners** — remove entry points too; remove every listener on unmount.
47
+ - **Programmable Chat vs Conversations** — older apps use `twilio-chat` (Channel/Member/Message); the mapping is the same shape, note which the app uses.
48
+
49
+ ## Verify it works
50
+ The app builds with the family's normal command · zero Twilio residue (`grep -rIiE 'twilio' .` finds only the report + data script) · every CometChat symbol exists in the catalog · every migrated feature is in `features.json`/docs; every UNSUPPORTED item is in the report with its files · client login, token server, and data script all use the same `toCometChatId()`.
51
+
52
+ **RUN it and read the logs — a compile is NOT a working app (do this; don't skip).** When you're done implementing, START the app and confirm it LOADS with the chat surface rendered and NO errors in the browser console / dev-server terminal (native: platform run + logs). Fix EVERY runtime error you introduced — a `Cannot read properties of undefined` from a half-migrated reference, or an SDK enum/class read at module-load before the SDK is ready, is a migration bug (see `cometchat-<family>-troubleshooting`). If it can't be started here, SAY SO and give the user the exact run command + what to watch for — never silently skip this.
@@ -0,0 +1,49 @@
1
+ # Twilio Conversations → CometChat concept map
2
+
3
+ Maps **roles**, not code. Take every CometChat name/signature from the target family's skills + catalog + docs (`cometchat-<family>-core/references/docs-map.md`). Platforms differ (web `on*Click`, RN `on*Press`, native init shapes); never port a snippet across families. Twilio is headless, so the default is **client/SDK mode** — keep the app's UI, swap the data layer.
4
+
5
+ ## IDs (do this first)
6
+ CometChat UIDs/GUIDs are alpha-dash (`a-z 0-9 - _`), ≤100, lowercased. Twilio `identity` and `uniqueName`/`sid` are not constrained the same way. Emit ONE deterministic helper (client + server + data script share it exactly):
7
+ ```js
8
+ export function toCometChatId(id) {
9
+ const raw = String(id);
10
+ let out = raw.toLowerCase().replace(/[^a-z0-9_-]/g, "_");
11
+ if (out !== raw || out.length > 100) {
12
+ let h = 0; for (const c of raw) h = (Math.imul(31, h) + c.codePointAt(0)) >>> 0;
13
+ out = `${out.slice(0, 90)}_${h.toString(36)}`;
14
+ }
15
+ return out;
16
+ }
17
+ ```
18
+ Port literally to Swift/Kotlin/Dart when native. Twilio `identity` → CometChat `uid`; conversation `sid`/`uniqueName` → `guid`.
19
+
20
+ ## Core concepts
21
+ | Twilio Conversations | CometChat (role) | Notes |
22
+ |---|---|---|
23
+ | Account SID + API Key/Secret + Conversations Service SID | App ID + Region (client) + REST API Key (server) | region `us`/`eu`/`in`; keep secrets server-side |
24
+ | `new Client(token)` / `Client.create(token)` + `stateChanged`→`initialized` | init (`initFromSettings`) then login (`loginWithAuthToken`) | init once before render; login before any data call |
25
+ | Access token (JWT, server-minted, `updateToken` on expiry) | CometChat **auth token** (server-minted; re-login on expiry) | `cometchat-security`; not the Auth Key |
26
+ | Conversation with 2 participants | a **user** conversation (1:1) | receiver = the other participant's uid |
27
+ | Conversation (3+), `friendlyName`/`uniqueName` | Group (`guid = toCometChatId(uniqueName || sid)`, name = friendlyName) | private vs public per your model |
28
+ | Participant (`identity`) | group member (uid) | `add(identity)` → add member; non-chat (SMS/WhatsApp) participants have no equivalent (feature-map) |
29
+ | `sendMessage(body)` / `MessageBuilder.addMedia` | send text / media message | media → `data.attachments` |
30
+ | `getMessages(...)` (paginator) | messages request builder | paging, not a local store |
31
+ | `attributes` (JSON on conversation/message/participant/user) | metadata | carry across |
32
+ | `client.on('messageAdded'|...)` / `conversation.on(...)` | CometChat listeners (added with an id, removed on unmount) | one place; remove on teardown |
33
+ | `typing()` / read horizon / unread count | typing + delivery/read receipts | separate CometChat calls/events |
34
+ | push registration id | the family's push skill | Notifications product |
35
+
36
+ ## Behavioral differences (keep the UX identical)
37
+ - **Optimistic send:** if the app inserts a pending message on `sendMessage` and reconciles on the returned message/`messageAdded`, keep that: insert a local placeholder, replace it with CometChat's resolved message (roll back on reject). CometChat's `sendMessage` resolves with the sent message.
38
+ - **Pagination:** Twilio's message paginator → CometChat's `MessagesRequestBuilder` (`setLimit(n)`, `fetchPrevious`/`fetchNext`), one builder instance per conversation for the cursor; map scroll-to-load to it.
39
+ - **Listeners:** each Twilio `on(...)` becomes a CometChat listener with a unique id, removed on unmount/dispose — reuse the app's existing subscribe/unsubscribe points.
40
+ - **Connection state:** Twilio `connectionStateChanged` → CometChat connection listeners; keep the app's online/offline UI wired.
41
+ - **Client/SDK mode:** keep the app's components and screens; replace only the service/store/hook talking to Twilio, mapping CometChat objects into the app's existing view models at the boundary. The app should look and behave the same — only the data source changed. Fetch each CometChat method/shape from the SDK docs, never by analogy to the Twilio API.
42
+
43
+ ## Server
44
+ | Twilio server piece | CometChat replacement |
45
+ |---|---|
46
+ | Access-token endpoint (`AccessToken` + `ConversationsGrant`, API Key/Secret + Service SID) | your endpoint: create user if missing → `POST /v3/users/{uid}/auth_tokens` (REST API Key, server env) — `cometchat-security` |
47
+ | Webhooks (`onMessageAdded`, scoped/global, `X-Twilio-Signature`) | CometChat webhooks (`/rest-api/management-apis/webhooks/overview`); drop the Twilio signature check |
48
+ | Conversations REST (create conversation/participant/message) | CometChat REST equivalents, or REMOVE + list |
49
+ | Env `TWILIO_API_KEY`/`TWILIO_API_SECRET`/`TWILIO_CONVERSATIONS_SERVICE_SID` | `COMETCHAT_APP_ID`/`REGION`/`REST_API_KEY` (placeholders + action item) |
@@ -0,0 +1,50 @@
1
+ # Data migration — Twilio Conversations history → CometChat (write it; the user runs it)
2
+
3
+ CometChat supports historical import (bulk, this script) and live migration (bridged, contact sales) — `/fundamentals/data-import-and-migration`. Default here = **hard switch** in a maintenance window; for zero-downtime, add the "contact CometChat sales for live migration" action item.
4
+
5
+ Emit `scripts/cometchat-migration/` as its own tiny package (keeps working after Twilio is removed):
6
+ - `package.json` (`"type":"module"`), dependency: the `twilio` server SDK pinned to the app's major.
7
+ - `migrate.mjs` (Node ≥18, global `fetch` for CometChat), `id.mjs` (a copy of `toCometChatId`), `README.md`.
8
+ Secrets from env (`TWILIO_ACCOUNT_SID`, `TWILIO_API_KEY`, `TWILIO_API_SECRET`, `TWILIO_CONVERSATIONS_SERVICE_SID`, `COMETCHAT_APP_ID`, `COMETCHAT_REGION`, `COMETCHAT_REST_API_KEY`), never a repo file. **The agent runs it for the user** once they provide those credentials (SKILL.md step 8): a `--dry-run` first, then the import — always from env vars, never hardcoded or committed. If the user declines to share credentials, leave running it as an action item instead.
9
+
10
+ ## 1. Export from Twilio (Conversations REST)
11
+ Use the `twilio` server SDK against the Conversations Service. **Check method names against Twilio's current REST docs while writing, note diffs in the README.**
12
+ | Data | Call | Paging |
13
+ |---|---|---|
14
+ | Users | `client.conversations.v1.users.list({limit})` | SDK auto-pages |
15
+ | Conversations | `client.conversations.v1.services(SERVICE_SID).conversations.list({limit})` | SDK auto-pages |
16
+ | Participants | `…conversations(sid).participants.list()` | per conversation |
17
+ | Messages | `…conversations(sid).messages.list({order:'asc', limit})` | per conversation, oldest→newest |
18
+ | Media | resolve each message's media SID → temporary content URL (Media Content Service) | per media |
19
+ Back off on 429. Write each export to `export/*.jsonl` so a failed run resumes.
20
+
21
+ ## 2. Transform
22
+ - **User:** `uid = toCometChatId(identity)`, `name = friendlyName || identity`, `avatar` from attributes if present, `metadata = { ...attributes, twilioIdentity: identity }`, `createdAt = seconds(dateCreated)`.
23
+ - **Conversation:**
24
+ - exactly 2 participants → **no group**; messages become user-to-user.
25
+ - else: `guid = toCometChatId(uniqueName || sid)`, `name = friendlyName || sid`, `type` per your model (default `private`), `owner` = the creator/first participant uid, `metadata = { twilioSid: sid, ...attributes }`.
26
+ - **Member:** key `${guid}_member_${uid}`, scope `participant` (elevate any admin you track), `joinedAt = seconds(dateCreated)`.
27
+ - **Message:**
28
+ - `muid = message.sid`, `sender = toCometChatId(author)`, `receiverType`+`receiver`, `sentAt = Math.floor(Date.parse(dateCreated)/1000)`.
29
+ - text → `category:"message"`, `type:"text"`, `data.text = body`.
30
+ - media → one media message per media: `type` from `contentType` (`image`/`video`/`audio`/`file`), `data.attachments=[{url, name:filename, mimeType:contentType, size}]`. Twilio temporary URLs EXPIRE — re-host to your own/CometChat storage (action item).
31
+ - `attributes` → `data.metadata`.
32
+ - **Seconds, not milliseconds** everywhere. **Not carried by the import API:** reactions, threads, read horizons beyond `readAt`/`deliveredAt`, typing — say so in the report.
33
+
34
+ ## 3. Import into CometChat (Data Import API)
35
+ Base `https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/data_import`, headers `apikey`, `content-type: application/json`. Fetch each page for the full payload:
36
+ `/rest-api/data-import-apis/users/import-users` · `/groups/import-groups` · `/groups/import-group-members` · `/messages/import-messages`.
37
+ | Order | Endpoint | Body |
38
+ |---|---|---|
39
+ | 1 | `/data_import/users` | `{ "users": { "<uid>": { uid, name, avatar?, metadata?, createdAt? } } }` |
40
+ | 2 | `/data_import/groups` | `{ "groups": { "<guid>": { guid, name, type, owner, metadata?, createdAt? } } }` |
41
+ | 3 | `/data_import/members` | `{ "members": { "<guid>_member_<uid>": { memberId, guid, uid, scope?, joinedAt? } } }` |
42
+ | 4 | `/data_import/messages` | `{ "messages": { "<muid>": { muid, sender, receiverType, receiver, category, type, data, sentAt } } }` |
43
+ Batch **≤50 entities/request**, **≤60 requests/min** (throttle ~1/s, retry `ERR_TOO_MANY_REQUESTS`). Per-entity `success`; log failures to `import-errors.jsonl` and continue. Idempotent on re-run. Order: users → groups → members → messages, oldest first. Print counts (exported, imported, skipped, failed).
44
+
45
+ ## README.md (emit it)
46
+ 1. Create a full-access REST API key in the CometChat dashboard.
47
+ 2. `cd scripts/cometchat-migration && npm install`; export the env vars.
48
+ 3. `node migrate.mjs --dry-run` (export + transform + counts, no import).
49
+ 4. `node migrate.mjs`.
50
+ 5. Spot-check in the dashboard; re-host media if Twilio URLs expired; delete `export/` (user data) and this folder after cut-over.
@@ -0,0 +1,27 @@
1
+ # Twilio Conversations → CometChat feature map
2
+
3
+ **How to use:** for each feature the ledger shows, find its row; check the CometChat **id** in the TARGET family's `features.json` (match id OR name). Found → migrate via *Via*. Not found → search the docs at BOTH levels (UI Kit `search_cometchat_docs "<feature> <platform> ui kit"` AND SDK `"<feature> <platform> sdk"`). Documented at either → migrate (no UI Kit drop-in ≠ unsupported — build on the SDK). Documented at neither → apply *If absent*. Twilio is headless, so most of these are wired on the **CometChat Chat SDK** in the app's own UI (the *Via* names the closest UI-Kit component for the optional UI-Kit path).
4
+
5
+ **Actions:** `REMOVE` → UNSUPPORTED, remove fully + list; `CHANGE` → nearest equivalent, list the difference. Never REMOVE without a docs query in both levels; a docs-tool outage is never "unsupported" (`RULES.md`).
6
+
7
+ | Twilio feature (signals) | CometChat id | Via | If absent |
8
+ |---|---|---|---|
9
+ | Conversations client + token login (`Client`, access token) | `core-chat-surface` | core / SDK init+login | — |
10
+ | Conversation list / subscribed conversations (`getSubscribedConversations`) | `core-chat-surface`, `users-groups` | conversations request builder / `CometChatConversations` | — |
11
+ | 1:1 conversation (2 participants) | `text-messaging` (a **user** conversation) | core / SDK | — |
12
+ | Group conversation (3+ participants, `friendlyName`) | `users-groups` (a group) | core / components | — |
13
+ | Send / get / edit / delete messages (`sendMessage`, `getMessages`, `updateBody`, `remove`) | `text-messaging` | core / SDK | — |
14
+ | Media messages (`MessageBuilder.addMedia`, `media`) | `media-file-attachments` | core / features | CHANGE (single file per message) |
15
+ | Typing indicators (`typing()`, `typingStarted`) | `typing-indicators` | core / features | CHANGE |
16
+ | Read horizon / unread count (`setAllMessagesRead`, `getUnreadMessagesCount`, delivery receipts) | `delivery-read-receipts` | core / features | CHANGE |
17
+ | Participants add/remove (`add(identity)`, `removeParticipant`) | group member management | components / SDK | — |
18
+ | Non-chat participants (SMS / WhatsApp / MMS via `addNonChatParticipant`) | none | docs | REMOVE (CometChat is in-app chat; SMS/WhatsApp bridging is a Twilio-specific product — list it) |
19
+ | Conversation/message/participant `attributes` (JSON) | metadata (user/group/message) | core / SDK | — |
20
+ | User profile (`User`, friendlyName, attributes, online/notifiable) | user name / avatar / metadata / presence | core | CHANGE (presence model differs) |
21
+ | Push (registration id, FCM/APNs binding) | `push-notifications` | push | action item (credentials in dashboard) |
22
+ | Webhooks (`onMessageAdded`, scoped/global) | CometChat webhooks | server | REMOVE + list any event with no equivalent |
23
+ | Reactions | native? no — Twilio has no built-in reactions | `reactions` | (if the app hand-built reactions on attributes) migrate to `reactions`; else n/a |
24
+ | Threads / replies | Twilio has no native threads | `threaded-replies` | n/a unless the app built them; then migrate |
25
+ | Media redaction / message scheduling / delivery to SMS | none | docs | REMOVE + list |
26
+
27
+ Twilio Conversations is deliberately minimal (messaging + participants + media + attributes), so most migrations are **feature-for-feature clean** with few removals — the big Twilio-only items are the **omnichannel bridges** (SMS/WhatsApp/MMS participants), which have no CometChat equivalent and are removed + listed. A feature not in this table: treat as `none` — check `features.json` + docs (both levels), then REMOVE or CHANGE, and say which.
@@ -0,0 +1,53 @@
1
+ <!-- family-agnostic: per-platform-by-design — this reference IS the per-platform Twilio inventory + target-family table; one row per platform by design. -->
2
+ # Twilio Conversations inventory — what to find, and where it goes
3
+
4
+ Search case-insensitively. Skip `node_modules/`, `Pods/`, `build/`, `.dart_tool/`, `.gradle/`, `.git/`. "Twilio" is distinctive; match the package + class names below. Twilio Conversations is **headless** — the app has its own UI on the Twilio client, so most hits are in a data/service layer, and each becomes a ledger row (`file:line → purpose`).
5
+
6
+ ## Target family (where each platform lands)
7
+ | App platform (detect `framework`) | Twilio packages you'll see | CometChat family (`peers.yaml`) | Default = client/SDK mode → | Optional (fresh UI) → |
8
+ |---|---|---|---|---|
9
+ | React / Next / Vite / CRA / Astro | `@twilio/conversations` (+ `twilio-chat` if legacy) | `react-v7` | the core's Chat SDK fallback (`@cometchat/chat-sdk-javascript`) | `cometchat-react-v7-core` UI Kit |
10
+ | Angular | `@twilio/conversations` | `angular-v5` | JS Chat SDK | `cometchat-angular-v5-core` |
11
+ | React Native / Expo | `@twilio/conversations` (RN-compatible) | `react-native` | `cometchat-react-native-sdk` | `cometchat-react-native-core` |
12
+ | iOS (Swift) | `TwilioConversationsClient` (pod/SPM `twilio-conversations`) | `ios` | the iOS core's SDK fallback (`CometChatSDK`) | `cometchat-ios-core` |
13
+ | Android | `com.twilio:conversations-android` | `android-v6` | `cometchat-android-v5-sdk` | `cometchat-android-v6-core` |
14
+ | Flutter | `twilio_conversations` | `flutter-v6` | the Flutter core's SDK fallback (`cometchat_sdk`) | `cometchat-flutter-v6-core` |
15
+ | Server (Node, Python, Go, Java, Ruby, PHP, C#) | `twilio` server SDK → Conversations REST; access-token minting | — (REST) | — | CometChat REST (`/rest-api/…`) |
16
+
17
+ Because Twilio ships no UI Kit, the **default** target is client/SDK mode (keep the app's UI). Offer the UI Kit path only if the user wants CometChat's prebuilt UI. A platform not in this table → STOP: report only.
18
+
19
+ ## Grep signals
20
+ **Manifests**: `package.json`, `Podfile`, `Package.swift`, `build.gradle(.kts)`, `pubspec.yaml`, `requirements.txt`, `go.mod`, `Gemfile`, `composer.json`, `*.csproj` → `twilio/conversations`, `twilio-conversations`, `twilio_conversations`, `@twilio/conversations`, `twilio-chat` (legacy Programmable Chat), `TwilioConversationsClient`, `com.twilio:conversations`.
21
+
22
+ **Client / auth**:
23
+ - JS: `Client` / `Conversations.Client`, `new Client(token)`, `Client.create(token)`, `client.updateToken(...)`, `'stateChanged'` → `'initialized'`, `'tokenAboutToExpire'` / `'tokenExpired'`.
24
+ - iOS: `TwilioConversationsClient.conversationsClient(withToken:...)`.
25
+ - Android: `ConversationsClient.create(...)`.
26
+ - Flutter: `TwilioConversations.create(...)`.
27
+ - **Access token fetch**: a call to your server for a Twilio JWT (the client never holds the API secret).
28
+
29
+ **Conversations (channels)**:
30
+ - `client.getConversationBySid` / `getConversationByUniqueName` / `createConversation` / `getSubscribedConversations`.
31
+ - `conversation.add(...)` / `join()` / `leave()` / `delete()`, `friendlyName`, `uniqueName`, `attributes`.
32
+
33
+ **Participants**:
34
+ - `conversation.getParticipants()`, `add(identity)` / `addNonChatParticipant` (SMS/WhatsApp), `removeParticipant`, `participant.identity`.
35
+
36
+ **Messages**:
37
+ - `conversation.sendMessage(...)` (text or a `MessageBuilder` with media), `getMessages(...)`, `message.body`, `message.attributes`, `message.media` / `attachedMedia`, `updateBody`, `remove`.
38
+ - Delivery/read: `conversation.setAllMessagesRead()`, `getUnreadMessagesCount()`, `advanceLastReadMessageIndex`, `AggregatedDeliveryReceipt` / `DetailedDeliveryReceipt`.
39
+ - Typing: `conversation.typing()`, `'typingStarted'` / `'typingEnded'`.
40
+
41
+ **Events**: `client.on('conversationAdded'|'messageAdded'|'participantJoined'|'typingStarted'|'connectionStateChanged'|...)`, `conversation.on('messageAdded'|...)`.
42
+
43
+ **Media**: `message.media.getContentTemporaryUrl()`, `MessageBuilder.addMedia(...)`, `media.filename`/`contentType`/`size`.
44
+
45
+ **Other**: `user`/`User` (friendlyName, attributes, online/notifiable), push (`client.setPushRegistrationId` / FCM/APNs binding), `attributes` (JSON on conversation/message/participant/user).
46
+
47
+ **Legacy Programmable Chat** (`twilio-chat`, deprecated): `Channel`, `Member`, `Message`, `client.getChannelBySid` — same shapes as Conversations; map identically and note it's the legacy SDK.
48
+
49
+ **Server**: `AccessToken` + `ChatGrant`/`ConversationsGrant` (API Key SID/Secret + Conversations Service SID), Conversations REST (`conversations.v1.conversations…`), webhooks (`onMessageAdded`, `onConversationAdded`, scoped/global).
50
+
51
+ **Env / config**: `TWILIO_ACCOUNT_SID`, `TWILIO_API_KEY`, `TWILIO_API_SECRET`, `TWILIO_CONVERSATIONS_SERVICE_SID`, `VITE_TWILIO_*`, tokens endpoints; CI secrets `TWILIO_*`.
52
+
53
+ **Tests / mocks**: `jest.mock('@twilio/conversations')`, fake `Client`/`Conversation`.
@@ -0,0 +1,52 @@
1
+ # Report template — `COMETCHAT_MIGRATION.md`
2
+
3
+ Write this at the repo root from the ledger. Keep an empty section's heading with "None." Then END the chat reply with sections 3 and 5 pasted in full (SKILL step 11).
4
+
5
+ ```markdown
6
+ # Twilio Conversations → CometChat migration
7
+
8
+ **Branch:** cometchat-migration (from <base>; <n> uncommitted files came along) · **Platform:** <framework> → CometChat <family label> · **Mode:** client/SDK (default) | UI Kit
9
+ **Build:** ✅ passes (`<command>`) | ❌ <n> errors (below) · **Twilio residue:** none | <paths>
10
+
11
+ ## 1. Summary
12
+ <2–4 sentences: what the app did on Twilio Conversations (headless client + own UI), what it does now (CometChat Chat SDK behind the same UI, or UI Kit), the headline removals.>
13
+
14
+ ## 2. Migrated
15
+ | Twilio feature | CometChat equivalent | Files |
16
+ |---|---|---|
17
+ | Conversations client + access-token login | CometChat init + `loginWithAuthToken` | src/chat/client.ts, server/token.ts |
18
+ | Conversation list / messages / participants | conversations + messages request builders + group members | src/chat/*, … |
19
+
20
+ ## 3. Removed — not available in CometChat
21
+ | Feature | What it did | Removed from | What users lose | Evidence (features.json · docs query → result) | Closest CometChat alternative |
22
+ |---|---|---|---|---|---|
23
+ | Non-chat participants (SMS / WhatsApp / MMS) | Bridged the conversation to phone numbers via `addNonChatParticipant` | src/…, server/… | Reaching users over SMS/WhatsApp from the chat | Not in features.json · UI Kit `"sms whatsapp participant"` → no page · SDK `"non-chat participant sms"` → no page (Twilio omnichannel is vendor-specific) | — (use a separate SMS provider if still needed) |
24
+
25
+ ## 4. Behavior changes (migrated, works differently)
26
+ - Presence/online model differs from Twilio's `notifiable`/`online` user flags.
27
+ - Conversations with exactly two participants are now 1:1 user conversations, not two-person groups.
28
+
29
+ ## 5. Your action items
30
+ 1. Add your CometChat credentials to an untracked env file (App ID, Region, Auth Key for dev). Placeholders are there now — never commit them.
31
+ 2. Create a REST API key; set `COMETCHAT_REST_API_KEY` on the server (token endpoint + data script).
32
+ 3. Import history: `scripts/cometchat-migration/README.md` (dry run first). Re-host media — Twilio media URLs expire.
33
+ 4. Enable in the CometChat dashboard: <extensions / AI the migrated features need>.
34
+ 5. Push: upload FCM/APNs credentials to CometChat.
35
+ 6. Point webhooks at the new receiver; pick events.
36
+ 7. Before production: server-minted auth tokens (already wired if a token server existed).
37
+ 8. Remove `TWILIO_*` secrets from CI/hosting; close the Twilio Conversations service after cut-over.
38
+
39
+ ## 6. Defaults taken (no questions were asked)
40
+ - <e.g. "client/SDK mode: kept the app's UI, swapped the data layer to the CometChat Chat SDK"; "skipped: <step> — <why>">
41
+
42
+ ## 7. Verification
43
+ - Build: `<command>` → <result>
44
+ - Residue search: `twilio` (case-insensitive, excl. node_modules/dist/.git) → <result>
45
+ - Tests: <ran / none / updated n, removed m>
46
+ - Pre-existing issues (failing before the migration): <list or none>
47
+ ```
48
+
49
+ Rules for the lists:
50
+ - Every REMOVE row names concrete files + UI entry points AND its evidence (features.json + both docs queries). Debug/QA-only code goes in a Dev/QA-only subsection, no evidence needed.
51
+ - "Closest CometChat alternative" must be a real documented capability or `—`. Never invent one.
52
+ - Order action items by what unblocks running the app first: credentials → data → production hardening.