Class: CompletionKit::McpSession

Inherits:
ApplicationRecord show all
Defined in:
app/models/completion_kit/mcp_session.rb

Overview

MCP session marker — one row per active client session, kept in the database so sessions survive Puma restarts, deploys, and Rails.cache eviction. Expired rows are opportunistically pruned on every new session start, so the table stays bounded by recent activity.

Constant Summary collapse

SESSION_TTL =
1.hour

Constants inherited from ApplicationRecord

ApplicationRecord::TenantScopedUniquenessValidator

Class Method Summary collapse

Class Method Details

.active?(session_id) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
# File 'app/models/completion_kit/mcp_session.rb', line 16

def self.active?(session_id)
  return false if session_id.blank?
  where(session_id: session_id).where("expires_at > ?", Time.current).exists?
end

.destroy_session(session_id) ⇒ Object



21
22
23
# File 'app/models/completion_kit/mcp_session.rb', line 21

def self.destroy_session(session_id)
  where(session_id: session_id).delete_all
end

.prune_expired!Object



25
26
27
# File 'app/models/completion_kit/mcp_session.rb', line 25

def self.prune_expired!
  where("expires_at < ?", Time.current).delete_all
end

.start!Object



11
12
13
14
# File 'app/models/completion_kit/mcp_session.rb', line 11

def self.start!
  prune_expired!
  create!(session_id: SecureRandom.uuid, expires_at: SESSION_TTL.from_now).session_id
end