feat: add model management to ACP sessions (#3358)

This commit is contained in:
Yesh Yendamuri
2025-10-23 01:43:28 -04:00
committed by GitHub
parent 61899d4fa7
commit f81e28c673
3 changed files with 105 additions and 5 deletions

View File

@@ -1,14 +1,20 @@
import type { McpServer } from "@agentclientprotocol/sdk"
import { Identifier } from "../id/id"
import { Session } from "../session"
import { Provider } from "../provider/provider"
import type { ACPSessionState } from "./types"
export class ACPSessionManager {
private sessions = new Map<string, ACPSessionState>()
async create(cwd: string, mcpServers: McpServer[]): Promise<ACPSessionState> {
async create(
cwd: string,
mcpServers: McpServer[],
model?: ACPSessionState["model"],
): Promise<ACPSessionState> {
const sessionId = `acp_${Identifier.ascending("session")}`
const openCodeSession = await Session.create({ title: `ACP Session ${sessionId}` })
const resolvedModel = model ?? (await Provider.defaultModel())
const state: ACPSessionState = {
id: sessionId,
@@ -16,6 +22,7 @@ export class ACPSessionManager {
mcpServers,
openCodeSessionId: openCodeSession.id,
createdAt: new Date(),
model: resolvedModel,
}
this.sessions.set(sessionId, state)
@@ -38,13 +45,24 @@ export class ACPSessionManager {
return this.sessions.has(sessionId)
}
async load(sessionId: string, cwd: string, mcpServers: McpServer[]): Promise<ACPSessionState> {
async load(
sessionId: string,
cwd: string,
mcpServers: McpServer[],
model?: ACPSessionState["model"],
): Promise<ACPSessionState> {
const existing = this.sessions.get(sessionId)
if (existing) {
if (!existing.model) {
const resolved = model ?? (await Provider.defaultModel())
existing.model = resolved
this.sessions.set(sessionId, existing)
}
return existing
}
const openCodeSession = await Session.create({ title: `ACP Session ${sessionId} (loaded)` })
const resolvedModel = model ?? (await Provider.defaultModel())
const state: ACPSessionState = {
id: sessionId,
@@ -52,9 +70,24 @@ export class ACPSessionManager {
mcpServers,
openCodeSessionId: openCodeSession.id,
createdAt: new Date(),
model: resolvedModel,
}
this.sessions.set(sessionId, state)
return state
}
getModel(sessionId: string) {
const session = this.sessions.get(sessionId)
if (!session) return
return session.model
}
setModel(sessionId: string, model: ACPSessionState["model"]) {
const session = this.sessions.get(sessionId)
if (!session) return
session.model = model
this.sessions.set(sessionId, session)
return session
}
}