Class: KairosMcp::DslAst::Decompiler
- Inherits:
-
Object
- Object
- KairosMcp::DslAst::Decompiler
- Defined in:
- lib/kairos_mcp/dsl_ast/decompiler.rb
Overview
AST -> Natural language reverse conversion Template-based decompilation of definition nodes to human-readable Markdown. Used for: drift detection comparison, formalization_record decompile_text field.
Class Method Summary collapse
-
.decompile(definition) ⇒ String
Decompile a full definition to Markdown.
- .decompile_check(node) ⇒ Object
- .decompile_constraint(node) ⇒ Object
-
.decompile_node(node) ⇒ String
Decompile a single node to a Markdown line.
- .decompile_plan(node) ⇒ Object
- .decompile_semantic_reasoning(node) ⇒ Object
- .decompile_tool_call(node) ⇒ Object
Class Method Details
.decompile(definition) ⇒ String
Decompile a full definition to Markdown
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 14 def self.decompile(definition) return "" unless definition && definition.nodes && !definition.nodes.empty? lines = ["## Definition (Decompiled)\n"] definition.nodes.each do |node| lines << decompile_node(node) end lines.join("\n") end |
.decompile_check(node) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 67 def self.decompile_check(node) opts = node. || {} line = "- **Check** (`#{node.name}`)" line += ": #{opts[:condition]}" if opts[:condition] line end |
.decompile_constraint(node) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 48 def self.decompile_constraint(node) opts = node. || {} parts = ["- **Requirement** (`#{node.name}`)"] if opts[:condition] parts << ": #{opts[:condition]}" end qualifiers = [] qualifiers << "required" if opts[:required] qualifiers << "timing: #{opts[:timing]}" if opts[:timing] qualifiers << "scope: #{opts[:scope]}" if opts[:scope] qualifiers << "target: #{opts[:target]}" if opts[:target] parts << " [#{qualifiers.join(', ')}]" unless qualifiers.empty? parts.join end |
.decompile_node(node) ⇒ String
Decompile a single node to a Markdown line
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 29 def self.decompile_node(node) case node.type when :Constraint decompile_constraint(node) when :Check decompile_check(node) when :Plan decompile_plan(node) when :ToolCall decompile_tool_call(node) when :SemanticReasoning decompile_semantic_reasoning(node) else "- **Unknown** (`#{node.name}`): type=#{node.type}" end end |
.decompile_plan(node) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 74 def self.decompile_plan(node) opts = node. || {} steps = opts[:steps] || [] step_str = steps.map(&:to_s).join(" -> ") "- **Workflow** (`#{node.name}`): #{steps.size} steps — #{step_str}" end |
.decompile_semantic_reasoning(node) ⇒ Object
88 89 90 91 92 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 88 def self.decompile_semantic_reasoning(node) opts = node. || {} prompt = opts[:prompt] || "(no prompt)" "- **Human Judgment Required** (`#{node.name}`): #{prompt}" end |
.decompile_tool_call(node) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/kairos_mcp/dsl_ast/decompiler.rb', line 81 def self.decompile_tool_call(node) opts = node. || {} line = "- **Tool Call** (`#{node.name}`)" line += ": `#{opts[:command]}`" if opts[:command] line end |