fix(opencode): avoid nullable webfetch format schema (#30215)

This commit is contained in:
Shoubhit Dash
2026-06-01 14:15:57 +05:30
committed by GitHub
parent bba76009a8
commit 2d2f587bfa
3 changed files with 24 additions and 17 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ export const Parameters = Schema.Struct({
description: "The format to return the content in (text, markdown, or html). Defaults to markdown.",
default: "markdown",
})
.pipe(Schema.optional, Schema.withDecodingDefault(Effect.succeed("markdown" as const))),
.pipe(Schema.withDecodingDefault(Effect.succeed("markdown" as const))),
timeout: Schema.optional(Schema.Number).annotate({ description: "Optional timeout in seconds (max 120)" }),
})
@@ -396,21 +396,14 @@ exports[`tool parameters JSON Schema (wire shape) webfetch 1`] = `
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"format": {
"anyOf": [
{
"default": "markdown",
"description": "The format to return the content in (text, markdown, or html). Defaults to markdown.",
"enum": [
"text",
"markdown",
"html",
],
"type": "string",
},
{
"type": "null",
},
"default": "markdown",
"description": "The format to return the content in (text, markdown, or html). Defaults to markdown.",
"enum": [
"text",
"markdown",
"html",
],
"type": "string",
},
"timeout": {
"description": "Optional timeout in seconds (max 120)",
+16 -2
View File
@@ -82,6 +82,13 @@ describe("tool parameters", () => {
properties: { value: { minimum: Number.MIN_SAFE_INTEGER, maximum: Number.MAX_SAFE_INTEGER } },
})
})
test("does not expose defaulted optional keys as nullable", () => {
expect(toJsonSchema(WebFetch)).toMatchObject({
properties: { format: { type: "string", enum: ["text", "markdown", "html"], default: "markdown" } },
})
expect(toJsonSchema(WebFetch).properties?.format).not.toHaveProperty("anyOf")
})
})
describe("apply_patch", () => {
@@ -257,8 +264,15 @@ describe("tool parameters", () => {
})
describe("webfetch", () => {
test("accepts url-only", () => {
expect(parse(WebFetch, { url: "https://example.com" }).url).toBe("https://example.com")
test("defaults omitted format to markdown", () => {
expect(parse(WebFetch, { url: "https://example.com" })).toEqual({
url: "https://example.com",
format: "markdown",
})
expect(parse(WebFetch, { url: "https://example.com", format: undefined })).toEqual({
url: "https://example.com",
format: "markdown",
})
})
})