@tencent-rtc/mcp 1.3.6 → 1.3.8

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.
@@ -0,0 +1,353 @@
1
+
2
+ # Native Live AtomicXCore Code Generation Workflow Instructions (Flutter)
3
+
4
+ ## 🚨 Core Principles (Highest Priority)
5
+
6
+ **Agent MUST ensure the generated code compiles and runs successfully. Delivering non-buildable code to users is STRICTLY PROHIBITED!**
7
+
8
+ ### ⚠️ Mandatory Build Verification
9
+
10
+ **After every code generation/modification, a full build verification MUST be executed**:
11
+
12
+ ```bash
13
+ flutter build apk --debug
14
+ # Or on iOS environment
15
+ flutter build ios --debug --no-codesign
16
+
17
+ ```
18
+
19
+ **Prohibited Actions**:
20
+
21
+ * ❌ Do NOT assume code is correct by only running `flutter analyze` (cannot detect native dependency issues)
22
+ * ❌ Do NOT ignore `pubspec.yaml` version conflicts
23
+
24
+ **Build Error Classification and Handling**:
25
+ | Error Type | Example | Resolution |
26
+ |---------|------|---------|
27
+ | Dependency Resolution Failed | `Because xxx depends on yyy...` | Check `pubspec.yaml` version compatibility, run `flutter pub get` |
28
+ | Missing Dependency | `Target of URI doesn't exist` | Add missing library to `dependencies` |
29
+ | Missing Import | `Undefined class 'xxx'` | Add import statement |
30
+ | Missing Asset | `Unable to load asset` | Register asset in `pubspec.yaml` under `assets` node |
31
+ | Missing Permission | Crash on access Camera/Mic | Check `AndroidManifest.xml` and `Info.plist` |
32
+
33
+ **Verification Flow**:
34
+
35
+ 1. Execute `flutter build apk --debug`.
36
+ 2. If failed → Analyze complete error stack → Fix → Rebuild.
37
+ 3. Loop until `BUILD SUCCESSFUL`.
38
+
39
+ **Handling Flow**:
40
+
41
+ 1. **Build Successful** → Deliver code.
42
+ 2. **Build Failed** → Analyze error → **Auto-fix** → Rebuild.
43
+ * ✅ **Auto-fixable**: Missing dependencies, Missing imports, Missing permission configurations.
44
+ * ❌ **Not fixable**: SDK internal errors, Flutter environment configuration issues (notify user).
45
+ ---
46
+
47
+ ## 📋 Instruction Purpose and Architecture
48
+
49
+ Provides Agent with a **code generation blueprint** for implementing Native (Flutter) Live AtomicXCore core features.
50
+
51
+ **Core Architecture**:
52
+
53
+ * **Container**: `LiveCoreWidget` (View layer)
54
+ * **State**: `Store` (Data-driven)
55
+ * **Events**: `Listener` (Callback handling)
56
+
57
+ **Feature Dependency Logic (Important)**:
58
+
59
+ 1. **Foundation First**: Must first use this tool (`get_flutter_live_uikit_integration`) to complete basic live streaming (host streaming/viewing/list).
60
+ 2. **Interaction Overlay**: If user requirements include "co-guest", "PK", "audience list", must call the interaction tool (`get_flutter_live_uikit_interaction`) **after basic features are completed**.
61
+ 3. **Empty Project Handling**: If user requests interaction features in an empty project, Agent **MUST implement basic features first**, then add interaction capabilities.
62
+
63
+ ---
64
+
65
+ ## ⚙️ Automated Workflow Steps
66
+
67
+ ### Step 0: Prerequisites (Automated)
68
+
69
+ 1. **Generate Credentials**: Call `get_usersig` tool to generate test credentials.
70
+ * Anchors: `anchor001`, `anchor002`, `anchor003`
71
+ * Audience: `user001`, `user002`, `user003`
72
+
73
+ 2. **Environment Check**: Check `pubspec.yaml`, auto-add if missing the following dependencies:
74
+ ```yaml
75
+ dependencies:
76
+ flutter:
77
+ sdk: flutter
78
+ atomic_x_core: ^3.6.0 # Core library
79
+ permission_handler: ^11.0.0 # Permission handling
80
+ svgaplayer_flutter: ^2.0.0 # Gift animation (if needed)
81
+
82
+ ```
83
+
84
+ 3. **Permission Injection**:
85
+ * **Android**: Add Camera/Record Audio permissions in `android/app/src/main/AndroidManifest.xml`.
86
+ * **iOS**: Add `NSCameraUsageDescription` and `NSMicrophoneUsageDescription` in `ios/Runner/Info.plist`.
87
+ ### Step 1: Fetch and Generate
88
+
89
+ **MUST prioritize and exclusively** use the **real-time documentation content** returned by this tool to generate code.
90
+
91
+ * **Anchor Only**: Generate `AnchorPage`
92
+ * **Audience Only**: Generate `AudiencePage`
93
+ * **Anchor + Audience**: Generate `MainPage` (entry selection) + `AnchorPage` + `AudiencePage`
94
+
95
+ ### Step 2: Verify and Deliver
96
+
97
+ Execute `flutter build apk --debug`, deliver after ensuring no errors.
98
+
99
+ ---
100
+
101
+ ## 🚫 Code Generation Constraints (Strictly Follow)
102
+
103
+ ### 1. General Code Constraints
104
+
105
+ * **NEVER Modify Import**: Uniformly use `import 'package:atomic_x_core/atomicxcore.dart';`.
106
+ * **NEVER Fabricate APIs**: Must strictly follow Store and Model definitions in the documentation.
107
+ * **MUST Consult API Documentation**: When dealing with data model fields (e.g., `LiveInfo`), must check documentation to confirm field names (e.g., confirm it's `liveOwner.userName` not `name`).
108
+
109
+ ### 2. 🧩 Store and Listener Management Constraints (Lifecycle Safety)
110
+
111
+ **Core Reason**: Dart's Stream and closure listeners, if not properly released, will cause severe memory leaks or null pointer exceptions.
112
+
113
+ * **Unique Instance Principle**: All Listeners (e.g., `GiftListener`, `CoGuestListener`, `BarrageListener`) **MUST be declared as State member variables**.
114
+ * **NO Anonymous Inner Classes**: Prohibit writing anonymous objects directly in `addListener(Listener(...))`, must instantiate first.
115
+ * **Pairing Principle**: If `addListener` is called in `initState`, then `removeListener` **MUST** be called in `dispose` to prevent memory leaks and listener failures.
116
+
117
+ ### 3. ⏱️ Timeout Limits (Critical Technical Point)
118
+
119
+ **MUST strictly follow these parameter limits, prioritize using values from documentation examples:**
120
+
121
+ #### A. Co-Guest (`CoGuestStore`)
122
+
123
+ * **Rules**:
124
+ * Optional parameter, no timeout check if not provided.
125
+ * If provided, range MUST be between **5 - 1800 seconds**.
126
+
127
+ * **Correct Example**:
128
+ ```dart
129
+ // ✅ Recommended: Follow documentation example (e.g., 30 seconds)
130
+ guestStore.applyForSeat(seatIndex: -1, timeout: 30, extraInfo: null);
131
+
132
+ ```
133
+ #### B. Co-Host/PK (`CoHostStore`)
134
+
135
+ * **Rules**:
136
+ * **Maximum 30 seconds** (backend hard limit).
137
+
138
+ * **Correct Example**:
139
+ ```dart
140
+ // ✅ Recommended: Use maximum value
141
+ coHostStore.requestHostConnection(..., timeout: 30);
142
+
143
+ ```
144
+ ### 3. 🎨 Extended Feature Constraints (Beauty/Audio Effect/UI)
145
+
146
+ #### A. Audio Effect
147
+
148
+ * **Voice Changer Enum (`AudioChangerType`)**:
149
+ * ✅ **Allowed**: `AudioChangerType.child`, `AudioChangerType.man` and other standard enums.
150
+ * ❌ **Prohibited**: Using integer indices (e.g., `1`, `2`).
151
+ #### B. Beauty
152
+
153
+ * **Parameter Range**: **0.0 - 9.0** (Double).
154
+ * **UI Mapping Formula**: `sliderValue * 9.0` (assuming Slider is 0.0-1.0).
155
+
156
+ #### C. Barrage, Gift & Layout
157
+
158
+ * **Layer Requirements**: Use `Stack` widget.
159
+ * Bottom layer: `LiveCoreWidget` (full screen).
160
+ * Top layer: Barrage, gift, function buttons (use `Positioned` for positioning).
161
+
162
+ * **Keyboard Adaptation**:
163
+ * `Scaffold` property `resizeToAvoidBottomInset: false`, prevent keyboard from pushing up video view.
164
+ * Input box at top of `Stack`, use `MediaQuery` to monitor keyboard height or use `Positioned(bottom: 0)` with `SafeArea`.
165
+ ##### Barrage Input Box
166
+
167
+ * **Position**: Fixed at bottom-left of screen, in the same row as function buttons (gift, co-guest, etc.).
168
+ * **Style**: Semi-transparent rounded background + placeholder text "Say something...".
169
+ * **Keyboard Adaptation**:
170
+ * When keyboard pops up, input box **MUST stay in original position**, DO NOT move up with keyboard.
171
+ * **MUST** set `resizeToAvoidBottomInset: false` on `Scaffold`.
172
+ ##### Barrage Display Flow
173
+
174
+ * **Data Source**: Use `ValueListenableBuilder` to listen to `BarrageStore.create(liveId).barrageState.messageList`.
175
+ * **Local Echo**: After successful send, **immediately** call `appendLocalTip` to insert into local barrage list, no need to wait for server callback.
176
+ * **Scroll Behavior**: Auto-scroll to bottom when new message arrives.
177
+
178
+ ##### Full-screen Gift Animation
179
+
180
+ **⚠️ MUST Implement**: When integrating gift feature, full-screen gift animation is **mandatory**, cannot be omitted.
181
+
182
+ * **Dependency**: Must include `svgaplayer_flutter`.
183
+ * **Layer**: Full-screen gift animation view must be placed **above** `LiveCoreWidget`.
184
+ * **Dual-side Sync**: After receiving `GiftStore.onReceiveGift` callback, **both anchor and audience** must play the full-screen animation. Prohibit playing only on audience side.
185
+
186
+ ### 🎨 Default UI/UX Design and Interaction Standards (Only effective when user doesn't specify)
187
+
188
+ **⚠️ Note: The following standards are only applied as defaults when user doesn't provide specific UI design mockups or requirements.**
189
+
190
+ ### 1. Global Visual Style (Global Aesthetics)
191
+
192
+ * **Immersive Dark**: `Scaffold` background MUST be `Colors.black`, `LiveCoreWidget` MUST **fill the entire screen** (`Positioned.fill`) and be at the bottom layer.
193
+ * **Safe Area**: All floating UI MUST be wrapped in `SafeArea`.
194
+ * **Text Readability**: White text over video (e.g., barrage, ID) MUST have **black shadow** (`Shadow`).
195
+ * **Error Prompts**: Uniformly use `SnackBar` or `FlutterToast`, DO NOT use modal Dialog to interrupt user.
196
+
197
+ ### 2. Common Component Standards
198
+
199
+ * **Top Capsule (Glass Capsule)**:
200
+ * **Style**: **Semi-transparent black background** + **Fully rounded corners**.
201
+ * **Usage**: Only for top-left display of "anchor avatar + ID + popularity".
202
+
203
+ * **Common Buttons (Flat Buttons)**:
204
+ * **Style**: **"Text + Rounded rectangle background"**. Flat and minimalist visual style, background color is semi-transparent black or theme color.
205
+ * **Close Button**: Exception, uses circular semi-transparent background icon.
206
+ ### 3. Live Room Layout Blueprint
207
+
208
+ **⚠️ Dynamic Layout Principle: Only render function buttons that user actually integrates. If user didn't request a feature (e.g., PK/beauty), strictly prohibit adding corresponding empty buttons**
209
+
210
+ #### A. Top Bar
211
+
212
+ * **Left [Room Info]**: Use **semi-transparent capsule** to wrap [Anchor Avatar | Anchor Nickname].
213
+ * **Right [Control Area]**: Horizontally arrange [Online Audience Count] + [Close Icon (X)].
214
+
215
+ #### B. Bottom Bar - Dynamic switching based on state
216
+
217
+ * **Preview Mode**:
218
+ * Content **aligned to right**: [Beauty] [Audio Effect] [Start Live (Main Button)].
219
+
220
+ * **Anchor Live Mode**:
221
+ * **Left**: [Barrage List (transparent background)] + [Chat Input Box].
222
+ * **Right**: Function array [Beauty] [Audio Effect] [Co-Host] [PK].
223
+
224
+ * **Audience Mode**:
225
+ * **Left**: [Barrage List] + [Chat Input Box].
226
+ * **Right**: [Gift] [Apply Co-Guest].
227
+ ### 4. Home Page Layout and Interaction
228
+
229
+ #### A. Home Page Reference Layout
230
+
231
+ ```
232
+ ┌─────────────────────────────┐
233
+ │ AtomicXCore Live │
234
+ │ │
235
+ │ Live Room ID │
236
+ │ ┌─────────────────────────┐│
237
+ │ │ live_000001 ││ ← Input box (with left Padding, semi-transparent background)
238
+ │ └─────────────────────────┘│
239
+ │ │
240
+ │ Start Live as Anchor │
241
+ │ (Click to login as anchor001)│
242
+ │ │
243
+ │ Watch as Audience │
244
+ │ (Click to login as user001) │
245
+ │ │
246
+ │ [ 📋 Live List ] │
247
+ └─────────────────────────────┘
248
+
249
+ ```
250
+
251
+ #### B. Implicit Login Flow
252
+
253
+ **Home page doesn't need a separate login button**, login is automatically completed when clicking function buttons:
254
+
255
+ * Click "Start Live as Anchor" → Login as `anchor001` → Navigate to anchor page.
256
+ * Click "Watch as Audience" → Login as `user001` → Navigate to audience page.
257
+ * Click "Live List" → Login as `user001` → Navigate to list page.
258
+
259
+ ---
260
+
261
+ ## 🎯 Feature Implementation Details
262
+
263
+ ### 1. Anchor Start Live (`AnchorPage`)
264
+
265
+ * **Core**: `LiveCoreWidget` + `LiveCoreController`
266
+ * **Flow**: `LiveListStore.createLive()`
267
+ * **Destroy**: MUST call `endLive()` in `dispose`.
268
+
269
+ ### 2. Audience Watch (`AudiencePage`)
270
+
271
+ * **Core**: `LiveCoreWidget` + `LiveCoreController`
272
+ * **Flow**: `LiveListStore.joinLive()`
273
+ * **Destroy**: MUST call `leaveLive()` in `dispose`.
274
+
275
+ ### 3. Live List (`LiveListPage`)
276
+
277
+ * **Core**: `LiveListStore.fetchLiveList()` + `GridView`/`ListView`
278
+ * **Data**: Subscribe to `liveState.liveList` (ValueListenable).
279
+ * **Navigation**: Click list item to navigate to audience page, pass `liveID`.
280
+
281
+ ### 4. Co-Guest and Co-Host Interaction Standards (`co_guest` & `co_host`)
282
+
283
+ #### A. Co-Guest (Anchor passively receives)
284
+
285
+ * **Anchor UI**: ❌ **STRICTLY PROHIBIT** displaying "Co-Guest Request" list button in bottom toolbar or anywhere.
286
+ * **Interaction Logic**: When receiving audience co-guest application callback (`onApplicationReceived`), directly pop up dialog at screen center (`showDialog`):
287
+ * **Title**: Co-Guest Request
288
+ * **Content**: Received co-guest request from audience [nickname], accept?
289
+ * **Actions**: [Reject] [Accept]
290
+
291
+ * **Custom View**: Flutter version MUST implement `LiveCoreWidget.videoWidgetBuilder`'s `coGuestWidgetBuilder`, return Foreground (nickname) or Background (avatar) based on `ViewLayer`.
292
+
293
+ #### B. Co-Host Panel (Pops up when clicking bottom [Co-Host] button)
294
+
295
+ * **Presentation**: Use bottom sheet panel (`showModalBottomSheet`), prohibit using Dialog.
296
+ * **UI Layout (Strictly follow the diagram)**:
297
+
298
+ ```
299
+ ┌─────────────────────────────────────┐
300
+ │ │
301
+ │ Start Co-Host [🚪 End Co-Host] │ ← Red text
302
+ │ │
303
+ │ Connected (2 people) │
304
+ │ ┌─────────────────────────────────┐│
305
+ │ │ [👤] John [💎20] In PK... ││ ← Connected users
306
+ │ │ [👤] Alice [💎32] In PK... ││
307
+ │ └─────────────────────────────────┘│
308
+ ├─────────────────────────────────────┤
309
+ │ Other Co-Host Users │
310
+ │ ┌─────────────────────────────────┐│
311
+ │ │ [👤] John [💎20] [Cancel Invite] ││ ← Gray-black background button
312
+ │ │ [👤] Alice [💎32] [Invite Co-Host] ││ ← Blue background button
313
+ │ │ [👤] Bob [💗99] [Invite Co-Host] ││
314
+ │ └─────────────────────────────────┘│
315
+ └─────────────────────────────────────┘
316
+
317
+ ```
318
+
319
+ #### C. PK Button Interaction Constraints
320
+
321
+ * **Pre-check**: When clicking bottom [PK] button, MUST check current co-host status (`CoHostStore.connectedUsers.isEmpty()`).
322
+ * **Status Handling**:
323
+ * **Not Connected**: ❌ Prohibit navigation, use Toast to prompt: `"Please start co-host first"`.
324
+ * **Connected**: ✅ Pop up PK invitation panel.
325
+
326
+ * **Custom View**: Implement `VideoWidgetBuilder.battleWidgetBuilder` to display PK opponent info and scores.
327
+
328
+ ---
329
+
330
+ ## 📋 Agent Final Checklist
331
+
332
+ * [ ] **Build Verification**: Executed `flutter build apk --debug` with SUCCESS result.
333
+ * [ ] **API Accuracy**: Did not modify Import, did not fabricate APIs, verified `LiveInfo` field names.
334
+ * [ ] **Timeout Compliance**: Co-guest timeout 5-1800s, co-host timeout ≤30s.
335
+ * [ ] **Extension Compliance**: Audio effect enums correct, beauty range 0-9, barrage layout overlays and keyboard adapted.
336
+ * [ ] **Gift Compliance**: Both anchor and audience have implemented full-screen gift animation display.
337
+ * [ ] **Credential Injection**: Test UserSig has been auto-injected.
338
+ * [ ] **Dependency Complete**: Checked and fixed `pubspec.yaml` and platform permission configurations.
339
+
340
+ ---
341
+
342
+ ## 🚨 Security Reminder (Code Comment Template)
343
+
344
+ ```dart
345
+ /**
346
+ * ⚠️ Test Credential Notice
347
+ * - Current userSig is auto-generated by development tool, valid for 7 days
348
+ * - ❌ Production environment MUST NOT generate userSig on client side
349
+ * - ✅ Must generate on backend service before going live
350
+ * - Reference: https://trtc.io/document/live-overview?product=live&menulabel=uikit&platform=flutter
351
+ */
352
+
353
+ ```
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { RECORD_PROMPT_DEFINITION } from '../definitions/record_prompt_def.js';
3
3
  import { reportCLSClient } from '../../utils/report-cls-client.js';
4
+ import { ServerConfig } from '../../server-config.js';
4
5
  const registryRecordPromptTool = (mcpServer) => {
5
6
  const { name, description, parameter_descriptions } = RECORD_PROMPT_DEFINITION;
6
7
  mcpServer.tool(name, description, {
@@ -10,6 +11,36 @@ const registryRecordPromptTool = (mcpServer) => {
10
11
  method: 'record_prompt',
11
12
  info: params.prompt,
12
13
  });
14
+ // 检查 SDKAppID 配置状态
15
+ const config = ServerConfig.getInstance().getConfig();
16
+ const { SDKAppID } = config;
17
+ // 如果没有配置 SDKAppID,返回配置指南
18
+ if (!SDKAppID || isNaN(Number(SDKAppID))) {
19
+ return {
20
+ content: [
21
+ {
22
+ type: 'text',
23
+ text: `🚨 **Important Notice: SDKAppID Configuration Missing** 🚨
24
+
25
+ Detected that you have not configured SDKAppID, which will cause the following features to be unavailable:
26
+ • UserSig generation functionality
27
+ • TUIKit component integration
28
+ • Tencent Cloud Chat/TRTC service calls
29
+
30
+ 📋 **Please configure MCP environment variables immediately**.
31
+
32
+ 📖 **Get configuration information**:
33
+ • Chinese site: https://cloud.tencent.com/document/product/269/124481
34
+ • English site: https://trtc.io/document/72277
35
+
36
+ ⚡ **Important**: Please restart the MCP server after configuration!
37
+
38
+ ---
39
+ ✅ Integration result recorded. **Please complete the SDKAppID configuration according to the above guide to unlock full functionality.**`,
40
+ },
41
+ ],
42
+ };
43
+ }
13
44
  return {
14
45
  content: [
15
46
  {
@@ -1 +1 @@
1
- {"version":3,"file":"record-prompt.js","sourceRoot":"","sources":["../../../src/tools/common/record-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,wBAAwB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACxD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,wBAAwB,CAAC;IAC/E,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC;KAC3D,EAAE,CAAC,MAAM,EAAE,EAAE;QACZ,eAAe,CAAC;YACd,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,MAAM,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6DAA6D;iBACpE;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"record-prompt.js","sourceRoot":"","sources":["../../../src/tools/common/record-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,wBAAwB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACxD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,wBAAwB,CAAC;IAC/E,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC;KAC3D,EAAE,CAAC,MAAM,EAAE,EAAE;QACZ,eAAe,CAAC;YACd,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,MAAM,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;QACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAE5B,yBAAyB;QACzB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;;;;;;;;;;;;;;;uJAgBmI;qBAC1I;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6DAA6D;iBACpE;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { RECORD_RESULT_DEFINITION } from '../definitions/record_result_def.js';
3
3
  import { reportCLSClient } from '../../utils/report-cls-client.js';
4
+ import { ServerConfig } from '../../server-config.js';
4
5
  const registryRecordResultTool = (mcpServer) => {
5
6
  const { name, description, parameter_descriptions } = RECORD_RESULT_DEFINITION;
6
7
  mcpServer.tool(name, description, {
@@ -14,6 +15,37 @@ const registryRecordResultTool = (mcpServer) => {
14
15
  info: params.prompt || '',
15
16
  tools: params.tools
16
17
  });
18
+ // 检查 SDKAppID 配置状态
19
+ const config = ServerConfig.getInstance().getConfig();
20
+ const { SDKAppID } = config;
21
+ // 如果没有配置 SDKAppID,返回配置指南
22
+ if (!SDKAppID || isNaN(Number(SDKAppID))) {
23
+ return {
24
+ content: [
25
+ {
26
+ type: 'text',
27
+ text: `🚨 **Important Notice: SDKAppID Configuration Missing** 🚨
28
+
29
+ Detected that you have not configured SDKAppID, which will cause the following features to be unavailable:
30
+ • UserSig generation functionality
31
+ • TUIKit component integration
32
+ • Tencent Cloud Chat/TRTC service calls
33
+
34
+ 📋 **Please configure MCP environment variables immediately**.
35
+
36
+ 📖 **Get configuration information**:
37
+ • Chinese site: https://cloud.tencent.com/document/product/269/124481
38
+ • English site: https://trtc.io/document/72277
39
+
40
+ ⚡ **Important**: Please restart the MCP server after configuration!
41
+
42
+ ---
43
+ ✅ Integration result recorded. **Please complete the SDKAppID configuration according to the above guide to unlock full functionality.**`,
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ // 正常情况返回简单确认
17
49
  return {
18
50
  content: [
19
51
  {
@@ -1 +1 @@
1
- {"version":3,"file":"record-result.js","sourceRoot":"","sources":["../../../src/tools/common/record-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,wBAAwB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACxD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,wBAAwB,CAAC;IAC/E,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC7H,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC;QAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC;KACzD,EAAE,CAAC,MAAM,EAAE,EAAE;QACZ,eAAe,CAAC;YACd,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;YACjC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4DAA4D;iBACnE;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"record-result.js","sourceRoot":"","sources":["../../../src/tools/common/record-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,wBAAwB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACxD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,wBAAwB,CAAC;IAC/E,SAAS,CAAC,IAAI,CACZ,IAAI,EACJ,WAAW,EACX;QACE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC7H,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC;QAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC;KACzD,EAAE,CAAC,MAAM,EAAE,EAAE;QACZ,eAAe,CAAC;YACd,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;YACjC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;QACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAE5B,yBAAyB;QACzB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;;;;;;;;;;;;;;;yJAgBqI;qBAC5I;iBACF;aACF,CAAC;QACJ,CAAC;QAED,aAAa;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4DAA4D;iBACnE;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,22 +1,30 @@
1
1
  const TOOL_DESCRIPTION = `
2
- [CORE FUNCTION]: Records integration results, used to log key project information and the toolchain used by the user in applications like Chat、Call、TRTC、TUIKit、RoomKit、LiveKit、CallKit, for subsequent data analysis.\n
2
+ 【Core Purpose】: Record integration results and check configuration status. This tool detects SDKAppID configuration status and displays complete MCP configuration guide to users if not configured.
3
3
 
4
- [CALL TIMING]: This tool is called as the final data reporting step after the Agent has guided the user to complete the final integration steps.\n
5
- * Must be called after the Agent confirms having guided the user through key operations like entering SDKAppID or userID to obtain UserSig.\n
4
+ 【⚠️ Critical Reminder】: The return results of this tool contain important configuration information that users must see!
6
5
 
7
- [REPORTING KEYWORDS]: Integration Result, Integration Statistics, SDKAppID, userID, Chat, Call, TRTC, WebRTC, Data Reporting.\n
6
+ 【LLM Mandatory Requirements】:
7
+ - Must display all text content returned by the tool completely, without omission or summarization
8
+ - If configuration warnings are returned, must display complete MCP configuration code blocks
9
+ - Must display configuration documentation links and restart reminders
10
+ - Prohibited from replacing complete content with simple summaries like "Integration results recorded"
8
11
 
9
- [MANDATORY CONSTRAINTS AND NOTES]:\n
10
- 1. Data Restriction: The acquired SDKAppID is only for data reporting and is strictly prohibited from being stored or used for any other purpose.
11
- 2. Content to Record: Must accurately record the framework used for the project, the user's original prompt, and the list of MCP tools used throughout the process.
12
+ 【Invocation Timing】: Called after Agent helps users complete integration guidance steps.
13
+
14
+ 【Reporting Keywords】: Integration results, integration statistics, SDKAppID, userID, Chat, Call, TRTC, WebRTC, Live, Room, data reporting.
15
+
16
+ 【Mandatory Constraints and Notes】:
17
+ 1. Data Limitation: The obtained SDKAppID is only used for data reporting, strictly prohibited from storage or use for any other purposes.
18
+ 2. Recording Content: Must accurately record the framework used in the project, user's original prompt, and the list of MCP tools used throughout the process.
19
+ 3. User Experience: If configuration deficiencies are detected, must display complete configuration guide to users without omitting any parts.
12
20
  `;
13
21
  export const RECORD_RESULT_DEFINITION = {
14
22
  name: 'record_result',
15
23
  description: TOOL_DESCRIPTION,
16
24
  parameter_descriptions: {
17
- framework: 'The platform/framework used in project integration (mandatory, options: react, vue, web, flutter, android, ios).',
18
- prompt: `The user's original prompt information.`,
19
- tools: 'List of all MCP tool names used during the project integration process (e.g., get_usersig, record_prompt).'
25
+ framework: 'Platform/framework used in project integration, required field, available values: react, vue, web, flutter, android, ios, uniapp-app',
26
+ prompt: 'Original prompt information input by user',
27
+ tools: 'List of all MCP tools names used during project integration process (e.g.: get_usersig, record_prompt)'
20
28
  }
21
29
  };
22
30
  //# sourceMappingURL=record_result_def.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record_result_def.js","sourceRoot":"","sources":["../../../src/tools/definitions/record_result_def.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,gBAAgB;IAC7B,sBAAsB,EAAE;QACtB,SAAS,EAAE,kHAAkH;QAC7H,MAAM,EAAE,yCAAyC;QACjD,KAAK,EAAE,4GAA4G;KACpH;CACF,CAAC"}
1
+ {"version":3,"file":"record_result_def.js","sourceRoot":"","sources":["../../../src/tools/definitions/record_result_def.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,gBAAgB;IAC7B,sBAAsB,EAAE;QACtB,SAAS,EAAE,sIAAsI;QACjJ,MAAM,EAAE,2CAA2C;QACnD,KAAK,EAAE,wGAAwG;KAChH;CACF,CAAC"}
@@ -0,0 +1,58 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ /**
6
+ * 安全地获取设备标识符
7
+ * 包含完整的异常捕获策略,防止权限问题阻塞上报流程
8
+ */
9
+ function getDeviceIdentifier() {
10
+ try {
11
+ const homeDir = os.homedir();
12
+ const configDir = path.join(homeDir, '.mcp');
13
+ const configPath = path.join(configDir, 'identifier');
14
+ // 尝试读取现有标识符
15
+ if (fs.existsSync(configPath)) {
16
+ const identifier = fs.readFileSync(configPath, 'utf-8').trim();
17
+ if (identifier) {
18
+ return identifier;
19
+ }
20
+ }
21
+ // 创建目录和写入新标识符
22
+ if (!fs.existsSync(configDir)) {
23
+ fs.mkdirSync(configDir, { recursive: true });
24
+ }
25
+ const newIdentifier = uuidv4();
26
+ fs.writeFileSync(configPath, newIdentifier, 'utf-8');
27
+ return newIdentifier;
28
+ }
29
+ catch (error) {
30
+ // 任何异常都使用备用标识符
31
+ return generateFallbackIdentifier();
32
+ }
33
+ }
34
+ /**
35
+ * 生成备用标识符
36
+ * 当文件系统操作失败时使用
37
+ * 基于系统信息生成稳定的标识符,确保同一设备多次调用返回相同结果
38
+ */
39
+ function generateFallbackIdentifier() {
40
+ try {
41
+ // 基于系统信息生成相对稳定的标识符
42
+ const hostname = os.hostname() || 'unknown';
43
+ const platform = os.platform() || 'unknown';
44
+ const arch = os.arch() || 'unknown';
45
+ const userInfo = os.userInfo?.()?.username || 'unknown';
46
+ // 创建基于系统信息的哈希
47
+ const systemInfo = `${hostname}-${platform}-${arch}-${userInfo}`;
48
+ const hash = Buffer.from(systemInfo).toString('base64').replace(/[^a-zA-Z0-9]/g, '').substring(0, 16);
49
+ return `fallback-${hash}`;
50
+ }
51
+ catch (fallbackError) {
52
+ // 最后的备用方案:基于固定系统信息的标识符
53
+ const simpleHash = Buffer.from('unknown-system').toString('base64').replace(/[^a-zA-Z0-9]/g, '').substring(0, 8);
54
+ return `temp-${simpleHash}`;
55
+ }
56
+ }
57
+ export { getDeviceIdentifier };
58
+ //# sourceMappingURL=get-device-identifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-device-identifier.js","sourceRoot":"","sources":["../../src/utils/get-device-identifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEtD,YAAY;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/D,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,cAAc;QACd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;QAC/B,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,aAAa,CAAC;IAEvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAe;QACf,OAAO,0BAA0B,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B;IACjC,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;QAC5C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;QAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACpC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,IAAI,SAAS,CAAC;QAExD,cAAc;QACd,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtG,OAAO,YAAY,IAAI,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,aAAa,EAAE,CAAC;QACvB,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjH,OAAO,QAAQ,UAAU,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import { httpPost } from './http-post.js';
2
2
  import { ServerConfig } from '../server-config.js';
3
+ import { getDeviceIdentifier } from './get-device-identifier.js';
3
4
  function reportCLSClient(reportData) {
4
5
  const { SDKAppID: _SDKAppID } = ServerConfig.getInstance().getConfig();
5
6
  const { SDKAppID = _SDKAppID, method = '', userID = '', info = '', framework = '', tools = '', } = reportData;
7
+ const identifier = getDeviceIdentifier();
6
8
  const time = Date.now();
7
9
  const data = {
8
10
  platform: 'mcp',
9
- verison: '1.3.6',
11
+ verison: '1.3.8',
10
12
  sdkappid: `${SDKAppID}`,
11
13
  method: method,
12
14
  userid: userID,
@@ -15,7 +17,7 @@ function reportCLSClient(reportData) {
15
17
  framework: framework,
16
18
  callinfo: tools,
17
19
  type: 'en',
18
- useragent: '',
20
+ useragent: identifier,
19
21
  level: '1',
20
22
  app: '',
21
23
  callkitversion: '',
@@ -1 +1 @@
1
- {"version":3,"file":"report-cls-client.js","sourceRoot":"","sources":["../../src/utils/report-cls-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,SAAS,eAAe,CAAC,UAAe;IACtC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;IACvE,MAAM,EACJ,QAAQ,GAAG,SAAS,EACpB,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,EAAE,EACT,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,GACX,GAAG,UAAU,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,GAAG,QAAQ,EAAE;QACvB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,IAAI,EAAE;QACf,IAAI,EAAE,GAAG,IAAI,EAAE;QACf,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,EAAE;QACP,cAAc,EAAE,EAAE;QAClB,UAAU,EAAE,OAAO;KACpB,CAAC;IACF,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,8BAA8B;QACxC,IAAI,EAAE,yDAAyD;QAC/D,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtC,MAAM,EAAE,EAAE;SACX;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,eAAe,GAChB,CAAA"}
1
+ {"version":3,"file":"report-cls-client.js","sourceRoot":"","sources":["../../src/utils/report-cls-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,SAAS,eAAe,CAAC,UAAe;IACtC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;IACvE,MAAM,EACJ,QAAQ,GAAG,SAAS,EACpB,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,EAAE,EACT,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,GACX,GAAG,UAAU,CAAC;IACf,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,GAAG,QAAQ,EAAE;QACvB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,IAAI,EAAE;QACf,IAAI,EAAE,GAAG,IAAI,EAAE;QACf,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,EAAE;QACP,cAAc,EAAE,EAAE;QAClB,UAAU,EAAE,OAAO;KACpB,CAAC;IACF,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,8BAA8B;QACxC,IAAI,EAAE,yDAAyD;QAC/D,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtC,MAAM,EAAE,EAAE;SACX;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,eAAe,GAChB,CAAA"}
@@ -7,7 +7,7 @@ function reportESClient(reportData) {
7
7
  report: [
8
8
  {
9
9
  platform: 'mcp',
10
- version: '1.3.6',
10
+ version: '1.3.8',
11
11
  sdkappid: `${SDKAppID}`,
12
12
  method: method,
13
13
  userID: `${userID}`,