@tencentcloud/sdk-mcp 1.6.7 → 1.6.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.
Files changed (270) hide show
  1. package/knowledge/build-index.js +4 -1
  2. package/knowledge/content-loader.js +3 -1
  3. package/knowledge/search/filter-pool.js +12 -4
  4. package/knowledge/search/query-normalizer.js +76 -0
  5. package/knowledge/search/search-knowledge.js +104 -5
  6. package/package.json +1 -1
  7. package/resource/_schema/feature-aliases.yaml +1 -0
  8. package/resource/_schema/query-normalization.yaml +9 -0
  9. package/resource/index/manifest.json +1 -1
  10. package/resource/integration/callkit/preset/android/integration.md +0 -14
  11. package/resource/integration/callkit/preset/flutter/integration.md +0 -9
  12. package/resource/integration/callkit/preset/ios/integration.md +2 -15
  13. package/resource/integration/callkit/preset/react/integration.md +0 -21
  14. package/resource/integration/callkit/preset/vue/integration.md +0 -27
  15. package/resource/integration/chat/preset/android/integration.md +3 -10
  16. package/resource/integration/chat/preset/flutter/integration.md +11 -13
  17. package/resource/integration/chat/preset/ios/integration.md +9 -16
  18. package/resource/integration/chat/preset/react/integration.md +1 -9
  19. package/resource/integration/chat/preset/uni-app/integration.md +0 -9
  20. package/resource/integration/chat/preset/vue/integration.md +3 -13
  21. package/resource/integration/livekit/preset/live/android/live-host-integration.md +0 -4
  22. package/resource/integration/livekit/preset/live/android/prepare-integration.md +8 -21
  23. package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +0 -1
  24. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +0 -5
  25. package/resource/integration/livekit/preset/live/ios/live-list-integration.md +0 -4
  26. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +0 -9
  27. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +1 -5
  28. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +36 -147
  29. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +1 -6
  30. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +432 -286
  31. package/resource/integration/roomkit/preset/vue/integration.md +11 -24
  32. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +1 -20
  33. package/resource/knowledge/callkit/core-sdk/android/make-call.md +0 -12
  34. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +1 -12
  35. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +0 -19
  36. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +0 -13
  37. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -17
  38. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +0 -13
  39. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +0 -13
  40. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +0 -12
  41. package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +0 -1
  42. package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +0 -2
  43. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -15
  44. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -15
  45. package/resource/knowledge/callkit/core-sdk/web/call-engine.md +0 -1
  46. package/resource/knowledge/callkit/core-sdk/web/call-event.md +0 -1
  47. package/resource/knowledge/callkit/core-sdk/web/callengine-api-overview.md +0 -1
  48. package/resource/knowledge/callkit/faq/android.md +5 -15
  49. package/resource/knowledge/callkit/faq/common.md +0 -1
  50. package/resource/knowledge/callkit/faq/ios.md +1 -4
  51. package/resource/knowledge/callkit/faq/uniapp-app.md +0 -2
  52. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +0 -5
  53. package/resource/knowledge/callkit/faq/web.md +1 -5
  54. package/resource/knowledge/callkit/preset/android/api.md +0 -6
  55. package/resource/knowledge/callkit/preset/ios/api.md +0 -4
  56. package/resource/knowledge/callkit/preset/miniprogram/api.md +0 -2
  57. package/resource/knowledge/callkit/preset/react/api.md +2 -4
  58. package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +2 -8
  59. package/resource/knowledge/callkit/preset/vue/api.md +2 -4
  60. package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +2 -8
  61. package/resource/knowledge/chat/preset/android/features/chat-setting.md +1 -4
  62. package/resource/knowledge/chat/preset/android/features/contact-list.md +0 -5
  63. package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -10
  64. package/resource/knowledge/chat/preset/android/features/language.md +1 -12
  65. package/resource/knowledge/chat/preset/android/features/message-input.md +1 -9
  66. package/resource/knowledge/chat/preset/android/features/message-list.md +1 -11
  67. package/resource/knowledge/chat/preset/android/features/search.md +0 -7
  68. package/resource/knowledge/chat/preset/android/features/theme.md +0 -6
  69. package/resource/knowledge/chat/preset/android-view/integration.md +3 -5
  70. package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +1 -4
  71. package/resource/knowledge/chat/preset/flutter/features/contact-list.md +1 -6
  72. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +1 -10
  73. package/resource/knowledge/chat/preset/flutter/features/language.md +0 -3
  74. package/resource/knowledge/chat/preset/flutter/features/message-input.md +1 -9
  75. package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -11
  76. package/resource/knowledge/chat/preset/flutter/features/search.md +0 -7
  77. package/resource/knowledge/chat/preset/flutter/features/theme.md +0 -6
  78. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +1 -4
  79. package/resource/knowledge/chat/preset/ios/features/contact-list.md +1 -8
  80. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -10
  81. package/resource/knowledge/chat/preset/ios/features/language.md +0 -11
  82. package/resource/knowledge/chat/preset/ios/features/message-input.md +1 -9
  83. package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -11
  84. package/resource/knowledge/chat/preset/ios/features/search.md +0 -5
  85. package/resource/knowledge/chat/preset/ios/features/theme.md +0 -6
  86. package/resource/knowledge/chat/preset/ios-uikit/integration.md +5 -17
  87. package/resource/knowledge/chat/preset/react/features/chat-setting.md +0 -2
  88. package/resource/knowledge/chat/preset/react/features/contact-list.md +0 -23
  89. package/resource/knowledge/chat/preset/react/features/conversation-actions.md +2 -11
  90. package/resource/knowledge/chat/preset/react/features/conversation-list.md +2 -23
  91. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +0 -6
  92. package/resource/knowledge/chat/preset/react/features/search.md +0 -1
  93. package/resource/knowledge/chat/preset/vue/features/chat-header.md +1 -3
  94. package/resource/knowledge/chat/preset/vue/features/chat-setting.md +3 -5
  95. package/resource/knowledge/chat/preset/vue/features/contact-list.md +3 -9
  96. package/resource/knowledge/chat/preset/vue/features/conversation-actions.md +0 -3
  97. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +2 -13
  98. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +2 -5
  99. package/resource/knowledge/chat/preset/vue/features/conversation-search.md +1 -0
  100. package/resource/knowledge/chat/preset/vue/features/message-input.md +2 -4
  101. package/resource/knowledge/chat/preset/vue/features/message-list.md +2 -4
  102. package/resource/knowledge/chat/preset/vue/features/search.md +4 -1
  103. package/resource/knowledge/chat/preset/vue/features/theme.md +4 -6
  104. package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +0 -7
  105. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +0 -3
  106. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +0 -3
  107. package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +0 -1
  108. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +0 -5
  109. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +0 -3
  110. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +0 -2
  111. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +0 -2
  112. package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +0 -2
  113. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +0 -2
  114. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +0 -1
  115. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +0 -2
  116. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +1 -3
  117. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +0 -7
  118. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +0 -3
  119. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +0 -1
  120. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +0 -3
  121. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +0 -5
  122. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +0 -3
  123. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +0 -2
  124. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +0 -2
  125. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +0 -2
  126. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +0 -2
  127. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +0 -1
  128. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +0 -2
  129. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +1 -3
  130. package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +0 -7
  131. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +0 -3
  132. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +0 -1
  133. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +0 -3
  134. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +0 -5
  135. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +0 -3
  136. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +0 -2
  137. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +0 -2
  138. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +0 -2
  139. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +0 -2
  140. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +0 -1
  141. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +0 -2
  142. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +1 -3
  143. package/resource/knowledge/livekit/core-sdk/features/android/audience-list.md +2 -2
  144. package/resource/knowledge/livekit/core-sdk/features/android/audio-effect.md +1 -3
  145. package/resource/knowledge/livekit/core-sdk/features/android/barrage.md +2 -2
  146. package/resource/knowledge/livekit/core-sdk/features/android/base-beauty.md +0 -2
  147. package/resource/knowledge/livekit/core-sdk/features/android/gift.md +2 -7
  148. package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +2 -2
  149. package/resource/knowledge/livekit/core-sdk/features/flutter/audience-list.md +2 -2
  150. package/resource/knowledge/livekit/core-sdk/features/flutter/audio-effect.md +0 -4
  151. package/resource/knowledge/livekit/core-sdk/features/flutter/barrage.md +2 -2
  152. package/resource/knowledge/livekit/core-sdk/features/flutter/base-beauty.md +0 -2
  153. package/resource/knowledge/livekit/core-sdk/features/flutter/gift.md +3 -7
  154. package/resource/knowledge/livekit/core-sdk/features/flutter/live-list.md +3 -2
  155. package/resource/knowledge/livekit/core-sdk/features/ios/audience-list.md +2 -2
  156. package/resource/knowledge/livekit/core-sdk/features/ios/audio-effect.md +1 -3
  157. package/resource/knowledge/livekit/core-sdk/features/ios/barrage.md +2 -2
  158. package/resource/knowledge/livekit/core-sdk/features/ios/base-beauty.md +0 -2
  159. package/resource/knowledge/livekit/core-sdk/features/ios/gift.md +2 -7
  160. package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +2 -2
  161. package/resource/knowledge/livekit/core-sdk/features/uni-app/audience-list.md +2 -2
  162. package/resource/knowledge/livekit/core-sdk/features/uni-app/audio-effect.md +1 -2
  163. package/resource/knowledge/livekit/core-sdk/features/uni-app/barrage.md +2 -2
  164. package/resource/knowledge/livekit/core-sdk/features/uni-app/base-beauty.md +0 -2
  165. package/resource/knowledge/livekit/core-sdk/features/uni-app/gift.md +4 -8
  166. package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +2 -2
  167. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +0 -3
  168. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +0 -2
  169. package/resource/knowledge/livekit/core-sdk/live/android/integration.md +0 -7
  170. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +0 -2
  171. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +0 -2
  172. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -7
  173. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +0 -3
  174. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +0 -2
  175. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +0 -7
  176. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +0 -2
  177. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +0 -2
  178. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +0 -5
  179. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -3
  180. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +4 -13
  181. package/resource/knowledge/livekit/core-sdk/voice/android/integration.md +5 -5
  182. package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +0 -3
  183. package/resource/knowledge/livekit/core-sdk/voice/flutter/integration.md +18 -21
  184. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +0 -2
  185. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -11
  186. package/resource/knowledge/livekit/core-sdk/voice/ios/integration.md +8 -8
  187. package/resource/knowledge/livekit/core-sdk/voice/uni-app/co-guest-interaction.md +0 -2
  188. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +1 -4
  189. package/resource/knowledge/livekit/faq/error-code.md +1 -1
  190. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +0 -5
  191. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +1 -1
  192. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -3
  193. package/resource/knowledge/push/api-reference/donut.md +1 -6
  194. package/resource/knowledge/push/api-reference/harmonyos.md +0 -2
  195. package/resource/knowledge/push/api-reference/react-native.md +0 -3
  196. package/resource/knowledge/push/api-reference/uni-app.md +3 -5
  197. package/resource/knowledge/push/api-reference/unity.md +0 -1
  198. package/resource/knowledge/push/api-reference/unreal-engine.md +0 -1
  199. package/resource/knowledge/push/config/android/fcm.md +0 -6
  200. package/resource/knowledge/push/config/android/honor.md +1 -7
  201. package/resource/knowledge/push/config/android/huawei.md +1 -9
  202. package/resource/knowledge/push/config/android/meizu.md +1 -7
  203. package/resource/knowledge/push/config/android/oppo.md +1 -3
  204. package/resource/knowledge/push/config/android/vivo.md +1 -12
  205. package/resource/knowledge/push/config/android/xiaomi.md +0 -5
  206. package/resource/knowledge/push/config/donut.md +0 -12
  207. package/resource/knowledge/push/config/harmonyos.md +18 -7
  208. package/resource/knowledge/push/config/ios.md +26 -33
  209. package/resource/knowledge/push/config/react-native.md +0 -31
  210. package/resource/knowledge/push/config/unity.md +0 -31
  211. package/resource/knowledge/push/config/unreal-engine.md +0 -31
  212. package/resource/knowledge/push/integration/android.md +137 -46
  213. package/resource/knowledge/push/integration/donut.md +5 -21
  214. package/resource/knowledge/push/integration/flutter.md +1 -3
  215. package/resource/knowledge/push/integration/harmonyos.md +17 -16
  216. package/resource/knowledge/push/integration/ios.md +27 -15
  217. package/resource/knowledge/push/integration/react-native.md +9 -59
  218. package/resource/knowledge/push/integration/uni-app.md +3 -25
  219. package/resource/knowledge/push/integration/unity.md +8 -77
  220. package/resource/knowledge/push/integration/unreal-engine.md +37 -96
  221. package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +0 -2
  222. package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +0 -2
  223. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -5
  224. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +4 -6
  225. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +0 -2
  226. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +0 -2
  227. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +2 -4
  228. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -6
  229. package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +0 -2
  230. package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +0 -2
  231. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -5
  232. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -6
  233. package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +0 -5
  234. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -3
  235. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -5
  236. package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +0 -3
  237. package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +1 -7
  238. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +1 -2
  239. package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +0 -1
  240. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -3
  241. package/resource/knowledge/roomkit/preset/android/integration.md +202 -6
  242. package/resource/knowledge/roomkit/preset/flutter/integration.md +1 -16
  243. package/resource/knowledge/roomkit/preset/ios/integration.md +201 -7
  244. package/resource/knowledge/roomkit/preset/react/integration.md +205 -4
  245. package/resource/knowledge/rtcengine/web/api.md +0 -2
  246. package/resource/knowledge/rtcengine/web/plugin/22-advanced-audio-mixer.md +2 -2
  247. package/resource/knowledge/rtcengine/web/plugin/23-advanced-support-detection.md +3 -3
  248. package/resource/knowledge/rtcengine/web/plugin/28-advanced-beauty.md +1 -1
  249. package/resource/knowledge/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -4
  250. package/resource/knowledge/share/userSig.md +2 -2
  251. package/resource/knowledge/trtc/android/TRTCCloud.md +16 -16
  252. package/resource/knowledge/trtc/android/TRTCCloudDef.md +5 -5
  253. package/resource/knowledge/trtc/android/TRTCCloudListener.md +3 -3
  254. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +2 -2
  255. package/resource/knowledge/trtc/android/TXDeviceManager.md +1 -1
  256. package/resource/knowledge/trtc/c++/ITRTCCloud.md +14 -14
  257. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +2 -2
  258. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +4 -4
  259. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +3 -3
  260. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +5 -5
  261. package/resource/knowledge/trtc/ios/TRTCCloud.md +14 -14
  262. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +3 -3
  263. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +2 -2
  264. package/resource/knowledge/trtc/ios/TXDeviceManager.md +4 -4
  265. package/resource/knowledge/trtc/ios/TXLiveSDKTypeDef.md +5 -5
  266. package/server.js +1 -1
  267. package/tools/common/search_trtc_knowledge.js +2 -0
  268. package/tools/definitions/search_trtc_knowledge_def.js +1 -0
  269. package/utils/report-cls-client.js +3 -3
  270. package/utils/report-es-client.js +1 -1
@@ -5,7 +5,10 @@ import { chunkMarkdown, toManifestChunk } from './chunker.js';
5
5
  import { buildDocSourceUrlMap } from './doc-url-resolver.js';
6
6
  import { inferPathMeta } from './path-meta.js';
7
7
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
- const RESOURCE_ROOT = path.resolve(__dirname, '../../resource');
8
+ // 构建期写入索引到 dist/resource/index/:
9
+ // dist/knowledge/ → ../resource/ → dist/resource/
10
+ // 必须在 scripts/copy-resource.js 之后执行,否则目标目录不存在。
11
+ const RESOURCE_ROOT = path.resolve(__dirname, '../resource');
9
12
  function walkMarkdownFiles(dir, baseRel) {
10
13
  if (!fs.existsSync(dir))
11
14
  return [];
@@ -4,7 +4,9 @@ import { fileURLToPath } from 'url';
4
4
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
5
  const fileCache = new Map();
6
6
  function resolveResourceRoot() {
7
- // npm: knowledge/ → ../resource/ 到包根;dev: dist/knowledge/ → ../resource/ 到 dist/resource/
7
+ // 运行时读 md 源目录(与 knowledge/ 同级的 resource/):
8
+ // npm 包:<pkg>/knowledge/ → <pkg>/resource/
9
+ // 本地: dist/knowledge/ → dist/resource/(依赖 build 时 copy-resource.js)
8
10
  return path.resolve(__dirname, '../resource');
9
11
  }
10
12
  function readSourceFile(source) {
@@ -1,4 +1,5 @@
1
1
  import { downgradeToProductType } from './product-scope-intent.js';
2
+ import { normalizeQueryPrompt } from './query-normalizer.js';
2
3
  /**
3
4
  * MCP framework enum → index 中对应的 framework 值列表。
4
5
  * path-meta.ts 已通过 normalizeFrameworkDir 把目录名归一到标准 framework,
@@ -70,15 +71,16 @@ function inferImplicitFramework(products, frameworks, prompt) {
70
71
  return undefined;
71
72
  }
72
73
  export function normalizeParams(params) {
74
+ const normalizedPrompt = normalizeQueryPrompt(params.prompt);
73
75
  const limit = Math.min(Math.max(params.limit ?? 8, 1), 16);
74
- const effectiveFramework = inferImplicitFramework(params.product, params.frameworks, params.prompt);
76
+ const effectiveFramework = inferImplicitFramework(params.product, params.frameworks, normalizedPrompt);
75
77
  const requestedFrameworks = params.frameworks?.length
76
78
  ? params.frameworks
77
79
  : effectiveFramework ? [effectiveFramework] : undefined;
78
80
  const frameworks = expandFrameworks(requestedFrameworks, params.product);
79
- const types = resolveTypes(params.product, params.types, params.prompt, requestedFrameworks);
81
+ const types = resolveTypes(params.product, params.types, normalizedPrompt, requestedFrameworks);
80
82
  return {
81
- prompt: params.prompt,
83
+ prompt: normalizedPrompt,
82
84
  product: params.product,
83
85
  framework: effectiveFramework,
84
86
  frameworks,
@@ -144,7 +146,13 @@ export function filterPool(chunks, norm) {
144
146
  && chunk.variant === 'core-sdk'
145
147
  && chunk.framework.includes('vue')
146
148
  && chunk.source.includes('/api-reference/'));
147
- if (!explicitMatch && !wildcardAllowed && !callCoreWebFallback && !liveWebVueFallback)
149
+ // Room 特例:Conference Web 实际语料在 roomkit/core-sdk/vue,web 查询应可命中。
150
+ const roomWebVueFallback = Boolean(norm.product?.includes('room')
151
+ && norm.framework === 'web'
152
+ && chunk.variant === 'core-sdk'
153
+ && chunk.framework.includes('vue')
154
+ && chunk.source.includes('knowledge/roomkit/core-sdk/vue/'));
155
+ if (!explicitMatch && !wildcardAllowed && !callCoreWebFallback && !liveWebVueFallback && !roomWebVueFallback)
148
156
  return false;
149
157
  }
150
158
  if (norm.scenario && chunk.scenario && chunk.scenario !== norm.scenario) {
@@ -0,0 +1,76 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
+ const SCHEMA_ROOT = path.resolve(__dirname, '../../resource/_schema');
6
+ const QUERY_NORMALIZATION_FILE = path.join(SCHEMA_ROOT, 'query-normalization.yaml');
7
+ const MAX_APPEND_TOKENS = 6;
8
+ let cachedConfig = null;
9
+ function unquote(input) {
10
+ return input.trim().replace(/^['"]|['"]$/g, '');
11
+ }
12
+ function loadQueryNormalizationConfig() {
13
+ if (cachedConfig)
14
+ return cachedConfig;
15
+ const config = { literal: {}, word: {} };
16
+ if (!fs.existsSync(QUERY_NORMALIZATION_FILE)) {
17
+ cachedConfig = config;
18
+ return config;
19
+ }
20
+ const text = fs.readFileSync(QUERY_NORMALIZATION_FILE, 'utf-8');
21
+ let currentSection = '';
22
+ for (const rawLine of text.split('\n')) {
23
+ const line = rawLine.trimEnd();
24
+ if (!line.trim() || line.trimStart().startsWith('#'))
25
+ continue;
26
+ const sectionMatch = line.match(/^(literal|word):\s*$/);
27
+ if (sectionMatch) {
28
+ currentSection = sectionMatch[1];
29
+ continue;
30
+ }
31
+ const entryMatch = line.match(/^\s{2}([^:#]+):\s*\[(.*)\]\s*$/);
32
+ if (!entryMatch || !currentSection)
33
+ continue;
34
+ const key = unquote(entryMatch[1]);
35
+ const values = entryMatch[2]
36
+ .split(',')
37
+ .map((token) => unquote(token))
38
+ .filter(Boolean);
39
+ if (!key || !values.length)
40
+ continue;
41
+ config[currentSection][key] = values;
42
+ }
43
+ cachedConfig = config;
44
+ return config;
45
+ }
46
+ function escapeRegExp(value) {
47
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
48
+ }
49
+ export function normalizeQueryPrompt(prompt) {
50
+ const config = loadQueryNormalizationConfig();
51
+ const terms = new Set(prompt.split(/\s+/).filter(Boolean));
52
+ const promptLower = prompt.toLowerCase();
53
+ let appendedCount = 0;
54
+ const tryAppend = (tokens) => {
55
+ for (const token of tokens) {
56
+ if (appendedCount >= MAX_APPEND_TOKENS)
57
+ return;
58
+ if (!terms.has(token)) {
59
+ terms.add(token);
60
+ appendedCount += 1;
61
+ }
62
+ }
63
+ };
64
+ for (const [needle, expansion] of Object.entries(config.literal)) {
65
+ if (!prompt.includes(needle))
66
+ continue;
67
+ tryAppend(expansion);
68
+ }
69
+ for (const [needle, expansion] of Object.entries(config.word)) {
70
+ const pattern = new RegExp(`\\b${escapeRegExp(needle.toLowerCase())}\\b`, 'i');
71
+ if (!pattern.test(promptLower))
72
+ continue;
73
+ tryAppend(expansion);
74
+ }
75
+ return [...terms].join(' ');
76
+ }
@@ -129,7 +129,16 @@ function hasBestPracticeFragment(fragments) {
129
129
  }
130
130
  function inferQueryApiTokens(prompt) {
131
131
  const tokens = new Set();
132
- const upperNoise = new Set(['SDK', 'API', 'HTTP', 'HTTPS', 'JSON', 'CALL', 'NAME', 'STATUS']);
132
+ // 仅保留 API 形态 token,剔除产品/平台品牌词,避免把“TRTC Conference Web ...”误判为 API 缺口。
133
+ const upperNoise = new Set([
134
+ 'SDK', 'API', 'HTTP', 'HTTPS', 'JSON', 'CALL', 'NAME', 'STATUS',
135
+ 'TRTC', 'TENCENT', 'WEB', 'VUE', 'REACT', 'ROOMKIT', 'LIVEKIT', 'CALLKIT',
136
+ ]);
137
+ const platformNoise = new Set([
138
+ 'ios', 'android', 'flutter', 'web', 'react', 'vue', 'miniprogram',
139
+ 'harmonyos', 'react-native', 'unity', 'unreal', 'unreal-engine', 'donut', 'uni-app',
140
+ 'pc', 'h5',
141
+ ]);
133
142
  for (const match of prompt.matchAll(/\b([a-z]+[A-Z][A-Za-z0-9_]*)\b/g)) {
134
143
  tokens.add(match[1]);
135
144
  }
@@ -150,7 +159,7 @@ function inferQueryApiTokens(prompt) {
150
159
  if (!upperNoise.has(token))
151
160
  tokens.add(token);
152
161
  }
153
- return [...tokens];
162
+ return [...tokens].filter((token) => !platformNoise.has(token.toLowerCase()));
154
163
  }
155
164
  function tokenInChunk(token, chunk) {
156
165
  if (chunk.api_names?.some((name) => name.toLowerCase() === token.toLowerCase()))
@@ -171,6 +180,21 @@ function computeMissingApiTokens(tokens, candidates) {
171
180
  return [];
172
181
  return tokens.filter((token) => !candidates.some((chunk) => tokenInChunk(token, chunk)));
173
182
  }
183
+ function hasProductScopeIntent(prompt) {
184
+ return /控制台|开通|开通服务|计费|套餐|价格|pricing|billing|plan|console|activate|activation|service/i.test(prompt);
185
+ }
186
+ function hasNativeTrtcApiSignal(prompt, queryApiTokens) {
187
+ if (/\bTRTCCloud\b|\bTRTCRenderParams\b|\bTXDeviceManager\b|setLocalRenderParams|startLocalPreview|stopLocalPreview/i.test(prompt)) {
188
+ return true;
189
+ }
190
+ return queryApiTokens.some((token) => /^(TRTC|TX)[A-Za-z0-9_]+$/.test(token)
191
+ || /^(set|get|start|stop|enable|disable)[A-Z][A-Za-z0-9_]+$/.test(token));
192
+ }
193
+ function hasNativeClientFramework(frameworks) {
194
+ if (!frameworks?.length)
195
+ return false;
196
+ return frameworks.some((fw) => ['android', 'ios', 'flutter', 'c++'].includes(fw));
197
+ }
174
198
  function applyRankMultipliers(ranked, chunksById, opts) {
175
199
  const adjusted = ranked.map((item) => {
176
200
  const chunk = chunksById.get(item.id);
@@ -193,7 +217,12 @@ function applyRankMultipliers(ranked, chunksById, opts) {
193
217
  && chunk.variant === 'core-sdk'
194
218
  && chunk.framework.includes('vue')
195
219
  && chunk.source.includes('/api-reference/'));
196
- if (!explicitMatch && !callCoreWebFallback && !liveWebVueFallback) {
220
+ const roomWebVueFallback = Boolean(opts.product?.includes('room')
221
+ && opts.framework === 'web'
222
+ && chunk.variant === 'core-sdk'
223
+ && chunk.framework.includes('vue')
224
+ && chunk.source.includes('knowledge/roomkit/core-sdk/vue/'));
225
+ if (!explicitMatch && !callCoreWebFallback && !liveWebVueFallback && !roomWebVueFallback) {
197
226
  multiplier *= 0.2;
198
227
  }
199
228
  }
@@ -360,7 +389,7 @@ export function searchKnowledge(params) {
360
389
  };
361
390
  };
362
391
  let pass = runSearchPass(norm);
363
- let retryReason;
392
+ const retryReasons = [];
364
393
  // B2: API token 覆盖不足时触发一次扩检(去掉 types 约束 + api/integration 轻提权)
365
394
  const missingRatio = queryApiTokens.length > 0
366
395
  ? Number((pass.missingApiTokens.length / queryApiTokens.length).toFixed(2))
@@ -374,9 +403,44 @@ export function searchKnowledge(params) {
374
403
  || retryMissingRatio < missingRatio
375
404
  || (pass.fragments.length === 0 && retryPass.fragments.length > 0)) {
376
405
  pass = retryPass;
377
- retryReason = `api_gap_retry:coverage=${pass.apiNameCoverage},missing_ratio=${retryMissingRatio}`;
406
+ retryReasons.push(`api_gap_retry:coverage=${pass.apiNameCoverage},missing_ratio=${retryMissingRatio}`);
407
+ }
408
+ }
409
+ // B3: 混合“集成 + 产品开通/计费/控制台”问法时,补充 product type,避免仅搜 integration/feature。
410
+ if (norm.types?.length && !norm.types.includes('product') && hasProductScopeIntent(norm.prompt)) {
411
+ const widenedTypes = [...new Set([...norm.types, 'product'])];
412
+ const retryPass = runSearchPass({ ...norm, types: widenedTypes });
413
+ const baseHasProduct = pass.fragments.some((f) => f.types.includes('product'));
414
+ const retryHasProduct = retryPass.fragments.some((f) => f.types.includes('product'));
415
+ if ((retryHasProduct && !baseHasProduct)
416
+ || (pass.fragments.length === 0 && retryPass.fragments.length > 0)
417
+ || (retryPass.fragments[0]?.score ?? 0) > (pass.fragments[0]?.score ?? 0) * 1.08) {
418
+ pass = retryPass;
419
+ retryReasons.push('product_scope_retry:types+=product');
420
+ }
421
+ }
422
+ // B4: 若疑似 Native TRTC API 问法却路由到 live/room/call,自动补扩 native_trtc_sdk 产品重检。
423
+ const shouldRetryNativeProduct = hasNativeClientFramework(norm.frameworks)
424
+ && hasNativeTrtcApiSignal(norm.prompt, queryApiTokens)
425
+ && norm.product?.some((p) => ['live', 'room', 'call'].includes(p))
426
+ && !norm.product?.includes('native_trtc_sdk')
427
+ && queryApiTokens.length > 0
428
+ && pass.apiNameCoverage < 0.5;
429
+ if (shouldRetryNativeProduct) {
430
+ const expandedProducts = [...new Set([...(norm.product ?? []), 'native_trtc_sdk'])];
431
+ const retryPass = runSearchPass({ ...norm, product: expandedProducts, types: undefined }, { apiRetry: true });
432
+ const retryMissingRatio = queryApiTokens.length > 0
433
+ ? Number((retryPass.missingApiTokens.length / queryApiTokens.length).toFixed(2))
434
+ : 0;
435
+ if (retryPass.apiNameCoverage > pass.apiNameCoverage
436
+ || retryPass.exactHits.length > pass.exactHits.length
437
+ || retryMissingRatio < missingRatio
438
+ || (pass.fragments.length === 0 && retryPass.fragments.length > 0)) {
439
+ pass = retryPass;
440
+ retryReasons.push(`native_product_retry:products=${expandedProducts.join('+')},coverage=${retryPass.apiNameCoverage}`);
378
441
  }
379
442
  }
443
+ const retryReason = retryReasons.length ? retryReasons.join(';') : undefined;
380
444
  const routeInconsistencyWarning = pass.fragments.length > 0
381
445
  ? pass.fragments.filter((f) => f.product === '*').length / pass.fragments.length > 0.3
382
446
  : false;
@@ -386,6 +450,40 @@ export function searchKnowledge(params) {
386
450
  const topScore = pass.fragments[0]?.score;
387
451
  const secondScore = pass.fragments[1]?.score;
388
452
  const answerContract = buildAnswerContract(status, confidence, { fabricationRisk });
453
+ const hasProductScope = hasProductScopeIntent(norm.prompt);
454
+ const hasNativeSignal = hasNativeTrtcApiSignal(norm.prompt, queryApiTokens);
455
+ const hasProductContent = pass.fragments.some((f) => f.types.includes('product') || /\/product\.md$/i.test(f.source));
456
+ const hasIntegrationContent = pass.fragments.some((f) => f.types.includes('integration') || /\/integration\.md$/i.test(f.source) || /\/preset\//i.test(f.source));
457
+ const hasApiQueryTokens = queryApiTokens.length > 0;
458
+ const apiGapDetected = hasApiQueryTokens && (pass.apiNameCoverage === 0 || missingRatio >= 0.3);
459
+ const retryApiGapApplied = retryReasons.some((r) => r.startsWith('api_gap_retry:'));
460
+ const retryProductScopeApplied = retryReasons.includes('product_scope_retry:types+=product');
461
+ const retryNativeProductApplied = retryReasons.some((r) => r.startsWith('native_product_retry:'));
462
+ const convergenceReached = status === 'success'
463
+ && (confidence === 'high' || confidence === 'medium')
464
+ && (!hasApiQueryTokens || pass.apiNameCoverage >= 0.5)
465
+ && (!hasProductScope || hasProductContent || hasIntegrationContent);
466
+ const retryAdvice = (() => {
467
+ if (status === 'needs_framework') {
468
+ return { stop_retry: true, next_action: 'ask_framework', reason: 'missing_framework' };
469
+ }
470
+ if (convergenceReached) {
471
+ return { stop_retry: true, next_action: 'answer', reason: 'converged' };
472
+ }
473
+ if (hasApiQueryTokens && apiGapDetected && !retryApiGapApplied) {
474
+ return { stop_retry: false, next_action: 'retry_widen_types', reason: 'api_coverage_gap' };
475
+ }
476
+ if (hasProductScope && !hasProductContent && !retryProductScopeApplied) {
477
+ return { stop_retry: false, next_action: 'retry_add_product_scope', reason: 'missing_product_scope_content' };
478
+ }
479
+ if (hasNativeSignal && hasNativeClientFramework(norm.frameworks) && !retryNativeProductApplied) {
480
+ return { stop_retry: false, next_action: 'retry_add_native_trtc_sdk', reason: 'possible_native_product_misroute' };
481
+ }
482
+ if (status === 'empty' || confidence === 'low') {
483
+ return { stop_retry: false, next_action: 'retry_or_clarify', reason: 'insufficient_retrieval_signal' };
484
+ }
485
+ return { stop_retry: true, next_action: 'answer', reason: 'default_stop' };
486
+ })();
389
487
  return {
390
488
  status,
391
489
  confidence,
@@ -408,6 +506,7 @@ export function searchKnowledge(params) {
408
506
  api_name_coverage: pass.apiNameCoverage,
409
507
  fabrication_risk: fabricationRisk,
410
508
  route_inconsistency_warning: routeInconsistencyWarning,
509
+ retry_advice: retryAdvice,
411
510
  },
412
511
  fragments: pass.fragments,
413
512
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tencentcloud/sdk-mcp",
3
- "version": "1.6.7",
3
+ "version": "1.6.8",
4
4
  "description": "Tencent Cloud MCP Server for SDK",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -9,3 +9,4 @@ live:
9
9
  room:
10
10
  screen-share.md: ["屏幕分享", "screen share", "startScreenShare"]
11
11
  virtual-background.md: ["虚拟背景", "virtual background"]
12
+ device-state.md: ["conference", "会议", "开摄像头", "camera", "后端支持", "服务端支持"]
@@ -0,0 +1,9 @@
1
+ literal:
2
+ 摄影头: ["摄像头"]
3
+ 会议: ["roomkit", "conference"]
4
+ 会议室: ["roomkit", "conference"]
5
+ word:
6
+ conference: ["会议", "roomkit", "conference"]
7
+ meeting: ["会议", "roomkit", "conference"]
8
+ room: ["会议", "roomkit", "conference"]
9
+ roomkit: ["会议", "roomkit", "conference"]