fix: WebSearch providers + MCPTool bugs (#593)
* fix: WebSearch providers + MCPTool bugs WebSearchTool: - custom.ts: fix buildAuthHeadersForPreset WEB_AUTH_HEADER opt-out - custom.ts: fix WEB_AUTH_SCHEME empty string handling - custom.ts: fix walkJsonPath null safety for jsonPath parsing - duckduckgo.ts: use SafeSearchType enum instead of raw 0 - mojeek.ts: always send Accept: application/json header - README: fix timeout documentation (15s -> 120s to match code) - custom.test.ts: add tests for auth header behavior MCPTool: - MCPTool.ts: fix outputSchema to accept ContentBlockParam[] (not just string) - MCPTool.ts: fix isResultTruncated for array output (iterates text blocks) * fix: address PR #593 review feedback 1. Export buildAuthHeadersForPreset and add direct tests for: - WEB_AUTH_HEADER="" explicit opt-out behavior - WEB_AUTH_SCHEME="" stripping scheme prefix - Preset defaults (authHeader + authScheme) - No WEB_KEY returns empty headers 2. Add duckduckgo.test.ts verifying SafeSearchType.STRICT === 0, confirming the enum change is semantically identical to the previous raw value. Addresses review by @Vasanthdev2004 at pullrequestreview-4093533095 --------- Co-authored-by: FluxLuFFy <flux@openclaude.dev> Co-authored-by: Fix Bot <fix@openclaude.local>
This commit is contained in:
@@ -14,8 +14,21 @@ import {
|
||||
export const inputSchema = lazySchema(() => z.object({}).passthrough())
|
||||
type InputSchema = ReturnType<typeof inputSchema>
|
||||
|
||||
// MCP tools can return either a plain string or an array of content blocks
|
||||
// (text, images, etc.). The outputSchema must reflect both shapes so the model
|
||||
// knows rich content is possible.
|
||||
export const outputSchema = lazySchema(() =>
|
||||
z.string().describe('MCP tool execution result'),
|
||||
z.union([
|
||||
z.string().describe('MCP tool execution result as text'),
|
||||
z
|
||||
.array(
|
||||
z.object({
|
||||
type: z.string(),
|
||||
text: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.describe('MCP tool execution result as content blocks'),
|
||||
]),
|
||||
)
|
||||
type OutputSchema = ReturnType<typeof outputSchema>
|
||||
|
||||
@@ -65,7 +78,19 @@ export const MCPTool = buildTool({
|
||||
renderToolUseProgressMessage,
|
||||
renderToolResultMessage,
|
||||
isResultTruncated(output: Output): boolean {
|
||||
return isOutputLineTruncated(output)
|
||||
if (typeof output === 'string') {
|
||||
return isOutputLineTruncated(output)
|
||||
}
|
||||
// Array of content blocks — check if any text block exceeds the display limit
|
||||
if (Array.isArray(output)) {
|
||||
return output.some(
|
||||
block =>
|
||||
block?.type === 'text' &&
|
||||
typeof block.text === 'string' &&
|
||||
isOutputLineTruncated(block.text),
|
||||
)
|
||||
}
|
||||
return false
|
||||
},
|
||||
mapToolResultToToolResultBlockParam(content, toolUseID) {
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user