solid_agents 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5972db63aa2e5fb01908f0a70c788856b9812fce9961b21cf75c1d79b041406
4
- data.tar.gz: 922aafdc00524dab9c490c56031af71c99ef539afbbf87acba80c53a9c1b73c3
3
+ metadata.gz: e4096d5a7518890d89a9ab5ef5583e1828f9457abe69f536c2e7042c05e9288a
4
+ data.tar.gz: f466a2d473053692596c5c70f43530df1e77e474c10622084ef6f3431d4b36b3
5
5
  SHA512:
6
- metadata.gz: 1290f03a93a621b1bc78f94b8f7031134809b368c1e37c9542f5d22b58abd8d579b7774e93c6d0d6720838b3b5ea618a807c5fd6e2562737701ac7b0e5598c28
7
- data.tar.gz: e6f7ceca7356d904fc0adf8187eea3ac4784e64cac04db5c3e944ceda661112c9e6729d9d1524f34ec2fb610925eafe10452fb79d2d611a088ca0e9835e145c5
6
+ metadata.gz: c1833f9334bf37f89c13d473154ef428240b87772fbedac727daa369f6cda15906ab93225fee8c3471f0d523794a5e9efa489d2e8c443f8e097518c12c23535d
7
+ data.tar.gz: 887265f38a7cdb95a05f15ab8a0919af5d1e9039de54a2f01e2507fecd75c6aa53cc5c52acf983f715c885950c2b158323a4969f4e3b9f962eea0245132301cd
data/CHANGELOG.md CHANGED
@@ -2,14 +2,28 @@
2
2
 
3
3
  All notable changes to `solid_agents` will be documented in this file.
4
4
 
5
+ ## [v0.2.1] - 2026-03-23
6
+
7
+ Follow-up release for RubyLLM runtime and path conventions.
8
+
9
+ - Moved agent classes and prompt templates to `app/solid_agents/agents` and `app/solid_agents/prompts`.
10
+ - Added VCR-backed live RubyLLM integration coverage with secret filtering and record-once behavior.
11
+ - Standardized LLM credential loading to environment variables only and added `.env.sample`.
12
+ - Updated installer and docs to reflect ENV-first configuration and current runtime defaults.
13
+
14
+ Status notes:
15
+
16
+ - This release is still WIP and not production-ready.
17
+ - Breaking changes are expected before `1.0`.
18
+
5
19
  ## [v0.2.0] - 2026-03-23
6
20
 
7
21
  Major architecture reset delivered as a minor release for rapid iteration.
8
22
 
9
- - Replaced runtime adapters with a single pi-only execution path.
23
+ - Replaced runtime adapters with a single RubyLLM-first execution path.
10
24
  - Rebuilt the run model into an event-driven staged workflow.
11
25
  - Added work-item board tracking and explicit inter-agent handoff records.
12
- - Introduced stage ownership with alphabetical agents: alex, betty, chad, david, emma.
26
+ - Introduced stage ownership with alphabetical agents: alex, betty, chad, david, eddy.
13
27
  - Updated installer schema and initializer templates for the new workflow primitives.
14
28
  - Reworked run UI to expose stage, owner, events, and artifacts in clean columns.
15
29
  - Expanded Minitest coverage and moved to YAML fixtures for deterministic test data.
@@ -25,7 +39,7 @@ Initial public release (WIP).
25
39
 
26
40
  - Introduced `solid_agents` Rails engine for database-backed agent run orchestration.
27
41
  - Added run lifecycle models and persistence for runs, events, artifacts, agents, and config.
28
- - Added dispatch and execution flow with runtime adapters for OpenAI pi runtime and OpenAI pi runtime.
42
+ - Added dispatch and execution flow with runtime adapters for OpenAI RubyLLM runtime and OpenAI RubyLLM runtime.
29
43
  - Added built-in UI/controllers for managing agents and inspecting runs.
30
44
  - Added installer generator, schema template, and base configuration defaults.
31
45
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SolidAgents
2
2
 
3
- **Event-driven error fixing workflow for Rails apps, powered by the pi runtime.**
3
+ **Event-driven error fixing workflow for Rails apps, powered by RubyLLM agents.**
4
4
 
5
5
  > [!WARNING]
6
6
  > `solid_agents` is an early release and still a work in progress.
@@ -18,9 +18,9 @@
18
18
 
19
19
  - Consume error-like events from source adapters (starting with `solid_errors` style payloads)
20
20
  - Track runs in an event-driven stage machine
21
- - Enforce non-overlapping stage ownership (`alex`, `betty`, `chad`, `david`, `emma`)
21
+ - Enforce non-overlapping stage ownership (`alex`, `betty`, `chad`, `david`, `eddy`)
22
22
  - Persist handoffs, notes, and artifacts for each stage
23
- - Execute stage tasks through the pi runtime adapter
23
+ - Execute stage tasks through the RubyLLM runtime adapter
24
24
 
25
25
  It does **not** own observability storage or incident detection as a source of truth.
26
26
 
@@ -52,7 +52,7 @@ Configure engine DB connection if desired:
52
52
  ```ruby
53
53
  # config/environments/production.rb
54
54
  config.solid_agents.connects_to = { database: { writing: :solid_agents } }
55
- config.solid_agents.default_runtime = :pi
55
+ config.solid_agents.default_runtime = :ruby_llm
56
56
  ```
57
57
 
58
58
  Mount the UI:
@@ -69,11 +69,11 @@ end
69
69
  Create pipeline agents:
70
70
 
71
71
  ```ruby
72
- %w[alex betty chad david emma].each do |key|
72
+ %w[alex betty chad david eddy].each do |key|
73
73
  SolidAgents::Agent.find_or_create_by!(key: key, environment: Rails.env) do |agent|
74
74
  agent.name = key.capitalize
75
75
  agent.role = key
76
- agent.runtime = "pi"
76
+ agent.runtime = "ruby_llm"
77
77
  agent.working_directory = Rails.root.to_s
78
78
  agent.enabled = true
79
79
  end
@@ -86,10 +86,16 @@ Dispatch from a job:
86
86
  SolidAgents.dispatch_error(source: solid_error_record, agent_key: "alex")
87
87
  ```
88
88
 
89
+ ## RubyLLM Conventions
90
+
91
+ - Agent classes live in `app/solid_agents/agents`.
92
+ - Prompt instructions live in `app/solid_agents/prompts/.../instructions.txt.erb`.
93
+ - Stage owners map directly to RubyLLM agent classes.
94
+
89
95
  ## Configuration
90
96
 
91
97
  ```ruby
92
- config.solid_agents.pi_command = "pi"
98
+ config.solid_agents.default_model = "minimax/minimax-m2.7"
93
99
  config.solid_agents.default_test_command = "bin/rails test"
94
100
  config.solid_agents.max_iterations = 8
95
101
  ```
@@ -101,3 +107,17 @@ bundle install
101
107
  bundle exec rake test
102
108
  gem build solid_agents.gemspec
103
109
  ```
110
+
111
+ ## Secrets And Testing
112
+
113
+ - Runtime credentials are loaded from environment variables only: `OPENROUTER_API_KEY` and optional `OPENROUTER_API_BASE`.
114
+ - Keep real keys out of committed files and never commit `.env`.
115
+ - Live LLM tests use VCR with `record: :once` and secret filtering.
116
+ - Record cassettes intentionally with:
117
+
118
+ ```bash
119
+ LIVE_LLM=1 OPENROUTER_API_KEY=... bundle exec rake test TEST=test/integration/solid_agents/ruby_llm_live_flow_test.rb
120
+ ```
121
+
122
+ - To re-record a live interaction, delete the cassette file first and run the command again.
123
+ - You can create a local `.env` from `.env.sample` and load it with `set -a; source .env; set +a`.
@@ -4,7 +4,7 @@ module SolidAgents
4
4
  class Agent < Record
5
5
  self.table_name = "solid_agents_agents"
6
6
 
7
- ROLES = %w[alex betty chad david emma].freeze
7
+ ROLES = %w[alex betty chad david eddy].freeze
8
8
 
9
9
  has_many :runs, class_name: "SolidAgents::Run", dependent: :nullify
10
10
 
@@ -7,8 +7,9 @@ module SolidAgents
7
7
  class PromptBuilder
8
8
  def self.call(run:, context:)
9
9
  <<~PROMPT
10
- You are #{run.stage_owner} executing stage #{run.stage} for run #{run.id}.
11
- Goal: move the workflow to the next stage with clear evidence.
10
+ Stage owner: #{run.stage_owner}
11
+ Stage: #{run.stage}
12
+ Run id: #{run.id}
12
13
 
13
14
  Constraints:
14
15
  - Repository path: #{run.repo_path}
@@ -17,11 +18,6 @@ module SolidAgents
17
18
  - Runtime: #{run.runtime}
18
19
  - Max iterations: #{run.max_iterations || SolidAgents.max_iterations}
19
20
 
20
- Stage handoff contract:
21
- - Produce concise notes for the next stage owner.
22
- - Include reproducible evidence and command output.
23
- - Respect repository rules from AGENTS.md.
24
-
25
21
  Context JSON:
26
22
  #{JSON.pretty_generate(context)}
27
23
  PROMPT
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class Alex < Base
6
+ def initialize(run:, context:)
7
+ super(run: run, context: context, owner: "alex")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class Base < RubyLLM::Agent
6
+ model SolidAgents.default_model, provider: SolidAgents.default_provider
7
+ tools SolidAgents::Tools::WorkflowGuideTool.new
8
+
9
+ attr_reader :run, :context, :owner
10
+
11
+ def initialize(run:, context:, owner:)
12
+ @run = run
13
+ @context = context
14
+ @owner = owner.to_s
15
+ super()
16
+ end
17
+
18
+ def call(prompt)
19
+ ask(prompt)
20
+ end
21
+
22
+ def instructions
23
+ template_path = File.expand_path("../prompts/#{owner}/instructions.txt.erb", __dir__)
24
+ ERB.new(File.read(template_path)).result(binding)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class Betty < Base
6
+ def initialize(run:, context:)
7
+ super(run: run, context: context, owner: "betty")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class Chad < Base
6
+ def initialize(run:, context:)
7
+ super(run: run, context: context, owner: "chad")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class David < Base
6
+ def initialize(run:, context:)
7
+ super(run: run, context: context, owner: "david")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Agents
5
+ class Eddy < Base
6
+ def initialize(run:, context:)
7
+ super(run: run, context: context, owner: "eddy")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "agents/base"
4
+ require_relative "agents/alex"
5
+ require_relative "agents/betty"
6
+ require_relative "agents/chad"
7
+ require_relative "agents/david"
8
+ require_relative "agents/eddy"
9
+
10
+ module SolidAgents
11
+ module Agents
12
+ AGENT_CLASSES = {
13
+ "alex" => SolidAgents::Agents::Alex,
14
+ "betty" => SolidAgents::Agents::Betty,
15
+ "chad" => SolidAgents::Agents::Chad,
16
+ "david" => SolidAgents::Agents::David,
17
+ "eddy" => SolidAgents::Agents::Eddy
18
+ }.freeze
19
+
20
+ module_function
21
+
22
+ def for_owner(owner)
23
+ AGENT_CLASSES.fetch(owner.to_s, SolidAgents::Agents::Alex)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ You are Alex, the intake and triage agent for SolidAgents.
2
+ Work stage: <%= run.stage %>
3
+ Produce structured triage notes and a clean handoff summary for Betty.
@@ -0,0 +1,3 @@
1
+ You are Betty, the reproduction agent for SolidAgents.
2
+ Work stage: <%= run.stage %>
3
+ Prioritize failing automated reproduction and provide reproducible evidence.
@@ -0,0 +1,3 @@
1
+ You are Chad, the code fix implementation agent for SolidAgents.
2
+ Work stage: <%= run.stage %>
3
+ Apply minimal safe fixes and prepare concise rationale for David.
@@ -0,0 +1,3 @@
1
+ You are David, the verification agent for SolidAgents.
2
+ Work stage: <%= run.stage %>
3
+ Validate automated and manual verification evidence before handoff.
@@ -0,0 +1,3 @@
1
+ You are Eddy, the PR and CI shepherd agent for SolidAgents.
2
+ Work stage: <%= run.stage %>
3
+ Ensure PR quality, CI follow-through, and clear closure notes.
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidAgents
4
+ module Tools
5
+ class WorkflowGuideTool < RubyLLM::Tool
6
+ description "Returns workflow guidance for a given stage owner pair"
7
+
8
+ param :stage, type: "string", desc: "Current workflow stage"
9
+ param :owner, type: "string", desc: "Current stage owner"
10
+
11
+ def execute(stage:, owner:)
12
+ {
13
+ stage: stage,
14
+ owner: owner,
15
+ guidance: "Produce concise evidence, then hand off cleanly to the next stage owner.",
16
+ required_outputs: ["notes", "artifacts", "handoff_summary"]
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -18,7 +18,8 @@ module SolidAgents
18
18
  "",
19
19
  '\\1# Configure Solid Agent',
20
20
  '\\1config.solid_agents.connects_to = { database: { writing: :solid_agents } }',
21
- '\\1config.solid_agents.default_runtime = :pi'
21
+ '\\1config.solid_agents.default_runtime = :ruby_llm',
22
+ '\\1config.solid_agents.default_provider = :openrouter'
22
23
  ].join("\n")
23
24
  end
24
25
  end
@@ -4,7 +4,12 @@ Rails.application.configure do
4
4
  # Optional: override in specific environments.
5
5
  # config.solid_agents.connects_to = { database: { writing: :solid_agents } }
6
6
 
7
- config.solid_agents.pi_command = ENV.fetch("SOLID_AGENTS_PI_COMMAND", "pi")
7
+ # Configure LLM access with environment variables:
8
+ # OPENROUTER_API_KEY="..."
9
+ # OPENROUTER_API_BASE="https://openrouter.ai/api/v1" # optional
10
+
11
+ config.solid_agents.default_model = ENV.fetch("SOLID_AGENTS_DEFAULT_MODEL", "minimax/minimax-m2.7")
12
+ config.solid_agents.default_provider = :openrouter
8
13
  config.solid_agents.default_test_command = ENV.fetch("SOLID_AGENTS_TEST_COMMAND", "bin/rails test")
9
14
  config.solid_agents.max_iterations = ENV.fetch("SOLID_AGENTS_MAX_ITERATIONS", 8).to_i
10
15
  end
@@ -5,7 +5,7 @@ ActiveRecord::Schema[6.1].define do
5
5
  t.string :key, null: false
6
6
  t.string :name, null: false
7
7
  t.string :role, null: false, default: "alex"
8
- t.string :runtime, null: false, default: "pi"
8
+ t.string :runtime, null: false, default: "ruby_llm"
9
9
  t.boolean :enabled, null: false, default: true
10
10
  t.string :environment
11
11
  t.string :model
@@ -28,7 +28,7 @@ ActiveRecord::Schema[6.1].define do
28
28
  t.string :status, null: false, default: "queued"
29
29
  t.string :stage, null: false, default: "received"
30
30
  t.string :stage_owner, null: false, default: "alex"
31
- t.string :runtime, null: false, default: "pi"
31
+ t.string :runtime, null: false, default: "ruby_llm"
32
32
  t.string :environment, null: false
33
33
  t.string :repo_path
34
34
  t.string :base_branch
@@ -4,6 +4,7 @@ module SolidAgents
4
4
  class Engine < ::Rails::Engine
5
5
  config.root = File.expand_path("../..", __dir__)
6
6
  isolate_namespace SolidAgents
7
+ paths.add "app/solid_agents", eager_load: true
7
8
 
8
9
  config.solid_agents = ActiveSupport::OrderedOptions.new
9
10
 
@@ -12,5 +13,15 @@ module SolidAgents
12
13
  SolidAgents.public_send(:"#{name}=", value)
13
14
  end
14
15
  end
16
+
17
+ initializer "solid_agents.ruby_llm" do
18
+ SolidAgents.openrouter_api_key ||= ENV["OPENROUTER_API_KEY"]
19
+ SolidAgents.openrouter_api_base ||= ENV["OPENROUTER_API_BASE"]
20
+
21
+ RubyLLM.configure do |config|
22
+ config.openrouter_api_key = SolidAgents.openrouter_api_key if SolidAgents.openrouter_api_key.present?
23
+ config.openrouter_api_base = SolidAgents.openrouter_api_base if SolidAgents.openrouter_api_base.present?
24
+ end
25
+ end
15
26
  end
16
27
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ruby_llm"
4
+
5
+ module SolidAgents
6
+ module Runtime
7
+ class RubyLlmAdapter < Adapter
8
+ def execute(run:, prompt:)
9
+ agent_class = SolidAgents::Agents.for_owner(run.stage_owner)
10
+ agent = agent_class.new(run: run, context: run.prompt_payload || {})
11
+ response = agent.call(prompt)
12
+ output = response.respond_to?(:content) ? response.content.to_s : response.to_s
13
+
14
+ Result.new(ok: true, output: output, error: nil, metadata: {agent_class: agent_class.name, stage: run.stage, owner: run.stage_owner})
15
+ rescue StandardError => e
16
+ Result.new(ok: false, output: nil, error: e.message, metadata: {agent_class: agent_class&.name, stage: run.stage, owner: run.stage_owner, exception: e.class.name})
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidAgents
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
@@ -21,9 +21,9 @@ module SolidAgents
21
21
  "repro_manual" => "betty",
22
22
  "fixing" => "chad",
23
23
  "verifying" => "david",
24
- "pr_opened" => "emma",
25
- "ci_wait" => "emma",
26
- "done" => "emma"
24
+ "pr_opened" => "eddy",
25
+ "ci_wait" => "eddy",
26
+ "done" => "eddy"
27
27
  }.freeze
28
28
 
29
29
  FINAL_STAGES = ["done", "failed"].freeze
data/lib/solid_agents.rb CHANGED
@@ -3,21 +3,24 @@
3
3
  require_relative "solid_agents/version"
4
4
  require_relative "solid_agents/workflow"
5
5
  require_relative "solid_agents/runtime/adapter"
6
- require_relative "solid_agents/runtime/pi_adapter"
6
+ require_relative "solid_agents/runtime/ruby_llm_adapter"
7
7
  require_relative "solid_agents/engine"
8
8
 
9
9
  module SolidAgents
10
10
  mattr_accessor :connects_to
11
11
  mattr_accessor :base_controller_class, default: "::ActionController::Base"
12
- mattr_accessor :default_runtime, default: :pi
13
- mattr_accessor :pi_command, default: "pi"
12
+ mattr_accessor :default_runtime, default: :ruby_llm
13
+ mattr_accessor :default_model, default: "minimax/minimax-m2.7"
14
+ mattr_accessor :default_provider, default: :openrouter
15
+ mattr_accessor :openrouter_api_key
16
+ mattr_accessor :openrouter_api_base
14
17
  mattr_accessor :default_test_command, default: "bin/rails test"
15
18
  mattr_accessor :max_iterations, default: 8
16
19
 
17
20
  class << self
18
21
  def runtime_adapter(runtime)
19
22
  case runtime.to_sym
20
- when :pi then SolidAgents::Runtime::PiAdapter.new
23
+ when :ruby_llm then SolidAgents::Runtime::RubyLlmAdapter.new
21
24
  else
22
25
  raise ArgumentError, "Unsupported runtime: #{runtime.inspect}"
23
26
  end
@@ -28,3 +31,6 @@ module SolidAgents
28
31
  end
29
32
  end
30
33
  end
34
+
35
+ require_relative "../app/tools/solid_agents/tools/workflow_guide_tool"
36
+ require_relative "../app/solid_agents/agents"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_agents
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto
@@ -93,6 +93,20 @@ dependencies:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '6.1'
96
+ - !ruby/object:Gem::Dependency
97
+ name: ruby_llm
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
96
110
  - !ruby/object:Gem::Dependency
97
111
  name: sqlite3
98
112
  requirement: !ruby/object:Gem::Requirement
@@ -107,8 +121,36 @@ dependencies:
107
121
  - - ">="
108
122
  - !ruby/object:Gem::Version
109
123
  version: '2.0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: vcr
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '6.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '6.0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: webmock
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '3.0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '3.0'
110
152
  description: Solid Agent stores agent runs in its own database and dispatches staged
111
- workflow tasks to the pi runtime with a built-in Rails UI.
153
+ workflow tasks to the RubyLLM runtime with a built-in Rails UI.
112
154
  email:
113
155
  - kr@kakaruto.com
114
156
  executables: []
@@ -136,6 +178,19 @@ files:
136
178
  - app/services/solid_agents/runs/dispatch.rb
137
179
  - app/services/solid_agents/runs/executor.rb
138
180
  - app/services/solid_agents/runs/prompt_builder.rb
181
+ - app/solid_agents/agents.rb
182
+ - app/solid_agents/agents/alex.rb
183
+ - app/solid_agents/agents/base.rb
184
+ - app/solid_agents/agents/betty.rb
185
+ - app/solid_agents/agents/chad.rb
186
+ - app/solid_agents/agents/david.rb
187
+ - app/solid_agents/agents/eddy.rb
188
+ - app/solid_agents/prompts/alex/instructions.txt.erb
189
+ - app/solid_agents/prompts/betty/instructions.txt.erb
190
+ - app/solid_agents/prompts/chad/instructions.txt.erb
191
+ - app/solid_agents/prompts/david/instructions.txt.erb
192
+ - app/solid_agents/prompts/eddy/instructions.txt.erb
193
+ - app/tools/solid_agents/tools/workflow_guide_tool.rb
139
194
  - app/views/layouts/solid_agents/_style.html.erb
140
195
  - app/views/layouts/solid_agents/application.html.erb
141
196
  - app/views/solid_agents/agents/edit.html.erb
@@ -152,7 +207,7 @@ files:
152
207
  - lib/solid_agents.rb
153
208
  - lib/solid_agents/engine.rb
154
209
  - lib/solid_agents/runtime/adapter.rb
155
- - lib/solid_agents/runtime/pi_adapter.rb
210
+ - lib/solid_agents/runtime/ruby_llm_adapter.rb
156
211
  - lib/solid_agents/version.rb
157
212
  - lib/solid_agents/workflow.rb
158
213
  homepage: https://github.com/kaka-ruto/solid_agents
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SolidAgents
4
- module Runtime
5
- class PiAdapter < Adapter
6
- def execute(run:, prompt:)
7
- command = [SolidAgents.pi_command.to_s, "agent", "run", "--json", "--message", prompt]
8
- run_command(*command).tap do |result|
9
- result.metadata[:stage] = run.stage
10
- result.metadata[:owner] = run.stage_owner
11
- end
12
- end
13
- end
14
- end
15
- end