Class: KairosMcp::DslSkillsProvider

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

Instance Method Summary collapse

Constructor Details

#initialize(dsl_path = nil, vector_search_enabled: true) ⇒ DslSkillsProvider

Returns a new instance of DslSkillsProvider.



8
9
10
11
12
13
14
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 8

def initialize(dsl_path = nil, vector_search_enabled: true)
  @dsl_path = dsl_path || KairosMcp.dsl_path
  @skills = nil
  @vector_search_enabled = vector_search_enabled
  @vector_search = nil
  @index_built = false
end

Instance Method Details

#astObject



74
75
76
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 74

def ast
  @ast ||= SkillsAst.parse(@dsl_path)
end

#get_skill(id) ⇒ Object



24
25
26
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 24

def get_skill(id)
  skills.find { |s| s.id == id.to_sym }
end

#list_skillsObject



20
21
22
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 20

def list_skills
  skills.map { |s| { id: s.id, title: s.title, use_when: s.use_when } }
end

#rebuild_indexBoolean

Rebuild the vector search index

Returns:

  • (Boolean)

    Success status



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 60

def rebuild_index
  documents = skills.map do |skill|
    {
      id: skill.id.to_s,
      text: build_searchable_text(skill),
      metadata: { title: skill.title, use_when: skill.use_when }
    }
  end
  
  result = vector_search.rebuild(documents)
  @index_built = result
  result
end

#search_skills(query, max_results = 3, semantic: nil) ⇒ Array<Skill>

Search skills using vector search (semantic) or fallback (regex)

Parameters:

  • query (String)

    Search query

  • max_results (Integer) (defaults to: 3)

    Maximum number of results

  • semantic (Boolean) (defaults to: nil)

    Force semantic search if available

Returns:

  • (Array<Skill>)

    Matching skills



34
35
36
37
38
39
40
41
42
43
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 34

def search_skills(query, max_results = 3, semantic: nil)
  # Use semantic search if available and enabled
  use_semantic = semantic.nil? ? @vector_search_enabled : semantic
  
  if use_semantic && vector_search.semantic?
    semantic_search_skills(query, max_results)
  else
    regex_search_skills(query, max_results)
  end
end

#skillsObject



16
17
18
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 16

def skills
  @skills ||= SkillsDsl.load(@dsl_path)
end

#validateObject



78
79
80
81
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 78

def validate
  nodes = SkillsAst.extract_skill_nodes(ast)
  SkillsAst.validate(nodes)
end

#vector_search_statusHash

Get vector search status

Returns:

  • (Hash)

    Status information



48
49
50
51
52
53
54
55
# File 'lib/kairos_mcp/dsl_skills_provider.rb', line 48

def vector_search_status
  {
    enabled: @vector_search_enabled,
    semantic_available: VectorSearch.available?,
    index_built: @index_built,
    document_count: vector_search.count
  }
end