Class: Ace::LLM::Providers::CLI::Atoms::CommandRewriter

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/llm/providers/cli/atoms/command_rewriter.rb

Overview

Provider-agnostic skill/command rewriter. Transforms commands based on a formatter proc.

Rules:

  • Only matches ‘/name` preceded by start-of-line or whitespace

  • Skips matches inside backtick code blocks (inline or fenced)

  • Skips URL-like patterns

  • Matches longest names first (avoids partial matches)

Class Method Summary collapse

Class Method Details

.call(prompt, skill_names:, formatter:) ⇒ String

Rewrite command references in a prompt string.

Parameters:

  • prompt (String)

    The prompt text to rewrite

  • skill_names (Array<String>)

    Known command names

  • formatter (Proc)

    Transformation proc (e.g., ->(name) { “/skill:#name” })

Returns:

  • (String)

    Rewritten prompt



23
24
25
26
27
28
29
30
31
32
# File 'lib/ace/llm/providers/cli/atoms/command_rewriter.rb', line 23

def self.call(prompt, skill_names:, formatter:)
  return prompt if prompt.nil? || prompt.empty?
  return prompt if skill_names.nil? || skill_names.empty?

  sorted_names = skill_names.sort_by { |n| -n.length }
  name_pattern = sorted_names.map { |n| Regexp.escape(n) }.join("|")
  pattern = /(?<=\A|\s)\/(#{name_pattern})(?=\s|\z)/m

  rewrite_outside_code_blocks(prompt, pattern, formatter)
end