session.ts 1.7 KB

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