fix(core): tolerate missing tool input schemas (#39130)

Co-authored-by: Dax Raad <d@ironbay.co>
This commit is contained in:
opencode-agent[bot] 2026-07-27 11:21:47 -04:00 committed by GitHub
commit 33e3d1ebca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 34 additions and 1 deletions

View file

@ -140,6 +140,22 @@ describe("Tool", () => {
}),
)
it.effect("snapshots external tools with missing input schemas", () =>
Effect.gen(function* () {
const service = yield* Tool.Service
yield* service.transform((draft) =>
draft.add({
...make(),
input: undefined,
} as unknown as Info),
)
const snapshot = yield* service.snapshot()
expect(snapshot.definitions.map((tool) => tool.name)).toEqual(["execute"])
expect(snapshot.codeModeCatalog?.[0]?.signature).toContain("tools.echo")
}),
)
it.effect("keeps execute available without Code Mode tools unless explicitly denied", () =>
Effect.gen(function* () {
const service = yield* Tool.Service

View file

@ -143,3 +143,18 @@ test("raw JSON schemas are render-only and omitted output means model-only", asy
content: [{ type: "text", text: '{"value":1}' }],
})
})
test("missing external input schemas fall back to an empty schema", () => {
const tool = {
name: "external",
description: "External tool",
input: undefined,
execute: () => Effect.succeed({ content: "unused" }),
} as unknown as Info
expect(definition(tool)).toEqual({
name: "external",
description: "External tool",
inputSchema: {},
})
})