refactor(search): persist provider in global config

This commit is contained in:
Shoubhit Dash 2026-07-07 19:27:50 +05:30
commit ccad83549d
38 changed files with 736 additions and 589 deletions

View file

@ -64,7 +64,8 @@ export const groupNames = {
export const endpointNames = {
"session.messages": "list",
"integration.connect.key": "connectKey",
"integration.capability.select": "selectCapability",
"search.provider.get": "provider",
"search.provider.select": "selectProvider",
"integration.connect.oauth": "connectOauth",
"integration.attempt.status": "attemptStatus",
"integration.attempt.complete": "attemptComplete",

View file

@ -37,23 +37,6 @@ export const IntegrationGroup = HttpApiGroup.make("server.integration")
}),
),
)
.add(
HttpApiEndpoint.post("integration.capability.select", "/api/integration/:integrationID/capability", {
params: { integrationID: Integration.ID },
query: LocationQuery,
payload: Schema.Struct({ capability: Schema.Literal("search") }),
success: HttpApiSchema.NoContent,
error: InvalidRequestError,
})
.annotateMerge(locationQueryOpenApi)
.annotateMerge(
OpenApi.annotations({
identifier: "v2.integration.capability.select",
summary: "Select integration capability",
description: "Set the default integration for a capability.",
}),
),
)
.add(
HttpApiEndpoint.post("integration.connect.key", "/api/integration/:integrationID/connect/key", {
params: { integrationID: Integration.ID },

View file

@ -1,11 +1,42 @@
import { Integration } from "@opencode-ai/schema/integration"
import { Location } from "@opencode-ai/schema/location"
import { Search } from "@opencode-ai/schema/search"
import { Schema } from "effect"
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
import { InvalidRequestError, ServiceUnavailableError } from "../errors.js"
import { LocationQuery, locationQueryOpenApi } from "./location.js"
export const SearchGroup = HttpApiGroup.make("server.search")
.add(
HttpApiEndpoint.get("search.provider.get", "/api/search/provider", {
query: LocationQuery,
success: Location.response(Schema.UndefinedOr(Integration.ID)),
})
.annotateMerge(locationQueryOpenApi)
.annotateMerge(
OpenApi.annotations({
identifier: "v2.search.provider.get",
summary: "Get default search provider",
description: "Return the globally selected web search provider.",
}),
),
)
.add(
HttpApiEndpoint.post("search.provider.select", "/api/search/provider", {
query: LocationQuery,
payload: Schema.Struct({ providerID: Integration.ID }),
success: HttpApiSchema.NoContent,
error: [InvalidRequestError, ServiceUnavailableError],
})
.annotateMerge(locationQueryOpenApi)
.annotateMerge(
OpenApi.annotations({
identifier: "v2.search.provider.select",
summary: "Select default search provider",
description: "Persist the global web search provider in the user configuration.",
}),
),
)
.add(
HttpApiEndpoint.post("search.query", "/api/search", {
query: LocationQuery,