lib/elelem/application.rb



# frozen_string_literal: true

module Elelem
  class Application < Thor
    desc "chat", "Start the REPL"
    method_option :help,
                  aliases: "-h",
                  type: :boolean,
                  desc: "Display usage information"
    method_option :host,
                  aliases: "--host",
                  type: :string,
                  desc: "Ollama host",
                  default: ENV.fetch("OLLAMA_HOST", "localhost:11434")
    method_option :model,
                  aliases: "--model",
                  type: :string,
                  desc: "Ollama model",
                  default: ENV.fetch("OLLAMA_MODEL", "gpt-oss")
    method_option :token,
                  aliases: "--token",
                  type: :string,
                  desc: "Ollama token",
                  default: ENV.fetch("OLLAMA_API_KEY", nil)
    method_option :debug,
                  aliases: "--debug",
                  type: :boolean,
                  desc: "Debug mode",
                  default: false
    def chat(*)
      if options[:help]
        invoke :help, ["chat"]
      else
        configuration = Configuration.new(
          host: options[:host],
          model: options[:model],
          token: options[:token],
          debug: options[:debug]
        )
        say "Agent (#{configuration.model})", :green
        say configuration.tools.banner.to_s, :green

        agent = Agent.new(configuration)
        agent.repl
      end
    end

    desc "version", "The version of this CLI"
    def version
      say "v#{Elelem::VERSION}"
    end
    map %w[--version -v] => :version
  end
end