@tencentcloud/sdk-mcp 1.6.8 → 1.7.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +54 -35
  3. package/knowledge/build-index.js +28 -4
  4. package/knowledge/chunker.js +82 -14
  5. package/knowledge/chunking-policy.js +100 -0
  6. package/knowledge/frontmatter-meta.js +167 -0
  7. package/knowledge/path-meta.js +28 -6
  8. package/knowledge/search/exact-lookup.js +26 -123
  9. package/knowledge/search/filter-pool.js +12 -29
  10. package/knowledge/search/framework-fallback.js +22 -0
  11. package/knowledge/search/intent-router.js +13 -0
  12. package/knowledge/search/query-normalizer.js +56 -3
  13. package/knowledge/search/search-core.js +391 -0
  14. package/knowledge/search/search-knowledge.js +290 -361
  15. package/knowledge/search/search-message.js +87 -0
  16. package/knowledge/search/search-pass.js +428 -0
  17. package/knowledge/search/search-types.js +1 -0
  18. package/knowledge/search/url-row-scorer.js +258 -0
  19. package/package.json +1 -1
  20. package/resource/index/manifest.json +1 -1
  21. package/resource/integration/callkit/preset/ios/integration.md +1 -0
  22. package/resource/integration/chat/preset/flutter/integration.md +1 -0
  23. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +11 -9
  24. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +11 -11
  25. package/resource/knowledge/callkit/best-practice/callkit-miniprogram/uniapp-shrink.md +64 -0
  26. package/resource/knowledge/callkit/best-practice/common/call-autoplay-blocked.md +81 -0
  27. package/resource/knowledge/callkit/best-practice/common/call-message-in-chat.md +84 -0
  28. package/resource/knowledge/callkit/best-practice/common/call-vs-calls.md +114 -0
  29. package/resource/knowledge/callkit/best-practice/common/callengine-call-flow.md +128 -0
  30. package/resource/knowledge/callkit/best-practice/common/callengine-log-level.md +72 -0
  31. package/resource/knowledge/callkit/best-practice/common/callkit-get-engine-instance.md +87 -0
  32. package/resource/knowledge/callkit/best-practice/common/callkit-get-roomid.md +83 -0
  33. package/resource/knowledge/callkit/best-practice/common/callkit-limitations.md +37 -0
  34. package/resource/knowledge/callkit/best-practice/common/callkit-user-register-and-kicked.md +103 -0
  35. package/resource/knowledge/callkit/preset/react/api.md +1 -150
  36. package/resource/knowledge/callkit/preset/vue/api.md +1 -38
  37. package/resource/knowledge/chat/best-practice/common/avchatroom-message-loss-diagnosis.md +71 -0
  38. package/resource/knowledge/chat/best-practice/common/group-conversation-cleanup-on-system-notice.md +67 -0
  39. package/resource/knowledge/chat/best-practice/common/image-message-url-lifecycle.md +63 -0
  40. package/resource/knowledge/chat/best-practice/common/login-repeat-2025-diagnosis.md +65 -0
  41. package/resource/knowledge/chat/best-practice/common/message-read-report-and-receipt.md +72 -0
  42. package/resource/knowledge/chat/best-practice/common/message-receive-event.md +70 -0
  43. package/resource/knowledge/chat/best-practice/common/message-risk-error-and-render.md +69 -0
  44. package/resource/knowledge/chat/best-practice/common/message-unread-count.md +71 -0
  45. package/resource/knowledge/chat/best-practice/miniprogram/audio-message-send.md +118 -0
  46. package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +67 -0
  47. package/resource/knowledge/chat/best-practice/miniprogram/media-upload-fail-diagnosis.md +68 -0
  48. package/resource/knowledge/chat/best-practice/web/audio-message-send.md +123 -0
  49. package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -0
  50. package/resource/knowledge/chat/preset/android/features/language.md +1 -0
  51. package/resource/knowledge/chat/preset/android/features/message-input.md +1 -0
  52. package/resource/knowledge/chat/preset/android/features/message-list.md +1 -0
  53. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +1 -0
  54. package/resource/knowledge/chat/preset/flutter/features/message-input.md +1 -0
  55. package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -0
  56. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -0
  57. package/resource/knowledge/chat/preset/ios/features/message-input.md +1 -0
  58. package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -0
  59. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +1 -0
  60. package/resource/knowledge/chat/urls/sdk/web.md +1 -1
  61. package/resource/knowledge/livekit/best-practice/android/voice-room-anchor-start.md +124 -0
  62. package/resource/knowledge/livekit/best-practice/common/admin-take-seat.md +73 -0
  63. package/resource/knowledge/livekit/best-practice/common/audience-leave-live.md +81 -0
  64. package/resource/knowledge/livekit/best-practice/common/voice-room-no-audio-troubleshoot.md +100 -0
  65. package/resource/knowledge/livekit/best-practice/common/voice-room-seat-list-change.md +65 -0
  66. package/resource/knowledge/livekit/best-practice/flutter/voice-room-anchor-start.md +126 -0
  67. package/resource/knowledge/livekit/best-practice/ios/voice-room-anchor-start.md +130 -0
  68. package/resource/knowledge/push/config/react-native.md +1 -0
  69. package/resource/knowledge/push/config/unity.md +1 -0
  70. package/resource/knowledge/push/config/unreal-engine.md +1 -0
  71. package/resource/knowledge/push/integration/android.md +16 -16
  72. package/resource/knowledge/push/integration/flutter.md +3 -3
  73. package/resource/knowledge/push/integration/ios.md +3 -3
  74. package/resource/knowledge/push/integration/react-native.md +1 -1
  75. package/resource/knowledge/roomkit/best-practice/common/room-ghost-member.md +75 -0
  76. package/resource/knowledge/roomkit/best-practice/common/room-limit-and-multi.md +88 -0
  77. package/resource/knowledge/roomkit/best-practice/common/room-screen-share-preview.md +87 -0
  78. package/resource/knowledge/roomkit/best-practice/common/room-status-after-all-leave.md +73 -0
  79. package/resource/knowledge/roomkit/best-practice/vue/room-uikit-vs-atomicx.md +115 -0
  80. package/resource/knowledge/rtcengine/web/plugin/30-advanced-cross-room-link.md +2 -0
  81. package/resource/knowledge/rtcengine/web/plugin/39-advanced-video-decoder.md +2 -0
  82. package/server.js +8 -3
  83. package/tools/common/finalize_answer.js +9 -1
  84. package/tools/common/search_trtc_knowledge.js +1 -1
  85. package/tools/definitions/finalize_answer_def.js +2 -2
  86. package/tools/definitions/integration-boundary.js +2 -1
  87. package/tools/definitions/search_trtc_knowledge_def.js +1 -1
  88. package/utils/report-cls-client.js +1 -1
  89. package/utils/report-es-client.js +1 -1
  90. package/cursor-setting.png +0 -0
  91. package/mcp-server-prompt.png +0 -0
  92. package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +0 -80
  93. package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +0 -20
  94. package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +0 -116
  95. package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +0 -469
  96. package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +0 -581
  97. package/resource/knowledge/callkit/preset/web/api.md +0 -79
  98. package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +0 -16
@@ -216,7 +216,7 @@ iOS 如需统计推送触达数据,请在 `registerPush` 时传入 `applicatio
216
216
 
217
217
  运行 App 后,过滤 `TIMPush` 关键字查看注册日志。注册成功后,调用 `getRegistrationID()` 获取当前设备推送标识。控制台或服务端发送测试消息时,可使用该值定位设备。
218
218
 
219
- 测试流程请参考 [Android 测试推送](https://cloud.tencent.com/document/product/269/100626#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 和 [iOS 测试推送](https://cloud.tencent.com/document/product/269/100627#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81)文档。仅集成 TIMPush 的用户,建议优先使用腾讯云控制台接入测试能力验证离线推送。
219
+ 测试流程请参考 [Android 测试推送](https://cloud.tencent.com/document/product/269/100626#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 和 [iOS 测试推送](https://cloud.tencent.com/document/product/269/100627#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 文档。仅集成 TIMPush 的用户,建议优先使用腾讯云控制台接入测试能力验证离线推送。
220
220
 
221
221
  如果您的项目已接入 IM SDK,可通过 SDK API 发送一条带离线推送参数的消息进行验证。Flutter 侧示例如下:
222
222
  ``` java
@@ -354,11 +354,11 @@ Future<void> removeTIMPushListener() async {
354
354
 
355
355
  ## 收不到推送排障流程
356
356
 
357
- ### 步骤一 原生侧排查
357
+ ### 步骤1:原生侧排查
358
358
 
359
359
  如果发送测试消息后设备没有收到推送,请先按平台文档 [Android 收不到推送排障流程](https://cloud.tencent.com/document/product/269/100626#.E6.94.B6.E4.B8.8D.E5.88.B0.E6.8E.A8.E9.80.81.E6.8E.92.E9.9A.9C.E6.B5.81.E7.A8.8B) 和 [iOS 收不到推送排障流程](https://cloud.tencent.com/document/product/269/100627#.E6.94.B6.E4.B8.8D.E5.88.B0.E6.8E.A8.E9.80.81.E6.8E.92.E9.9A.9C.E6.B5.81.E7.A8.8B) 完成原生侧排查。
360
360
 
361
- ### 步骤二 Flutter 侧可按以下顺序补充检查
361
+ ### 步骤2:Flutter 侧可按以下顺序补充检查
362
362
  1. 确认 `registerPush` 返回 `code = 0`。如果返回非 0,请先根据错误码和 `errorMessage` 排查,不要只看 App 是否启动成功。
363
363
 
364
364
  2. 注册成功后调用 `getRegistrationID()`,确认返回值非空。控制台或服务端发送测试消息时,使用的 `RegistrationID / userID` 应与这里返回的值一致。
@@ -132,7 +132,7 @@ import TIMPush
132
132
  registerPush 用于向 TIMPush 注册当前设备的推送 token。推送 token 是厂商通道返回的设备凭证,通常由 SDK 自动处理。注册成功后,TIMPush 会为当前设备建立一个推送目标标识 `registrationID`;服务端、控制台接入测试和排查工具可以使用该标识向这台设备下发离线推送。若 App 同时接入 IM 并完成登录,也可以使用 `userID` 向该用户已建立推送关系的设备下发离线推送。
133
133
 
134
134
  `appKey` 的取值会影响注册方式和可用的推送标识:
135
- - `appKey = Push Key`:注册 TIMPush 独立推送能力。Push Key 为腾讯云控制台 > 即时通信 IM > 推送服务 Push > 概览中的客户端密钥。
135
+ - `appKey = Push Key`:注册 TIMPush 独立推送能力。Push Key 为腾讯云控制台 > 即时通信 IM > **推送服务 Push** > **概览**中的客户端密钥。
136
136
 
137
137
  - `appKey = nil`:复用 IM 登录态注册推送,必须在 IM `login` 成功后调用。
138
138
 
@@ -660,7 +660,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushListener {
660
660
  @end
661
661
  ```
662
662
 
663
- **验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext` 内容与发送时设置的一致。如果回调未触发,请检查:控制台点击动作是否选择了「打开应用内指定页面」、监听器是否在 `didFinishLaunchingWithOptions` 中注册、发送消息时是否设置了 `ext`。
663
+ **验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext` 内容与发送时设置的一致。如果回调未触发,请检查:控制台点击动作是否选择了**打开应用内指定页面**、监听器是否在 `didFinishLaunchingWithOptions` 中注册、发送消息时是否设置了 `ext`。
664
664
 
665
665
  ## 收不到推送排障流程
666
666
 
@@ -685,7 +685,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushListener {
685
685
  ### 步骤3:确认控制台排查工具能查到 token
686
686
 
687
687
  在腾讯云控制台 **即时通信 IM > 推送服务 Push** 的排查工具中输入 `registrationID` 或 `userID`:
688
- - **能查到设备且 token 正常**:进入第四步。
688
+ - **能查到设备且 token 正常**:进入步骤4。
689
689
 
690
690
  - **查不到设备 / 显示「没有上传成功 token」**:常见原因是 Chat 场景未在 Chat 登录成功后调用 `registerPush`,或调用顺序错误。请重新核对调用时机。
691
691
 
@@ -260,7 +260,7 @@ pod install
260
260
  # 如果无法安装最新版本,执行以下命令更新本地的 CocoaPods 仓库列表
261
261
  pod repo update
262
262
  ```
263
- 3. 在 App 中启用推送通知功能。打开 Xcode 项目,在 **Project > Target > Capabilities** 页面选择并添加 **Push Notifications**。
263
+ 3. 在 App 中启用推送通知功能。参考 iOS 配置消息触达统计。
264
264
 
265
265
  ### 步骤6:运行
266
266
 
@@ -0,0 +1,75 @@
1
+ ---
2
+ title: TUIRoomKit 异常退出后成员仍显示在列表的原因与清理
3
+ product: room
4
+ frameworks: [react, vue, web, android, ios, flutter]
5
+ scope: platform_common
6
+ tags: [TUIRoomKit, 异常退出, 幽灵成员, 心跳检测, 离线检测, 踢出房间, kick_user_out, disconnect回调, 成员列表, 房间清理]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # TUIRoomKit 异常退出后成员仍显示在列表的原因与清理
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 用户异常退出(杀进程、断网、关页未走 leave)后,成员仍显示在远端列表,是**视频会议 SDK 后台心跳离线检测**的预期行为。
15
+ - 现行规则:后台在**心跳丢失约 5~6 分钟**后才将异常退出的用户移出房间,远端此时才收到离开通知并更新成员列表。
16
+ - **不能默认把心跳设得很短**:网络抖动时容易被误踢出房,影响正常会议体验。
17
+ - 若业务需要更快清理幽灵成员:方案一(提工单调心跳至约 2 分钟)或方案二(用 IM 断线回调 + `kick_user_out` 立即踢出)。
18
+
19
+ ## 2. 字段语义对照
20
+
21
+ | 字段/能力 | 作用 | 说明 |
22
+ |---|---|---|
23
+ | 心跳离线检测 | 检测用户在线状态 | 后台检测用户是否心跳丢失 |
24
+ | 心跳丢失 | 用户异常退出的信号 | 杀进程/断网/关页未走 leave 时心跳丢失 |
25
+ | 幽灵成员 | 异常退出但仍显示的用户 | 约 5~6 分钟后被移出房间 |
26
+ | `kick_user_out` | 踢出房间成员 | 业务后台主动调用立即清理 |
27
+ | `disconnect` 回调 | 断线回调 | IM 服务端感知用户离线 |
28
+ | 心跳时长调整 | 后台配置 | 提工单可调至约 2 分钟 |
29
+
30
+ ## 3. 机制/时序
31
+
32
+ 用户异常退出(杀进程、断网、关页未走 leave) -> 后台检测到心跳丢失 -> 约 5~6 分钟后将用户移出房间 -> 远端收到离开通知,更新成员列表。
33
+
34
+ 心跳时长默认不能太短,避免网络抖动导致误踢。若业务需要更快清理:
35
+
36
+ - **方案一**:提工单调整后台心跳检测时长至约 2 分钟。
37
+ - **方案二**:业务后台根据 IM `disconnect` 回调感知离线后,主动调用 `kick_user_out` 立即清理幽灵成员。
38
+
39
+ ## 4. 标准用法
40
+
41
+ 1. **方案一(改心跳时长)**:提工单,联系后台将心跳检测时长调整为约 2 分钟。
42
+ 2. **方案二(服务端主动清理)**:
43
+ - 业务后台监听 IM 服务端 `disconnect`(断线)回调。
44
+ - 收到离线信号后,调用 `kick_user_out` 踢出房间成员。
45
+
46
+ ## 5. 结果判定
47
+
48
+ - 异常退出用户约 5~6 分钟后被移出房间,远端成员列表更新。
49
+ - 提工单调整心跳至约 2 分钟后,清理更快。
50
+ - 方案二通过 `disconnect` 回调 + `kick_user_out` 可立即清理幽灵成员。
51
+ - 心跳过短会增大网络抖动时的误踢风险。
52
+
53
+ ## 6. 常见误区
54
+
55
+ - 误区 1:认为异常退出用户应立即从成员列表消失(心跳检测约需 5~6 分钟)。
56
+ - 误区 2:认为心跳时长可以随意设得很短(网络抖动会导致误踢,影响正常会议)。
57
+ - 误区 3:忽略业务侧可以主动踢出(`disconnect` 回调 + `kick_user_out`)。
58
+
59
+ ## 7. 问题定义(检索辅助,极简)
60
+
61
+ TUIRoomKit 用户异常退出后远端成员列表仍显示该用户的原因,以及如何更快清理幽灵成员。
62
+
63
+ ## 8. 同义问法覆盖(检索召回,极简)
64
+
65
+ - 用户异常退出还在成员列表里怎么办?
66
+ - TUIRoomKit 幽灵成员怎么清理?
67
+ - 断网用户多久被移出房间?
68
+ - 心跳检测时间能调短吗?
69
+ - 异常退出用户一直显示在列表?
70
+ - 怎么踢出离线用户?
71
+
72
+ ## 9. 参考来源(可选)
73
+
74
+ - 状态变更回调:`https://cloud.tencent.com/document/product/269/2570`
75
+ - 踢出房间成员接口:`https://cloud.tencent.com/document/product/269/105393`
@@ -0,0 +1,88 @@
1
+ ---
2
+ title: TUIRoomKit 并发房间上限与多房间支持说明
3
+ product: room
4
+ frameworks: [react, vue, web, android, ios, flutter]
5
+ scope: platform_common
6
+ tags: [TUIRoomKit, 并发房间, 房间上限, 同时进多个房间, 单房间人数, 峰值群组数, TUIRoomTypeConference, useRoomState, 多端登录, 互踢, 会议, 房间管理]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # TUIRoomKit 并发房间上限与多房间支持说明
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 并发房间数有上限,与开通的 **多人音视频(TUIRoomKit)套餐版本 + IM 能力**相关。
15
+ - **同一客户端 / 同一 SDK 实例不支持同时待在多个会议房间里**:会议类型房间单设备同时加入房间数上限为 1,超过会退出最早加入的房间。
16
+ - **同一 userId 多设备进同一房间默认互踢**(后进踢先进);多端同时进会需按套餐配置"多端登录"能力或为不同端分配不同 userId。
17
+
18
+ ## 2. 字段语义对照
19
+
20
+ | 字段/能力 | 作用 | 说明 |
21
+ |---|---|---|
22
+ | `TUIRoomTypeConference` | 会议类型房间 | 单设备同时加入房间数上限为 1 |
23
+ | `useRoomState` | 房间状态(Atomicx 无 UI 路径) | 单例,同一用户同一时刻仅存在于一个房间内 |
24
+ | 房间数限制 | 房间/群组类资源峰值 | 按自然月最高峰值结算,非无限开房 |
25
+ | 单房间人数 | 一场会议最多多少人 | 套餐硬上限(20/50/200/300) |
26
+ | 多端登录 | 同 userId 多端进会 | 仅更高版本套餐支持 |
27
+
28
+ ## 3. 机制/时序
29
+
30
+ ### 并发房间上限
31
+
32
+ 开通多人音视频(TUIRoomKit)套餐后,可同时开的会议数量受 **房间数限制 + 单房间人数** 约束:
33
+
34
+ | 能力维度 | 体验版 | 基础互动版 | 进阶互动版 | 超大房间互动版 |
35
+ |---|---|---|---|---|
36
+ | **房间数限制**(计费口径) | 随 IM 版本 | 100,000 个/月 | 100,000 个/月 | 100,000 个/月 |
37
+ | **单房间参会人数规模** | 20 | 50 | 200 | 300(扩容请提工单) |
38
+
39
+ - 单房间人数是"一场会议最多多少人"的硬上限。
40
+ - 房间数限制(峰值群组数)是套餐赠送的 IM 侧群组/房间类资源峰值(自然月最高峰值结算),不是"任意时刻可无限开房"。
41
+ - 实际可同时开多少场,还受 IM 套餐、TRTC 资源与业务架构影响;超大房间有扩容通道。
42
+ - 多端登录会议 / 同平台多端登录会议需要更高的套餐版本支持。
43
+
44
+ ### 同一用户多房间
45
+
46
+ 同一客户端 / 同一 SDK 实例调用 `joinRoom` 进入新房间时,若已存在会议类型房间,会退出最早加入的房间(单设备同时加入房间数上限为 1)。
47
+
48
+ ## 4. 标准用法
49
+
50
+ 业务需评估并发房间需求时,按以下步骤确认:
51
+
52
+ 1. 确认开通的 TUIRoomKit 套餐版本,查阅 [功能与计费说明](https://cloud.tencent.com/document/product/269/104946) 中的房间数限制与单房间人数。
53
+ 2. 评估单场会议人数是否超过套餐上限;超大房间需求可提工单扩容。
54
+ 3. 业务需同时承载多场会议时,评估房间数限制(峰值群组数)是否足够,并结合 IM 套餐与 TRTC 资源。
55
+ 4. 业务需同一用户多端同会时,确认套餐是否支持多端登录;否则为不同端分配不同 userId。
56
+
57
+ ## 5. 结果判定
58
+
59
+ - 并发会议数量受套餐房间数限制与单房间人数约束。
60
+ - 同一 SDK 实例同时加入多个会议房间时,超过 1 个会退出最早加入的房间。
61
+ - 同一 userId 多设备进同一房间会互踢(后进踢先进)。
62
+ - 多端同会需套餐支持多端登录,或为不同端分配不同 userId。
63
+
64
+ ## 6. 常见误区
65
+
66
+ - 误区 1:认为房间数限制(峰值群组数)意味着可以"任意时刻无限开房"(按自然月最高峰值结算,非并发无限)。
67
+ - 误区 2:认为同一 SDK 实例可以同时待多个会议房间(单设备上限 1)。
68
+ - 误区 3:认为同一 userId 多设备可以同时进同一房间(默认互踢)。
69
+ - 误区 4:忽略套餐版本差异(多端登录仅更高版本支持)。
70
+
71
+ ## 7. 问题定义(检索辅助,极简)
72
+
73
+ TUIRoomKit 同时进行的会议室是否有上限,以及同一个用户是否可以同时进入不同房间。
74
+
75
+ ## 8. 同义问法覆盖(检索召回,极简)
76
+
77
+ - TUIRoomKit 并发房间数上限是多少?
78
+ - 可以同时开多少场会议?
79
+ - 同一个用户能同时进两个房间吗?
80
+ - 单房间最多多少人?
81
+ - TUIRoomKit 多端登录支持吗?
82
+ - 同一 userId 多设备会互踢吗?
83
+ - 会议室人数上限怎么扩容?
84
+
85
+ ## 9. 参考来源(可选)
86
+
87
+ - 开通服务 / 功能与计费说明:`https://cloud.tencent.com/document/product/269/104946`
88
+ - 单房间扩容提工单方式:`https://console.cloud.tencent.com/workorder/category`
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: TUIRoomKit 屏幕共享本地预览与避免无限套娃
3
+ product: room
4
+ frameworks: [react, vue, web]
5
+ scope: platform_common
6
+ tags: [TUIRoomKit, 屏幕共享, 本地预览, startScreenSharing, startScreenShare, 整屏共享, 无限套娃, 无限镜像, 窗口共享, 外接显示器, useDeviceState, view参数]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # TUIRoomKit 屏幕共享本地预览与避免无限套娃
11
+
12
+ ## 1. 核心结论
13
+
14
+ - `view` 参数可以本地显示正在共享的内容:传入有效 `view` 会在本地容器渲染分享画面(本地预览);不传或传 `null` 则不渲染本地预览。
15
+ - 整屏共享时本地预览会出现"无限套娃/无限镜像":原因在于本地预览区域也在被采集的整屏/当前页里,预览画面再次进入采集产生递归镜像。
16
+ - **优先方案:改为分享"窗口"而非整屏**,从源头避免会议页被采进画面导致的套娃。
17
+ - **分享 WPS 注意事项**:通常无法单独拿到"放映窗口"(放映态与编辑窗在采集列表里表现受限)。此时可让用户接**外接显示器**:把放映画面放到外接屏,再分享该显示器/对应窗口,会议主屏继续操作、预览也不易套娃。
18
+ - **兜底方案**:无法改分享窗口、也无法使用外接显示器时,将本地预览窗口尽量做小(缩小 `view` 容器),可明显降低递归镜像的影响面;或本地不传 `view` / 传 `null`,仅用"正在共享"状态提示。
19
+
20
+ ## 2. 字段语义对照
21
+
22
+ | 字段/能力 | 作用 | 说明 |
23
+ |---|---|---|
24
+ | `view` | 本地屏幕分享预览容器 | 传入有效 DOM(元素或 id)则渲染本地预览;传 `null` 不渲染 |
25
+ | `startScreenSharing` | 屏幕共享接口 | TRTC Web / Room 屏幕共享,`view` 指定本地预览 |
26
+ | `startScreenShare` | 底层屏幕共享 | TRTC `startScreenShare`,与 Atomicx 一致 |
27
+ | `useDeviceState().startScreenShare` | Atomicx 无 UI 路径 | 屏幕共享入口,本地预览由预览视图/容器决定 |
28
+
29
+ ## 3. 机制/时序
30
+
31
+ ### 本地预览
32
+
33
+ 调用屏幕共享接口并传入有效 `view` -> 本地容器渲染正在分享的画面(本地预览)-> 不传或传 `null` 则不渲染本地预览。
34
+
35
+ ## 4. 标准用法
36
+
37
+ ### 带本地预览的屏幕共享
38
+
39
+ ```javascript
40
+ // TRTC Web / Room 屏幕共享,view 指定本地预览容器(元素或 id)
41
+ startScreenShare({
42
+ view: 'local-preview-container', // 传入有效 view,本地渲染分享画面
43
+ // 传 null 则不渲染本地预览
44
+ });
45
+ ```
46
+
47
+ ### 避免无限套娃
48
+
49
+ ```javascript
50
+ // 方案 1:优先分享窗口而非整屏,从源头避免套娃
51
+ startScreenShare({ view: 'local-preview-container' }); // 选择窗口采集源
52
+
53
+ // 方案 2(兜底):无法分享窗口时,缩小本地预览容器或本地不传 view
54
+ startScreenShare({ view: null }); // 不渲染本地预览,仅用"正在共享"状态提示
55
+ ```
56
+
57
+ ## 5. 结果判定
58
+
59
+ - 传入有效 `view`:本地容器渲染分享画面,实现本地预览。
60
+ - 不传 / 传 `null`:不渲染本地预览,仅共享画面给远端。
61
+ - 整屏共享 + 本地预览:可能出现无限套娃,需改为窗口共享或缩小预览。
62
+ - 分享 WPS 放映:需用外接显示器方案避免套娃。
63
+
64
+ ## 6. 常见误区
65
+
66
+ - 误区 1:认为 `view` 是远端渲染参数(`view` 指定的是本地屏幕分享预览)。
67
+ - 误区 2:整屏共享时本地预览必然套娃就放弃本地预览(可改为窗口共享或缩小预览)。
68
+ - 误区 3:分享 WPS 时以为能单独拿到放映窗口(通常受限,需外接显示器)。
69
+ - 误区 4:混淆 `startScreenSharing` 与 `startScreenShare`(底层一致,均通过 `view` 指定本地预览)。
70
+
71
+ ## 7. 问题定义(检索辅助,极简)
72
+
73
+ TUIRoomKit 屏幕共享时 `view` 参数能否本地预览正在共享的内容,以及整屏共享时本地预览如何避免无限套娃/无限镜像。
74
+
75
+ ## 8. 同义问法覆盖(检索召回,极简)
76
+
77
+ - 屏幕共享能本地预览吗?
78
+ - TUIRoomKit 屏幕共享 startScreenShare view 参数是什么?
79
+ - 整屏共享怎么避免无限镜像?
80
+ - 屏幕共享出现套娃怎么办?
81
+ - 分享窗口还是整屏更合适?
82
+ - 本地预览窗口怎么缩小?
83
+ - 屏幕共享怎么隐藏本地预览?
84
+
85
+ ## 9. 参考来源(可选)
86
+
87
+ - TRTC Web `startScreenShare`:`https://web.sdk.qcloud.com/trtc/webrtc/doc/zh-cn/TRTC.html`
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: TUIRoomKit 所有人离开后房间状态与计费说明
3
+ product: room
4
+ frameworks: [react, vue, web, android, ios, flutter]
5
+ scope: platform_common
6
+ tags: [TUIRoomKit, 所有人离开, 房间销毁, 回收房间, 解散房间, 计费, 会议结束, 房间存在, 房间数量]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # TUIRoomKit 所有人离开后房间状态与计费说明
11
+
12
+ ## 1. 核心结论
13
+
14
+ - 房间**不会**因为"所有人离开"就立刻自动销毁。
15
+ - 会议结束后,业务侧应**主动调用解散房间接口**结束本场会议。
16
+ - 若未手动解散:后台会在会议结束时间 **6 小时以后**尝试回收房间,回收条件是**房间内成员数为 0**。
17
+ - 计费按实际推拉流/通话消耗;成员都离开且无媒体占用后一般不再产生音视频时长,但房间对象在未解散、未回收前仍占用房间数量。
18
+
19
+ ## 2. 字段语义对照
20
+
21
+ | 字段/能力 | 作用 | 说明 |
22
+ |---|---|---|
23
+ | 解散房间接口 | 主动结束会议 | 业务侧会议结束后主动调用 |
24
+ | 后台回收 | 自动清理房间 | 会议结束 6 小时后尝试回收,条件为成员数 0 |
25
+ | 房间内成员数 | 房间成员统计 | 回收的条件:成员数为 0 |
26
+ | 音视频时长计费 | 通话消耗计费 | 按实际推拉流/通话消耗计费 |
27
+ | 房间数量占用 | 房间对象占用 | 未解散、未回收前仍占用房间数量 |
28
+
29
+ ## 3. 机制/时序
30
+
31
+ 所有人离开房间 -> 房间不会立刻自动销毁 -> 业务侧主动调用解散房间接口(推荐),或等待后台自动回收 -> 后台在会议结束 6 小时后尝试回收(条件为成员数 0)-> 房间回收。
32
+
33
+ 计费维度:
34
+
35
+ - 音视频时长按实际推拉流/通话消耗计费。
36
+ - 成员都离开且无媒体占用后,一般不再产生该房间的音视频时长。
37
+ - 房间对象在未解散、未回收前仍占用房间数量。
38
+
39
+ ## 4. 标准用法
40
+
41
+ 1. 会议结束后,业务侧主动调用解散房间接口结束会议,避免房间残留。
42
+ 2. 若忘记手动解散,后台会在 6 小时后自动回收(成员数为 0 时)。
43
+ 3. 评估房间数量占用时,注意未解散、未回收的房间对象仍占用配额。
44
+
45
+ ## 5. 结果判定
46
+
47
+ - 主动解散后,房间立即结束。
48
+ - 未主动解散时,后台在会议结束 6 小时后、成员数为 0 时回收房间。
49
+ - 成员都离开且无媒体占用后,不再产生音视频时长计费。
50
+ - 未解散、未回收的房间对象仍占用房间数量。
51
+
52
+ ## 6. 常见误区
53
+
54
+ - 误区 1:认为所有人离开后房间会自动销毁(需主动解散或等待 6 小时后台回收)。
55
+ - 误区 2:认为未解散的房间不产生任何费用(房间对象仍占用房间数量,可能影响并发配额)。
56
+ - 误区 3:忽略业务侧主动解散(推荐主动调用解散接口,而非依赖后台回收)。
57
+
58
+ ## 7. 问题定义(检索辅助,极简)
59
+
60
+ TUIRoomKit 房间内所有人离开后房间是否还存在、是否会继续计费,以及如何主动解散房间。
61
+
62
+ ## 8. 同义问法覆盖(检索召回,极简)
63
+
64
+ - 所有人离开后房间会自动销毁吗?
65
+ - TUIRoomKit 房间空了还会计费吗?
66
+ - 会议结束后怎么解散房间?
67
+ - 房间回收要等多久?
68
+ - 房间成员数为 0 会怎样?
69
+ - 房间对象还占房间数量吗?
70
+
71
+ ## 9. 参考来源(可选)
72
+
73
+ - 开通服务 / 功能与计费说明:`https://cloud.tencent.com/document/product/269/104946`
@@ -0,0 +1,115 @@
1
+ ---
2
+ title: tuikit-atomicx-vue3/room 与 roomkit-web-vue3 定位对比
3
+ product: room
4
+ frameworks: [vue, web]
5
+ scope: platform_specific
6
+ tags: [TUIRoomKit, Atomicx, UIKit, tuikit-atomicx-vue3, roomkit-web-vue3, useRoomState, conference, 层级对比, 无UI, 预制UI, 自定义集成, 依赖关系, vue3]
7
+ version_range: ">=2.0.0"
8
+ ---
9
+
10
+ # tuikit-atomicx-vue3/room 与 roomkit-web-vue3 定位对比
11
+
12
+ ## 1. 核心结论
13
+
14
+ - `tuikit-atomicx-vue3/room`(Atomicx)是**原子能力层**,无 UI / 强自定义集成主路径,把房间、设备、成员等拆成响应式 State。
15
+ - `@tencentcloud/roomkit-web-vue3`(RoomKit / UIKit)是**含 UI 低代码层**,开箱即用的会议套件与页面级组件。
16
+ - 依赖关系:**RoomKit(含 UI)建在 Atomicx/Room 能力之上的产品化封装**,业务上可理解为 RoomKit 复用/对接 Atomicx 能力,而非两套互不相干的房间协议。
17
+ - API 入口:Atomicx 用 `useRoomState()`,UIKit 用 `conference`。
18
+
19
+ ## 2. 字段语义对照
20
+
21
+ | 字段/能力 | 作用 | 说明 |
22
+ |---|---|---|
23
+ | `useRoomState` | Atomicx 房间状态入口 | `createAndJoinRoom` / `joinRoom` / `leaveRoom` / `endRoom` / `currentRoom` |
24
+ | `useDeviceState` | Atomicx 设备状态 | 设备开关、屏幕共享等 |
25
+ | `useRoomParticipantState` | Atomicx 成员状态 | 成员管控、事件订阅 |
26
+ | `useLoginState` | Atomicx 登录状态 | 登录能力,UIKit 会中可复用 |
27
+ | `conference` | UIKit 会议门面 API | 推荐 `createAndJoinRoom` / `joinRoom` / `leaveRoom` / `endRoom` |
28
+ | `ConferenceMainView` | UIKit 预制视图 | 登录进房、会控、布局、麦位等完整会议 UI |
29
+
30
+ ## 3. 机制/时序
31
+
32
+ ### 定位对比
33
+
34
+ | 对比项 | `tuikit-atomicx-vue3/room`(Atomicx) | `@tencentcloud/roomkit-web-vue3`(RoomKit / UIKit) |
35
+ |---|---|---|
36
+ | **层级** | Atomicx(原子能力层):State Hooks + 可选原子 UI 组件 | UIKit / 含 UI 低代码层:开箱即用的会议套件与页面级组件 |
37
+ | **包定位** | 无 UI / 强自定义集成主路径;把房间、设备、成员等拆成响应式 State | 含 UI 快速集成主路径;提供完整会议 UI 与 `conference` 门面 API |
38
+ | **核心能力** | `useRoomState` / `useDeviceState` / `useRoomParticipantState` / `useLoginState`:创房、入会、设备、屏幕共享、成员管控、事件订阅;可自拼 UI | `conference` + 预制视图(如 `ConferenceMainView`):登录进房、会控、布局、麦位等会议完整体验;支持部分组件显隐/自定义 Widget |
39
+ | **适用场景** | 把音视频嵌进自有业务 UI(医联、OA、教育后台等),要 100% 控交互与品牌 | 要最快上线标准会议/研讨会,少写 UI,接受官方会议交互 |
40
+ | **依赖关系** | 底层基于 RoomEngine / TRTC / IM;是原子化接入方案 | 含 UI 方案复用/对接 Atomicx 能力(如登录用 `useLoginState`,会中逻辑走 Room 能力);业务上可理解为 RoomKit(含 UI)建在 Atomicx/Room 能力之上的产品化封装 |
41
+ | **API 入口** | `useRoomState()`:`createAndJoinRoom` / `joinRoom` / `leaveRoom` / `endRoom`、`currentRoom`、事件订阅等 | `conference`:推荐 `createAndJoinRoom` / `joinRoom` / `leaveRoom` / `endRoom` |
42
+ | **UI 形态** | 预制原子组件可选用 + 自定义模块自拼为主 | 预制完整会议 UI 为主,可通过 Widget/显隐配置做有限定制 |
43
+
44
+ ## 4. 标准用法
45
+
46
+ ### Atomicx 方式(无 UI,自定义集成)
47
+
48
+ ```javascript
49
+ import { useRoomState } from 'tuikit-atomicx-vue3/room';
50
+
51
+ const { createAndJoinRoom } = useRoomState();
52
+
53
+ createAndJoinRoom({
54
+ roomId: 'YOUR_ROOM_ID', // 必填:建议由业务后台生成的唯一标识
55
+ options: {
56
+ roomName: '项目进度周会',
57
+ },
58
+ });
59
+ // 通过 useDeviceState / useRoomParticipantState 等获取响应式状态自拼 UI
60
+ ```
61
+
62
+ ### UIKit 方式(含 UI,快速集成)
63
+
64
+ ```javascript
65
+ import { conference, ConferenceMainView, ConferenceMainViewH5, RoomEvent, genTestUserSig } from '@tencentcloud/roomkit-web-vue3';
66
+ const SDKAppID = 0; // 替换为您在开通服务阶段获取的 SDKAppID
67
+ const SDKSecretKey = ''; // 替换为您在开通服务阶段获取的 SDKSecretKey
68
+ const handleEnterRoom = async () => {
69
+ if (!SDKAppID || !SDKSecretKey) {
70
+ return;
71
+ }
72
+ try {
73
+ const { userSig } = genTestUserSig({ userId: 'test01', sdkAppId: SDKAppID, secretKey: SDKSecretKey });
74
+ await conference.login({ sdkAppId: SDKAppID, userId: 'test01', userSig });
75
+ await conference.setSelfInfo({ userName: 'test', avatarUrl: '' });
76
+ await conference.createAndJoinRoom({ roomId: '123456', options: { roomName: `test01 的会议` } });
77
+ inRoom.value = true;
78
+ } catch (error) {
79
+ console.error('进入会议失败:', error);
80
+ }
81
+ };
82
+ // 使用预制 ConferenceMainView 渲染完整会议 UI
83
+ ```
84
+
85
+ ## 5. 结果判定
86
+
87
+ - 无 UI / 强自定义需求:选 Atomicx,用 `useRoomState()` + State Hooks 自拼 UI。
88
+ - 快速上线标准会议:选 UIKit,用 `conference` + `ConferenceMainView`。
89
+ - 依赖关系:UIKit 复用 Atomicx 能力,非两套独立协议。
90
+ - API 入口:Atomicx 为 `useRoomState()`,UIKit 为 `conference`。
91
+
92
+ ## 6. 常见误区
93
+
94
+ - 误区 1:认为 Atomicx 和 UIKit 是两套互不相干的房间协议(UIKit 建在 Atomicx/Room 能力之上)。
95
+ - 误区 2:用 Atomicx 时误以为自带完整会议 UI(Atomicx 是 State Hooks + 可选原子组件,UI 需自拼)。
96
+ - 误区 3:用 UIKit 时误以为无法自定义(支持部分组件显隐 / 自定义 Widget)。
97
+ - 误区 4:混淆两套的 API 入口(Atomicx 用 `useRoomState()`,UIKit 用 `conference`)。
98
+
99
+ ## 7. 问题定义(检索辅助,极简)
100
+
101
+ 对比 TUIRoomKit Vue3 两种集成方案的定位差异:`tuikit-atomicx-vue3/room`(Atomicx Core SDK,无 UI,State Hooks 自拼)与 `@tencentcloud/roomkit-web-vue3`(RoomKit UIKit,含 UI,conference 低代码)在层级、能力、适用场景、依赖关系与 API 入口(useRoomState vs conference)方面的差异。
102
+
103
+ ## 8. 同义问法覆盖(检索召回,极简)
104
+
105
+ - Atomicx 和 RoomKit 有什么区别?
106
+ - `tuikit-atomicx-vue3/room` 和 `roomkit-web-vue3` 怎么选?
107
+ - TUIRoomKit 无 UI 和含 UI 方案怎么选?
108
+ - `useRoomState` 和 `conference` 区别?
109
+ - RoomKit 基于 Atomicx 吗?
110
+ - 自定义会议室 UI 用哪个包?
111
+ - 快速集成会议用 Atomicx 还是 UIKit?
112
+
113
+ ## 9. 参考来源(可选)
114
+
115
+ - 房间管理 Web:`https://cloud.tencent.com/document/product/647/126919`
@@ -8,6 +8,8 @@
8
8
  - **房间级连麦**:与目标房间的所有主播连麦。
9
9
  - **用户级连麦**:与目标房间的某个主播连麦。
10
10
 
11
+ > **注意**:房间级连麦与用户级连麦不能混用。
12
+
11
13
  ## 工作原理
12
14
 
13
15
  - **房间级连麦**:将当前房间所有主播的音视频流额外推送到目标房间,同时将目标房间所有主播的音视频流额外推送到当前房间。
@@ -6,6 +6,8 @@
6
6
 
7
7
  - TRTC Web SDK 版本 >= 5.9.0
8
8
 
9
+ - 浏览器版本:Chrome 141+、Edge 141+ 及其他 Chromium 内核浏览器 141+(Safari 和 Firefox 暂不支持)
10
+
9
11
  ## 实现流程
10
12
 
11
13
  ### 部署静态资源
package/server.js CHANGED
@@ -29,14 +29,19 @@ You are using Tencent RTC MCP Server for SDK documentation retrieval.
29
29
  Workflow:
30
30
  1. Call search_trtc_knowledge. Reuse the same queryID for all retries/searches in this consultation.
31
31
  2. Draft the final answer from fragments. Include References from meta.references/doc_urls when available.
32
- 3. MUST call finalize_answer with the same prompt + queryID before replying.
33
- 4. Reply with: answer + finalize_answer follow-up text.
32
+ 3. MUST call finalize_answer with the same prompt + queryID before replying (pass an audit digest in "answer", not necessarily full long-form text).
33
+ 4. Reply with: full user-visible answer + finalize_answer follow-up text.
34
34
  5. After finalize_answer follow-up, check the next user reply before any normal response. If it means Yes/已解决/thanks/OK, MUST call submit_feedback(resolved="1") before replying. If it means No/未解决/still not working, MUST call submit_feedback(resolved="0") before replying. Never say feedback was submitted unless submit_feedback was called.
35
+
36
+ User-visible output rule (MUST):
37
+ - Internal routing/tool decisions are NEVER user-facing text.
38
+ - Before calling any tool, do NOT output preface like “应调用…/先调用…/让我先搜索…/属于咨询类问题…/而非 codegen…”.
39
+ - If a tool call is needed, call it directly; then provide user-facing results only.
35
40
  `.trim();
36
41
  export function createServer() {
37
42
  const server = new McpServer({
38
43
  name: "Tencent RTC MCP Server",
39
- version: "1.6.8",
44
+ version: "1.7.0",
40
45
  }, {
41
46
  instructions: SERVER_INSTRUCTIONS,
42
47
  });
@@ -1,6 +1,14 @@
1
1
  import { z } from 'zod';
2
2
  import { FINALIZE_ANSWER_DEFINITION, FOLLOWUP_QUESTION } from '../definitions/finalize_answer_def.js';
3
3
  import { reportCLSClient } from '../../utils/report-cls-client.js';
4
+ const MAX_RECORDED_ANSWER_CHARS = 12000;
5
+ function sanitizeAnswerForRecord(answer) {
6
+ if (answer.length <= MAX_RECORDED_ANSWER_CHARS)
7
+ return answer;
8
+ const head = answer.slice(0, 9000);
9
+ const tail = answer.slice(-2500);
10
+ return `${head}\n\n[...truncated_for_record:${answer.length - (9000 + 2500)} chars omitted...]\n\n${tail}`;
11
+ }
4
12
  const registryFinalizeAnswerTool = (mcpServer) => {
5
13
  const { name, description, parameter_descriptions } = FINALIZE_ANSWER_DEFINITION;
6
14
  mcpServer.registerTool(name, {
@@ -16,7 +24,7 @@ const registryFinalizeAnswerTool = (mcpServer) => {
16
24
  reportCLSClient({
17
25
  method: 'record_answer',
18
26
  queryID: params.queryID,
19
- answer: params.answer,
27
+ answer: sanitizeAnswerForRecord(params.answer),
20
28
  prompt: params.prompt,
21
29
  product: params.product ? params.product.join(',') : '',
22
30
  framework: params.framework ?? '',
@@ -10,7 +10,7 @@ const registrySearchTRTCKnowledgeTool = (mcpServer) => {
10
10
  inputSchema: {
11
11
  prompt: z.string().describe(parameter_descriptions.prompt),
12
12
  product: z.array(z.enum(['chat', 'call', 'live', 'room', 'push', 'rtcengine', 'native_trtc_sdk'])).min(1).max(4).optional().describe(parameter_descriptions.product),
13
- frameworks: z.array(z.enum(['react', 'vue', 'web', 'miniprogram', 'android', 'ios', 'flutter', 'c++', 'uni-app', 'harmonyos', 'react-native', 'unity', 'unreal-engine', 'donut'])).min(1).optional().describe(parameter_descriptions.frameworks),
13
+ frameworks: z.array(z.enum(['react', 'vue', 'web', 'miniprogram', 'android', 'ios', 'flutter', 'c++', 'uni-app', 'harmonyos', 'react-native', 'unity', 'unreal-engine', 'donut'])).default([]).describe(parameter_descriptions.frameworks),
14
14
  queryID: z.string().describe(parameter_descriptions.queryID),
15
15
  ide: z.string().describe(parameter_descriptions.ide),
16
16
  types: z.array(z.enum([
@@ -9,7 +9,7 @@ When to call:
9
9
 
10
10
  Input:
11
11
  - prompt: Original user question. Must match the search_trtc_knowledge prompt.
12
- - answer: Complete final answer text, excluding the follow-up text. Do not summarize or truncate.
12
+ - answer: Final-answer digest for telemetry/audit (not necessarily full user-visible text). Keep key headings, main steps, critical API names, and omit oversized code blocks when needed.
13
13
  - queryID: REQUIRED. Must match the non-empty queryID returned by search_trtc_knowledge.
14
14
  - product/framework: Reuse the same values from the search_trtc_knowledge chain when available.
15
15
 
@@ -19,7 +19,7 @@ Returns:
19
19
  `;
20
20
  const PARAMETER_DESCRIPTIONS = {
21
21
  prompt: 'Original user question. Must match search_trtc_knowledge.',
22
- answer: 'Complete final answer text, excluding the follow-up text. Do not summarize or truncate.',
22
+ answer: 'Final-answer digest for telemetry/audit. Keep headings/steps/key APIs; for long answers (especially large code blocks), summarize safely instead of passing full raw text.',
23
23
  product: 'Reuse product from the search_trtc_knowledge chain when available.',
24
24
  framework: 'Reuse framework from the search_trtc_knowledge chain when available.',
25
25
  queryID: 'REQUIRED. Non-empty queryID returned by search_trtc_knowledge.',
@@ -2,4 +2,5 @@
2
2
  export const INTEGRATION_BOUNDARY_SUFFIX = `
3
3
  - **Codegen 专用**:仅当用户明确要求「集成进项目 / 写接入代码 / 帮我实现接入 / 生成工程代码」时调用本工具
4
4
  - **纯咨询或查阅**(怎么用、是什么、有哪些步骤、先看文档、错误排查、API/组件说明)→ 调用 \`search_trtc_knowledge\`,**不要**调用本工具
5
- - 本工具属 codegen 链路:作答后**不**调用 \`finalize_answer\` / \`submit_feedback\`(这两个仅属 \`search_trtc_knowledge\` 链路)`;
5
+ - 本工具属 codegen 链路:作答后**不**调用 \`finalize_answer\` / \`submit_feedback\`(这两个仅属 \`search_trtc_knowledge\` 链路)
6
+ - **用户可见输出约束(强制)**:以上链路/工具选择仅用于内部决策,禁止在对用户文本中出现“应调用/先调用/让我先搜索/我将调用某工具/属于咨询类问题/而非 codegen”等流程说明;直接输出结论与可执行内容。`;
@@ -24,7 +24,7 @@ types含api/component/feature/plugin/sdk/integration→MUST | API/组件/enterRo
24
24
  const PARAMETER_DESCRIPTIONS = {
25
25
  prompt: '用户原始问题全文,保留完整上下文,不要压缩成关键词摘要。',
26
26
  product: '产品数组:chat|call|live|room|push|rtcengine|native_trtc_sdk。能推断 MUST 传;push优先(TIMPush/推送→push,禁止误归chat)。live 常见关键词:LiveKit/直播/语聊房/TUILiveKit/AtomicXCore/开播/观看。不能确定先问用户。',
27
- frameworks: '平台数组:react|vue|web|miniprogram|android|ios|flutter|c++|uni-app|harmonyos|react-native|unity|unreal-engine|donut。支持传多个平台用于跨端检索;CallKit 中 TUICallKit 建议按 react/vue 区分检索,TUICallEngine/TUICallEvent 仍归 web;小程序用 miniprogram;harmonyos/react-native/unity/unreal/donut仅push适用。',
27
+ frameworks: '平台数组:react|vue|web|miniprogram|android|ios|flutter|c++|uni-app|harmonyos|react-native|unity|unreal-engine|donut。支持传多个平台用于跨端检索;CallKit 中 TUICallKit 建议按 react/vue 区分检索,TUICallEngine/TUICallEvent 仍归 web;小程序用 miniprogram;harmonyos/react-native/unity/unreal/donut仅push适用。若未传且问题依赖具体客户端平台,必须先调用 present_framework_choice 询问后重搜。',
28
28
  types: '默认不传;开放["faq"]。限定:integration|component|feature|api|plugin|sdk|error_code|product|server_api|webhook。component 与 feature 等价(同时匹配);发现型/罗列型问题("有哪些组件")MUST 省略 types。控制台/计费/产品能力配置→product(非feature)。勿主动窄传。',
29
29
  scenario: 'live|voice,仅live产品。',
30
30
  queryID: '首次\'\',后续同一咨询MUST透传(见server)。',
@@ -32,7 +32,7 @@ function sendCLSReport(reportData) {
32
32
  const time = Date.now();
33
33
  const data = {
34
34
  platform: 'mcp',
35
- verison: '1.6.8',
35
+ verison: '1.7.0',
36
36
  sdkappid: `${SDKAppID}`,
37
37
  method: method,
38
38
  userid: queryID || userID,
@@ -7,7 +7,7 @@ function reportESClient(reportData) {
7
7
  report: [
8
8
  {
9
9
  platform: 'mcp',
10
- version: '1.6.8',
10
+ version: '1.7.0',
11
11
  sdkappid: `${SDKAppID}`,
12
12
  method: method,
13
13
  userID: `${userID}`,