@tencentcloud/sdk-mcp 1.6.4 → 1.6.6

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 (303) hide show
  1. package/knowledge/build-index.js +1 -1
  2. package/knowledge/chunker.js +81 -52
  3. package/knowledge/path-meta.js +181 -21
  4. package/knowledge/search/exact-lookup.js +245 -43
  5. package/knowledge/search/filter-pool.js +73 -19
  6. package/knowledge/search/product-scope-intent.js +2 -2
  7. package/knowledge/search/requires-framework.js +1 -1
  8. package/knowledge/search/search-knowledge.js +246 -60
  9. package/package.json +1 -1
  10. package/resource/_schema/feature-aliases.yaml +1 -0
  11. package/resource/integration/callkit/preset/android/integration.md +3 -5
  12. package/resource/integration/callkit/preset/flutter/integration.md +2 -3
  13. package/resource/integration/callkit/preset/ios/integration.md +2 -5
  14. package/resource/integration/callkit/preset/react/integration.md +12 -26
  15. package/resource/integration/callkit/preset/vue/integration.md +17 -33
  16. package/resource/integration/chat/preset/android/integration.md +44 -14
  17. package/resource/integration/chat/preset/flutter/integration.md +54 -13
  18. package/resource/integration/chat/preset/ios/integration.md +42 -6
  19. package/resource/integration/chat/preset/react/integration.md +30 -28
  20. package/resource/integration/chat/preset/uni-app/integration.md +101 -40
  21. package/resource/integration/chat/preset/vue/integration.md +62 -28
  22. package/resource/integration/livekit/preset/live/android/live-audience-integration.md +133 -0
  23. package/resource/integration/livekit/preset/live/android/live-host-integration.md +225 -0
  24. package/resource/integration/livekit/preset/live/android/live-list-integration.md +278 -0
  25. package/resource/integration/livekit/preset/live/android/prepare-integration.md +271 -0
  26. package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +207 -0
  27. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +358 -0
  28. package/resource/integration/livekit/preset/live/ios/live-list-integration.md +246 -0
  29. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +218 -0
  30. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +4 -7
  31. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +5 -12
  32. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +4 -11
  33. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +250 -482
  34. package/resource/integration/roomkit/preset/vue/integration.md +399 -106
  35. package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +80 -0
  36. package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +20 -0
  37. package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +116 -0
  38. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +11 -15
  39. package/resource/knowledge/callkit/core-sdk/android/make-call.md +10 -13
  40. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +2 -4
  41. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +10 -17
  42. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +11 -17
  43. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +11 -20
  44. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +10 -15
  45. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +9 -14
  46. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +12 -18
  47. package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +390 -0
  48. package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +317 -0
  49. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +16 -22
  50. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +17 -23
  51. package/resource/knowledge/callkit/core-sdk/web/call-engine.md +39 -0
  52. package/resource/knowledge/callkit/core-sdk/web/call-event.md +341 -0
  53. package/resource/knowledge/callkit/core-sdk/web/callengine-api-overview.md +39 -0
  54. package/resource/knowledge/callkit/faq/android.md +1 -5
  55. package/resource/knowledge/callkit/faq/common.md +10 -12
  56. package/resource/knowledge/callkit/faq/ios.md +5 -7
  57. package/resource/knowledge/callkit/faq/uniapp-app.md +7 -7
  58. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +9 -12
  59. package/resource/knowledge/callkit/faq/web.md +2 -12
  60. package/resource/knowledge/callkit/preset/android/api.md +5 -8
  61. package/resource/knowledge/callkit/preset/ios/api.md +4 -6
  62. package/resource/knowledge/callkit/preset/miniprogram/api.md +295 -0
  63. package/resource/knowledge/callkit/preset/react/api.md +622 -0
  64. package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +475 -0
  65. package/resource/knowledge/callkit/preset/vue/api.md +622 -0
  66. package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +587 -0
  67. package/resource/knowledge/callkit/preset/web/api.md +1 -1
  68. package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +16 -0
  69. package/resource/knowledge/chat/preset/android/features/chat-setting.md +1 -1
  70. package/resource/knowledge/chat/preset/android/features/conversation-list.md +0 -1
  71. package/resource/knowledge/chat/preset/android/features/language.md +2 -4
  72. package/resource/knowledge/chat/preset/android/features/message-input.md +1 -1
  73. package/resource/knowledge/chat/preset/android/features/message-list.md +1 -2
  74. package/resource/knowledge/chat/preset/android/features/search.md +0 -1
  75. package/resource/knowledge/chat/preset/android/features/theme.md +1 -1
  76. package/resource/knowledge/chat/preset/android-view/integration.md +35 -10
  77. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +0 -1
  78. package/resource/knowledge/chat/preset/flutter/features/language.md +1 -1
  79. package/resource/knowledge/chat/preset/flutter/features/message-list.md +0 -1
  80. package/resource/knowledge/chat/preset/flutter/features/search.md +4 -5
  81. package/resource/knowledge/chat/preset/flutter/features/theme.md +1 -1
  82. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +1 -1
  83. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +0 -1
  84. package/resource/knowledge/chat/preset/ios/features/language.md +2 -5
  85. package/resource/knowledge/chat/preset/ios/features/message-list.md +0 -1
  86. package/resource/knowledge/chat/preset/ios/features/search.md +0 -1
  87. package/resource/knowledge/chat/preset/ios/features/theme.md +1 -1
  88. package/resource/knowledge/chat/preset/ios-uikit/integration.md +57 -166
  89. package/resource/knowledge/chat/preset/react/features/chat-setting.md +0 -1
  90. package/resource/knowledge/chat/preset/react/features/conversation-actions.md +3 -3
  91. package/resource/knowledge/chat/preset/react/features/conversation-list.md +3 -3
  92. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +1 -1
  93. package/resource/knowledge/chat/preset/react/features/message-input.md +2 -3
  94. package/resource/knowledge/chat/preset/react/features/search.md +0 -1
  95. package/resource/knowledge/chat/preset/vue/features/chat-header.md +1 -1
  96. package/resource/knowledge/chat/preset/vue/features/chat-setting.md +3 -4
  97. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +4 -4
  98. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +1 -1
  99. package/resource/knowledge/chat/preset/vue/features/message-input.md +2 -2
  100. package/resource/knowledge/chat/preset/vue/features/message-list.md +2 -2
  101. package/resource/knowledge/chat/preset/vue/features/search.md +0 -1
  102. package/resource/knowledge/chat/preset/vue/features/theme.md +4 -4
  103. package/resource/knowledge/chat/urls/sdk/android.md +3 -3
  104. package/resource/knowledge/chat/urls/sdk/flutter.md +3 -3
  105. package/resource/knowledge/chat/urls/sdk/ios.md +3 -3
  106. package/resource/knowledge/chat/urls/sdk/web.md +3 -3
  107. package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +0 -7
  108. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +2 -5
  109. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +12 -15
  110. package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +0 -1
  111. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +0 -5
  112. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +0 -3
  113. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +0 -2
  114. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +2 -4
  115. package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +0 -2
  116. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +0 -2
  117. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +0 -1
  118. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +2 -4
  119. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +1 -3
  120. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +0 -7
  121. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +3 -6
  122. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +0 -1
  123. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +12 -15
  124. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +0 -5
  125. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +0 -3
  126. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +0 -2
  127. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +2 -4
  128. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +0 -2
  129. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +0 -2
  130. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +0 -1
  131. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +2 -4
  132. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +1 -3
  133. package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +0 -7
  134. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +2 -5
  135. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +0 -1
  136. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +3 -6
  137. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +0 -5
  138. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +0 -3
  139. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +0 -2
  140. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +2 -4
  141. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +0 -2
  142. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +0 -2
  143. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +0 -1
  144. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +2 -4
  145. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +1 -3
  146. package/resource/knowledge/livekit/core-sdk/api-reference/vue/capability-matrix.md +82 -0
  147. package/resource/knowledge/livekit/core-sdk/{voice/android/voice-audio-effect.md → features/android/audio-effect.md} +2 -4
  148. package/resource/knowledge/livekit/core-sdk/{live/android/live-barrage.md → features/android/barrage.md} +1 -1
  149. package/resource/knowledge/livekit/core-sdk/{live/android/live-base-beauty.md → features/android/base-beauty.md} +1 -1
  150. package/resource/knowledge/livekit/core-sdk/{voice/android/voice-gift.md → features/android/gift.md} +2 -3
  151. package/resource/knowledge/livekit/core-sdk/{live/android/live-live-list.md → features/android/live-list.md} +1 -1
  152. package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audio-effect.md → features/flutter/audio-effect.md} +0 -2
  153. package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-barrage.md → features/flutter/barrage.md} +3 -3
  154. package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-gift.md → features/flutter/gift.md} +2 -2
  155. package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-room-list.md → features/flutter/live-list.md} +1 -1
  156. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audience-list.md → features/ios/audience-list.md} +1 -1
  157. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audio-effect.md → features/ios/audio-effect.md} +1 -3
  158. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-barrage.md → features/ios/barrage.md} +2 -2
  159. package/resource/knowledge/livekit/core-sdk/{live/ios/live-base-beauty.md → features/ios/base-beauty.md} +1 -1
  160. package/resource/knowledge/livekit/core-sdk/{live/ios/live-gift.md → features/ios/gift.md} +8 -9
  161. package/resource/knowledge/livekit/core-sdk/{live/ios/live-live-list.md → features/ios/live-list.md} +2 -2
  162. package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-audio-effect.md → features/uni-app/audio-effect.md} +2 -3
  163. package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-barrage.md → features/uni-app/barrage.md} +2 -2
  164. package/resource/knowledge/livekit/core-sdk/features/uni-app/base-beauty.md +145 -0
  165. package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-gift.md → features/uni-app/gift.md} +6 -7
  166. package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-room-list.md → features/uni-app/live-list.md} +1 -1
  167. package/resource/knowledge/livekit/core-sdk/live/android/{live-co-guest-interaction.md → co-guest-interaction.md} +2 -3
  168. package/resource/knowledge/livekit/core-sdk/live/android/{live-host-interaction.md → host-interaction.md} +2 -4
  169. package/resource/knowledge/livekit/core-sdk/live/android/{live-integration.md → integration.md} +6 -9
  170. package/resource/knowledge/livekit/core-sdk/live/flutter/{live-host-interaction.md → host-interaction.md} +1 -3
  171. package/resource/knowledge/livekit/core-sdk/live/flutter/{live-integration.md → integration.md} +1 -6
  172. package/resource/knowledge/livekit/core-sdk/live/ios/{live-co-guest-interaction.md → co-guest-interaction.md} +2 -3
  173. package/resource/knowledge/livekit/core-sdk/live/ios/{live-host-interaction.md → host-interaction.md} +3 -5
  174. package/resource/knowledge/livekit/core-sdk/live/ios/{live-integration.md → integration.md} +7 -10
  175. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +561 -0
  176. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +323 -0
  177. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +312 -0
  178. package/resource/knowledge/livekit/core-sdk/voice/android/{voice-co-guest-interaction.md → co-guest-interaction.md} +3 -3
  179. package/resource/knowledge/livekit/core-sdk/voice/android/{voice-host-interaction.md → host-interaction.md} +2 -4
  180. package/resource/knowledge/livekit/core-sdk/voice/android/{voice-integration.md → integration.md} +11 -14
  181. package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-co-guest-interaction.md → co-guest-interaction.md} +0 -1
  182. package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-integration.md → integration.md} +1 -4
  183. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-co-guest-interaction.md → co-guest-interaction.md} +3 -3
  184. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-host-interaction.md → host-interaction.md} +2 -4
  185. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-integration.md → integration.md} +7 -10
  186. package/resource/knowledge/livekit/core-sdk/voice/uni-app/{voice-co-guest-interaction.md → co-guest-interaction.md} +6 -6
  187. package/resource/knowledge/livekit/core-sdk/voice/uni-app/{voice-integration.md → integration.md} +6 -7
  188. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +2 -3
  189. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +1 -1
  190. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +1 -1
  191. package/resource/knowledge/push/api-reference/android.md +337 -0
  192. package/resource/knowledge/push/api-reference/donut.md +190 -0
  193. package/resource/knowledge/push/api-reference/flutter.md +176 -0
  194. package/resource/knowledge/push/api-reference/harmonyos.md +140 -0
  195. package/resource/knowledge/push/api-reference/ios.md +537 -0
  196. package/resource/knowledge/push/api-reference/react-native.md +154 -0
  197. package/resource/knowledge/push/api-reference/uni-app.md +148 -0
  198. package/resource/knowledge/push/api-reference/unity.md +119 -0
  199. package/resource/knowledge/push/api-reference/unreal-engine.md +123 -0
  200. package/resource/knowledge/push/config/android/fcm.md +1 -8
  201. package/resource/knowledge/push/config/android/honor.md +3 -7
  202. package/resource/knowledge/push/config/android/huawei.md +0 -5
  203. package/resource/knowledge/push/config/android/meizu.md +0 -5
  204. package/resource/knowledge/push/config/android/oppo.md +0 -4
  205. package/resource/knowledge/push/config/android/vivo.md +0 -4
  206. package/resource/knowledge/push/config/android/xiaomi.md +0 -2
  207. package/resource/knowledge/push/config/donut.md +33 -46
  208. package/resource/knowledge/push/config/harmonyos.md +6 -9
  209. package/resource/knowledge/push/config/ios.md +2 -9
  210. package/resource/knowledge/push/config/react-native.md +17 -25
  211. package/resource/knowledge/push/config/unity.md +16 -24
  212. package/resource/knowledge/push/config/unreal-engine.md +16 -24
  213. package/resource/knowledge/push/integration/android.md +21 -21
  214. package/resource/knowledge/push/integration/donut.md +24 -34
  215. package/resource/knowledge/push/integration/flutter.md +12 -1
  216. package/resource/knowledge/push/integration/harmonyos.md +2 -1
  217. package/resource/knowledge/push/integration/ios.md +16 -10
  218. package/resource/knowledge/push/integration/react-native.md +10 -14
  219. package/resource/knowledge/push/integration/uni-app.md +10 -6
  220. package/resource/knowledge/push/integration/unity.md +19 -22
  221. package/resource/knowledge/push/integration/unreal-engine.md +7 -9
  222. package/resource/knowledge/push/overview/prepare.md +2 -2
  223. package/resource/knowledge/roomkit/core-sdk/android/capability-matrix.md +46 -0
  224. package/resource/knowledge/roomkit/core-sdk/android/unsupported-features.md +82 -0
  225. package/resource/knowledge/roomkit/core-sdk/flutter/capability-matrix.md +46 -0
  226. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +1 -1
  227. package/resource/knowledge/roomkit/core-sdk/flutter/unsupported-features.md +82 -0
  228. package/resource/knowledge/roomkit/core-sdk/ios/capability-matrix.md +46 -0
  229. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +1 -1
  230. package/resource/knowledge/roomkit/core-sdk/ios/unsupported-features.md +82 -0
  231. package/resource/knowledge/roomkit/core-sdk/vue/call-user-to-room.md +1 -1
  232. package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +0 -4
  233. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +2 -5
  234. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
  235. package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +0 -2
  236. package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +2 -6
  237. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -1
  238. package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +1 -1
  239. package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +2 -4
  240. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +2 -3
  241. package/resource/knowledge/roomkit/preset/android/integration.md +14 -16
  242. package/resource/knowledge/roomkit/preset/flutter/integration.md +9 -17
  243. package/resource/knowledge/roomkit/preset/ios/integration.md +9 -17
  244. package/resource/knowledge/roomkit/preset/react/integration.md +0 -4
  245. package/resource/knowledge/trtc/android/TRTCCloud.md +97 -180
  246. package/resource/knowledge/trtc/android/TRTCCloudDef.md +20 -20
  247. package/resource/knowledge/trtc/android/TRTCCloudListener.md +43 -77
  248. package/resource/knowledge/trtc/android/TRTCStatistics.md +1 -1
  249. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +4 -24
  250. package/resource/knowledge/trtc/android/TXDeviceManager.md +2 -2
  251. package/resource/knowledge/trtc/android/TXLiteAVCode.md +1 -1
  252. package/resource/knowledge/trtc/c++/ITRTCCloud.md +96 -189
  253. package/resource/knowledge/trtc/c++/ITRTCStatistics.md +1 -1
  254. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +1 -21
  255. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +4 -6
  256. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +42 -76
  257. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +18 -19
  258. package/resource/knowledge/trtc/c++/TXLiteAVCode.md +1 -1
  259. package/resource/knowledge/trtc/ios/TRTCCloud.md +95 -181
  260. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +43 -78
  261. package/resource/knowledge/trtc/ios/TRTCStatistics.md +1 -1
  262. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +1 -20
  263. package/resource/knowledge/trtc/ios/TXDeviceManager.md +4 -6
  264. package/resource/knowledge/trtc/ios/TXLiteAVCode.md +1 -1
  265. package/resource/knowledge/trtc/ios/TXLiveSDKTypeDef.md +20 -20
  266. package/server.js +2 -2
  267. package/tools/common/finalize_answer.js +1 -1
  268. package/tools/common/present_framework_choice.js +2 -2
  269. package/tools/common/search_trtc_knowledge.js +3 -3
  270. package/tools/common/submit_feedback.js +1 -1
  271. package/tools/definitions/get_native_live_uikit_integration_def.js +60 -0
  272. package/tools/definitions/get_native_livekit_core_integration_def.js +1 -1
  273. package/tools/definitions/present_framework_choice_def.js +2 -2
  274. package/tools/definitions/search_trtc_knowledge_def.js +5 -5
  275. package/tools/index.js +2 -0
  276. package/tools/live/get_native_live_uikit_integration.js +69 -0
  277. package/tools/live/get_native_livekit_core_integration.js +6 -6
  278. package/utils/report-cls-client.js +1 -1
  279. package/utils/report-es-client.js +1 -1
  280. package/resource/index/component-slugs.json +0 -1
  281. package/resource/index/doc-source-urls.json +0 -1
  282. package/resource/index/manifest.json +0 -1
  283. package/resource/knowledge/livekit/core-sdk/live/android/live-audio-effect.md +0 -229
  284. package/resource/knowledge/livekit/core-sdk/live/android/live-gift.md +0 -459
  285. package/resource/knowledge/livekit/core-sdk/live/flutter/live-barrage.md +0 -506
  286. package/resource/knowledge/livekit/core-sdk/live/flutter/live-gift.md +0 -427
  287. package/resource/knowledge/livekit/core-sdk/live/flutter/live-live-list.md +0 -726
  288. package/resource/knowledge/livekit/core-sdk/live/ios/live-audience-list.md +0 -265
  289. package/resource/knowledge/livekit/core-sdk/live/ios/live-audio-effect.md +0 -214
  290. package/resource/knowledge/livekit/core-sdk/live/ios/live-barrage.md +0 -427
  291. package/resource/knowledge/livekit/core-sdk/voice/android/voice-audience-list.md +0 -272
  292. package/resource/knowledge/livekit/core-sdk/voice/android/voice-barrage.md +0 -486
  293. package/resource/knowledge/livekit/core-sdk/voice/android/voice-room-list.md +0 -523
  294. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +0 -262
  295. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +0 -600
  296. package/resource/knowledge/livekit/core-sdk/voice/ios/voice-gift.md +0 -411
  297. package/resource/knowledge/livekit/core-sdk/voice/ios/voice-room-list.md +0 -404
  298. /package/resource/knowledge/livekit/core-sdk/api-reference/{web → vue}/index.md +0 -0
  299. /package/resource/knowledge/livekit/core-sdk/{live/android/live-audience-list.md → features/android/audience-list.md} +0 -0
  300. /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audience-list.md → features/flutter/audience-list.md} +0 -0
  301. /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-base-beauty.md → features/flutter/base-beauty.md} +0 -0
  302. /package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-audience-list.md → features/uni-app/audience-list.md} +0 -0
  303. /package/resource/knowledge/livekit/core-sdk/live/flutter/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -0
@@ -94,15 +94,76 @@ function loadFeatureAliases() {
94
94
  }
95
95
  return result;
96
96
  }
97
+ /**
98
+ * 将 prompt 按分隔符拆成子句列表,用于 url 行匹配。
99
+ * 分隔符:、 , , ; ; 空格
100
+ * 保留每个子句的原文(去首尾空白),不引入新词。
101
+ */
102
+ function splitPromptIntoClauses(prompt) {
103
+ const raw = prompt
104
+ .replace(/rest\s*api|服务端|server\s*api|api|怎么|如何|什么|用哪个|查询/g, '')
105
+ .replace(/\s+/g, ' ')
106
+ .trim();
107
+ const parts = raw.split(/[、,,;;、\s]+/).filter((p) => p.length >= 2);
108
+ return parts.length > 0 ? parts : [raw];
109
+ }
110
+ const ROOM_CORE_SIGNAL = /atomicx\s*core|atomicxcore|atomicx|core\s*sdk|无\s*ui|自定义\s*ui|自实现|roomstore|store|useRoomState|useDeviceState|useLoginState/i;
111
+ const ROOM_PRESET_SIGNAL = /预制|preset|roommainview|roommainwidget|默认\s*ui|主页面|房间主页面/i;
112
+ const ROOM_FEATURE_SPECS = [
113
+ {
114
+ fileName: 'room-chat.md',
115
+ titlePattern: /room\s*chat|in-room\s*im\s*chat|会中聊天|聊天能力|IM\s*聊天/i,
116
+ promptPattern: /room\s*chat|会中聊天|in[- ]room\s*(im\s*)?chat|im\s*聊天|messagelist|messageinput|messagestore|聊天面板|房间聊天/i,
117
+ },
118
+ {
119
+ fileName: 'screen-share.md',
120
+ titlePattern: /screen\s*share|屏幕分享/i,
121
+ promptPattern: /screen\s*share|屏幕分享|共享屏幕|startScreenShare/i,
122
+ },
123
+ {
124
+ fileName: 'virtual-background.md',
125
+ titlePattern: /virtual\s*background|虚拟背景/i,
126
+ promptPattern: /virtual\s*background|虚拟背景|背景虚化|背景替换|initVirtualBackground/i,
127
+ },
128
+ {
129
+ fileName: 'room-view.md',
130
+ titlePattern: /roomview|room\s*view|房间主视图|视频布局/i,
131
+ promptPattern: /roomview|room\s*view|房间主视图|视频布局|画面布局|layoutTemplate/i,
132
+ },
133
+ {
134
+ fileName: 'device-detection.md',
135
+ titlePattern: /device\s*detection|设备检测|设备预览/i,
136
+ promptPattern: /device\s*detection|设备检测|设备预览|startCameraTest|startMicrophoneTest|startSpeakerTest/i,
137
+ },
138
+ {
139
+ fileName: 'device-state.md',
140
+ titlePattern: /device\s*state|设备状态|设备管理/i,
141
+ promptPattern: /device\s*state|设备状态|设备管理|摄像头|麦克风|扬声器|switchMirror|setCurrentCamera|networkInfo/i,
142
+ },
143
+ {
144
+ fileName: 'free-beauty-panel.md',
145
+ titlePattern: /free\s*beauty|美颜面板|基础美颜/i,
146
+ promptPattern: /free\s*beauty|美颜面板|基础美颜|beauty/i,
147
+ },
148
+ ];
149
+ function detectRoomFeatureHits(prompt) {
150
+ return ROOM_FEATURE_SPECS.filter((spec) => spec.promptPattern.test(prompt));
151
+ }
152
+ const LIVE_LIFECYCLE_PROMPT = /开播|创建直播|结束直播|停播|观看直播|退出直播|进房|离房|createLive|endLive|joinLive|leaveLive|host_streaming|audience_streaming/i;
153
+ const LIVE_LIFECYCLE_APIS = ['createLive', 'endLive', 'joinLive', 'leaveLive'];
97
154
  export function runExactLookup(prompt, pool, norm) {
98
155
  const boosts = {};
99
156
  const exactHits = [];
157
+ const urlRowHitChunkIds = new Set();
100
158
  const lowerPrompt = prompt.toLowerCase();
101
159
  const addBoost = (chunk, amount, label) => {
102
160
  boosts[chunk.id] = (boosts[chunk.id] ?? 0) + amount;
103
161
  if (!exactHits.includes(label))
104
162
  exactHits.push(label);
105
163
  };
164
+ const addPenalty = (chunk, amount) => {
165
+ boosts[chunk.id] = (boosts[chunk.id] ?? 0) - Math.abs(amount);
166
+ };
106
167
  // E1: error codes
107
168
  const errorMatches = [
108
169
  ...prompt.matchAll(/\b(\d{5,7})\b/g),
@@ -256,57 +317,79 @@ export function runExactLookup(prompt, pool, norm) {
256
317
  }
257
318
  }
258
319
  }
259
- // E7: URL 映射表行级匹配(chunk.title = 子问题列;仅 boost 最佳行)
260
- const queryNorm = prompt
261
- .toLowerCase()
262
- .replace(/rest\s*api|服务端|server\s*api|api|怎么|如何|什么|用哪个|查询/g, '')
263
- .replace(/\s+/g, '');
264
- if (queryNorm.length >= 2) {
265
- const candidates = [];
266
- for (const chunk of pool) {
267
- if (!chunk.source.includes('knowledge/chat/urls/'))
268
- continue;
269
- const titleNorm = chunk.title.toLowerCase().replace(/\s+/g, '');
270
- if (!titleNorm)
320
+ // E7: URL 映射表行级匹配(chunk.title = 子问题列)
321
+ // 策略:保留整句匹配,同时补充子句拆分 + 逐行匹配,同一 chunk 取最高分。
322
+ // 子句拆分使 "创建群组、加入群组、发送群组自定义消息" 能命中多行。
323
+ const clauses = splitPromptIntoClauses(prompt.toLowerCase());
324
+ const candidates = [];
325
+ for (const chunk of pool) {
326
+ if (!chunk.source.includes('knowledge/chat/urls/'))
327
+ continue;
328
+ const titleNorm = chunk.title.toLowerCase().replace(/\s+/g, '');
329
+ if (!titleNorm)
330
+ continue;
331
+ // 对每个子句和整句分别打分,取最高分
332
+ let bestScore = 0;
333
+ const allParts = [...clauses, prompt.toLowerCase().replace(/\s+/g, '')];
334
+ // 也按常见分隔符拆分 title 得到 tokens,用于不连续匹配
335
+ const titleTokens = titleNorm.split(/[\/(((、,,\s]+/).filter(Boolean);
336
+ const seen = new Set();
337
+ for (const part of allParts) {
338
+ const pn = part.replace(/\s+/g, '');
339
+ if (pn.length < 2 || seen.has(pn))
271
340
  continue;
272
- let score = 0;
273
- if (queryNorm === titleNorm) {
274
- score = 1000;
275
- }
276
- else if (titleNorm.includes(queryNorm)) {
277
- const trailing = titleNorm.slice(titleNorm.indexOf(queryNorm) + queryNorm.length);
278
- score = 800 - trailing.length * 80;
341
+ seen.add(pn);
342
+ let s = 0;
343
+ if (pn === titleNorm) {
344
+ s = 1000;
279
345
  }
280
- else if (queryNorm.includes(titleNorm)) {
281
- score = 700 + titleNorm.length;
346
+ else if (titleNorm.includes(pn)) {
347
+ const trailing = titleNorm.slice(titleNorm.indexOf(pn) + pn.length);
348
+ s = 800 - trailing.length * 80;
282
349
  }
283
- else {
284
- const queryLoose = queryNorm.replace(/发送/g, '发');
285
- if (queryLoose.length >= 3 && titleNorm.includes(queryLoose)) {
286
- score = 500;
287
- if (/批量|群组|群流|广播|导入|公众号|已读|回执/.test(titleNorm)
288
- && !/批量|群组|群|已读|回执/.test(queryNorm)) {
289
- score -= 250;
290
- }
291
- if (/^单发/.test(titleNorm) && /发送|单聊/.test(queryNorm)) {
292
- score += 120;
293
- }
294
- }
350
+ else if (pn.includes(titleNorm)) {
351
+ s = 700 + titleNorm.length;
295
352
  }
296
- if (score > 0) {
297
- candidates.push({ chunk, score });
353
+ else if (titleTokens.some((token) => pn.includes(token) || token.includes(pn))) {
354
+ // 子句匹配 title 的 token(如 "创建群组" 匹配 "创建/解散群组(普通群管理)" 中的 "创建" token)
355
+ s = 600;
298
356
  }
357
+ if (s > bestScore)
358
+ bestScore = s;
299
359
  }
300
- candidates.sort((a, b) => b.score - a.score);
301
- const top = candidates[0];
302
- if (top) {
303
- addBoost(top.chunk, 200 + Math.min(top.score, 100), `E7:url-row:${top.chunk.title}`);
304
- const runnerUp = candidates[1];
305
- if (runnerUp && top.score - runnerUp.score <= 20) {
306
- addBoost(runnerUp.chunk, 150 + Math.min(runnerUp.score, 80), `E7:url-row:${runnerUp.chunk.title}`);
360
+ if (bestScore <= 0) {
361
+ // 退化:子句无匹配时,试 loose(去噪声字 + 单字容错)
362
+ const qn = clauses[0].replace(/发送/g, '发');
363
+ if (qn.length >= 3 && titleNorm.includes(qn)) {
364
+ bestScore = 500;
365
+ if (/批量|群组|群流|广播|导入|公众号|已读|回执/.test(titleNorm)
366
+ && !/批量|群组|群|已读|回执/.test(clauses[0])) {
367
+ bestScore -= 250;
368
+ }
369
+ if (/^单发/.test(titleNorm) && /发送|单聊/.test(clauses[0])) {
370
+ bestScore += 120;
371
+ }
307
372
  }
308
373
  }
374
+ if (bestScore > 0) {
375
+ candidates.push({ chunk, score: bestScore });
376
+ }
309
377
  }
378
+ candidates.sort((a, b) => b.score - a.score);
379
+ const strongCandidates = candidates
380
+ .filter(({ score }) => score >= 500)
381
+ .slice(0, 12);
382
+ strongCandidates.forEach(({ chunk, score }, idx) => {
383
+ // 递减 boost:前两条更高,其余保持可召回但不过度压制 BM25
384
+ // token 匹配(600 分)至少给 150,确保子句拆分的行不被 BM25 原始分压掉
385
+ const amount = idx === 0
386
+ ? 200 + Math.min(score, 100)
387
+ : idx === 1
388
+ ? 170 + Math.min(score, 90)
389
+ : Math.max(score >= 600 ? 150 : 90, 140 - idx * 8);
390
+ addBoost(chunk, amount, `E7:url-row:${chunk.title}`);
391
+ urlRowHitChunkIds.add(chunk.id);
392
+ });
310
393
  }
311
394
  // E8: 集成查阅意图 boost——prompt 含集成/接入/快速开始/接入文档等意图词时,
312
395
  // 把 {integration|knowledge}/{product}/preset/{fw}/integration.md 系列文件顶到前列。
@@ -326,5 +409,124 @@ export function runExactLookup(prompt, pool, norm) {
326
409
  addBoost(chunk, 120, `E8:integration-doc:${chunk.source}`);
327
410
  }
328
411
  }
329
- return { boosts, exactHits };
412
+ // E9: chat faq——types=faq 时优先 knowledge 语料,避免 integration 文档内 FAQ 章节抢首位
413
+ if (norm.searchIntent?.includes('faq') && norm.product?.includes('chat')) {
414
+ const authPrompt = /auth|login|signature|usersig|鉴权|登录/i.test(prompt);
415
+ for (const chunk of pool) {
416
+ if (chunk.source.startsWith('knowledge/chat/')) {
417
+ const urlBoost = authPrompt && chunk.source.includes('/urls/') ? 180 : 100;
418
+ addBoost(chunk, urlBoost, 'E9:chat-faq:knowledge');
419
+ }
420
+ if (chunk.source.startsWith('integration/chat/')) {
421
+ addBoost(chunk, -120, 'E9:chat-faq:penalize-integration');
422
+ }
423
+ }
424
+ }
425
+ // E11: LiveKit 生命周期意图强召回(开播/停播/观看/退出)
426
+ if (norm.product?.includes('live') && LIVE_LIFECYCLE_PROMPT.test(prompt)) {
427
+ const queryApiHits = LIVE_LIFECYCLE_APIS.filter((api) => new RegExp(api, 'i').test(prompt));
428
+ for (const chunk of pool) {
429
+ const isLiveCoreIntegration = chunk.source.startsWith('knowledge/livekit/core-sdk/live/')
430
+ && chunk.source.endsWith('/integration.md');
431
+ const isVoiceCoreIntegration = chunk.source.startsWith('knowledge/livekit/core-sdk/voice/')
432
+ && chunk.source.endsWith('/integration.md');
433
+ if (!isLiveCoreIntegration && !isVoiceCoreIntegration)
434
+ continue;
435
+ if (norm.scenario === 'live' && !isLiveCoreIntegration)
436
+ continue;
437
+ if (norm.scenario === 'voice' && !isVoiceCoreIntegration)
438
+ continue;
439
+ addBoost(chunk, 140, 'E11:live-lifecycle-core-integration');
440
+ for (const api of queryApiHits) {
441
+ if (chunk.api_names?.some((name) => name.toLowerCase() === api.toLowerCase())) {
442
+ addBoost(chunk, 160, `E11:live-lifecycle-api:${api}`);
443
+ }
444
+ }
445
+ }
446
+ }
447
+ // E10: roomkit Core/Preset 消歧 + unsupported feature 强召回
448
+ if (norm.product?.includes('room') && norm.frameworks?.length) {
449
+ const platform = norm.frameworks.find((fw) => ['android', 'ios', 'flutter', 'vue'].includes(fw));
450
+ const featureHits = detectRoomFeatureHits(prompt);
451
+ const coreIntent = ROOM_CORE_SIGNAL.test(prompt) || !ROOM_PRESET_SIGNAL.test(prompt);
452
+ const presetIntent = ROOM_PRESET_SIGNAL.test(prompt) && !ROOM_CORE_SIGNAL.test(prompt);
453
+ if (platform) {
454
+ const coreScope = `room:core-sdk:${platform}`;
455
+ const presetScope = `room:preset:${platform}`;
456
+ for (const chunk of pool) {
457
+ if (chunk.product !== 'room')
458
+ continue;
459
+ if (chunk.scope === coreScope) {
460
+ addBoost(chunk, 40, `E10:room-core-scope:${platform}`);
461
+ if (platform !== 'vue' && chunk.doc_kind === 'capability_matrix') {
462
+ addBoost(chunk, 120, `E10:room-matrix:${platform}`);
463
+ }
464
+ }
465
+ if (coreIntent && chunk.scope === presetScope) {
466
+ addPenalty(chunk, 120);
467
+ }
468
+ if (presetIntent && chunk.scope === coreScope && chunk.capability_status === 'unsupported') {
469
+ addPenalty(chunk, 180);
470
+ }
471
+ }
472
+ for (const feature of featureHits) {
473
+ for (const chunk of pool) {
474
+ if (chunk.product !== 'room')
475
+ continue;
476
+ if (platform === 'vue' && chunk.scope === coreScope && chunk.source.endsWith(feature.fileName)) {
477
+ addBoost(chunk, 220, `E10:room-vue-feature:${feature.fileName}`);
478
+ }
479
+ if (platform !== 'vue' && chunk.scope === coreScope) {
480
+ if (chunk.source.endsWith('unsupported-features.md') && feature.titlePattern.test(chunk.title)) {
481
+ addBoost(chunk, 280, `E10:room-unsupported:${platform}:${feature.fileName}`);
482
+ }
483
+ if (chunk.doc_kind === 'capability_matrix') {
484
+ addBoost(chunk, 120, `E10:room-matrix:${platform}:${feature.fileName}`);
485
+ }
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+ // E12: CallKit Vue 混合类型问题消歧(状态机 STATUS 与 Core Store 类型分层召回)
492
+ if (norm.product?.includes('call')) {
493
+ const isStatusIntent = /statuschanged|\bstatus\b|callmediatype|媒体类型|通话状态|状态回调/i.test(prompt);
494
+ const isStoreIntent = /callstatus|callrole|iuserinfo|storename\.?call|store|name\s*常量|枚举值|字段定义/i.test(prompt);
495
+ const isEngineInvitationIntent = /tuicallengine|on_call_received|call\s*invitation|incoming\s*call|accept\(|reject\(|inviteid|userData|邀请|来电|接听|拒接|信令/i.test(prompt);
496
+ const isCallkitDiffIntent = /\bcall\s*vs\s*calls\b|\bcalls?\b|groupcall|tuicallkitapi\.calls|tuicallkitserver\.call|tuicallkitserver\.groupcall|\bv4(\.x)?\b|useridlist|chatgroupid|发起(单人|多人)?通话|呼叫|拨打/i.test(prompt);
497
+ const isLogIntent = /setloglevel|log\s*level|disable\s*log|console\s*log|日志级别|关闭\s*log/i.test(prompt);
498
+ for (const chunk of pool) {
499
+ if (chunk.product !== 'call')
500
+ continue;
501
+ const source = chunk.source.toLowerCase();
502
+ if (isStatusIntent && source.includes('knowledge/callkit/preset/vue/uikit-api-reference.md')) {
503
+ addBoost(chunk, 180, 'E12:callkit-vue-status');
504
+ }
505
+ if (isStoreIntent && source.includes('knowledge/callkit/core-sdk/web/')) {
506
+ addBoost(chunk, 220, 'E12:callkit-core-store');
507
+ }
508
+ if (isStoreIntent && source.includes('knowledge/callkit/preset/vue/')) {
509
+ addPenalty(chunk, 80);
510
+ }
511
+ if (isEngineInvitationIntent && source.includes('knowledge/callkit/best-practice/web/callengine-invitation.md')) {
512
+ addBoost(chunk, 300, 'E13A:callengine-invitation');
513
+ }
514
+ if (isEngineInvitationIntent && source.includes('knowledge/callkit/best-practice/web/callkit-call-vs-calls.md')) {
515
+ addPenalty(chunk, 80);
516
+ }
517
+ if (isCallkitDiffIntent && source.includes('knowledge/callkit/best-practice/web/callkit-call-vs-calls.md')) {
518
+ addBoost(chunk, 300, 'E13B:callkit-call-vs-calls');
519
+ }
520
+ if (isCallkitDiffIntent && source.includes('knowledge/callkit/best-practice/web/callengine-invitation.md')) {
521
+ addPenalty(chunk, 80);
522
+ }
523
+ if (isCallkitDiffIntent && source.includes('knowledge/callkit/preset/vue/uikit-api-reference.md')) {
524
+ addPenalty(chunk, 40);
525
+ }
526
+ if (isLogIntent && source.includes('knowledge/callkit/best-practice/web/callengine-log-control.md')) {
527
+ addBoost(chunk, 260, 'E13:callengine-log-control');
528
+ }
529
+ }
530
+ }
531
+ return { boosts, exactHits, urlRowHitChunkIds: [...urlRowHitChunkIds] };
330
532
  }
@@ -3,15 +3,18 @@ import { downgradeToProductType } from './product-scope-intent.js';
3
3
  * MCP framework enum → index 中对应的 framework 值列表。
4
4
  * path-meta.ts 已通过 normalizeFrameworkDir 把目录名归一到标准 framework,
5
5
  * 所有产品的 framework 均已对齐枚举值,无需额外别名扩展。
6
- * web 匹配 react/vue/web(Chat/Call/Live Web 端覆盖)。
7
6
  */
8
7
  const FRAMEWORK_SEARCH_ALIASES = {};
9
- function expandFrameworks(framework) {
10
- if (!framework)
8
+ function expandFrameworks(frameworks, _products) {
9
+ if (!frameworks?.length)
11
10
  return undefined;
12
- if (framework === 'web')
13
- return ['react', 'vue', 'web'];
14
- return FRAMEWORK_SEARCH_ALIASES[framework] ?? [framework];
11
+ const expanded = new Set();
12
+ for (const framework of frameworks) {
13
+ for (const alias of FRAMEWORK_SEARCH_ALIASES[framework] ?? [framework]) {
14
+ expanded.add(alias);
15
+ }
16
+ }
17
+ return [...expanded];
15
18
  }
16
19
  /**
17
20
  * 类型别名:UIKit「组件(component)」与「feature」是同一批文档的两种叫法
@@ -21,6 +24,7 @@ const TYPE_ALIASES = {
21
24
  component: ['component', 'feature'],
22
25
  feature: ['feature', 'component'],
23
26
  };
27
+ const LIVE_LIFECYCLE_PROMPT = /开播|创建直播|结束直播|停播|观看直播|退出直播|进房|离房|createLive|endLive|joinLive|leaveLive|host_streaming|audience_streaming/i;
24
28
  function expandTypeAliases(types) {
25
29
  const expanded = new Set();
26
30
  for (const t of types) {
@@ -29,29 +33,50 @@ function expandTypeAliases(types) {
29
33
  }
30
34
  return [...expanded];
31
35
  }
32
- /** Chat 无独立 faq.md;types 含 faq 时退化到全语料检索(feature/component/urls 等均命中) */
33
- function resolveTypes(products, types, prompt, framework) {
36
+ /**
37
+ * Chat FAQ 现已迁移到 best-practice 语料,types=faq 时应保留 faq 过滤,避免退化到全语料噪声。
38
+ */
39
+ function resolveTypes(products, types, prompt, frameworks) {
34
40
  if (!types?.length)
35
41
  return undefined;
36
- if (products?.includes('chat') && types.includes('faq')) {
37
- return undefined;
42
+ const downgraded = downgradeToProductType(products, types, prompt, frameworks);
43
+ const expanded = expandTypeAliases(downgraded);
44
+ // Live 生命周期兼容:用户常传 types=['api'],但核心生命周期方法来自 core-sdk/live|voice/*/integration.md。
45
+ // 这里补充 core/integration,避免被类型硬过滤提前排除。
46
+ if (products?.includes('live') && expanded.includes('api') && LIVE_LIFECYCLE_PROMPT.test(prompt)) {
47
+ if (!expanded.includes('core'))
48
+ expanded.push('core');
49
+ if (!expanded.includes('integration'))
50
+ expanded.push('integration');
38
51
  }
39
- const downgraded = downgradeToProductType(products, types, prompt, framework);
40
- return expandTypeAliases(downgraded);
52
+ return expanded;
41
53
  }
42
54
  /** 单平台产品的隐式 framework 推断:避免对显然唯一的平台再发起询问 */
43
- function inferImplicitFramework(products, framework) {
44
- if (framework)
45
- return framework;
55
+ function inferImplicitFramework(products, frameworks, prompt) {
56
+ if (frameworks?.length)
57
+ return frameworks[0];
46
58
  if (products?.length === 1 && products[0] === 'rtcengine')
47
59
  return 'web';
60
+ if (products?.includes('call')) {
61
+ if (/小程序|miniprogram/i.test(prompt))
62
+ return 'miniprogram';
63
+ if (/\breact\b/i.test(prompt))
64
+ return 'react';
65
+ if (/\bvue\b/i.test(prompt))
66
+ return 'vue';
67
+ if (/\b(web|h5|pc)\b|Web&H5/i.test(prompt))
68
+ return 'web';
69
+ }
48
70
  return undefined;
49
71
  }
50
72
  export function normalizeParams(params) {
51
73
  const limit = Math.min(Math.max(params.limit ?? 8, 1), 16);
52
- const effectiveFramework = inferImplicitFramework(params.product, params.framework);
53
- const frameworks = expandFrameworks(effectiveFramework);
54
- const types = resolveTypes(params.product, params.types, params.prompt, effectiveFramework);
74
+ const effectiveFramework = inferImplicitFramework(params.product, params.frameworks, params.prompt);
75
+ const requestedFrameworks = params.frameworks?.length
76
+ ? params.frameworks
77
+ : effectiveFramework ? [effectiveFramework] : undefined;
78
+ const frameworks = expandFrameworks(requestedFrameworks, params.product);
79
+ const types = resolveTypes(params.product, params.types, params.prompt, requestedFrameworks);
55
80
  return {
56
81
  prompt: params.prompt,
57
82
  product: params.product,
@@ -79,18 +104,47 @@ const CROSS_PLATFORM_CHUNK_TYPES = new Set([
79
104
  function chunkIsCrossPlatform(chunkTypes) {
80
105
  return chunkTypes.some((t) => CROSS_PLATFORM_CHUNK_TYPES.has(t));
81
106
  }
107
+ function normalizeScopeToken(input) {
108
+ return input.toLowerCase().replace(/[\s_\-]+/g, '');
109
+ }
110
+ function promptMatchesRetrievableScope(prompt, scope) {
111
+ if (!scope)
112
+ return true;
113
+ if (scope === 'always')
114
+ return true;
115
+ if (!scope.length)
116
+ return true;
117
+ const normalizedPrompt = normalizeScopeToken(prompt);
118
+ return scope.some((token) => normalizedPrompt.includes(normalizeScopeToken(token)));
119
+ }
82
120
  export function filterPool(chunks, norm) {
83
121
  return chunks.filter((chunk) => {
84
122
  if (norm.product && !norm.product.includes(chunk.product) && chunk.product !== '*') {
85
123
  return false;
86
124
  }
125
+ // A1: 通配语料(share 等)必须命中 retrievable_scope 才能进入检索池
126
+ if (chunk.product === '*' && !promptMatchesRetrievableScope(norm.prompt, chunk.retrievable_scope)) {
127
+ return false;
128
+ }
87
129
  if (norm.frameworks?.length) {
88
130
  const isWildcardChunk = chunk.framework.includes('*');
89
131
  // 收紧:framework=['*'] 仅在该 chunk 明确是跨平台 type(product/server_api/webhook)时放行;
90
132
  // 否则要求 chunk.framework 与请求 framework 有交集。
91
133
  const wildcardAllowed = isWildcardChunk && chunkIsCrossPlatform(chunk.types);
92
134
  const explicitMatch = norm.frameworks.some((fw) => chunk.framework.includes(fw));
93
- if (!explicitMatch && !wildcardAllowed)
135
+ // CallKit 特例:core-sdk 仍维持 web 单套(纯 JS),允许 react/vue 查询命中 core-sdk/web。
136
+ const callCoreWebFallback = Boolean(norm.product?.includes('call')
137
+ && (norm.framework === 'react' || norm.framework === 'vue')
138
+ && chunk.variant === 'core-sdk'
139
+ && chunk.framework.includes('web'));
140
+ // Live 特例:写写侧把 'Web' 平台归到 livekit/core-sdk/api-reference/{vue,web} 目录(写写节点名是 'Web'),
141
+ // 本地目录重命名为 'vue' 后 framework 标签变为 'vue'。'web' 查询仍应能命中这些 chunk。
142
+ const liveWebVueFallback = Boolean(norm.product?.includes('live')
143
+ && norm.framework === 'web'
144
+ && chunk.variant === 'core-sdk'
145
+ && chunk.framework.includes('vue')
146
+ && chunk.source.includes('/api-reference/'));
147
+ if (!explicitMatch && !wildcardAllowed && !callCoreWebFallback && !liveWebVueFallback)
94
148
  return false;
95
149
  }
96
150
  if (norm.scenario && chunk.scenario && chunk.scenario !== norm.scenario) {
@@ -24,8 +24,8 @@ export function isProductScopePrompt(prompt) {
24
24
  * rewrite the type to `product` so filterPool can hit chat/urls/product.md.
25
25
  * If a framework is present, the Agent genuinely wants a client feature — do not downgrade.
26
26
  */
27
- export function downgradeToProductType(products, types, prompt, framework) {
28
- if (framework)
27
+ export function downgradeToProductType(products, types, prompt, frameworks) {
28
+ if (frameworks?.length)
29
29
  return types;
30
30
  if (!types.includes('feature'))
31
31
  return types;
@@ -44,7 +44,7 @@ function isChatErrorCodeAmbiguous(norm) {
44
44
  }
45
45
  /** 未传 framework 时,是否应先 present_framework_choice 再检索 */
46
46
  export function requiresFramework(norm) {
47
- if (norm.framework)
47
+ if (norm.frameworks?.length)
48
48
  return false;
49
49
  // 硬规则:chat 错误码场景必须问平台(服务端 / Web / Native 三个 URL)
50
50
  if (isChatErrorCodeAmbiguous(norm))