96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import {
|
|
RequestError,
|
|
type Agent as ACPAgent,
|
|
type AgentSideConnection,
|
|
type AuthenticateRequest,
|
|
type CancelNotification,
|
|
type CloseSessionRequest,
|
|
type ForkSessionRequest,
|
|
type InitializeRequest,
|
|
type ListSessionsRequest,
|
|
type LoadSessionRequest,
|
|
type NewSessionRequest,
|
|
type PromptRequest,
|
|
type ResumeSessionRequest,
|
|
type SetSessionConfigOptionRequest,
|
|
type SetSessionModelRequest,
|
|
type SetSessionModeRequest,
|
|
} from "@agentclientprotocol/sdk"
|
|
import { Effect } from "effect"
|
|
import type { OpencodeClient } from "@opencode-ai/sdk/v2"
|
|
import * as ACPNextError from "./error"
|
|
import * as ACPNextService from "./service"
|
|
|
|
export function init({ sdk: _sdk }: { sdk: OpencodeClient }) {
|
|
return {
|
|
create: (connection: AgentSideConnection) => {
|
|
return new Agent(ACPNextService.make({ sdk: _sdk, connection }))
|
|
},
|
|
}
|
|
}
|
|
|
|
export class Agent implements ACPAgent {
|
|
constructor(private readonly service: ACPNextService.Interface) {}
|
|
|
|
initialize(params: InitializeRequest) {
|
|
return run(this.service.initialize(params))
|
|
}
|
|
|
|
authenticate(params: AuthenticateRequest) {
|
|
return run(this.service.authenticate(params))
|
|
}
|
|
|
|
newSession(params: NewSessionRequest) {
|
|
return run(this.service.newSession(params))
|
|
}
|
|
|
|
loadSession(params: LoadSessionRequest) {
|
|
return run(this.service.loadSession(params))
|
|
}
|
|
|
|
listSessions(params: ListSessionsRequest) {
|
|
return run(this.service.listSessions(params))
|
|
}
|
|
|
|
resumeSession(params: ResumeSessionRequest) {
|
|
return run(this.service.resumeSession(params))
|
|
}
|
|
|
|
closeSession(params: CloseSessionRequest) {
|
|
return run(this.service.closeSession(params))
|
|
}
|
|
|
|
unstable_forkSession(params: ForkSessionRequest) {
|
|
return run(this.service.forkSession(params))
|
|
}
|
|
|
|
setSessionConfigOption(params: SetSessionConfigOptionRequest) {
|
|
return run(this.service.setSessionConfigOption(params))
|
|
}
|
|
|
|
setSessionMode(params: SetSessionModeRequest) {
|
|
return run(this.service.setSessionMode(params))
|
|
}
|
|
|
|
unstable_setSessionModel(params: SetSessionModelRequest) {
|
|
return run(this.service.setSessionModel(params))
|
|
}
|
|
|
|
prompt(params: PromptRequest) {
|
|
return run(this.service.prompt(params))
|
|
}
|
|
|
|
cancel(params: CancelNotification) {
|
|
return run(this.service.cancel(params))
|
|
}
|
|
}
|
|
|
|
function run<A>(effect: Effect.Effect<A, ACPNextService.Error>) {
|
|
return Effect.runPromise(effect.pipe(Effect.mapError(ACPNextError.toRequestError))).catch((defect: unknown) => {
|
|
if (defect instanceof RequestError) throw defect
|
|
throw ACPNextError.toRequestError(ACPNextError.fromUnknownDefect(defect))
|
|
})
|
|
}
|
|
|
|
export * as ACPNext from "./agent"
|