docs: 添加 ToolSearch 设计指南 + 禁用 turn-zero 工具推荐弹窗

- 新增 docs/design/tool-search-design-guide.md,涵盖架构、搜索算法、执行管道、演进历史
- 禁用 getTurnZeroSearchExtraToolsPrefetch,消除用户输入时的频繁弹窗
- inter-turn 发现机制保持不变

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
This commit is contained in:
claude-code-best
2026-05-09 16:45:56 +08:00
parent bd2253846f
commit 2cf18c4c49
61 changed files with 753 additions and 423 deletions

View File

@@ -318,7 +318,7 @@ export function useReplBridge(
setMessages(prev => [
...prev,
createSystemMessage(
'Remote Control 已连接。现在可以使用 PushNotification、SendUserFile、Brief 工具,请使用 ToolSearch 搜索发现。',
'Remote Control 已连接。现在可以使用 PushNotification、SendUserFile、Brief 工具,请使用 SearchExtraTools 搜索发现。',
'info',
),
]);

View File

@@ -1,19 +1,19 @@
import * as React from 'react'
import {
subscribeToToolSearchPrefetch,
getToolSearchPrefetchSnapshot,
clearToolSearchPrefetchResults,
subscribeToSearchExtraToolsPrefetch,
getSearchExtraToolsPrefetchSnapshot,
clearSearchExtraToolsPrefetchResults,
type ToolDiscoveryResult,
} from 'src/services/toolSearch/prefetch.js'
} from 'src/services/searchExtraTools/prefetch.js'
type ToolSearchHintItem = {
type SearchExtraToolsHintItem = {
name: string
description: string
score: number
}
type ToolSearchHintResult = {
tools: ToolSearchHintItem[]
type SearchExtraToolsHintResult = {
tools: SearchExtraToolsHintItem[]
visible: boolean
handleSelect: (toolName: string) => void
handleDismiss: () => void
@@ -22,13 +22,13 @@ type ToolSearchHintResult = {
const MAX_HINT_SCORE = 0.15
const MAX_HINT_TOOLS = 3
export function useToolSearchHint(): ToolSearchHintResult {
export function useSearchExtraToolsHint(): SearchExtraToolsHintResult {
const prefetchResult = React.useSyncExternalStore(
subscribeToToolSearchPrefetch,
getToolSearchPrefetchSnapshot,
subscribeToSearchExtraToolsPrefetch,
getSearchExtraToolsPrefetchSnapshot,
)
const tools: ToolSearchHintItem[] = React.useMemo(() => {
const tools: SearchExtraToolsHintItem[] = React.useMemo(() => {
if (prefetchResult.length === 0) return []
return prefetchResult
.slice(0, MAX_HINT_TOOLS)
@@ -42,11 +42,11 @@ export function useToolSearchHint(): ToolSearchHintResult {
const visible = tools.length > 0 && (tools[0]?.score ?? 0) >= MAX_HINT_SCORE
const handleSelect = React.useCallback((_toolName: string) => {
clearToolSearchPrefetchResults()
clearSearchExtraToolsPrefetchResults()
}, [])
const handleDismiss = React.useCallback(() => {
clearToolSearchPrefetchResults()
clearSearchExtraToolsPrefetchResults()
}, [])
return { tools, visible, handleSelect, handleDismiss }