cloudaxe-opencode/packages/protocol/src/client.ts
Shoubhit Dash a6acc2397d Merge remote-tracking branch 'origin/v2' into search-integration
# Conflicts:
#	packages/client/src/promise/generated/client.ts
#	packages/client/src/promise/generated/types.ts
#	packages/client/test/promise.test.ts
#	packages/core/src/plugin/host.ts
#	packages/core/src/plugin/internal.ts
#	packages/core/src/plugin/promise.ts
#	packages/core/test/plugin/host.ts
#	packages/plugin/src/v2/effect/index.ts
#	packages/plugin/src/v2/effect/integration.ts
#	packages/plugin/src/v2/promise/index.ts
#	packages/plugin/src/v2/promise/integration.ts
#	packages/protocol/src/client.ts
#	packages/schema/src/index.ts
#	packages/sdk/js/src/v2/gen/sdk.gen.ts
2026-07-08 15:09:39 +05:30

65 lines
2.4 KiB
TypeScript

import { InvalidRequestError, SessionNotFoundError } from "./errors.js"
import { makeDefaultApi } from "./api.js"
import type { Api } from "./api.js"
import type { Context } from "effect"
import { HttpApiMiddleware } from "effect/unstable/httpapi"
import type { EventGroup } from "./groups/event.js"
class LocationMiddleware extends HttpApiMiddleware.Service<LocationMiddleware>()(
"@opencode-ai/client/LocationMiddleware",
) {}
class SessionLocationMiddleware extends HttpApiMiddleware.Service<SessionLocationMiddleware>()(
"@opencode-ai/client/SessionLocationMiddleware",
{ error: [InvalidRequestError, SessionNotFoundError] },
) {}
type ClientApiShape = Api<
Context.Service.Identifier<typeof LocationMiddleware>,
Context.Service.Shape<typeof LocationMiddleware>,
Context.Service.Identifier<typeof SessionLocationMiddleware>,
Context.Service.Shape<typeof SessionLocationMiddleware>,
Context.Service.Identifier<typeof SessionLocationMiddleware>,
Context.Service.Shape<typeof SessionLocationMiddleware>,
typeof EventGroup
>
export const ClientApi: ClientApiShape = makeDefaultApi({
locationMiddleware: LocationMiddleware,
// The real server uses a form-specific middleware with an undocumented `global` sentinel branch.
// The generated client only needs a middleware identity for API typing.
formLocationMiddleware: SessionLocationMiddleware,
sessionLocationMiddleware: SessionLocationMiddleware,
})
export const groupNames = {
"server.health": "health",
"server.debug": "debug",
"server.location": "location",
"server.agent": "agent",
"server.plugin": "plugin",
"server.session": "session",
"server.message": "message",
"server.model": "model",
"server.generate": "generate",
"server.provider": "provider",
"server.integration": "integration",
"server.search": "search",
"server.credential": "credential",
"server.form": "form",
"server.permission": "permission",
"server.fs": "file",
"server.command": "command",
"server.skill": "skill",
"server.event": "event",
"server.pty": "pty",
"server.shell": "shell",
"server.question": "question",
"server.reference": "reference",
"server.project": "project",
"server.projectCopy": "projectCopy",
"server.vcs": "vcs",
} as const
export const promiseOmitEndpoints = new Set(["pty.connect", "pty.connectToken"])
export const effectOmitEndpoints = new Set(["fs.read", "pty.connect", "pty.connectToken"])