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

@@ -68,7 +68,7 @@ export const ExecuteTool = buildTool({
},
newMessages: [
createUserMessage({
content: `Tool "${input.tool_name}" not found. Use ToolSearch to discover available tools.`,
content: `Tool "${input.tool_name}" not found. Use SearchExtraTools to discover available tools.`,
}),
],
}

View File

@@ -29,12 +29,12 @@ mock.module('src/services/analytics/growthbook.js', () => ({
stopPeriodicGrowthBookRefresh: () => {},
}))
mock.module('src/utils/toolSearch.js', () => ({
isToolSearchEnabledOptimistic: () => true,
getAutoToolSearchCharThreshold: () => 100,
getToolSearchMode: () => 'tst' as const,
isToolSearchToolAvailable: async () => true,
isToolSearchEnabled: async () => true,
mock.module('src/utils/searchExtraTools.js', () => ({
isSearchExtraToolsEnabledOptimistic: () => true,
getAutoSearchExtraToolsCharThreshold: () => 100,
getSearchExtraToolsMode: () => 'tst' as const,
isSearchExtraToolsToolAvailable: async () => true,
isSearchExtraToolsEnabled: async () => true,
isToolReferenceBlock: () => false,
extractDiscoveredToolNames: () => new Set(),
isDeferredToolsDeltaEnabled: () => false,
@@ -42,7 +42,7 @@ mock.module('src/utils/toolSearch.js', () => ({
}))
mock.module('src/constants/tools.js', () => ({
CORE_TOOLS: new Set(['ExecuteExtraTool', 'ToolSearch']),
CORE_TOOLS: new Set(['ExecuteExtraTool', 'SearchExtraTools']),
}))
// Mock messages module

View File

@@ -1,19 +1,19 @@
import { EXECUTE_TOOL_NAME } from './constants.js'
export const DESCRIPTION =
'ExecuteExtraTool — a first-class core tool that is always loaded and available. Execute any deferred tool by name with parameters. Use it after discovering a tool via ToolSearch. This is NOT a remote or external tool — it runs locally with full permissions.'
'ExecuteExtraTool — a first-class core tool that is always loaded and available. Execute any deferred tool by name with parameters. Use it after discovering a tool via SearchExtraTools. This is NOT a remote or external tool — it runs locally with full permissions.'
export function getPrompt(): string {
return `ExecuteExtraTool — a first-class core tool, always loaded, always available in your tool list. Runs locally with full permissions — NOT a remote or external tool. You do NOT need to search for it.
This tool accepts a tool_name and params object, looks up the target tool in the global tool registry, and delegates execution to it. The target tool runs with the same permissions and capabilities as if it were called directly.
When to use: After ToolSearch discovers a deferred tool name, call this tool with {"tool_name": "<name>", "params": {...}} to invoke it immediately.
When to use: After SearchExtraTools discovers a deferred tool name, call this tool with {"tool_name": "<name>", "params": {...}} to invoke it immediately.
When NOT to use: For core tools already in your tool list (Read, Edit, Write, Bash, Glob, Grep, Agent, WebFetch, WebSearch, Skill, etc.) — call those directly.
Inputs:
- tool_name: The exact name of the target tool (string)
- params: The parameters to pass to the target tool (object)
If the tool is not found, an error message will be returned suggesting to use ToolSearch to discover available tools.`
If the tool is not found, an error message will be returned suggesting to use SearchExtraTools to discover available tools.`
}