session.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import type { McpServer } from "@agentclientprotocol/sdk"
  2. import { Session } from "../session"
  3. import { Provider } from "../provider/provider"
  4. import type { ACPSessionState } from "./types"
  5. export class ACPSessionManager {
  6. private sessions = new Map<string, ACPSessionState>()
  7. async create(
  8. cwd: string,
  9. mcpServers: McpServer[],
  10. model?: ACPSessionState["model"],
  11. ): Promise<ACPSessionState> {
  12. const session = await Session.create({ title: `ACP Session ${crypto.randomUUID()}` })
  13. const sessionId = session.id
  14. const resolvedModel = model ?? (await Provider.defaultModel())
  15. const state: ACPSessionState = {
  16. id: sessionId,
  17. parentId: session.parentID,
  18. cwd,
  19. mcpServers,
  20. createdAt: new Date(),
  21. model: resolvedModel,
  22. }
  23. this.sessions.set(sessionId, state)
  24. return state
  25. }
  26. get(sessionId: string) {
  27. return this.sessions.get(sessionId)
  28. }
  29. async remove(sessionId: string) {
  30. const state = this.sessions.get(sessionId)
  31. if (!state) return
  32. await Session.remove(sessionId).catch(() => {})
  33. this.sessions.delete(sessionId)
  34. }
  35. has(sessionId: string) {
  36. return this.sessions.has(sessionId)
  37. }
  38. getModel(sessionId: string) {
  39. const session = this.sessions.get(sessionId)
  40. if (!session) return
  41. return session.model
  42. }
  43. setModel(sessionId: string, model: ACPSessionState["model"]) {
  44. const session = this.sessions.get(sessionId)
  45. if (!session) return
  46. session.model = model
  47. this.sessions.set(sessionId, session)
  48. return session
  49. }
  50. setMode(sessionId: string, modeId: string) {
  51. const session = this.sessions.get(sessionId)
  52. if (!session) return
  53. session.modeId = modeId
  54. this.sessions.set(sessionId, session)
  55. return session
  56. }
  57. }