Module: Legion::CLI::Connection

Defined in:
lib/legion/cli/connection.rb

Overview

Lazy connection manager for CLI commands. Only connects to the subsystems a command actually needs, instead of booting the entire Legion::Service.

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.config_dirObject

Returns the value of attribute config_dir.



10
11
12
# File 'lib/legion/cli/connection.rb', line 10

def config_dir
  @config_dir
end

.log_levelObject



14
15
16
# File 'lib/legion/cli/connection.rb', line 14

def log_level
  @log_level || 'error'
end

Class Method Details

.data?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/legion/cli/connection.rb', line 120

def data?
  @data_ready == true
end

.ensure_cacheObject



81
82
83
84
85
86
87
88
89
# File 'lib/legion/cli/connection.rb', line 81

def ensure_cache
  return if @cache_ready

  ensure_settings
  require 'legion/cache'
  @cache_ready = true
rescue LoadError
  raise CLI::Error, 'legion-cache gem is not installed (gem install legion-cache)'
end

.ensure_cryptObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/legion/cli/connection.rb', line 66

def ensure_crypt
  return if @crypt_ready

  ensure_settings
  require 'legion/crypt'
  Legion::Crypt.start
  # Re-resolve now that LeaseManager is available for lease:// URIs
  Legion::Settings.resolve_secrets! if Legion::Settings.respond_to?(:resolve_secrets!)
  @crypt_ready = true
rescue LoadError
  raise CLI::Error, 'legion-crypt gem is not installed (gem install legion-crypt)'
rescue StandardError => e
  raise CLI::Error, "crypt initialization failed: #{e.message}"
end

.ensure_dataObject



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/legion/cli/connection.rb', line 38

def ensure_data
  return if @data_ready

  ensure_settings
  require 'legion/data'
  Legion::Settings.merge_settings(:data, Legion::Data::Settings.default)
  Legion::Data.setup
  @data_ready = true
rescue LoadError
  raise CLI::Error, 'legion-data gem is not installed (gem install legion-data)'
rescue StandardError => e
  raise CLI::Error, "database connection failed: #{e.message}"
end

.ensure_knowledgeObject



91
92
93
94
95
96
97
98
99
100
# File 'lib/legion/cli/connection.rb', line 91

def ensure_knowledge
  return if @knowledge_ready

  ensure_settings
  spec = Gem::Specification.find_by_name('lex-knowledge')
  require "#{spec.gem_dir}/lib/legion/extensions/knowledge"
  @knowledge_ready = true
rescue Gem::MissingSpecError
  raise CLI::Error, 'lex-knowledge gem is not installed (gem install lex-knowledge)'
end

.ensure_llmObject



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/legion/cli/connection.rb', line 102

def ensure_llm
  return if @llm_ready

  ensure_settings
  require 'legion/llm'
  Legion::Settings.merge_settings(:llm, Legion::LLM::Settings.default)
  Legion::LLM.start
  @llm_ready = true
rescue LoadError
  raise CLI::Error, 'legion-llm gem is not installed (gem install legion-llm)'
rescue StandardError => e
  raise CLI::Error, "LLM initialization failed: #{e.message}"
end

.ensure_loggingObject



18
19
20
21
22
23
24
# File 'lib/legion/cli/connection.rb', line 18

def ensure_logging
  return if @logging_ready

  require 'legion/logging'
  Legion::Logging.setup(log_level: log_level, level: log_level, trace: false)
  @logging_ready = true
end

.ensure_settings(resolve_secrets: true) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/cli/connection.rb', line 26

def ensure_settings(resolve_secrets: true)
  return if @settings_ready

  ensure_logging
  require 'legion/settings'

  dir = resolve_config_dir
  Legion::Settings.load(config_dir: dir)
  Legion::Settings.resolve_secrets! if resolve_secrets && Legion::Settings.respond_to?(:resolve_secrets!)
  @settings_ready = true
end

.ensure_transportObject



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/legion/cli/connection.rb', line 52

def ensure_transport
  return if @transport_ready

  ensure_settings
  require 'legion/transport'
  Legion::Settings.merge_settings('transport', Legion::Transport::Settings.default)
  Legion::Transport::Connection.setup
  @transport_ready = true
rescue LoadError
  raise CLI::Error, 'legion-transport gem is not installed (gem install legion-transport)'
rescue StandardError => e
  raise CLI::Error, "transport connection failed: #{e.message}"
end

.llm?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/legion/cli/connection.rb', line 128

def llm?
  @llm_ready == true
end

.settings?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/legion/cli/connection.rb', line 116

def settings?
  @settings_ready == true
end

.shutdownObject



132
133
134
135
136
137
138
139
140
# File 'lib/legion/cli/connection.rb', line 132

def shutdown
  Legion::LLM.shutdown if @llm_ready
  Legion::Transport::Connection.shutdown if @transport_ready
  Legion::Data.shutdown if @data_ready
  Legion::Cache.shutdown if @cache_ready
  Legion::Crypt.shutdown if @crypt_ready
rescue StandardError => e
  Legion::Logging.warn("Connection#shutdown cleanup failed: #{e.message}") if defined?(Legion::Logging)
end

.transport?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/legion/cli/connection.rb', line 124

def transport?
  @transport_ready == true
end