Class: KairosMcp::VersionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/kairos_mcp/version_manager.rb

Class Method Summary collapse

Class Method Details

.create_snapshot(reason: nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kairos_mcp/version_manager.rb', line 16

def self.create_snapshot(reason: nil)
  FileUtils.mkdir_p(versions_dir)
  timestamp = Time.now.strftime('%Y%m%d_%H%M%S')
  filename = "kairos_#{timestamp}.rb"
  version_path = File.join(versions_dir, filename)
  
  FileUtils.cp(dsl_path, version_path)
  
  # Save metadata
  meta = {
    timestamp: timestamp,
    reason: reason,
    filename: filename,
    created_at: Time.now.iso8601
  }
  meta_path = File.join(versions_dir, "#{filename}.meta.json")
  File.write(meta_path, JSON.pretty_generate(meta))
  
  filename
end

.diff(version_filename) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/kairos_mcp/version_manager.rb', line 77

def self.diff(version_filename)
  version_path = File.join(versions_dir, version_filename)
  raise "Version not found: #{version_filename}" unless File.exist?(version_path)
  
  old_content = File.read(version_path)
  current_content = File.read(dsl_path)
  
  # Simple line-by-line diff
  old_lines = old_content.lines
  current_lines = current_content.lines
  
  {
    old_lines: old_lines.size,
    current_lines: current_lines.size,
    added: (current_lines - old_lines).size,
    removed: (old_lines - current_lines).size
  }
end

.dsl_pathObject



12
13
14
# File 'lib/kairos_mcp/version_manager.rb', line 12

def self.dsl_path
  KairosMcp.dsl_path
end

.get_version_content(version_filename) ⇒ Object



70
71
72
73
74
75
# File 'lib/kairos_mcp/version_manager.rb', line 70

def self.get_version_content(version_filename)
  version_path = File.join(versions_dir, version_filename)
  raise "Version not found: #{version_filename}" unless File.exist?(version_path)
  
  File.read(version_path)
end

.list_versionsObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/kairos_mcp/version_manager.rb', line 37

def self.list_versions
  FileUtils.mkdir_p(versions_dir)
  
  Dir[File.join(versions_dir, '*.rb')].map do |f|
    filename = File.basename(f)
    meta_path = "#{f}.meta.json"
    meta = if File.exist?(meta_path)
             JSON.parse(File.read(meta_path)) rescue {}
           else
             {}
           end
    
    {
      filename: filename,
      created: File.mtime(f),
      reason: meta['reason']
    }
  end.sort_by { |v| v[:created] }.reverse
end

.rollback(version_filename) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/kairos_mcp/version_manager.rb', line 57

def self.rollback(version_filename)
  version_path = File.join(versions_dir, version_filename)
  raise "Version not found: #{version_filename}" unless File.exist?(version_path)
  
  # Backup current state before rollback
  create_snapshot(reason: "pre-rollback backup")
  
  # Perform rollback
  FileUtils.cp(version_path, dsl_path)
  
  version_filename
end

.versions_dirObject



8
9
10
# File 'lib/kairos_mcp/version_manager.rb', line 8

def self.versions_dir
  KairosMcp.versions_dir
end