Class: KairosMcp::SkillsConfig
- Inherits:
-
Object
- Object
- KairosMcp::SkillsConfig
- Defined in:
- lib/kairos_mcp/skills_config.rb
Constant Summary collapse
- DEFAULTS =
{ 'enabled' => true, 'evolution_enabled' => false, 'max_evolutions_per_session' => 3, 'require_human_approval' => true, 'immutable_skills' => ['core_safety'], 'layers' => { 'L0_constitution' => { 'enabled' => true, 'mutable' => false }, 'L0_law' => { 'enabled' => true, 'mutable' => true, 'require_blockchain' => 'full' }, 'L1' => { 'enabled' => true, 'mutable' => true, 'require_blockchain' => 'hash_only' }, 'L2' => { 'enabled' => true, 'mutable' => true, 'require_blockchain' => 'none' } }, 'kairos_meta_skills' => %w[core_safety evolution_rules self_inspection chain_awareness] }.freeze
Class Method Summary collapse
- .config_path ⇒ Object
- .disable! ⇒ Object
- .enabled? ⇒ Boolean
- .evolution_enabled? ⇒ Boolean
- .file_config ⇒ Object
- .immutable_skill?(skill_id) ⇒ Boolean
-
.immutable_skills ⇒ Object
Get immutable skills - prefers l0_governance skill if available.
- .kairos_meta_skill?(skill_id) ⇒ Boolean
-
.kairos_meta_skills ⇒ Object
Get allowed L0 skills - prefers l0_governance skill if available This implements Pure Agent Skill principle: L0 rules are in L0.
- .layer_blockchain_mode(layer) ⇒ Object
-
.layer_config(layer) ⇒ Object
Layer-specific configuration methods.
- .layer_enabled?(layer) ⇒ Boolean
- .layer_mutable?(layer) ⇒ Boolean
- .layer_requires_approval?(layer) ⇒ Boolean
- .load ⇒ Object
- .save(config) ⇒ Object
- .sqlite_config ⇒ Object
- .state_commit_auto_config ⇒ Object
- .state_commit_auto_enabled? ⇒ Boolean
-
.state_commit_config ⇒ Object
State commit configuration.
- .state_commit_enabled? ⇒ Boolean
- .state_commit_max_snapshots ⇒ Object
- .state_commit_snapshot_dir ⇒ Object
- .storage_backend ⇒ Object
- .storage_backend_sqlite? ⇒ Boolean
-
.storage_config ⇒ Object
Storage backend configuration.
Class Method Details
.config_path ⇒ Object
22 23 24 |
# File 'lib/kairos_mcp/skills_config.rb', line 22 def self.config_path KairosMcp.skills_config_path end |
.disable! ⇒ Object
47 48 49 50 51 |
# File 'lib/kairos_mcp/skills_config.rb', line 47 def self.disable! config = load config['enabled'] = false save(config) end |
.enabled? ⇒ Boolean
39 40 41 |
# File 'lib/kairos_mcp/skills_config.rb', line 39 def self.enabled? load['enabled'] end |
.evolution_enabled? ⇒ Boolean
43 44 45 |
# File 'lib/kairos_mcp/skills_config.rb', line 43 def self.evolution_enabled? load['evolution_enabled'] && enabled? end |
.file_config ⇒ Object
148 149 150 |
# File 'lib/kairos_mcp/skills_config.rb', line 148 def self.file_config storage_config['file'] || {} end |
.immutable_skill?(skill_id) ⇒ Boolean
126 127 128 |
# File 'lib/kairos_mcp/skills_config.rb', line 126 def self.immutable_skill?(skill_id) immutable_skills.include?(skill_id.to_s) end |
.immutable_skills ⇒ Object
Get immutable skills - prefers l0_governance skill if available
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/kairos_mcp/skills_config.rb', line 107 def self.immutable_skills if defined?(Kairos) && Kairos.respond_to?(:skill) governance_skill = Kairos.skill(:l0_governance) if governance_skill&.behavior begin config = governance_skill.behavior.call if config[:immutable_skills] return config[:immutable_skills].map(&:to_s) end rescue StandardError # Fall through to config.yml end end end # Fallback to config.yml load['immutable_skills'] || DEFAULTS['immutable_skills'] end |
.kairos_meta_skill?(skill_id) ⇒ Boolean
102 103 104 |
# File 'lib/kairos_mcp/skills_config.rb', line 102 def self.(skill_id) .include?(skill_id.to_s) end |
.kairos_meta_skills ⇒ Object
Get allowed L0 skills - prefers l0_governance skill if available This implements Pure Agent Skill principle: L0 rules are in L0
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/kairos_mcp/skills_config.rb', line 82 def self. # Try to get from l0_governance skill first (canonical source) if defined?(Kairos) && Kairos.respond_to?(:skill) governance_skill = Kairos.skill(:l0_governance) if governance_skill&.behavior begin config = governance_skill.behavior.call if config[:allowed_skills] return config[:allowed_skills].map(&:to_s) end rescue StandardError # Fall through to config.yml end end end # Fallback to config.yml (for bootstrapping) load['kairos_meta_skills'] || DEFAULTS['kairos_meta_skills'] end |
.layer_blockchain_mode(layer) ⇒ Object
70 71 72 73 |
# File 'lib/kairos_mcp/skills_config.rb', line 70 def self.layer_blockchain_mode(layer) config = layer_config(layer) (config['require_blockchain'] || 'none').to_sym end |
.layer_config(layer) ⇒ Object
Layer-specific configuration methods
55 56 57 58 |
# File 'lib/kairos_mcp/skills_config.rb', line 55 def self.layer_config(layer) layers = load['layers'] || {} layers[layer.to_s] || {} end |
.layer_enabled?(layer) ⇒ Boolean
60 61 62 63 |
# File 'lib/kairos_mcp/skills_config.rb', line 60 def self.layer_enabled?(layer) config = layer_config(layer) config['enabled'] != false end |
.layer_mutable?(layer) ⇒ Boolean
65 66 67 68 |
# File 'lib/kairos_mcp/skills_config.rb', line 65 def self.layer_mutable?(layer) config = layer_config(layer) config['mutable'] == true end |
.layer_requires_approval?(layer) ⇒ Boolean
75 76 77 78 |
# File 'lib/kairos_mcp/skills_config.rb', line 75 def self.layer_requires_approval?(layer) config = layer_config(layer) config['require_human_approval'] == true end |
.load ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/kairos_mcp/skills_config.rb', line 26 def self.load return DEFAULTS.dup unless File.exist?(config_path) loaded = YAML.safe_load(File.read(config_path)) || {} DEFAULTS.merge(loaded) rescue StandardError DEFAULTS.dup end |
.save(config) ⇒ Object
34 35 36 37 |
# File 'lib/kairos_mcp/skills_config.rb', line 34 def self.save(config) FileUtils.mkdir_p(File.dirname(config_path)) File.write(config_path, config.to_yaml) end |
.sqlite_config ⇒ Object
144 145 146 |
# File 'lib/kairos_mcp/skills_config.rb', line 144 def self.sqlite_config storage_config['sqlite'] || {} end |
.state_commit_auto_config ⇒ Object
162 163 164 |
# File 'lib/kairos_mcp/skills_config.rb', line 162 def self.state_commit_auto_config state_commit_config['auto_commit'] || {} end |
.state_commit_auto_enabled? ⇒ Boolean
166 167 168 |
# File 'lib/kairos_mcp/skills_config.rb', line 166 def self.state_commit_auto_enabled? state_commit_auto_config['enabled'] == true end |
.state_commit_config ⇒ Object
State commit configuration
154 155 156 |
# File 'lib/kairos_mcp/skills_config.rb', line 154 def self.state_commit_config load['state_commit'] || {} end |
.state_commit_enabled? ⇒ Boolean
158 159 160 |
# File 'lib/kairos_mcp/skills_config.rb', line 158 def self.state_commit_enabled? state_commit_config['enabled'] != false end |
.state_commit_max_snapshots ⇒ Object
174 175 176 |
# File 'lib/kairos_mcp/skills_config.rb', line 174 def self.state_commit_max_snapshots state_commit_config['max_snapshots'] || 100 end |
.state_commit_snapshot_dir ⇒ Object
170 171 172 |
# File 'lib/kairos_mcp/skills_config.rb', line 170 def self.state_commit_snapshot_dir state_commit_config['snapshot_dir'] || 'storage/snapshots' end |
.storage_backend ⇒ Object
136 137 138 |
# File 'lib/kairos_mcp/skills_config.rb', line 136 def self.storage_backend storage_config['backend'] || 'file' end |
.storage_backend_sqlite? ⇒ Boolean
140 141 142 |
# File 'lib/kairos_mcp/skills_config.rb', line 140 def self.storage_backend_sqlite? storage_backend == 'sqlite' end |
.storage_config ⇒ Object
Storage backend configuration
132 133 134 |
# File 'lib/kairos_mcp/skills_config.rb', line 132 def self.storage_config load['storage'] || { 'backend' => 'file' } end |