mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-02 07:03:45 +00:00
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import { RequestError, type McpServer } from "@agentclientprotocol/sdk"
|
|
import type { ACPSessionState } from "./types"
|
|
import { Log } from "@/util/log"
|
|
import type { OpencodeClient } from "@opencode-ai/sdk/v2"
|
|
|
|
const log = Log.create({ service: "acp-session-manager" })
|
|
|
|
export class ACPSessionManager {
|
|
private sessions = new Map<string, ACPSessionState>()
|
|
private sdk: OpencodeClient
|
|
|
|
constructor(sdk: OpencodeClient) {
|
|
this.sdk = sdk
|
|
}
|
|
|
|
async create(cwd: string, mcpServers: McpServer[], model?: ACPSessionState["model"]): Promise<ACPSessionState> {
|
|
const session = await this.sdk.session
|
|
.create(
|
|
{
|
|
title: `ACP Session ${crypto.randomUUID()}`,
|
|
directory: cwd,
|
|
},
|
|
{ throwOnError: true },
|
|
)
|
|
.then((x) => x.data!)
|
|
|
|
const sessionId = session.id
|
|
const resolvedModel = model
|
|
|
|
const state: ACPSessionState = {
|
|
id: sessionId,
|
|
cwd,
|
|
mcpServers,
|
|
createdAt: new Date(),
|
|
model: resolvedModel,
|
|
}
|
|
log.info("creating_session", { state })
|
|
|
|
this.sessions.set(sessionId, state)
|
|
return state
|
|
}
|
|
|
|
get(sessionId: string): ACPSessionState {
|
|
const session = this.sessions.get(sessionId)
|
|
if (!session) {
|
|
log.error("session not found", { sessionId })
|
|
throw RequestError.invalidParams(JSON.stringify({ error: `Session not found: ${sessionId}` }))
|
|
}
|
|
return session
|
|
}
|
|
|
|
getModel(sessionId: string) {
|
|
const session = this.get(sessionId)
|
|
return session.model
|
|
}
|
|
|
|
setModel(sessionId: string, model: ACPSessionState["model"]) {
|
|
const session = this.get(sessionId)
|
|
session.model = model
|
|
this.sessions.set(sessionId, session)
|
|
return session
|
|
}
|
|
|
|
setMode(sessionId: string, modeId: string) {
|
|
const session = this.get(sessionId)
|
|
session.modeId = modeId
|
|
this.sessions.set(sessionId, session)
|
|
return session
|
|
}
|
|
}
|