UNPKG

@robota-sdk/sessions

Version:

Session and chat management for Robota SDK - multi-session support with independent workspaces

1 lines 5.68 kB
import {AgentFactory,AgentTemplates,Robota}from'@robota-sdk/agents';export{ConversationHistory,ConversationSession}from'@robota-sdk/agents';var r=class{agentFactory;agentTemplates;constructor(t){this.agentFactory=t||new AgentFactory,this.agentTemplates=new AgentTemplates;}getTemplate(t){let e=this.agentTemplates.getTemplate(t);if(e)return e.config}listTemplates(){return this.agentTemplates.getTemplates().map(e=>e.id)}validateTemplate(t){try{return this.agentFactory.validateConfiguration(t).isValid}catch{return !!(t.name&&t.aiProviders&&t.defaultModel)}}registerTemplate(t){this.agentTemplates.registerTemplate(t);}unregisterTemplate(t){return this.agentTemplates.unregisterTemplate(t)}getTemplateDetails(t){return this.agentTemplates.getTemplate(t)}applyTemplate(t,e={}){let a=this.agentTemplates.getTemplate(t);return a?this.agentFactory.applyTemplate(a,e).config:void 0}};var i=class{metadata;config;robota;templateManager;constructor(t,e,a){this.metadata=t,this.config=e,this.robota=a,this.templateManager=new r;}async sendMessage(t){try{let e=await this.robota.run(t);return this.metadata.messageCount++,this.metadata.lastAccessedAt=new Date,e}catch(e){throw new Error(`Failed to send message: ${e instanceof Error?e.message:"Unknown error"}`)}}async regenerateResponse(){let e=this.robota.getHistory().filter(a=>a.role==="user").pop();if(!e)throw new Error("No user message found to regenerate response for");return this.sendMessage(e.content)}async updateRobotaConfig(t){try{await this.robota.configure(t),this.config.robotaConfig={...this.config.robotaConfig,...t},this.metadata.updatedAt=new Date;}catch(e){throw new Error(`Failed to update robota config: ${e instanceof Error?e.message:"Unknown error"}`)}}getRobotaConfig(){return this.config.robotaConfig}async upgradeToTemplate(t){let e=this.templateManager.getTemplate(t);if(!e)throw new Error(`Template '${t}' not found`);await this.updateRobotaConfig(e),this.config.agentTemplate=t;}getTemplateManager(){return this.templateManager}activate(){this.metadata.isActive=true,this.metadata.lastAccessedAt=new Date;}deactivate(){this.metadata.isActive=false;}getHistory(){return this.robota.getHistory()}clearHistory(){this.robota.clearHistory(),this.metadata.messageCount=0,this.metadata.updatedAt=new Date;}async save(){throw new Error("Chat persistence not yet implemented")}async load(){throw new Error("Chat loading not yet implemented")}getStats(){return {messageCount:this.metadata.messageCount,createdAt:this.metadata.createdAt,lastActivity:this.metadata.lastAccessedAt}}updateConfig(t){Object.assign(this.config,t),this.metadata.updatedAt=new Date;}};var o=class{sessions=new Map;chats=new Map;sessionChats=new Map;agentFactory;config;constructor(t={}){this.config={maxSessions:t.maxSessions||50,maxChatsPerSession:t.maxChatsPerSession||10},this.agentFactory=new AgentFactory({maxConcurrentAgents:this.config.maxSessions*this.config.maxChatsPerSession});}createSession(t={}){if(this.sessions.size>=this.config.maxSessions)throw new Error(`Maximum sessions limit (${this.config.maxSessions}) reached. Please remove existing sessions before creating new ones.`);let e=this.generateSessionId(),a={id:e,userId:t.userId||"anonymous",name:t.name||`Session ${e.slice(-8)}`,state:"active",chatCount:0,createdAt:new Date,lastUsedAt:new Date,...t.workspaceId&&{workspaceId:t.workspaceId}};return this.sessions.set(e,a),this.sessionChats.set(e,new Set),e}async createChat(t,e){let a=this.sessions.get(t);if(!a)throw new Error(`Session ${t} not found`);let s=this.sessionChats.get(t);if(s.size>=this.config.maxChatsPerSession)throw new Error(`Maximum chats per session (${this.config.maxChatsPerSession}) reached`);let n=this.generateChatId(),c=await this.agentFactory.createAgent(Robota,e.agentConfig),m={chatId:n,sessionId:t,chatName:e.name||`Chat ${n.slice(-8)}`,createdAt:new Date,updatedAt:new Date,lastAccessedAt:new Date,messageCount:0,isActive:false,...e.description&&{description:e.description}},h={robotaConfig:e.agentConfig,...e.name&&{chatName:e.name},...e.description&&{description:e.description},...e.agentTemplate&&{agentTemplate:e.agentTemplate}},d=new i(m,h,c);return this.chats.set(n,d),s.add(n),a.chatCount++,a.lastUsedAt=new Date,n}getChat(t){return this.chats.get(t)}getSession(t){return this.sessions.get(t)}getSessionChats(t){let e=this.sessionChats.get(t);return e?Array.from(e).map(a=>this.chats.get(a)).filter(a=>a!==void 0).map(a=>({id:a.metadata.chatId,sessionId:a.metadata.sessionId,name:a.metadata.chatName,isActive:a.metadata.isActive,messageCount:a.metadata.messageCount,createdAt:a.metadata.createdAt,lastUsedAt:a.metadata.lastAccessedAt,...a.config.agentTemplate&&{agentTemplate:a.config.agentTemplate}})):[]}switchChat(t,e){let a=this.sessions.get(t),s=this.chats.get(e);return !a||!s||s.metadata.sessionId!==t?false:(a.activeChatId&&this.chats.get(a.activeChatId)?.deactivate(),s.activate(),a.activeChatId=e,a.lastUsedAt=new Date,true)}deleteChat(t){let e=this.chats.get(t);if(!e)return false;let a=e.metadata.sessionId,s=this.sessions.get(a),n=this.sessionChats.get(a);return s&&n&&(n.delete(t),s.chatCount--,s.activeChatId===t&&delete s.activeChatId),this.chats.delete(t),true}deleteSession(t){if(!this.sessions.get(t))return false;let a=this.sessionChats.get(t);if(a)for(let s of a)this.chats.delete(s);return this.sessions.delete(t),this.sessionChats.delete(t),true}listSessions(){return Array.from(this.sessions.values())}generateSessionId(){return `session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}generateChatId(){return `chat_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}};export{i as ChatInstance,o as SessionManager,r as TemplateManagerAdapter};