Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251import { Context } from "effect"import { HttpApi, HttpApiGroup, HttpApiMiddleware, OpenApi } from "effect/unstable/httpapi"import { SchemaErrorMiddleware } from "./middleware/schema-error.js"import { GenerateGroup } from "./groups/generate.js"import { MessageGroup } from "./groups/message.js"import { ModelGroup } from "./groups/model.js"import { ProviderGroup } from "./groups/provider.js"import { makeSessionGroup } from "./groups/session.js"import { makePermissionGroup } from "./groups/permission.js"import { FileSystemGroup } from "./groups/fs.js"import { makeFormGroup } from "./groups/form.js"import { CommandGroup } from "./groups/command.js"import { SkillGroup } from "./groups/skill.js"import { RpcGroup } from "./groups/rpc.js"import { EventGroup, makeEventGroup } from "./groups/event.js"import type { Definition } from "@opencode/schema/event"import { AgentGroup } from "./groups/agent.js"import { PluginGroup } from "./groups/plugin.js"import { ServerGroup } from "./groups/server.js"import { DebugGroup } from "./groups/debug.js"import { PtyGroup } from "./groups/pty.js"import { PersistentPtyGroup } from "./groups/persistent-pty.js"import { ShellGroup } from "./groups/shell.js"import { ReferenceGroup } from "./groups/reference.js"import { Authorization } from "./middleware/authorization.js"import { makeLocationGroup } from "./groups/location.js"import { IntegrationGroup } from "./groups/integration.js"import { WebSearchGroup } from "./groups/websearch.js"import { McpGroup } from "./groups/mcp.js"import { CredentialGroup } from "./groups/credential.js"import { ProjectGroup } from "./groups/project.js"import { WorktreeGroup } from "./groups/worktree.js"import { VcsGroup } from "./groups/vcs.js"import { MigrationGroup } from "./groups/migration.js"import { ConfigGroup } from "./groups/config.js"
type LocationGroups<LocationId extends HttpApiMiddleware.AnyId> = | HttpApiGroup.AddMiddleware<typeof AgentGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof PluginGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ModelGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProviderGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof IntegrationGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof WebSearchGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof McpGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProjectGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof FileSystemGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof CommandGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof SkillGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof RpcGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof PtyGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ShellGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ReferenceGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof VcsGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ConfigGroup, LocationId>
type SessionGroups< SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService,> = | ReturnType<typeof makeSessionGroup<SessionLocationId, SessionLocationService, FormLocationId, FormLocationService>> | typeof MessageGroup
type FormGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService> = ReturnType< typeof makeFormGroup<LocationId, LocationService>>
type LocationGroup<LocationId extends HttpApiMiddleware.AnyId, LocationService> = ReturnType< typeof makeLocationGroup<LocationId, LocationService>>
type MixedMiddlewareGroups< LocationId extends HttpApiMiddleware.AnyId, LocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService,> = ReturnType<typeof makePermissionGroup<LocationId, LocationService, SessionLocationId, SessionLocationService>>
type ApiGroups< LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, Event extends HttpApiGroup.Constraint,> = | typeof ServerGroup | typeof DebugGroup | typeof MigrationGroup | typeof WorktreeGroup | typeof GenerateGroup | typeof PersistentPtyGroup | typeof CredentialGroup | LocationGroups<LocationId> | LocationGroup<LocationId, LocationService> | FormGroups<LocationId, LocationService> | SessionGroups<SessionLocationId, SessionLocationService, FormLocationId, FormLocationService> | MixedMiddlewareGroups<LocationId, LocationService, SessionLocationId, SessionLocationService> | Event
type EventGroupFor<Definitions extends ReadonlyArray<Definition>> = ReturnType<typeof makeEventGroup<Definitions>>
export type Api< LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, Event extends HttpApiGroup.Constraint,> = HttpApi.HttpApi< "server", HttpApiGroup.AddMiddleware< HttpApiGroup.AddMiddleware< ApiGroups< LocationId, LocationService, FormLocationId, FormLocationService, SessionLocationId, SessionLocationService, Event >, Authorization >, SchemaErrorMiddleware >>
// Protocol owns middleware placement, while Server injects concrete keys so Core service identities stay downstream.const makeApiFromGroup = < const Group extends HttpApiGroup.Constraint, LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService,>( eventGroup: Group, locationMiddleware: Context.Key<LocationId, LocationService>, formLocationMiddleware: Context.Key<FormLocationId, FormLocationService>, sessionLocationMiddleware: Context.Key<SessionLocationId, SessionLocationService>,): Api< LocationId, LocationService, FormLocationId, FormLocationService, SessionLocationId, SessionLocationService, Group> => HttpApi.make("server") .add(ServerGroup) .add(makeLocationGroup(locationMiddleware)) .add(AgentGroup.middleware(locationMiddleware)) .add(PluginGroup.middleware(locationMiddleware)) .add(makeSessionGroup(sessionLocationMiddleware, formLocationMiddleware)) .add(MessageGroup) .add(ModelGroup.middleware(locationMiddleware)) .add(GenerateGroup) .add(ProviderGroup.middleware(locationMiddleware)) .add(IntegrationGroup.middleware(locationMiddleware)) .add(McpGroup.middleware(locationMiddleware)) .add(CredentialGroup) .add(ProjectGroup.middleware(locationMiddleware)) .add(makeFormGroup(locationMiddleware)) .add(makePermissionGroup(locationMiddleware, sessionLocationMiddleware)) .add(FileSystemGroup.middleware(locationMiddleware)) .add(CommandGroup.middleware(locationMiddleware)) .add(SkillGroup.middleware(locationMiddleware)) .add(RpcGroup.middleware(locationMiddleware)) .add(eventGroup) .add(PtyGroup.middleware(locationMiddleware)) .add(PersistentPtyGroup) .add(ShellGroup.middleware(locationMiddleware)) .add(ReferenceGroup.middleware(locationMiddleware)) .add(WorktreeGroup) .add(VcsGroup.middleware(locationMiddleware)) .add(DebugGroup) .add(MigrationGroup) .add(WebSearchGroup.middleware(locationMiddleware)) .add(ConfigGroup.middleware(locationMiddleware)) .annotateMerge( OpenApi.annotations({ title: "opencode HttpApi", version: "0.0.1", description: "Experimental HttpApi surface for selected instance routes.", }), ) .middleware(Authorization) .middleware(SchemaErrorMiddleware)
export const makeApi = < const Definitions extends ReadonlyArray<Definition>, LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService,>(options: { readonly definitions: Definitions readonly locationMiddleware: Context.Key<LocationId, LocationService> readonly formLocationMiddleware: Context.Key<FormLocationId, FormLocationService> readonly sessionLocationMiddleware: Context.Key<SessionLocationId, SessionLocationService>}): Api< LocationId, LocationService, FormLocationId, FormLocationService, SessionLocationId, SessionLocationService, EventGroupFor<Definitions>> => makeApiFromGroup( makeEventGroup(options.definitions), options.locationMiddleware, options.formLocationMiddleware, options.sessionLocationMiddleware, )
export const makeDefaultApi = < LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService,>(options: { readonly locationMiddleware: Context.Key<LocationId, LocationService> readonly formLocationMiddleware: Context.Key<FormLocationId, FormLocationService> readonly sessionLocationMiddleware: Context.Key<SessionLocationId, SessionLocationService>}): Api< LocationId, LocationService, FormLocationId, FormLocationService, SessionLocationId, SessionLocationService, typeof EventGroup> => makeApiFromGroup( EventGroup, options.locationMiddleware, options.formLocationMiddleware, options.sessionLocationMiddleware, )