Class: RubyAgent::Agent
- Inherits:
-
Object
- Object
- RubyAgent::Agent
- Includes:
- CallbackSupport
- Defined in:
- lib/ruby_agent/agent.rb
Defined Under Namespace
Classes: ConnectionError
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#conversation_history ⇒ Object
readonly
Returns the value of attribute conversation_history.
-
#mcp_servers ⇒ Object
readonly
Returns the value of attribute mcp_servers.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#sandbox_dir ⇒ Object
readonly
Returns the value of attribute sandbox_dir.
-
#session_key ⇒ Object
readonly
Returns the value of attribute session_key.
-
#skip_permissions ⇒ Object
readonly
Returns the value of attribute skip_permissions.
-
#system_prompt ⇒ Object
readonly
Returns the value of attribute system_prompt.
-
#timezone ⇒ Object
readonly
Returns the value of attribute timezone.
-
#verbose ⇒ Object
readonly
Returns the value of attribute verbose.
Instance Method Summary collapse
- #ask(message) ⇒ Object
- #close ⇒ Object
- #config ⇒ Object
- #connect(timezone: "Eastern Time (US & Canada)", skip_permissions: true, verbose: true, mcp_servers: nil, session_key: nil, resume_session: false, **additional_context) ⇒ Object
-
#initialize(name: "MyName", system_prompt: nil, model: nil, sandbox_dir: nil) ⇒ Agent
constructor
Each callback fires only for its specific event type, while on_event callbacks fires for all events.
Methods included from CallbackSupport
Constructor Details
#initialize(name: "MyName", system_prompt: nil, model: nil, sandbox_dir: nil) ⇒ Agent
Each callback fires only for its specific event type, while on_event callbacks fires for all events. This follows the Single Responsibility Principle and makes the code more maintainable.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ruby_agent/agent.rb', line 51 def initialize(name: "MyName", system_prompt: nil, model: nil, sandbox_dir: nil) @name = name @system_prompt = system_prompt || config.system_prompt @model = model || config.model @sandbox_dir = sandbox_dir || config.sandbox_dir @stdin = nil @stdout = nil @stderr = nil @wait_thr = nil @parsed_lines = [] @parsed_lines_mutex = Mutex.new return unless @session_key.nil? Time.now.utc.strftime("%Y%m%d%H%M%S") end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def context @context end |
#conversation_history ⇒ Object (readonly)
Returns the value of attribute conversation_history.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def conversation_history @conversation_history end |
#mcp_servers ⇒ Object (readonly)
Returns the value of attribute mcp_servers.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def mcp_servers @mcp_servers end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def model @model end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def name @name end |
#sandbox_dir ⇒ Object (readonly)
Returns the value of attribute sandbox_dir.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def sandbox_dir @sandbox_dir end |
#session_key ⇒ Object (readonly)
Returns the value of attribute session_key.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def session_key @session_key end |
#skip_permissions ⇒ Object (readonly)
Returns the value of attribute skip_permissions.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def @skip_permissions end |
#system_prompt ⇒ Object (readonly)
Returns the value of attribute system_prompt.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def system_prompt @system_prompt end |
#timezone ⇒ Object (readonly)
Returns the value of attribute timezone.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def timezone @timezone end |
#verbose ⇒ Object (readonly)
Returns the value of attribute verbose.
10 11 12 |
# File 'lib/ruby_agent/agent.rb', line 10 def verbose @verbose end |
Instance Method Details
#ask(message) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/ruby_agent/agent.rb', line 106 def ask() return if .nil? || .strip.empty? () read_response end |
#close ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/ruby_agent/agent.rb', line 113 def close return unless @stdin @stdin.close unless @stdin.closed? @stdout.close unless @stdout.closed? @stderr.close unless @stderr.closed? @wait_thr&.join ensure @stdin = nil @stdout = nil @stderr = nil @wait_thr = nil end |
#config ⇒ Object
68 69 70 |
# File 'lib/ruby_agent/agent.rb', line 68 def config RubyAgent.configuration ||= RubyAgent::Configuration.new end |
#connect(timezone: "Eastern Time (US & Canada)", skip_permissions: true, verbose: true, mcp_servers: nil, session_key: nil, resume_session: false, **additional_context) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ruby_agent/agent.rb', line 72 def connect( timezone: "Eastern Time (US & Canada)", skip_permissions: true, verbose: true, mcp_servers: nil, session_key: nil, resume_session: false, **additional_context ) @timezone = timezone @skip_permissions = @verbose = verbose @mcp_servers = mcp_servers @session_key = session_key @resume_session = resume_session @context = additional_context @conversation_history = [] ensure_sandbox_exists command = build_claude_command @stdin, @stdout, @stderr, @wait_thr = spawn_process(command, @sandbox_dir) sleep 0.5 unless @wait_thr.alive? error_output = @stderr.read raise ConnectionError, "Claude process failed to start. Error: #{error_output}" end puts "Claude process started successfully (PID: #{@wait_thr.pid})" self end |