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 +4 -4
- data/CHANGELOG.md +17 -3
- data/README.md +27 -7
- data/app/models/solid_agents/agent.rb +1 -1
- data/app/services/solid_agents/runs/prompt_builder.rb +3 -7
- data/app/solid_agents/agents/alex.rb +11 -0
- data/app/solid_agents/agents/base.rb +28 -0
- data/app/solid_agents/agents/betty.rb +11 -0
- data/app/solid_agents/agents/chad.rb +11 -0
- data/app/solid_agents/agents/david.rb +11 -0
- data/app/solid_agents/agents/eddy.rb +11 -0
- data/app/solid_agents/agents.rb +26 -0
- data/app/solid_agents/prompts/alex/instructions.txt.erb +3 -0
- data/app/solid_agents/prompts/betty/instructions.txt.erb +3 -0
- data/app/solid_agents/prompts/chad/instructions.txt.erb +3 -0
- data/app/solid_agents/prompts/david/instructions.txt.erb +3 -0
- data/app/solid_agents/prompts/eddy/instructions.txt.erb +3 -0
- data/app/tools/solid_agents/tools/workflow_guide_tool.rb +21 -0
- data/lib/generators/solid_agents/install/install_generator.rb +2 -1
- data/lib/generators/solid_agents/install/templates/config/initializers/solid_agents.rb +6 -1
- data/lib/generators/solid_agents/install/templates/db/agent_schema.rb +2 -2
- data/lib/solid_agents/engine.rb +11 -0
- data/lib/solid_agents/runtime/ruby_llm_adapter.rb +20 -0
- data/lib/solid_agents/version.rb +1 -1
- data/lib/solid_agents/workflow.rb +3 -3
- data/lib/solid_agents.rb +10 -4
- metadata +58 -3
- data/lib/solid_agents/runtime/pi_adapter.rb +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e4096d5a7518890d89a9ab5ef5583e1828f9457abe69f536c2e7042c05e9288a
|
|
4
|
+
data.tar.gz: f466a2d473053692596c5c70f43530df1e77e474c10622084ef6f3431d4b36b3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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`, `
|
|
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
|
|
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 = :
|
|
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
|
|
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 = "
|
|
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.
|
|
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`.
|
|
@@ -7,8 +7,9 @@ module SolidAgents
|
|
|
7
7
|
class PromptBuilder
|
|
8
8
|
def self.call(run:, context:)
|
|
9
9
|
<<~PROMPT
|
|
10
|
-
|
|
11
|
-
|
|
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,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,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,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 = :
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
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
|
data/lib/solid_agents/engine.rb
CHANGED
|
@@ -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
|
data/lib/solid_agents/version.rb
CHANGED
|
@@ -21,9 +21,9 @@ module SolidAgents
|
|
|
21
21
|
"repro_manual" => "betty",
|
|
22
22
|
"fixing" => "chad",
|
|
23
23
|
"verifying" => "david",
|
|
24
|
-
"pr_opened" => "
|
|
25
|
-
"ci_wait" => "
|
|
26
|
-
"done" => "
|
|
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/
|
|
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: :
|
|
13
|
-
mattr_accessor :
|
|
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 :
|
|
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.
|
|
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
|
|
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/
|
|
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
|