Class: KairosMcp::StateCommit::PendingChanges

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

Overview

PendingChanges: Tracks changes since last commit

This is a singleton-like class that accumulates changes and checks auto-commit trigger conditions.

Class Method Summary collapse

Class Method Details

.add(layer:, action:, skill_id:, reason: nil, metadata: {}) ⇒ Object

Add a change to the pending list

Parameters:

  • layer (String)

    Layer identifier (L0, L1, L2)

  • action (String)

    Action type (create, update, delete, promote, demote, archive, unarchive)

  • skill_id (String)

    Skill/knowledge identifier

  • reason (String, nil) (defaults to: nil)

    Optional reason for the change

  • metadata (Hash) (defaults to: {})

    Additional metadata



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 24

def add(layer:, action:, skill_id:, reason: nil, metadata: {})
  @mutex.synchronize do
    @changes << {
      layer: layer.to_s,
      action: action.to_s,
      skill_id: skill_id.to_s,
      reason: reason,
      metadata: ,
      timestamp: Time.now.iso8601
    }
  end
end

.allArray<Hash>

Get all pending changes

Returns:

  • (Array<Hash>)

    List of pending changes



40
41
42
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 40

def all
  @mutex.synchronize { @changes.dup }
end

.by_actionHash

Get changes grouped by action

Returns:

  • (Hash)

    Changes grouped by action



112
113
114
115
116
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 112

def by_action
  @mutex.synchronize do
    @changes.group_by { |c| c[:action] }
  end
end

.by_layerHash

Get changes grouped by layer

Returns:

  • (Hash)

    Changes grouped by layer



103
104
105
106
107
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 103

def by_layer
  @mutex.synchronize do
    @changes.group_by { |c| c[:layer] }
  end
end

.check_trigger_conditions(config) ⇒ Hash

Check trigger conditions for auto-commit

Parameters:

  • config (Hash)

    Auto-commit configuration

Returns:

  • (Hash)

    Result with should_commit flag and trigger reason



129
130
131
132
133
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 129

def check_trigger_conditions(config)
  return { should_commit: false, trigger: nil } unless config

  @mutex.synchronize { _check_trigger_conditions(config) }
end

.clear!Object

Clear all pending changes



52
53
54
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 52

def clear!
  @mutex.synchronize { @changes = [] }
end

.countInteger

Get pending changes count

Returns:

  • (Integer)

    Number of pending changes



47
48
49
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 47

def count
  @mutex.synchronize { @changes.size }
end

.includes_demotion?Boolean

Check if there are any demotions

Returns:

  • (Boolean)

    True if demotions exist



73
74
75
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 73

def includes_demotion?
  @mutex.synchronize { _includes_demotion? }
end

.includes_l0_change?Boolean

Check if there are any L0 changes

Returns:

  • (Boolean)

    True if L0 changes exist



59
60
61
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 59

def includes_l0_change?
  @mutex.synchronize { _includes_l0_change? }
end

.includes_promotion?Boolean

Check if there are any promotions

Returns:

  • (Boolean)

    True if promotions exist



66
67
68
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 66

def includes_promotion?
  @mutex.synchronize { _includes_promotion? }
end

.l1_changes_countInteger

Get L1 changes count

Returns:

  • (Integer)

    Number of L1 changes



80
81
82
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 80

def l1_changes_count
  @mutex.synchronize { _l1_changes_count }
end

.l2_changes_countInteger

Get L2 changes count

Returns:

  • (Integer)

    Number of L2 changes



87
88
89
90
91
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 87

def l2_changes_count
  @mutex.synchronize do
    @changes.count { |c| c[:layer] == 'L2' }
  end
end

.summaryHash

Get summary of pending changes

Returns:

  • (Hash)

    Summary with counts per layer and action



121
122
123
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 121

def summary
  @mutex.synchronize { _build_summary }
end

.total_changes_countInteger

Get total changes count

Returns:

  • (Integer)

    Total number of changes



96
97
98
# File 'lib/kairos_mcp/state_commit/pending_changes.rb', line 96

def total_changes_count
  count
end