main
1# frozen_string_literal: true
2
3require "cli/ui"
4require "erb"
5require "fileutils"
6require "json"
7require "json-schema"
8require "logger"
9require "net/llm"
10require "open3"
11require "pathname"
12require "reline"
13require "set"
14require "thor"
15require "timeout"
16
17require_relative "elelem/agent"
18require_relative "elelem/application"
19require_relative "elelem/conversation"
20require_relative "elelem/tool"
21require_relative "elelem/toolbox"
22require_relative "elelem/version"
23
24Reline.input = $stdin
25Reline.output = $stdout
26
27module Elelem
28 class Error < StandardError; end
29
30 class Shell
31 def execute(command, args: [], env: {}, cwd: Dir.pwd, stdin: nil)
32 cmd = command.is_a?(Array) ? command.first : command
33 cmd_args = command.is_a?(Array) ? command[1..] + args : args
34 stdout, stderr, status = Open3.capture3(
35 env,
36 cmd,
37 *cmd_args,
38 chdir: cwd,
39 stdin_data: stdin
40 )
41 {
42 "exit_status" => status.exitstatus,
43 "stdout" => stdout.to_s,
44 "stderr" => stderr.to_s
45 }
46 end
47 end
48
49 class << self
50 def shell
51 @shell ||= Shell.new
52 end
53 end
54end