@tencentcloud/sdk-mcp 1.7.7 → 1.7.9-beta.1

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 (224) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +7 -9
  3. package/index.js +8 -8
  4. package/knowledge/chunker.js +1 -0
  5. package/knowledge/doc-url-resolver.js +16 -9
  6. package/knowledge/embedding/build-vectors.js +92 -0
  7. package/knowledge/embedding/embed-model.js +41 -0
  8. package/knowledge/embedding/vector-augment.js +126 -0
  9. package/knowledge/embedding/vector-index.js +70 -0
  10. package/knowledge/frontmatter-meta.js +23 -0
  11. package/knowledge/path-meta.js +56 -0
  12. package/knowledge/search/exact-lookup.js +145 -16
  13. package/knowledge/search/filter-pool.js +77 -33
  14. package/knowledge/search/rank-profile.js +25 -0
  15. package/knowledge/search/requires-framework.js +4 -1
  16. package/knowledge/search/search-core.js +74 -13
  17. package/knowledge/search/search-knowledge.js +24 -34
  18. package/knowledge/search/search-pass.js +495 -169
  19. package/knowledge/search/url-row-scorer.js +24 -6
  20. package/package.json +3 -1
  21. package/resource/index/manifest.json +1 -1
  22. package/resource/index/vectors/index.json +4 -0
  23. package/resource/integration/callkit/preset/android/integration.md +0 -2
  24. package/resource/integration/callkit/preset/ios/integration.md +0 -2
  25. package/resource/integration/chat/preset/react/integration.md +9 -5
  26. package/resource/integration/chat/preset/uni-app/integration.md +4 -0
  27. package/resource/integration/chat/preset/vue/integration.md +10 -6
  28. package/resource/integration/livekit/preset/live/android/prepare-integration.md +0 -4
  29. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +0 -4
  30. package/resource/integration/roomkit/preset/vue/integration.md +154 -208
  31. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +0 -2
  32. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +0 -2
  33. package/resource/knowledge/callkit/core-sdk/android/make-call.md +0 -2
  34. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +0 -4
  35. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +0 -2
  36. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +0 -2
  37. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +0 -2
  38. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +0 -4
  39. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +0 -2
  40. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -2
  41. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -2
  42. package/resource/knowledge/callkit/faq/ios.md +0 -2
  43. package/resource/knowledge/callkit/faq/uniapp-app.md +0 -2
  44. package/resource/knowledge/callkit/preset/miniprogram/integration.md +2 -3
  45. package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +0 -2
  46. package/resource/knowledge/chat/preset/ios-uikit/integration.md +0 -16
  47. package/resource/knowledge/chat/preset/react/h5/integration.md +16 -5
  48. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +6 -3
  49. package/resource/knowledge/chat/preset/vue/h5/integration.md +7 -4
  50. package/resource/knowledge/iot/app/activate-service.md +95 -0
  51. package/resource/knowledge/iot/app/demo/android.md +93 -0
  52. package/resource/knowledge/iot/app/demo/ios.md +87 -0
  53. package/resource/knowledge/iot/app/demo/miniprogram.md +79 -0
  54. package/resource/knowledge/iot/app/device-binding.md +378 -0
  55. package/resource/knowledge/iot/app/device-sharing.md +414 -0
  56. package/resource/knowledge/iot/app/family-management.md +762 -0
  57. package/resource/knowledge/iot/app/integration/android.md +328 -0
  58. package/resource/knowledge/iot/app/integration/harmonyos.md +326 -0
  59. package/resource/knowledge/iot/app/integration/ios.md +351 -0
  60. package/resource/knowledge/iot/app/integration/miniprogram.md +268 -0
  61. package/resource/knowledge/iot/app/monitor-playback.md +557 -0
  62. package/resource/knowledge/iot/app/remote-control.md +139 -0
  63. package/resource/knowledge/iot/app/video-call.md +559 -0
  64. package/resource/knowledge/iot/app/wechat-call/device-call-miniprogram.md +204 -0
  65. package/resource/knowledge/iot/app/wechat-call/miniprogram-call-device.md +193 -0
  66. package/resource/knowledge/iot/client-api/app/android/txiotcallsession.md +189 -0
  67. package/resource/knowledge/iot/client-api/app/android/txiotcloudstorage.md +77 -0
  68. package/resource/knowledge/iot/client-api/app/android/txiotdevicemanager.md +175 -0
  69. package/resource/knowledge/iot/client-api/app/android/txiotengine.md +172 -0
  70. package/resource/knowledge/iot/client-api/app/android/txiotenginedef.md +163 -0
  71. package/resource/knowledge/iot/client-api/app/android/txiotfamilymanager.md +146 -0
  72. package/resource/knowledge/iot/client-api/app/android/txiotmonitorsession.md +246 -0
  73. package/resource/knowledge/iot/client-api/app/harmonyos/txiotcallsession.md +191 -0
  74. package/resource/knowledge/iot/client-api/app/harmonyos/txiotcloudstorage.md +77 -0
  75. package/resource/knowledge/iot/client-api/app/harmonyos/txiotdevicemanager.md +183 -0
  76. package/resource/knowledge/iot/client-api/app/harmonyos/txiotengine.md +186 -0
  77. package/resource/knowledge/iot/client-api/app/harmonyos/txiotenginedef.md +164 -0
  78. package/resource/knowledge/iot/client-api/app/harmonyos/txiotfamilymanager.md +150 -0
  79. package/resource/knowledge/iot/client-api/app/harmonyos/txiotmonitorsession.md +252 -0
  80. package/resource/knowledge/iot/client-api/app/ios/txiotcallsession.md +199 -0
  81. package/resource/knowledge/iot/client-api/app/ios/txiotcloudstorage.md +76 -0
  82. package/resource/knowledge/iot/client-api/app/ios/txiotdevicemanager.md +173 -0
  83. package/resource/knowledge/iot/client-api/app/ios/txiotengine.md +173 -0
  84. package/resource/knowledge/iot/client-api/app/ios/txiotenginedef.md +171 -0
  85. package/resource/knowledge/iot/client-api/app/ios/txiotfamilymanager.md +146 -0
  86. package/resource/knowledge/iot/client-api/app/ios/txiotmonitorsession.md +250 -0
  87. package/resource/knowledge/iot/client-api/app/miniprogram/txiotcallsession.md +180 -0
  88. package/resource/knowledge/iot/client-api/app/miniprogram/txiotcloudstorage.md +76 -0
  89. package/resource/knowledge/iot/client-api/app/miniprogram/txiotdevicemanager.md +281 -0
  90. package/resource/knowledge/iot/client-api/app/miniprogram/txiotengine.md +183 -0
  91. package/resource/knowledge/iot/client-api/app/miniprogram/txiotenginedef.md +152 -0
  92. package/resource/knowledge/iot/client-api/app/miniprogram/txiotfamilymanager.md +179 -0
  93. package/resource/knowledge/iot/client-api/app/miniprogram/txiotmonitorsession.md +226 -0
  94. package/resource/knowledge/iot/client-api/device/android-smart-device.md +813 -0
  95. package/resource/knowledge/iot/client-api/device/linux-rtos-device.md +2027 -0
  96. package/resource/knowledge/iot/device/activate-service.md +167 -0
  97. package/resource/knowledge/iot/device/ai-voice-chat/advanced-features/custom-agent.md +171 -0
  98. package/resource/knowledge/iot/device/ai-voice-chat/advanced-features/smart-device-control.md +721 -0
  99. package/resource/knowledge/iot/device/ai-voice-chat/integration-guide/android-smart-device.md +247 -0
  100. package/resource/knowledge/iot/device/ai-voice-chat/integration-guide/linux-rtos-device.md +368 -0
  101. package/resource/knowledge/iot/device/ai-voice-chat/overview.md +84 -0
  102. package/resource/knowledge/iot/device/cloud-storage.md +696 -0
  103. package/resource/knowledge/iot/device/data-model.md +972 -0
  104. package/resource/knowledge/iot/device/demo/android-smart-device.md +97 -0
  105. package/resource/knowledge/iot/device/demo/linux-rtos-device.md +106 -0
  106. package/resource/knowledge/iot/device/device-ota-upgrade.md +237 -0
  107. package/resource/knowledge/iot/device/dynamic-registration/android-smart-device.md +275 -0
  108. package/resource/knowledge/iot/device/dynamic-registration/linux-rtos-device.md +297 -0
  109. package/resource/knowledge/iot/device/login-and-register/android-smart-device.md +131 -0
  110. package/resource/knowledge/iot/device/login-and-register/linux-rtos-device.md +291 -0
  111. package/resource/knowledge/iot/device/monitor-pushing/android-smart-device.md +237 -0
  112. package/resource/knowledge/iot/device/monitor-pushing/linux-rtos-device.md +493 -0
  113. package/resource/knowledge/iot/device/video-call/android-smart-device.md +299 -0
  114. package/resource/knowledge/iot/device/video-call/linux-rtos-device.md +465 -0
  115. package/resource/knowledge/iot/device/wechat-call/android-smart-device.md +534 -0
  116. package/resource/knowledge/iot/device/wechat-call/linux-rtos-device.md +681 -0
  117. package/resource/knowledge/iot/kids-watch/overview.md +28 -0
  118. package/resource/knowledge/iot/security-camera/activate-service.md +74 -0
  119. package/resource/knowledge/iot/security-camera/monitor-playback/app-integration.md +302 -0
  120. package/resource/knowledge/iot/security-camera/monitor-playback/device-integration/android.md +237 -0
  121. package/resource/knowledge/iot/security-camera/monitor-playback/device-integration/linux-rtos.md +493 -0
  122. package/resource/knowledge/iot/security-camera/overview.md +31 -0
  123. package/resource/knowledge/iot/security-camera/ptz-control.md +153 -0
  124. package/resource/knowledge/iot/security-camera/recording-and-snapshot.md +182 -0
  125. package/resource/knowledge/iot/security-camera/voice-intercom.md +174 -0
  126. package/resource/knowledge/iot/smart-vision/serviceoverview.md +114 -0
  127. package/resource/knowledge/iot/voice-recorder/app-demo.md +99 -0
  128. package/resource/knowledge/iot/voice-recorder/device-demo.md +189 -0
  129. package/resource/knowledge/iot/voice-recorder/overview.md +64 -0
  130. package/resource/knowledge/livekit/core-sdk/features/android/base-beauty.md +0 -2
  131. package/resource/knowledge/livekit/core-sdk/features/android/gift.md +0 -4
  132. package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +0 -2
  133. package/resource/knowledge/livekit/core-sdk/features/flutter/audio-effect.md +0 -2
  134. package/resource/knowledge/livekit/core-sdk/features/flutter/base-beauty.md +0 -2
  135. package/resource/knowledge/livekit/core-sdk/features/flutter/gift.md +0 -4
  136. package/resource/knowledge/livekit/core-sdk/features/ios/base-beauty.md +0 -2
  137. package/resource/knowledge/livekit/core-sdk/features/ios/gift.md +0 -4
  138. package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +0 -2
  139. package/resource/knowledge/livekit/core-sdk/features/uni-app/base-beauty.md +0 -2
  140. package/resource/knowledge/livekit/core-sdk/features/uni-app/gift.md +0 -4
  141. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +0 -4
  142. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +0 -10
  143. package/resource/knowledge/livekit/core-sdk/live/android/integration.md +0 -2
  144. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +0 -2
  145. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +0 -10
  146. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +0 -2
  147. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +0 -4
  148. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +0 -10
  149. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +0 -2
  150. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +0 -4
  151. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +0 -4
  152. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +0 -2
  153. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +0 -2
  154. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +0 -4
  155. package/resource/knowledge/livekit/core-sdk/voice/android/integration.md +0 -4
  156. package/resource/knowledge/livekit/core-sdk/voice/flutter/integration.md +0 -2
  157. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +0 -2
  158. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +0 -4
  159. package/resource/knowledge/livekit/core-sdk/voice/ios/integration.md +0 -4
  160. package/resource/knowledge/livekit/core-sdk/voice/uni-app/co-guest-interaction.md +0 -2
  161. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +0 -2
  162. package/resource/knowledge/livekit/faq/error-code.md +0 -2
  163. package/resource/knowledge/push/config/android/honor.md +16 -1
  164. package/resource/knowledge/push/config/android/huawei.md +20 -4
  165. package/resource/knowledge/push/config/android/meizu.md +19 -5
  166. package/resource/knowledge/push/config/android/vivo.md +20 -1
  167. package/resource/knowledge/push/config/donut.md +0 -2
  168. package/resource/knowledge/push/config/harmonyos.md +21 -5
  169. package/resource/knowledge/push/integration/android.md +0 -5
  170. package/resource/knowledge/push/integration/donut.md +0 -3
  171. package/resource/knowledge/push/integration/flutter.md +1 -4
  172. package/resource/knowledge/push/integration/harmonyos.md +0 -3
  173. package/resource/knowledge/push/integration/ios.md +0 -3
  174. package/resource/knowledge/push/integration/react-native.md +0 -5
  175. package/resource/knowledge/push/integration/uni-app.md +0 -3
  176. package/resource/knowledge/push/integration/unity.md +0 -3
  177. package/resource/knowledge/push/integration/unreal-engine.md +0 -3
  178. package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +0 -2
  179. package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +0 -2
  180. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +0 -2
  181. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +0 -2
  182. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +0 -2
  183. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +0 -2
  184. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +0 -2
  185. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +0 -2
  186. package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +0 -2
  187. package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +0 -2
  188. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +0 -2
  189. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +0 -2
  190. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -3
  191. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +18 -14
  192. package/resource/knowledge/rtcengine/web/how_to_run_web_sdk_demo.md +0 -2
  193. package/resource/knowledge/rtcengine/web/plugin/23-advanced-support-detection.md +30 -0
  194. package/resource/knowledge/rtcengine/web/plugin/24-advanced-network-quality.md +0 -2
  195. package/resource/knowledge/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
  196. package/resource/knowledge/rtcengine/web/plugin/35-advanced-ai-denoiser.md +1 -1
  197. package/resource/knowledge/rtcengine/web/plugin/36-advanced-virtual-background.md +4 -0
  198. package/resource/knowledge/trtc/android/TRTCCloud.md +94 -85
  199. package/resource/knowledge/trtc/android/TRTCCloudDef.md +48 -46
  200. package/resource/knowledge/trtc/android/TRTCCloudListener.md +48 -48
  201. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +18 -18
  202. package/resource/knowledge/trtc/android/TXDeviceManager.md +4 -4
  203. package/resource/knowledge/trtc/android/TXLiteAVCode.md +1 -0
  204. package/resource/knowledge/trtc/c++/ITRTCCloud.md +90 -90
  205. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +18 -18
  206. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +9 -9
  207. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +47 -47
  208. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +47 -45
  209. package/resource/knowledge/trtc/c++/TXLiteAVCode.md +1 -0
  210. package/resource/knowledge/trtc/ios/TRTCCloud.md +93 -93
  211. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +50 -50
  212. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +8 -8
  213. package/resource/knowledge/trtc/ios/TXDeviceManager.md +9 -9
  214. package/resource/knowledge/trtc/ios/TXLiteAVCode.md +1 -0
  215. package/resource/knowledge/trtc/ios/TXLiveSDKTypeDef.md +48 -46
  216. package/server-config.js +8 -9
  217. package/server.js +1 -1
  218. package/tools/common/finalize_answer.js +1 -1
  219. package/tools/common/present_framework_choice.js +1 -1
  220. package/tools/common/search_trtc_knowledge.js +22 -3
  221. package/tools/definitions/search_trtc_knowledge_def.js +3 -2
  222. package/utils/preflight-route.js +19 -2
  223. package/utils/report-cls-client.js +1 -1
  224. package/utils/report-es-client.js +1 -1
@@ -7,7 +7,7 @@ import { classifyRetrievalMode } from './intent-router.js';
7
7
  import { rankSubsetWithIndex } from '../bm25.js';
8
8
  import { getProductsBM25Index } from '../bm25-cache.js';
9
9
  import { hasExplicitFrameworkMatch } from './framework-fallback.js';
10
- import { assessConfidence, assessNarrativeCompleteness, buildNarrativeDocument, hasNativeClientFramework, hasNativeTrtcApiSignal, hasProductScopeIntent, inferQueryApiTokens, pickNarrativeSource, } from './search-core.js';
10
+ import { assessConfidence, assessNarrativeCompleteness, buildDiscoveryCatalog, buildNarrativeDocument, hasNativeClientFramework, hasNativeTrtcApiSignal, hasProductScopeIntent, inferQueryApiTokens, pickNarrativeSource, } from './search-core.js';
11
11
  import { scoreUrlRow } from './url-row-scorer.js';
12
12
  import { buildAnswerContract, buildAgentMessage } from './search-message.js';
13
13
  import { runSearchPass } from './search-pass.js';
@@ -174,7 +174,7 @@ function computePrimaryCompleteness(allChunks, fragments, preferredSource) {
174
174
  primary_completeness: fileToken > 0 ? Number((hitToken / fileToken).toFixed(2)) : 0,
175
175
  };
176
176
  }
177
- export function searchKnowledge(params) {
177
+ export async function searchKnowledge(params) {
178
178
  const norm = normalizeParams(params);
179
179
  const retrievalMode = classifyRetrievalMode(norm.prompt);
180
180
  if (requiresFramework(norm)) {
@@ -196,36 +196,21 @@ export function searchKnowledge(params) {
196
196
  const manifest = loadManifest();
197
197
  const allChunks = manifest.chunks;
198
198
  const queryApiTokens = inferQueryApiTokens(norm.prompt);
199
- let pass = runSearchPass({
199
+ let pass = await runSearchPass({
200
200
  allChunks,
201
201
  passNorm: norm,
202
202
  retrievalMode,
203
203
  queryApiTokens,
204
204
  });
205
- // best-practice 懒补充:仅在主 pass 无本地片段(仅 URL 映射行或完全为空)时触发。
206
- // 典型场景:Agent 传 types=['sdk'],filterPool 把 best-practice(type=faq)硬过滤掉,
207
- // 只剩 URL 映射行(有 E7 boost 但内容只是一个 URL 链接)。
208
- // 不侵入 runSearchPass 层,避免每次调用都执行重复检索。
209
- // 修复 B1 副作用:之前 `types: undefined` 会同时把 chat/preset/{flutter,android,...}/integration.md
210
- // (types=['integration'])也放进 pool,integration 文档多 section 命中 generic 词会把 URL row 顶掉。
211
- // 改为 `types: ['faq']` 后:
212
- // - best-practice(types=['faq'])走 filterPool 的 bp-bypass 保留
213
- // - chat/preset/.../integration.md(types=['integration'])被硬过滤
214
- // - URL row(types 与原请求一致)继续保留
215
- // 合并策略:append BP fragments 到原 pass(不去重 URL row),保留 URL row 在 top。
205
+ // best-practice 懒补充(收敛版):仅在主 pass 完全无结果时触发。
206
+ //
207
+ // 设计意图:
208
+ // - BP 从“主通道召回增强”退到“兜底校准器”
209
+ // - 对“仅 URL 行”的场景不再补 BP,避免策略叠加导致的 BP 过召回
210
+ // - 保留 hard-fail 场景的可恢复性(空结果时补一次 faq)
216
211
  const passRetryReasons = [];
217
- const hasLocalContent = pass.fragments.some((f) => !f.source.includes('/urls/'));
218
- // 当主 pass 命中一个明确的 URL row(scoreUrlRow ≥ 300 强信号)时,**跳过 B1 补充**,
219
- // 避免 BP 兜底把无关 BP 文档(message-unread-count、avchatroom-message-loss-diagnosis 等)塞满 fragments。
220
- // 典型反例:query「im 内网代理」types=['product'],pass 命中「内网代理实现方案」(scoreUrlRow=460),
221
- // 旧 B1 会触发 → 拉 8 个无关 BP → fragments 膨胀到 9 个。
222
- // 进一步保护:当 top1 finalScore < 20(零命中场景,如「im 怎么发火箭」finalScore=16.8),
223
- // 也不触发 B1——无意义 query 不该被 BP 兜底撑满。
224
- const top1UrlScore = !hasLocalContent && pass.fragments[0]?.title
225
- ? scoreUrlRow(norm.prompt, pass.fragments[0].title).score
226
- : 0;
227
- const top1FinalScore = pass.fragments[0]?.score ?? 0;
228
- if (!hasLocalContent && top1UrlScore < 300 && top1FinalScore >= 20 && norm.product?.length && !norm.types?.includes('faq')) {
212
+ const noFragments = pass.fragments.length === 0;
213
+ if (noFragments && norm.product?.length && !norm.types?.includes('faq')) {
229
214
  const primaryProduct = norm.product[0];
230
215
  const bpCandidates = allChunks.filter((chunk) => {
231
216
  if (!/\/best-practice\//i.test(chunk.source))
@@ -244,7 +229,7 @@ export function searchKnowledge(params) {
244
229
  const bpIndex = getProductsBM25Index(allChunks, [norm.product[0]]);
245
230
  const bpRanked = rankSubsetWithIndex(norm.prompt, bpCandidates.map((c) => c.id), bpIndex, {});
246
231
  if ((bpRanked[0]?.score ?? 0) >= 6) {
247
- const bpPass = runSearchPass({
232
+ const bpPass = await runSearchPass({
248
233
  allChunks,
249
234
  passNorm: { ...norm, types: ['faq'] },
250
235
  retrievalMode,
@@ -276,7 +261,7 @@ export function searchKnowledge(params) {
276
261
  ? Number((pass.missingApiTokens.length / queryApiTokens.length).toFixed(2))
277
262
  : 0;
278
263
  if (queryApiTokens.length > 0 && (pass.apiNameCoverage === 0 || missingRatio >= 0.3)) {
279
- const retryPass = runSearchPass({
264
+ const retryPass = await runSearchPass({
280
265
  allChunks,
281
266
  passNorm: { ...norm, types: undefined },
282
267
  retrievalMode,
@@ -296,7 +281,7 @@ export function searchKnowledge(params) {
296
281
  // B3: 混合“集成 + 产品开通/计费/控制台”问法时,补充 product type,避免仅搜 integration/feature。
297
282
  if (norm.types?.length && !norm.types.includes('product') && hasProductScopeIntent(norm.prompt)) {
298
283
  const widenedTypes = [...new Set([...norm.types, 'product'])];
299
- const retryPass = runSearchPass({
284
+ const retryPass = await runSearchPass({
300
285
  allChunks,
301
286
  passNorm: { ...norm, types: widenedTypes },
302
287
  retrievalMode,
@@ -320,7 +305,7 @@ export function searchKnowledge(params) {
320
305
  && pass.apiNameCoverage < 0.5;
321
306
  if (shouldRetryNativeProduct) {
322
307
  const expandedProducts = [...new Set([...(norm.product ?? []), 'native_trtc_sdk'])];
323
- const retryPass = runSearchPass({
308
+ const retryPass = await runSearchPass({
324
309
  allChunks,
325
310
  passNorm: { ...norm, product: expandedProducts, types: undefined },
326
311
  retrievalMode,
@@ -356,7 +341,7 @@ export function searchKnowledge(params) {
356
341
  types: undefined,
357
342
  limit: Math.max(norm.limit ?? 8, 12),
358
343
  };
359
- const retryPass = runSearchPass({
344
+ const retryPass = await runSearchPass({
360
345
  allChunks,
361
346
  passNorm: narrativeRetryNorm,
362
347
  retrievalMode,
@@ -379,7 +364,7 @@ export function searchKnowledge(params) {
379
364
  if (shouldDeepCoverageCheck) {
380
365
  coverageReport = buildCoverageReport(allChunks, pass.fragments, pass.preferredSource);
381
366
  if (coverageReport.retry_suggested) {
382
- const coverageRetryPass = runSearchPass({
367
+ const coverageRetryPass = await runSearchPass({
383
368
  allChunks,
384
369
  passNorm: { ...norm, types: undefined, limit: Math.max(norm.limit ?? 8, 12) },
385
370
  retrievalMode,
@@ -441,6 +426,9 @@ export function searchKnowledge(params) {
441
426
  const documents = retrievalMode === 'narrative'
442
427
  ? (narrativeState.document ? [narrativeState.document] : [])
443
428
  : [];
429
+ const catalog = retrievalMode === 'discovery'
430
+ ? buildDiscoveryCatalog(pass.rankedWithMultipliers, pass.poolWithContent, Math.max(norm.limit ?? 8, 6))
431
+ : [];
444
432
  let finalStatus = status;
445
433
  let finalConfidence = confidence;
446
434
  if (retrievalMode === 'narrative' && documents.length > 0) {
@@ -453,7 +441,7 @@ export function searchKnowledge(params) {
453
441
  finalConfidence = 'low';
454
442
  }
455
443
  }
456
- if (retrievalMode === 'discovery' && pass.fragments.length > 0) {
444
+ if (retrievalMode === 'discovery' && catalog.length > 0) {
457
445
  finalStatus = 'success';
458
446
  finalConfidence = finalConfidence === 'none' ? 'medium' : finalConfidence;
459
447
  }
@@ -486,7 +474,7 @@ export function searchKnowledge(params) {
486
474
  const narrativeConverged = retrievalMode !== 'narrative'
487
475
  || (documents.length > 0 && narrativeState.quality.isComplete);
488
476
  const convergenceReached = (retrievalMode === 'narrative' && narrativeConverged)
489
- || (retrievalMode === 'discovery' && pass.fragments.length > 0)
477
+ || (retrievalMode === 'discovery' && catalog.length > 0)
490
478
  || (finalStatus === 'success'
491
479
  && (finalConfidence === 'high' || finalConfidence === 'medium')
492
480
  && (!hasApiQueryTokens || pass.apiNameCoverage >= 0.5)
@@ -529,6 +517,7 @@ export function searchKnowledge(params) {
529
517
  query: params,
530
518
  retrieval_mode: retrievalMode,
531
519
  documents,
520
+ catalog,
532
521
  meta: {
533
522
  // 参考文档(AI 输出「参考文档」小节依据):
534
523
  ...(pass.references.length ? { references: pass.references } : {}),
@@ -549,6 +538,7 @@ export function searchKnowledge(params) {
549
538
  },
550
539
  }
551
540
  : {}),
541
+ vector_retrieval: pass.vectorDiagnostics,
552
542
  },
553
543
  fragments: pass.fragments,
554
544
  };