Module: Legion::MCP::TracingContext

Defined in:
lib/legion/mcp/tracing_context.rb

Constant Summary collapse

THREAD_KEYS =
%i[
  legion_mcp_conversation_id
  legion_mcp_request_id
  legion_mcp_exchange_id
  legion_mcp_tool_call_id
  legion_mcp_trace_id
].freeze

Class Method Summary collapse

Class Method Details

.clearObject



46
47
48
# File 'lib/legion/mcp/tracing_context.rb', line 46

def clear
  THREAD_KEYS.each { |key| Thread.current[key] = nil }
end

.currentObject



50
51
52
53
54
55
# File 'lib/legion/mcp/tracing_context.rb', line 50

def current
  THREAD_KEYS.each_with_object({}) do |key, hash|
    short = key.to_s.delete_prefix('legion_mcp_').to_sym
    hash[short] = Thread.current[key]
  end
end

.generate_conversation_idObject



18
19
20
# File 'lib/legion/mcp/tracing_context.rb', line 18

def generate_conversation_id
  "mcp_#{SecureRandom.uuid}"
end

.generate_exchange_idObject



30
31
32
# File 'lib/legion/mcp/tracing_context.rb', line 30

def generate_exchange_id
  "exch_#{SecureRandom.hex(12)}"
end

.generate_request_id(jsonrpc_id) ⇒ Object



26
27
28
# File 'lib/legion/mcp/tracing_context.rb', line 26

def generate_request_id(jsonrpc_id)
  "req_#{jsonrpc_id || SecureRandom.hex(8)}"
end

.generate_tool_call_idObject



34
35
36
# File 'lib/legion/mcp/tracing_context.rb', line 34

def generate_tool_call_id
  "call_#{SecureRandom.hex(12)}"
end

.generate_trace_idObject



22
23
24
# File 'lib/legion/mcp/tracing_context.rb', line 22

def generate_trace_id
  SecureRandom.hex(16)
end

.set(conversation_id:, request_id:, exchange_id:, tool_call_id:, trace_id:) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/legion/mcp/tracing_context.rb', line 38

def set(conversation_id:, request_id:, exchange_id:, tool_call_id:, trace_id:)
  Thread.current[:legion_mcp_conversation_id] = conversation_id
  Thread.current[:legion_mcp_request_id] = request_id
  Thread.current[:legion_mcp_exchange_id] = exchange_id
  Thread.current[:legion_mcp_tool_call_id] = tool_call_id
  Thread.current[:legion_mcp_trace_id] = trace_id
end