Class: ClaudeAgentServer::Services::SessionManager
- Inherits:
-
Object
- Object
- ClaudeAgentServer::Services::SessionManager
- Defined in:
- lib/claude_agent_server/services/session_manager.rb
Instance Attribute Summary collapse
-
#sessions ⇒ Object
readonly
Returns the value of attribute sessions.
Instance Method Summary collapse
- #create_session(options:, prompt: nil, id: nil) ⇒ Object
- #destroy_session(id) ⇒ Object
- #get_session(id) ⇒ Object
-
#initialize ⇒ SessionManager
constructor
A new instance of SessionManager.
- #list_sessions ⇒ Object
- #shutdown ⇒ Object
- #start_reaper ⇒ Object
- #stop_reaper ⇒ Object
Constructor Details
#initialize ⇒ SessionManager
Returns a new instance of SessionManager.
117 118 119 120 121 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 117 def initialize @sessions = {} @mutex = Mutex.new @reaper_task = nil end |
Instance Attribute Details
#sessions ⇒ Object (readonly)
Returns the value of attribute sessions.
115 116 117 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 115 def sessions @sessions end |
Instance Method Details
#create_session(options:, prompt: nil, id: nil) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 123 def create_session(options:, prompt: nil, id: nil) config = ClaudeAgentServer.config id ||= SecureRandom.uuid @mutex.synchronize do raise SessionAlreadyExistsError, "Session '#{id}' already exists" if @sessions.key?(id) if @sessions.size >= config.max_sessions raise SessionLimitError, "Maximum session limit (#{config.max_sessions}) reached" end end client = ClaudeAgentSDK::Client.new(options: ) client.connect(prompt) entry = SessionEntry.new(id: id, client: client) @mutex.synchronize { @sessions[id] = entry } entry. entry end |
#destroy_session(id) ⇒ Object
149 150 151 152 153 154 155 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 149 def destroy_session(id) entry = @mutex.synchronize { @sessions.delete(id) } raise SessionNotFoundError, "Session '#{id}' not found" unless entry entry.disconnect entry end |
#get_session(id) ⇒ Object
145 146 147 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 145 def get_session(id) @mutex.synchronize { @sessions[id] } || raise(SessionNotFoundError, "Session '#{id}' not found") end |
#list_sessions ⇒ Object
157 158 159 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 157 def list_sessions @mutex.synchronize { @sessions.values.dup } end |
#shutdown ⇒ Object
174 175 176 177 178 179 180 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 174 def shutdown stop_reaper @mutex.synchronize do @sessions.each_value(&:disconnect) @sessions.clear end end |
#start_reaper ⇒ Object
161 162 163 164 165 166 167 168 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 161 def start_reaper @reaper_task = Async do |task| loop do task.sleep(60) reap_expired_sessions end end end |
#stop_reaper ⇒ Object
170 171 172 |
# File 'lib/claude_agent_server/services/session_manager.rb', line 170 def stop_reaper @reaper_task&.stop end |