swarm_sdk 2.2.0 → 2.3.0
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/lib/swarm_sdk/agent/builder.rb +58 -0
- data/lib/swarm_sdk/agent/chat.rb +527 -1059
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +9 -88
- data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +111 -44
- data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
- data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +233 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +1 -1
- data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +12 -12
- data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
- data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +98 -0
- data/lib/swarm_sdk/agent/context.rb +2 -2
- data/lib/swarm_sdk/agent/definition.rb +66 -154
- data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
- data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
- data/lib/swarm_sdk/builders/base_builder.rb +409 -0
- data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
- data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
- data/lib/swarm_sdk/concerns/validatable.rb +55 -0
- data/lib/swarm_sdk/configuration/parser.rb +353 -0
- data/lib/swarm_sdk/configuration/translator.rb +255 -0
- data/lib/swarm_sdk/configuration.rb +65 -543
- data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
- data/lib/swarm_sdk/context_compactor.rb +6 -11
- data/lib/swarm_sdk/context_management/builder.rb +128 -0
- data/lib/swarm_sdk/context_management/context.rb +328 -0
- data/lib/swarm_sdk/defaults.rb +196 -0
- data/lib/swarm_sdk/events_to_messages.rb +18 -0
- data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
- data/lib/swarm_sdk/log_collector.rb +179 -29
- data/lib/swarm_sdk/log_stream.rb +29 -0
- data/lib/swarm_sdk/node_context.rb +1 -1
- data/lib/swarm_sdk/observer/builder.rb +81 -0
- data/lib/swarm_sdk/observer/config.rb +45 -0
- data/lib/swarm_sdk/observer/manager.rb +236 -0
- data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
- data/lib/swarm_sdk/plugin.rb +93 -3
- data/lib/swarm_sdk/snapshot.rb +6 -6
- data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
- data/lib/swarm_sdk/state_restorer.rb +136 -151
- data/lib/swarm_sdk/state_snapshot.rb +65 -100
- data/lib/swarm_sdk/swarm/agent_initializer.rb +180 -136
- data/lib/swarm_sdk/swarm/builder.rb +44 -578
- data/lib/swarm_sdk/swarm/executor.rb +213 -0
- data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
- data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
- data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
- data/lib/swarm_sdk/swarm/tool_configurator.rb +42 -138
- data/lib/swarm_sdk/swarm.rb +137 -679
- data/lib/swarm_sdk/tools/bash.rb +11 -3
- data/lib/swarm_sdk/tools/delegate.rb +61 -43
- data/lib/swarm_sdk/tools/edit.rb +8 -13
- data/lib/swarm_sdk/tools/glob.rb +9 -1
- data/lib/swarm_sdk/tools/grep.rb +7 -0
- data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
- data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
- data/lib/swarm_sdk/tools/read.rb +11 -13
- data/lib/swarm_sdk/tools/registry.rb +122 -10
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +8 -5
- data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
- data/lib/swarm_sdk/tools/todo_write.rb +7 -0
- data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
- data/lib/swarm_sdk/tools/write.rb +8 -13
- data/lib/swarm_sdk/version.rb +1 -1
- data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
- data/lib/swarm_sdk/workflow/builder.rb +143 -0
- data/lib/swarm_sdk/workflow/executor.rb +497 -0
- data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +3 -3
- data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
- data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
- data/lib/swarm_sdk.rb +33 -3
- metadata +67 -15
- data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -589
data/lib/swarm_sdk.rb
CHANGED
|
@@ -17,6 +17,27 @@ require "async/semaphore"
|
|
|
17
17
|
require "ruby_llm"
|
|
18
18
|
require "ruby_llm/mcp"
|
|
19
19
|
|
|
20
|
+
# Patch ruby_llm-mcp's Zeitwerk loader to ignore railtie.rb when Rails is not present
|
|
21
|
+
# This prevents NameError when eager loading outside of Rails applications
|
|
22
|
+
# Can be removed once https://github.com/parruda/ruby_llm-mcp/issues/XXX is fixed
|
|
23
|
+
unless defined?(Rails)
|
|
24
|
+
require "zeitwerk"
|
|
25
|
+
mcp_loader = nil
|
|
26
|
+
Zeitwerk::Registry.loaders.each { |l| mcp_loader = l if l.tag == "RubyLLM-mcp" }
|
|
27
|
+
if mcp_loader
|
|
28
|
+
mcp_gem_dir = Gem.loaded_specs["ruby_llm-mcp"]&.gem_dir
|
|
29
|
+
if mcp_gem_dir
|
|
30
|
+
railtie_path = File.join(mcp_gem_dir, "lib", "ruby_llm", "mcp", "railtie.rb")
|
|
31
|
+
mcp_loader.ignore(railtie_path)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Configure Faraday to use async-http adapter by default
|
|
37
|
+
# This ensures HTTP requests are fiber-aware and don't block the Async scheduler
|
|
38
|
+
# when SwarmSDK executes LLM requests within Async/Sync blocks
|
|
39
|
+
require "async/http/faraday/default"
|
|
40
|
+
|
|
20
41
|
require_relative "swarm_sdk/version"
|
|
21
42
|
|
|
22
43
|
require "zeitwerk"
|
|
@@ -45,11 +66,20 @@ module SwarmSDK
|
|
|
45
66
|
# Settings for SwarmSDK (global configuration)
|
|
46
67
|
attr_accessor :settings
|
|
47
68
|
|
|
48
|
-
# Main entry point for DSL
|
|
69
|
+
# Main entry point for DSL - builds simple multi-agent swarms
|
|
70
|
+
#
|
|
71
|
+
# @return [Swarm] Always returns a Swarm instance
|
|
49
72
|
def build(allow_filesystem_tools: nil, &block)
|
|
50
73
|
Swarm::Builder.build(allow_filesystem_tools: allow_filesystem_tools, &block)
|
|
51
74
|
end
|
|
52
75
|
|
|
76
|
+
# Entry point for building multi-stage workflows
|
|
77
|
+
#
|
|
78
|
+
# @return [Workflow] Always returns a Workflow instance
|
|
79
|
+
def workflow(allow_filesystem_tools: nil, &block)
|
|
80
|
+
Workflow::Builder.build(allow_filesystem_tools: allow_filesystem_tools, &block)
|
|
81
|
+
end
|
|
82
|
+
|
|
53
83
|
# Validate YAML configuration without creating a swarm
|
|
54
84
|
#
|
|
55
85
|
# Performs comprehensive validation of YAML configuration including:
|
|
@@ -149,7 +179,7 @@ module SwarmSDK
|
|
|
149
179
|
#
|
|
150
180
|
# @param yaml_content [String] YAML configuration content
|
|
151
181
|
# @param base_dir [String, Pathname] Base directory for resolving agent file paths (default: Dir.pwd)
|
|
152
|
-
# @return [Swarm,
|
|
182
|
+
# @return [Swarm, Workflow] Configured swarm or workflow instance
|
|
153
183
|
# @raise [ConfigurationError] If YAML is invalid or configuration is incorrect
|
|
154
184
|
#
|
|
155
185
|
# @example Load from YAML string
|
|
@@ -194,7 +224,7 @@ module SwarmSDK
|
|
|
194
224
|
# loading swarms from configuration files.
|
|
195
225
|
#
|
|
196
226
|
# @param path [String, Pathname] Path to YAML configuration file
|
|
197
|
-
# @return [Swarm,
|
|
227
|
+
# @return [Swarm, Workflow] Configured swarm or workflow instance
|
|
198
228
|
# @raise [ConfigurationError] If file not found or configuration invalid
|
|
199
229
|
#
|
|
200
230
|
# @example
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: swarm_sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paulo Arruda
|
|
@@ -24,33 +24,61 @@ dependencies:
|
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '2.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
name:
|
|
27
|
+
name: async-http-faraday
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - "~>"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '0.22'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
39
|
+
version: '0.22'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: faraday-follow_redirects
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0.4'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0.4'
|
|
40
54
|
- !ruby/object:Gem::Dependency
|
|
41
55
|
name: ruby_llm-mcp
|
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
|
43
57
|
requirements:
|
|
44
58
|
- - "~>"
|
|
45
59
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '0.
|
|
60
|
+
version: '0.8'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0.8'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: ruby_llm_swarm
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 1.9.2
|
|
47
75
|
type: :runtime
|
|
48
76
|
prerelease: false
|
|
49
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
78
|
requirements:
|
|
51
79
|
- - "~>"
|
|
52
80
|
- !ruby/object:Gem::Version
|
|
53
|
-
version:
|
|
81
|
+
version: 1.9.2
|
|
54
82
|
- !ruby/object:Gem::Dependency
|
|
55
83
|
name: zeitwerk
|
|
56
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,19 +109,35 @@ files:
|
|
|
81
109
|
- lib/swarm_sdk/agent/RETRY_LOGIC.md
|
|
82
110
|
- lib/swarm_sdk/agent/builder.rb
|
|
83
111
|
- lib/swarm_sdk/agent/chat.rb
|
|
84
|
-
- lib/swarm_sdk/agent/
|
|
85
|
-
- lib/swarm_sdk/agent/
|
|
86
|
-
- lib/swarm_sdk/agent/
|
|
87
|
-
- lib/swarm_sdk/agent/
|
|
112
|
+
- lib/swarm_sdk/agent/chat_helpers/context_tracker.rb
|
|
113
|
+
- lib/swarm_sdk/agent/chat_helpers/event_emitter.rb
|
|
114
|
+
- lib/swarm_sdk/agent/chat_helpers/hook_integration.rb
|
|
115
|
+
- lib/swarm_sdk/agent/chat_helpers/instrumentation.rb
|
|
116
|
+
- lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb
|
|
117
|
+
- lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb
|
|
118
|
+
- lib/swarm_sdk/agent/chat_helpers/serialization.rb
|
|
119
|
+
- lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb
|
|
120
|
+
- lib/swarm_sdk/agent/chat_helpers/system_reminders.rb
|
|
121
|
+
- lib/swarm_sdk/agent/chat_helpers/token_tracking.rb
|
|
88
122
|
- lib/swarm_sdk/agent/context.rb
|
|
89
123
|
- lib/swarm_sdk/agent/context_manager.rb
|
|
90
124
|
- lib/swarm_sdk/agent/definition.rb
|
|
91
125
|
- lib/swarm_sdk/agent/llm_instrumentation_middleware.rb
|
|
126
|
+
- lib/swarm_sdk/agent/system_prompt_builder.rb
|
|
127
|
+
- lib/swarm_sdk/builders/base_builder.rb
|
|
92
128
|
- lib/swarm_sdk/claude_code_agent_adapter.rb
|
|
129
|
+
- lib/swarm_sdk/concerns/cleanupable.rb
|
|
130
|
+
- lib/swarm_sdk/concerns/snapshotable.rb
|
|
131
|
+
- lib/swarm_sdk/concerns/validatable.rb
|
|
93
132
|
- lib/swarm_sdk/configuration.rb
|
|
133
|
+
- lib/swarm_sdk/configuration/parser.rb
|
|
134
|
+
- lib/swarm_sdk/configuration/translator.rb
|
|
94
135
|
- lib/swarm_sdk/context_compactor.rb
|
|
95
136
|
- lib/swarm_sdk/context_compactor/metrics.rb
|
|
96
137
|
- lib/swarm_sdk/context_compactor/token_counter.rb
|
|
138
|
+
- lib/swarm_sdk/context_management/builder.rb
|
|
139
|
+
- lib/swarm_sdk/context_management/context.rb
|
|
140
|
+
- lib/swarm_sdk/defaults.rb
|
|
97
141
|
- lib/swarm_sdk/events_to_messages.rb
|
|
98
142
|
- lib/swarm_sdk/hooks/adapter.rb
|
|
99
143
|
- lib/swarm_sdk/hooks/context.rb
|
|
@@ -111,11 +155,11 @@ files:
|
|
|
111
155
|
- lib/swarm_sdk/model_aliases.json
|
|
112
156
|
- lib/swarm_sdk/models.json
|
|
113
157
|
- lib/swarm_sdk/models.rb
|
|
114
|
-
- lib/swarm_sdk/node/agent_config.rb
|
|
115
|
-
- lib/swarm_sdk/node/builder.rb
|
|
116
|
-
- lib/swarm_sdk/node/transformer_executor.rb
|
|
117
158
|
- lib/swarm_sdk/node_context.rb
|
|
118
|
-
- lib/swarm_sdk/
|
|
159
|
+
- lib/swarm_sdk/observer/builder.rb
|
|
160
|
+
- lib/swarm_sdk/observer/config.rb
|
|
161
|
+
- lib/swarm_sdk/observer/manager.rb
|
|
162
|
+
- lib/swarm_sdk/patterns/agent_observer.rb
|
|
119
163
|
- lib/swarm_sdk/permissions/config.rb
|
|
120
164
|
- lib/swarm_sdk/permissions/error_formatter.rb
|
|
121
165
|
- lib/swarm_sdk/permissions/path_matcher.rb
|
|
@@ -125,7 +169,6 @@ files:
|
|
|
125
169
|
- lib/swarm_sdk/plugin_registry.rb
|
|
126
170
|
- lib/swarm_sdk/proc_helpers.rb
|
|
127
171
|
- lib/swarm_sdk/prompts/base_system_prompt.md.erb
|
|
128
|
-
- lib/swarm_sdk/providers/openai_with_responses.rb
|
|
129
172
|
- lib/swarm_sdk/restore_result.rb
|
|
130
173
|
- lib/swarm_sdk/result.rb
|
|
131
174
|
- lib/swarm_sdk/snapshot.rb
|
|
@@ -136,6 +179,9 @@ files:
|
|
|
136
179
|
- lib/swarm_sdk/swarm/agent_initializer.rb
|
|
137
180
|
- lib/swarm_sdk/swarm/all_agents_builder.rb
|
|
138
181
|
- lib/swarm_sdk/swarm/builder.rb
|
|
182
|
+
- lib/swarm_sdk/swarm/executor.rb
|
|
183
|
+
- lib/swarm_sdk/swarm/hook_triggers.rb
|
|
184
|
+
- lib/swarm_sdk/swarm/logging_callbacks.rb
|
|
139
185
|
- lib/swarm_sdk/swarm/mcp_configurator.rb
|
|
140
186
|
- lib/swarm_sdk/swarm/swarm_registry_builder.rb
|
|
141
187
|
- lib/swarm_sdk/swarm/tool_configurator.rb
|
|
@@ -173,6 +219,12 @@ files:
|
|
|
173
219
|
- lib/swarm_sdk/utils.rb
|
|
174
220
|
- lib/swarm_sdk/validation_result.rb
|
|
175
221
|
- lib/swarm_sdk/version.rb
|
|
222
|
+
- lib/swarm_sdk/workflow.rb
|
|
223
|
+
- lib/swarm_sdk/workflow/agent_config.rb
|
|
224
|
+
- lib/swarm_sdk/workflow/builder.rb
|
|
225
|
+
- lib/swarm_sdk/workflow/executor.rb
|
|
226
|
+
- lib/swarm_sdk/workflow/node_builder.rb
|
|
227
|
+
- lib/swarm_sdk/workflow/transformer_executor.rb
|
|
176
228
|
homepage: https://github.com/parruda/claude-swarm
|
|
177
229
|
licenses:
|
|
178
230
|
- MIT
|