feat: 实现 Tool Search 基础设施层(CORE_TOOLS 白名单 + TF-IDF 索引 + ExecuteTool + 搜索增强)

- 新增 CORE_TOOLS 白名单常量(31 个核心工具),重构 isDeferredTool 为白名单制判定
- 新建 TF-IDF 工具索引模块(toolIndex.ts),复用 localSearch.ts 算法函数
- 新建 ExecuteTool 跨 API provider 统一工具执行入口
- 增强 ToolSearchTool:TF-IDF 搜索路径、discover: 模式、并行搜索合并、文本模式回退
- 新增 27 个单元测试,precheck 零错误通过(4108 tests pass)

Co-Authored-By: glm-5.1[1m] <zai-org@claude-code-best.win>
This commit is contained in:
claude-code-best
2026-05-08 22:29:15 +08:00
parent 02dd796706
commit 7be08f53bd
34 changed files with 4040 additions and 90 deletions

View File

@@ -446,6 +446,8 @@ import { useLspPluginRecommendation } from 'src/hooks/useLspPluginRecommendation
import { LspRecommendationMenu } from 'src/components/LspRecommendation/LspRecommendationMenu.js';
import { useClaudeCodeHintRecommendation } from 'src/hooks/useClaudeCodeHintRecommendation.js';
import { PluginHintMenu } from 'src/components/ClaudeCodeHint/PluginHintMenu.js';
import { ToolSearchHint } from 'src/components/ToolSearchHint.js';
import { useToolSearchHint } from 'src/hooks/useToolSearchHint.js';
import {
DesktopUpsellStartup,
shouldShowDesktopUpsellStartup,
@@ -1036,6 +1038,7 @@ export function REPL({
useTeammateLifecycleNotification();
const { recommendation: lspRecommendation, handleResponse: handleLspResponse } = useLspPluginRecommendation();
const { recommendation: hintRecommendation, handleResponse: handleHintResponse } = useClaudeCodeHintRecommendation();
const toolSearchHint = useToolSearchHint();
// Memoize the combined initial tools array to prevent reference changes
const combinedInitialTools = useMemo(() => {
@@ -2391,6 +2394,7 @@ export function REPL({
| 'remote-callout'
| 'lsp-recommendation'
| 'plugin-hint'
| 'tool-search-hint'
| 'desktop-upsell'
| 'ultraplan-choice'
| 'ultraplan-launch'
@@ -2445,6 +2449,9 @@ export function REPL({
// Plugin hint from CLI/SDK stderr (same priority band as LSP rec)
if (allowDialogsWithAnimation && hintRecommendation) return 'plugin-hint';
// Tool search hint (discovered tools relevant to current query)
if (allowDialogsWithAnimation && toolSearchHint.visible) return 'tool-search-hint';
// Desktop app upsell (max 3 launches, lowest priority)
if (allowDialogsWithAnimation && showDesktopUpsellStartup) return 'desktop-upsell';
@@ -6173,6 +6180,14 @@ export function REPL({
/>
)}
{focusedInputDialog === 'tool-search-hint' && toolSearchHint.visible && (
<ToolSearchHint
tools={toolSearchHint.tools}
onSelect={toolSearchHint.handleSelect}
onDismiss={toolSearchHint.handleDismiss}
/>
)}
{focusedInputDialog === 'lsp-recommendation' && lspRecommendation && (
<LspRecommendationMenu
pluginName={lspRecommendation.pluginName}