Commit c57d8ee

mo khan <mo@mokhan.ca>
2025-08-13 22:09:55
style: fix linter errors
1 parent 3990dae
bin/lint
@@ -5,4 +5,4 @@ set -e
 
 cd "$(dirname "$0")/.."
 
-bundle exec rake rubocop
+bundle exec rubocop $@
lib/elelem/api.rb
@@ -8,7 +8,7 @@ module Elelem
       @configuration = configuration
     end
 
-    def chat(messages)
+    def chat(messages, &block)
       body = {
         messages: messages,
         model: configuration.model,
@@ -28,9 +28,7 @@ module Elelem
       configuration.http.request(req) do |response|
         raise response.inspect unless response.code == "200"
 
-        response.read_body do |chunk|
-          yield(chunk)
-        end
+        response.read_body(&block)
       end
     end
   end
lib/elelem/application.rb
@@ -4,29 +4,29 @@ module Elelem
   class Application < Thor
     desc "chat", "Start the REPL"
     method_option :help,
-      aliases: "-h",
-      type: :boolean,
-      desc: "Display usage information"
+                  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")
+                  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")
+                  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)
+                  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
+                  aliases: "--debug",
+                  type: :boolean,
+                  desc: "Debug mode",
+                  default: false
     def chat(*)
       if options[:help]
         invoke :help, ["chat"]
@@ -35,10 +35,10 @@ module Elelem
           host: options[:host],
           model: options[:model],
           token: options[:token],
-          debug: options[:debug],
+          debug: options[:debug]
         )
         say "Agent (#{configuration.model})", :green
-        say "#{configuration.tools.banner}", :green
+        say configuration.tools.banner.to_s, :green
 
         agent = Agent.new(configuration)
         agent.repl
lib/elelem/configuration.rb
@@ -28,7 +28,7 @@ module Elelem
 
     def logger
       @logger ||= Logger.new(debug ? "elelem.log" : "/dev/null").tap do |logger|
-        logger.formatter = ->(_, _, _, message) { message.to_s.strip + "\n" }
+        logger.formatter = ->(_, _, _, message) { "#{message.to_s.strip}\n" }
       end
     end
 
lib/elelem/conversation.rb
@@ -2,14 +2,14 @@
 
 module Elelem
   class Conversation
-    SYSTEM_MESSAGE = <<~SYS
+    SYSTEM_MESSAGE = <<~SYS.freeze
       You are ChatGPT, a helpful assistant with reasoning capabilities.
       Current date: #{Time.now.strftime("%Y-%m-%d")}.
       System info: `uname -a` output: #{`uname -a`.strip}
       Reasoning: high
     SYS
 
-    ROLES = [:system, :assistant, :user, :tool].freeze
+    ROLES = %i[system assistant user tool].freeze
 
     def initialize(items = [{ role: "system", content: SYSTEM_MESSAGE }])
       @items = items
lib/elelem/mcp_client.rb
@@ -9,7 +9,7 @@ module Elelem
       @stdin, @stdout, @stderr, @worker_thread = Open3.popen3(*serena_command, pgroup: true)
 
       # 1. Send initialize request
-      init_result = send_request(
+      send_request(
         method: "initialize",
         params: {
           protocolVersion: "2024-11-05",
@@ -46,8 +46,7 @@ module Elelem
 
     private
 
-    attr_reader :stdin, :stdout, :stderr, :worker_thread
-    attr_reader :configuration
+    attr_reader :stdin, :stdout, :stderr, :worker_thread, :configuration
 
     def serena_command
       [
@@ -58,7 +57,7 @@ module Elelem
         "start-mcp-server",
         "--transport", "stdio",
         "--context", "ide-assistant",
-        "--project", Dir.pwd,
+        "--project", Dir.pwd
       ]
     end
 
@@ -66,7 +65,7 @@ module Elelem
       request = {
         jsonrpc: "2.0",
         id: Time.now.to_i,
-        method: method,
+        method: method
       }
       request[:params] = params unless params.empty?
       configuration.logger.debug(JSON.pretty_generate(request))
@@ -86,7 +85,7 @@ module Elelem
     def send_notification(method:, params: {})
       notification = {
         jsonrpc: "2.0",
-        method: method,
+        method: method
       }
       notification[:params] = params unless params.empty?
       configuration.logger.debug("Sending notification: #{JSON.pretty_generate(notification)}")
lib/elelem/state.rb
@@ -27,17 +27,13 @@ module Elelem
 
     class Waiting < State
       def process(message)
-        state = self
-
-        if message["thinking"] && !message["thinking"].empty?
-          state = Thinking.new(agent)
-        elsif message["tool_calls"]&.any?
-          state = Executing.new(agent)
-        elsif message["content"] && !message["content"].empty?
-          state = Talking.new(agent)
-        else
-          state = nil
-        end
+        state = if message["thinking"] && !message["thinking"].empty?
+                  Thinking.new(agent)
+                elsif message["tool_calls"]&.any?
+                  Executing.new(agent)
+                elsif message["content"] && !message["content"].empty?
+                  Talking.new(agent)
+                end
 
         state&.process(message)
       end
lib/elelem/tools.rb
@@ -11,7 +11,7 @@ module Elelem
           parameters: {
             type: "object",
             properties: {
-              command: { type: "string" },
+              command: { type: "string" }
             },
             required: ["command"]
           }
@@ -19,9 +19,9 @@ module Elelem
         handler: lambda { |args|
           stdout, stderr, _status = Open3.capture3("/bin/sh", "-c", args["command"])
           stdout + stderr
-        },
-      },
-    ]
+        }
+      }
+    ].freeze
 
     def initialize(configuration, tools = DEFAULT_TOOLS)
       @configuration = configuration
@@ -39,8 +39,8 @@ module Elelem
             result = client.call_tool(tool["name"], args)
             output = result.dig("content", 0, "text") || result.to_s
             configuration.tui.say(output)
-            return output
-          },
+            output
+          }
         }
       end
     end
lib/elelem/tui.rb
@@ -32,7 +32,7 @@ module Elelem
     end
 
     def clear_line
-      stdout.print("\r" + " " * 80 + "\r")
+      stdout.print("\r#{" " * 80}\r")
       stdout.flush
     end