cometchat-android-v5-extensions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-android-v5-extensions (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Ground truth:com.cometchat:chat-uikit-android:5.x(legacy/maintenance-only; +calls-sdk-android:5.x) — resolved AAR (javap) +ui-kit/android. Official docs: https://www.cometchat.com/docs/fundamentals/extensions-overview · Docs MCP:claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp(or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
Companion skills:cometchat-android-v5-customizationcovers DataSource decorators;cometchat-android-v5-featurescovers the feature catalog.
This skill covers the CometChat extension architecture — how extensions plug into the UI Kit, the built-in extensions, and how to create custom ones.
ExtensionsDataSource or ExtensionDecoratorcometchat-android-v5-features (which routes to cometchat apply-feature <id> --app-id <X>)cometchat-android-v5-customizationExtensions are split into two class types:
PollsExtension, StickerExtension) — extend ExtensionsDataSource. These are what you pass to setExtensions(...) to enable a built-in extension.PollsExtensionDecorator, StickerExtensionDecorator) — extend DataSourceDecorator. These are the runtime decorators that wrap the active DataSource chain. The kit creates them internally; you don't construct them directly.ChatConfigurator.getDataSource()
└── SmartRepliesExtensionDecorator (created by SmartRepliesExtension)
└── PollsExtensionDecorator (created by PollsExtension)
└── StickerExtensionDecorator (created by StickerExtension)
└── MessagesDataSource (base)| Extension | Package | What it adds |
|---|---|---|
| Polls | com.cometchat.chatuikit.extensions.polls | Poll creation and voting in messages |
| Stickers | com.cometchat.chatuikit.extensions.sticker | Sticker keyboard and sticker bubbles |
| Collaborative Document | com.cometchat.chatuikit.extensions.collaborative | Shared document editing |
| Collaborative Whiteboard | com.cometchat.chatuikit.extensions.collaborative | Shared whiteboard |
| Smart Replies | com.cometchat.chatuikit.extensions.smartreplies | AI-powered reply suggestions |
| Message Translation | com.cometchat.chatuikit.extensions.messagetranslation | Translate messages |
| Text Moderation | com.cometchat.chatuikit.extensions.textmoderation | Profanity filtering |
| Thumbnail Generation | com.cometchat.chatuikit.extensions.thumbnailgeneration | Image thumbnails |
Extensions are enabled by default. To customize which extensions are active, pass a custom list to UIKitSettingsBuilder:
List<ExtensionsDataSource> extensions = new ArrayList<>();
extensions.add(new PollsExtension()); // registrar, NOT PollsExtensionDecorator
extensions.add(new StickerExtension()); // registrar, NOT StickerExtensionDecorator
extensions.add(new SmartRepliesExtension());
// Omit extensions you don't want
UIKitSettings settings = new UIKitSettings.UIKitSettingsBuilder()
.setAppId(APP_ID)
.setRegion(REGION)
.setAuthKey(AUTH_KEY)
.setExtensions(extensions)
.build();Why not `PollsExtensionDecorator`?*ExtensionDecoratorextendsDataSourceDecorator, notExtensionsDataSource— so it won't compile when added to aList<ExtensionsDataSource>. The kit's runtime decorator chain is built by the registrar'senable()method internally; you don't add decorators directly.
A custom extension has TWO classes:
ExtensionsDataSource (gets added to setExtensions(...))DataSourceDecorator (created by the registrar via ChatConfigurator.enable(...))// 1. Decorator — extends DataSourceDecorator, overrides per-message behavior
public class MyExtensionDecorator extends DataSourceDecorator {
public MyExtensionDecorator(DataSource dataSource) {
super(dataSource);
}
// Override methods to add custom behavior
}
// 2. Registrar — extends ExtensionsDataSource, implements getExtensionId() + addExtension()
public class MyExtension extends ExtensionsDataSource {
@Override
public String getExtensionId() {
return "my-custom-extension";
}
@Override
public void addExtension() {
// addExtension() is the ABSTRACT method you must implement. The inherited
// concrete enable() calls it after confirming the extension is on (dashboard).
ChatConfigurator.enable(dataSource -> new MyExtensionDecorator(dataSource));
}
}
// Then add the registrar to UIKitSettings:
extensions.add(new MyExtension());ExtensionsDataSource, implements abstract getExtensionId() + addExtension(); enable() is inherited) and a decorator (DataSourceDecorator, holds the per-message override). setExtensions(...) wants registrars; the chain builds decorators automatically.ChatConfigurator.enable() must be called after CometChatUIKit.init() succeeds.cometchat apply-feature <id> --app-id <X> (the CLI hits the dashboard API). For dashboard-only extensions (Giphy / Stipop / Tenor / Chatwoot / Intercom — those needing third-party API keys), the user has to enter the third-party config in the dashboard manually.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.