@cometchat/skills 4.4.2 → 5.0.0
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.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +40 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-onboarding/SKILL.md +89 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +90 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +313 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +909 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-a11y/SKILL.md +0 -477
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-i18n/SKILL.md +0 -419
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* build-registry.mjs — generate the pack's "materials index", one registry per family.
|
|
4
|
+
*
|
|
5
|
+
* NOTHING is hardcoded per framework. The family list, its catalog, its oracles and
|
|
6
|
+
* which skills belong to it all come from the reviewer's families.json — the same
|
|
7
|
+
* single source the reviewer tools read. Adding a family there is enough; this script
|
|
8
|
+
* needs no edit.
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync } from "node:fs";
|
|
11
|
+
import { join, dirname, basename } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
|
|
14
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "../..");
|
|
15
|
+
const CHECK = process.argv.includes("--check");
|
|
16
|
+
const famArg = (() => { const i = process.argv.indexOf("--family"); return i >= 0 ? process.argv[i + 1] : null; })();
|
|
17
|
+
const readJSON = (p) => JSON.parse(readFileSync(p, "utf8"));
|
|
18
|
+
|
|
19
|
+
const FAMILIES = join(ROOT, ".claude/skills/cometchat-skill-reviewer/tools/families.json");
|
|
20
|
+
// families.json lives under .claude/, which package.json `files` does NOT ship — only
|
|
21
|
+
// `.claude-plugin` and `peers.yaml` do. The registries themselves ARE shipped, pre-built, so a
|
|
22
|
+
// consumer never needs to regenerate them; this is a dev-only tool. Exiting 2 there turned a
|
|
23
|
+
// non-task into a hard failure for anyone who ran `npm run verify` from an installed package.
|
|
24
|
+
// Degrade to a no-op with a clear reason instead.
|
|
25
|
+
if (!existsSync(FAMILIES)) {
|
|
26
|
+
console.log("✅ build-registry: skipped — families.json is not present (dev-only tool; the shipped registries are pre-built).");
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
const { families } = readJSON(FAMILIES);
|
|
30
|
+
|
|
31
|
+
const y = readFileSync(join(ROOT, "peers.yaml"), "utf8");
|
|
32
|
+
const entry = (y.match(/^entry:\s*(\S+)/m) || [])[1] || "cometchat";
|
|
33
|
+
const blocks = y.split(/^\s*-\s*platform:/m).slice(1).map((b) => "platform:" + b);
|
|
34
|
+
|
|
35
|
+
// Every skill dir once; each family selects its own by the prefixes families.json declares.
|
|
36
|
+
const skillsDir = join(ROOT, "skills");
|
|
37
|
+
const allSkills = readdirSync(skillsDir, { withFileTypes: true })
|
|
38
|
+
.filter((d) => d.isDirectory()).map((d) => d.name)
|
|
39
|
+
.filter((name) => existsSync(join(skillsDir, name, "SKILL.md")))
|
|
40
|
+
.map((name) => {
|
|
41
|
+
const b = (readFileSync(join(skillsDir, name, "SKILL.md"), "utf8").match(/^---\n([\s\S]*?)\n---/) || [])[1] || "";
|
|
42
|
+
return { name, version: (b.match(/^\s+version:\s*"?([^"\n]+)"?/m) || [])[1] || null, role: name === entry ? "router" : "skill" };
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Every platform-specific prefix any family declares — anything matching none of these is shared.
|
|
46
|
+
const PLATFORM_PREFIXES = [...new Set(
|
|
47
|
+
Object.values(families).flatMap((f) => (f.reviewsSkills || []).filter((p) => p.endsWith("-"))),
|
|
48
|
+
)];
|
|
49
|
+
|
|
50
|
+
let stale = 0, wrote = 0, skipped = [];
|
|
51
|
+
for (const [key, fam] of Object.entries(families)) {
|
|
52
|
+
if (/^template\b/i.test(fam._status || "")) { skipped.push(`${key} (template)`); continue; }
|
|
53
|
+
|
|
54
|
+
// registry name == catalog basename, so web-v7.json keeps its existing filename
|
|
55
|
+
const name = basename(fam.catalog || "", ".json");
|
|
56
|
+
const catalogPath = `test-suite/catalogs/${name}.json`;
|
|
57
|
+
if (!name || !existsSync(join(ROOT, catalogPath))) { skipped.push(`${key} (no catalog)`); continue; }
|
|
58
|
+
|
|
59
|
+
// peers block: match on this family's kit package, with the trailing @ so
|
|
60
|
+
// "@cometchat/chat-uikit-react" cannot swallow "@cometchat/chat-uikit-react-native"
|
|
61
|
+
const block = blocks.find((b) => b.includes(`kit_package: "${fam.kitPackage}@`)) || "";
|
|
62
|
+
const grab = (re) => (block.match(re) || [])[1];
|
|
63
|
+
|
|
64
|
+
// Legacy unsuffixed filenames are declared per-family in families.json, not guessed here.
|
|
65
|
+
const featPath = fam.features || `features.${name}.json`;
|
|
66
|
+
const conPath = fam.contracts || `contracts.${name}.json`;
|
|
67
|
+
const features = existsSync(join(ROOT, featPath)) ? readJSON(join(ROOT, featPath)) : null;
|
|
68
|
+
const contracts = existsSync(join(ROOT, conPath)) ? readJSON(join(ROOT, conPath)) : null;
|
|
69
|
+
const catalog = readJSON(join(ROOT, catalogPath));
|
|
70
|
+
|
|
71
|
+
// A skill carrying no platform prefix at all (the `cometchat` router, `cometchat-onboarding`)
|
|
72
|
+
// is SHARED and ships with every family. reviewsSkills is a *review* scope and cannot be
|
|
73
|
+
// reused as the ship list — it deliberately omits skills that emit no reviewable surface.
|
|
74
|
+
const prefixes = fam.reviewsSkills || [];
|
|
75
|
+
const skills = allSkills.filter(({ name: s }) =>
|
|
76
|
+
!PLATFORM_PREFIXES.some((p) => s.startsWith(p)) ||
|
|
77
|
+
prefixes.some((p) => (p.endsWith("-") ? s.startsWith(p) : s === p)));
|
|
78
|
+
|
|
79
|
+
const registry = {
|
|
80
|
+
family: name,
|
|
81
|
+
entry,
|
|
82
|
+
kit_package: grab(/kit_package:\s*"([^"]+)"/),
|
|
83
|
+
sdk_package: grab(/sdk_package:\s*"([^"]+)"/),
|
|
84
|
+
verified: /verified:\s*true/.test(block),
|
|
85
|
+
materials: {
|
|
86
|
+
catalog: { path: catalogPath, symbolCount: catalog.symbolCount, mode: catalog.mode },
|
|
87
|
+
features: { path: featPath, count: new Set((features?.features || []).map((f) => f.id).filter(Boolean)).size },
|
|
88
|
+
contracts: {
|
|
89
|
+
path: conPath,
|
|
90
|
+
count: Array.isArray(contracts?.contracts) ? contracts.contracts.length : Object.keys(contracts?.contracts || {}).length,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
skills,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const outPath = join(ROOT, "registry", `${name}.json`);
|
|
97
|
+
const next = JSON.stringify(registry, null, 2) + "\n";
|
|
98
|
+
if (CHECK) {
|
|
99
|
+
if ((existsSync(outPath) ? readFileSync(outPath, "utf8") : "") !== next) {
|
|
100
|
+
console.log(`❌ registry/${name}.json is stale — run: node test-suite/scripts/build-registry.mjs`); stale++;
|
|
101
|
+
}
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
mkdirSync(join(ROOT, "registry"), { recursive: true });
|
|
105
|
+
writeFileSync(outPath, next);
|
|
106
|
+
console.log(`✅ wrote registry/${name}.json — ${skills.length} skill(s), ${catalog.symbolCount} symbols, ${registry.materials.features.count} features, ${registry.materials.contracts.count} contracts.`);
|
|
107
|
+
wrote++;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (skipped.length) console.log(` skipped: ${skipped.join(", ")}`);
|
|
111
|
+
if (CHECK) { if (stale) process.exit(1); console.log(`✅ all ${Object.keys(families).length - skipped.length - 1} registry file(s) up to date.`); process.exit(0); }
|
|
112
|
+
// A family list that yields nothing means the discovery broke — never report green over zero.
|
|
113
|
+
if (!wrote) { console.log("❌ build-registry: no families produced a registry — check families.json / catalog paths"); process.exit(2); }
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* catalog-refresh-dart.mjs — re-derive the flutter-v6 Tier-1 oracle from the pinned kit.
|
|
4
|
+
*
|
|
5
|
+
* The Dart sibling of catalog-refresh.mjs. It exists because the Flutter catalog is
|
|
6
|
+
* COMPILER-VERIFIED, not parsed: a declaration scan is wrong in both directions on this
|
|
7
|
+
* kit (it counts internals that are never exported, and misses the entire Chat SDK
|
|
8
|
+
* surface that the barrels re-export via `export 'package:...'`). So this script uses
|
|
9
|
+
* the scan only to propose CANDIDATES, then asks the Dart analyzer which of them
|
|
10
|
+
* actually resolve from each barrel. The analyzer's verdict is the oracle.
|
|
11
|
+
*
|
|
12
|
+
* It also records WHICH barrel each symbol comes from. That is not cosmetic: the calls
|
|
13
|
+
* widgets resolve only from cometchat_calls_uikit.dart, and a skill that imports the
|
|
14
|
+
* chat barrel and emits CometChatIncomingCall fails to compile.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* node test-suite/scripts/catalog-refresh-dart.mjs # rewrite the catalog
|
|
18
|
+
* node test-suite/scripts/catalog-refresh-dart.mjs --check # CI: fail on drift
|
|
19
|
+
* Requires the pinned project resolved (npm run verify:fences:flutter-v6:setup).
|
|
20
|
+
* Exit: 0 clean/written · 1 drift (--check) · 2 project not installed.
|
|
21
|
+
*/
|
|
22
|
+
import { readFileSync, writeFileSync, mkdirSync, rmSync, existsSync, readdirSync, statSync } from "node:fs";
|
|
23
|
+
import { join, dirname } from "node:path";
|
|
24
|
+
import { execSync } from "node:child_process";
|
|
25
|
+
import { fileURLToPath } from "node:url";
|
|
26
|
+
import { DEFAULT_FAMILY, CATALOG_KEY, TYPECHECK_PROJECT, PROP_TABLES_DIR } from "./_dart-family.mjs";
|
|
27
|
+
|
|
28
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
29
|
+
const PROJECT = TYPECHECK_PROJECT;
|
|
30
|
+
const OUT = join(ROOT, "test-suite", "catalogs", "flutter-v6.json");
|
|
31
|
+
const CHECK = process.argv.includes("--check");
|
|
32
|
+
|
|
33
|
+
const CHAT_BARREL = "package:cometchat_chat_uikit/cometchat_chat_uikit.dart";
|
|
34
|
+
const CALLS_BARREL = "package:cometchat_chat_uikit/cometchat_calls_uikit.dart";
|
|
35
|
+
|
|
36
|
+
const cfgPath = join(PROJECT, ".dart_tool", "package_config.json");
|
|
37
|
+
if (!existsSync(cfgPath)) {
|
|
38
|
+
console.error(`ERROR: pinned kit not installed.\n Run: npm run verify:fences:flutter-v6:setup`);
|
|
39
|
+
process.exit(2);
|
|
40
|
+
}
|
|
41
|
+
const pkgCfg = JSON.parse(readFileSync(cfgPath, "utf8"));
|
|
42
|
+
const pkg = (name) => pkgCfg.packages.find((p) => p.name === name);
|
|
43
|
+
const kit = pkg("cometchat_chat_uikit");
|
|
44
|
+
if (!kit) { console.error("ERROR: cometchat_chat_uikit not in package_config.json"); process.exit(2); }
|
|
45
|
+
const kitLib = new URL(kit.rootUri.endsWith("/") ? kit.rootUri + "lib/" : kit.rootUri + "/lib/", `file://${cfgPath}`).pathname;
|
|
46
|
+
const kitVersion = (kit.rootUri.match(/cometchat_chat_uikit-([0-9][^/]*)/) || [])[1] || "unknown";
|
|
47
|
+
const versionOf = (n) => (pkg(n)?.rootUri.match(new RegExp(`${n}-([0-9][^/]*)`)) || [])[1] || "unknown";
|
|
48
|
+
|
|
49
|
+
// ── 1. CANDIDATES: every CometChat*-prefixed declaration anywhere in the kit, plus the
|
|
50
|
+
// re-exported SDK packages. Over-inclusive on purpose — the analyzer prunes it.
|
|
51
|
+
const DECL_RE = /(?:^|[\s;{])(?:abstract\s+|base\s+|final\s+|sealed\s+|interface\s+)*(?:class|mixin|enum|typedef|extension)\s+(CometChat[A-Za-z0-9_]*)/g;
|
|
52
|
+
const candidates = new Set();
|
|
53
|
+
const walk = (dir) => {
|
|
54
|
+
for (const e of readdirSync(dir, { withFileTypes: true })) {
|
|
55
|
+
const p = join(dir, e.name);
|
|
56
|
+
if (e.isDirectory()) walk(p);
|
|
57
|
+
else if (e.name.endsWith(".dart")) {
|
|
58
|
+
for (const m of readFileSync(p, "utf8").matchAll(DECL_RE)) candidates.add(m[1]);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
walk(kitLib);
|
|
63
|
+
for (const dep of ["cometchat_sdk", "cometchat_calls_sdk", "cometchat_cards"]) {
|
|
64
|
+
const d = pkg(dep);
|
|
65
|
+
if (!d) continue;
|
|
66
|
+
const lib = new URL(d.rootUri.endsWith("/") ? d.rootUri + "lib/" : d.rootUri + "/lib/", `file://${cfgPath}`).pathname;
|
|
67
|
+
if (existsSync(lib)) walk(lib);
|
|
68
|
+
}
|
|
69
|
+
const cands = [...candidates].sort();
|
|
70
|
+
console.log(`candidates: ${cands.length} CometChat* declaration(s) across the kit + re-exported SDKs`);
|
|
71
|
+
|
|
72
|
+
// ── 2. VERIFY: ask the analyzer which resolve from each barrel. One file per symbol so
|
|
73
|
+
// a single bad name cannot poison the others and the error→symbol mapping is exact.
|
|
74
|
+
const probeDir = join(PROJECT, "lib", "__catalogprobe");
|
|
75
|
+
function resolveFrom(barrel) {
|
|
76
|
+
rmSync(probeDir, { recursive: true, force: true });
|
|
77
|
+
mkdirSync(probeDir, { recursive: true });
|
|
78
|
+
cands.forEach((sym, i) => {
|
|
79
|
+
writeFileSync(join(probeDir, `s${i}.dart`),
|
|
80
|
+
`// probe ${sym}\nimport '${barrel}';\n` +
|
|
81
|
+
`// ignore_for_file: unused_element, non_constant_identifier_names\n` +
|
|
82
|
+
`${sym}? _t${i};\nfinal _v${i} = ${sym};\n`);
|
|
83
|
+
});
|
|
84
|
+
let raw = "";
|
|
85
|
+
try {
|
|
86
|
+
raw = execSync("flutter analyze --no-pub lib/__catalogprobe", { cwd: PROJECT, encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
|
|
87
|
+
} catch (e) { raw = `${e.stdout || ""}${e.stderr || ""}`; }
|
|
88
|
+
const missing = new Set(), proven = new Set();
|
|
89
|
+
for (const line of raw.split("\n")) {
|
|
90
|
+
const m = line.match(/lib\/__catalogprobe\/s(\d+)\.dart/);
|
|
91
|
+
if (!m) continue;
|
|
92
|
+
const sym = cands[+m[1]];
|
|
93
|
+
// An EXTENSION resolves but fits neither position; this diagnostic PROVES it exists.
|
|
94
|
+
if (/can't be used as an expression|extension_as_expression/.test(line)) { proven.add(sym); continue; }
|
|
95
|
+
if (/(isn't a class|Undefined name|isn't defined|not a type|isn't a type)/.test(line)) missing.add(sym);
|
|
96
|
+
}
|
|
97
|
+
for (const s of proven) missing.delete(s);
|
|
98
|
+
return cands.filter((s) => !missing.has(s));
|
|
99
|
+
}
|
|
100
|
+
const chat = new Set(resolveFrom(CHAT_BARREL));
|
|
101
|
+
const calls = new Set(resolveFrom(CALLS_BARREL));
|
|
102
|
+
rmSync(probeDir, { recursive: true, force: true });
|
|
103
|
+
|
|
104
|
+
const symbols = [...new Set([...chat, ...calls])].sort();
|
|
105
|
+
const rejected = cands.filter((s) => !chat.has(s) && !calls.has(s));
|
|
106
|
+
|
|
107
|
+
const catalog = {
|
|
108
|
+
family: CATALOG_KEY,
|
|
109
|
+
generatedFrom: [
|
|
110
|
+
`cometchat_chat_uikit ${kitVersion} (pub.dev archive, resolved via test-suite/typecheck/flutter-v6)`,
|
|
111
|
+
"COMPILER-VERIFIED: every symbol was probed with `flutter analyze` and resolves from the stated barrel. A declaration scan generates candidates only — it over-counts (declared but not exported) and under-counts (skips `export 'package:...'`, i.e. the whole re-exported Chat SDK surface).",
|
|
112
|
+
],
|
|
113
|
+
kitPackage: "cometchat_chat_uikit",
|
|
114
|
+
kitVersion,
|
|
115
|
+
sdkPackage: `cometchat_sdk ${versionOf("cometchat_sdk")} (re-exported through the kit barrels)`,
|
|
116
|
+
callsSdkPackage: `cometchat_calls_sdk ${versionOf("cometchat_calls_sdk")} (re-exported through the CALLS barrel only)`,
|
|
117
|
+
source: "compiler-verified",
|
|
118
|
+
mode: "analyzer-probe",
|
|
119
|
+
lang: "dart",
|
|
120
|
+
barrels: { chat: CHAT_BARREL, calls: CALLS_BARREL },
|
|
121
|
+
barrelNote: "TWO barrels, DIFFERENT surfaces — a real compile trap. The calls-only symbols are NOT importable from cometchat_chat_uikit.dart, and the calls barrel does not re-export the chat widgets, so a calls screen imports BOTH.",
|
|
122
|
+
symbolCount: symbols.length,
|
|
123
|
+
symbols,
|
|
124
|
+
symbolsByBarrel: {
|
|
125
|
+
"chat-only": [...chat].filter((s) => !calls.has(s)).sort(),
|
|
126
|
+
"calls-only": [...calls].filter((s) => !chat.has(s)).sort(),
|
|
127
|
+
both: [...chat].filter((s) => calls.has(s)).sort(),
|
|
128
|
+
},
|
|
129
|
+
internalOnlyExcluded: rejected,
|
|
130
|
+
internalOnlyExcludedNote: "Declared in the kit/SDK source but NOT resolvable from either barrel — phantoms if emitted.",
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const next = JSON.stringify(catalog, null, 2) + "\n";
|
|
134
|
+
const cur = existsSync(OUT) ? readFileSync(OUT, "utf8") : "";
|
|
135
|
+
console.log(`resolved: ${symbols.length} symbol(s) — ${catalog.symbolsByBarrel["chat-only"].length} chat-only · ${catalog.symbolsByBarrel["calls-only"].length} calls-only · ${catalog.symbolsByBarrel.both.length} both · ${rejected.length} excluded`);
|
|
136
|
+
|
|
137
|
+
if (CHECK) {
|
|
138
|
+
if (cur.trim() !== next.trim()) {
|
|
139
|
+
console.log(`\n❌ catalogs/flutter-v6.json is STALE vs the pinned kit ${kitVersion} — run: node test-suite/scripts/catalog-refresh-dart.mjs`);
|
|
140
|
+
const curSyms = new Set(cur ? JSON.parse(cur).symbols : []);
|
|
141
|
+
const added = symbols.filter((s) => !curSyms.has(s));
|
|
142
|
+
const removed = [...curSyms].filter((s) => !symbols.includes(s));
|
|
143
|
+
if (added.length) console.log(` + added: ${added.join(", ")}`);
|
|
144
|
+
if (removed.length) console.log(` - removed: ${removed.join(", ")} ← a skill fence using one of these will now fail Tier-1`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
console.log("✅ catalogs/flutter-v6.json matches the pinned kit.");
|
|
148
|
+
process.exit(0);
|
|
149
|
+
}
|
|
150
|
+
writeFileSync(OUT, next);
|
|
151
|
+
console.log(`✅ wrote ${OUT.replace(ROOT + "/", "")}`);
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* catalog-refresh.mjs — regenerate the Tier-1 symbol catalog from the installed
|
|
4
|
+
* kit and keep BOTH copies in sync (the shipped oracle + the reviewer's G0 oracle).
|
|
5
|
+
* This is the automation for oracle-rot (AUDIT-005): SDK minors add/rename symbols;
|
|
6
|
+
* a stale catalog silently false-passes Tier-1. Run on a schedule + on kit bumps.
|
|
7
|
+
*
|
|
8
|
+
* node test-suite/scripts/catalog-refresh.mjs # regenerate + write both copies
|
|
9
|
+
* node test-suite/scripts/catalog-refresh.mjs --check # diff only; exit 1 if the catalog would change (CI rot detector)
|
|
10
|
+
* node test-suite/scripts/catalog-refresh.mjs --kit <dir> --sdk <dir> # point at a different install
|
|
11
|
+
*
|
|
12
|
+
* Default: reads the kit from the demo app's node_modules (the pinned reference
|
|
13
|
+
* install). CI can point --kit/--sdk at the lean test-suite/typecheck/web-v7
|
|
14
|
+
* install instead. Delegates symbol extraction to the skill-creator's
|
|
15
|
+
* build-catalog.mjs so there is ONE generator, not two.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync, writeFileSync, existsSync, copyFileSync, mkdtempSync, rmSync } from "node:fs";
|
|
18
|
+
import { join, dirname, isAbsolute } from "node:path";
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
import { tmpdir } from "node:os";
|
|
21
|
+
import { spawnSync } from "node:child_process";
|
|
22
|
+
|
|
23
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
24
|
+
const argv = process.argv.slice(2);
|
|
25
|
+
const CHECK = argv.includes("--check");
|
|
26
|
+
const flagDir = (f, def) => {
|
|
27
|
+
const i = argv.indexOf(f);
|
|
28
|
+
if (i < 0) return def;
|
|
29
|
+
const v = argv[i + 1];
|
|
30
|
+
return isAbsolute(v) ? v : join(ROOT, v);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const BUILDER = join(ROOT, ".claude/skills/cometchat-skill-creator/tools/build-catalog.mjs");
|
|
34
|
+
const KIT = flagDir("--kit", join(ROOT, "cometchat-react-app/node_modules/@cometchat/chat-uikit-react"));
|
|
35
|
+
const SDK = flagDir("--sdk", join(ROOT, "cometchat-react-app/node_modules/@cometchat/chat-sdk-javascript"));
|
|
36
|
+
// Which family to refresh comes from families.json (RULES.md §22). This hardcoded web-v7,
|
|
37
|
+
// so the scheduled refresh could never keep any other family's catalog from going stale.
|
|
38
|
+
const _FJ = join(ROOT, ".claude/skills/cometchat-skill-reviewer/tools/families.json");
|
|
39
|
+
// Reviewer oracle is DEV-ONLY / not in the tarball — skip cleanly from an installed pack.
|
|
40
|
+
if (!existsSync(_FJ)) {
|
|
41
|
+
console.log("catalog: reviewer oracle (families.json) not present — dev-only refresh, skipping (installed pack).");
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
const _F = JSON.parse(readFileSync(_FJ, "utf8"));
|
|
45
|
+
const _key = (f) => (f.catalog || "").replace(/^catalog\//, "").replace(/\.json$/, "");
|
|
46
|
+
const _arg = (process.argv.find((a) => a.startsWith("--family=")) || "").split("=")[1]
|
|
47
|
+
|| (process.argv.includes("--family") ? process.argv[process.argv.indexOf("--family") + 1] : null);
|
|
48
|
+
const FAM_ENTRY = _arg
|
|
49
|
+
? Object.values(_F.families).find((f) => _key(f) === _arg) || _F.families[_arg]
|
|
50
|
+
: _F.families[_F.default];
|
|
51
|
+
if (!FAM_ENTRY) { console.error(`ERROR: unknown --family ${_arg}`); process.exit(2); }
|
|
52
|
+
const FAMILY = _key(FAM_ENTRY);
|
|
53
|
+
const CATALOG_MODE = FAM_ENTRY.catalog_build?.mode || ["--exports-only"];
|
|
54
|
+
const SHIPPED = join(ROOT, `test-suite/catalogs/${FAMILY}.json`);
|
|
55
|
+
const REVIEWER = join(ROOT, `.claude/skills/cometchat-skill-reviewer/tools/catalog/${FAMILY}.json`);
|
|
56
|
+
|
|
57
|
+
if (!existsSync(KIT) || !existsSync(SDK)) {
|
|
58
|
+
console.error(`ERROR: kit not installed at node_modules/@cometchat.\n` +
|
|
59
|
+
` Run: npm i @cometchat/chat-uikit-react@7 @cometchat/chat-sdk-javascript@4`);
|
|
60
|
+
process.exit(2);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const tmp = mkdtempSync(join(tmpdir(), "cc-catalog-"));
|
|
64
|
+
const outFile = join(tmp, `${FAMILY}.json`);
|
|
65
|
+
const res = spawnSync("node", [
|
|
66
|
+
BUILDER, "--family", FAMILY, ...CATALOG_MODE,
|
|
67
|
+
"--dir", KIT, "--dir", SDK, "--out", outFile,
|
|
68
|
+
], { encoding: "utf8" });
|
|
69
|
+
if (res.status !== 0) {
|
|
70
|
+
console.error(res.stdout || "", res.stderr || "");
|
|
71
|
+
console.error("ERROR: build-catalog.mjs failed");
|
|
72
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
73
|
+
process.exit(2);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const next = JSON.parse(readFileSync(outFile, "utf8"));
|
|
77
|
+
const prev = existsSync(SHIPPED) ? JSON.parse(readFileSync(SHIPPED, "utf8")) : { symbols: [] };
|
|
78
|
+
const prevSet = new Set(prev.symbols || []);
|
|
79
|
+
const nextSet = new Set(next.symbols || []);
|
|
80
|
+
const added = [...nextSet].filter((s) => !prevSet.has(s));
|
|
81
|
+
const removed = [...prevSet].filter((s) => !nextSet.has(s));
|
|
82
|
+
|
|
83
|
+
console.log(`catalog-refresh: ${prevSet.size} → ${nextSet.size} symbols (+${added.length} / -${removed.length})`);
|
|
84
|
+
if (added.length) console.log(` added: ${added.slice(0, 20).join(", ")}${added.length > 20 ? " …" : ""}`);
|
|
85
|
+
if (removed.length) console.log(` removed: ${removed.slice(0, 20).join(", ")}${removed.length > 20 ? " …" : ""}`);
|
|
86
|
+
|
|
87
|
+
if (CHECK) {
|
|
88
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
89
|
+
if (added.length || removed.length) {
|
|
90
|
+
console.log(`\n❌ catalog is STALE — the installed kit's export surface changed. Run: npm run catalog:refresh`);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
console.log(`\n✅ catalog is fresh (matches the installed kit).`);
|
|
94
|
+
process.exit(0);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
copyFileSync(outFile, SHIPPED);
|
|
98
|
+
copyFileSync(outFile, REVIEWER);
|
|
99
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
100
|
+
console.log(`\n✅ wrote ${SHIPPED.replace(ROOT + "/", "")} and ${REVIEWER.replace(ROOT + "/", "")} (both oracles in sync).`);
|