Websearch tweaks

This commit is contained in:
Dax Raad 2026-07-28 11:10:33 -04:00
parent 010133f6df
commit ee02fb4fce

View file

@ -32,8 +32,7 @@ export const Plugin = {
yield* ctx.tool
.transform((draft) =>
draft.add(
{
draft.add({
name,
options: { codemode: false },
description,
@ -58,33 +57,33 @@ export const Plugin = {
if (providers.length === 0) return yield* new WebSearch.ProviderRequiredError()
const response = yield* forms.ask({
sessionID: context.sessionID,
title: "Choose a provider so the agent can search the web",
title: "Web Search",
metadata: { kind: "websearch.provider" },
fields: [
{
key: "provider",
title: "Provider",
description: "OpenCode will use your choice for future searches.",
key: "enabled",
description: "Allow OpenCode to search the web?",
type: "string",
required: true,
custom: false,
options: [
...providers.map((provider) => ({ value: provider.id, label: provider.name })),
{ value: "__disable__", label: "Disable web search" },
{ value: "yes", label: "Allow web search" },
{ value: "no", label: "Disable web search" },
],
},
],
})
if (response.status === "cancelled") return yield* Effect.fail(new Error("Web search cancelled"))
const answer = response.answer.provider
if (answer === "__disable__") {
const answer = response.answer.enabled
if (answer === "no") {
yield* kv.set("websearch:provider", false)
return yield* new WebSearch.DisabledError()
}
if (typeof answer !== "string" || !providers.some((provider) => provider.id === answer))
return yield* new WebSearch.ProviderRequiredError()
yield* kv.set("websearch:provider", answer)
if (answer === "yes") {
yield* kv.set("websearch:provider", providers[Math.floor(Math.random() * providers.length)].id)
return yield* ctx.websearch.query(input)
}
return yield* new WebSearch.ProviderRequiredError()
})
}),
)
@ -109,8 +108,7 @@ export const Plugin = {
(error) => new ToolFailure({ message: `Unable to search the web for ${input.query}`, error }),
),
),
},
),
}),
)
.pipe(Effect.orDie)