swarm_sdk 2.1.3 → 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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/agent/builder.rb +91 -0
  3. data/lib/swarm_sdk/agent/chat.rb +540 -925
  4. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +33 -79
  5. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
  6. data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +147 -39
  7. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
  8. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +233 -0
  9. data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +1 -1
  10. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
  11. data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +22 -38
  12. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
  13. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +98 -0
  14. data/lib/swarm_sdk/agent/context.rb +8 -4
  15. data/lib/swarm_sdk/agent/context_manager.rb +6 -0
  16. data/lib/swarm_sdk/agent/definition.rb +79 -155
  17. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +182 -0
  18. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  19. data/lib/swarm_sdk/builders/base_builder.rb +409 -0
  20. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  21. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  22. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  23. data/lib/swarm_sdk/configuration/parser.rb +353 -0
  24. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  25. data/lib/swarm_sdk/configuration.rb +72 -257
  26. data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
  27. data/lib/swarm_sdk/context_compactor.rb +6 -11
  28. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  29. data/lib/swarm_sdk/context_management/context.rb +328 -0
  30. data/lib/swarm_sdk/defaults.rb +196 -0
  31. data/lib/swarm_sdk/events_to_messages.rb +199 -0
  32. data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
  33. data/lib/swarm_sdk/log_collector.rb +192 -16
  34. data/lib/swarm_sdk/log_stream.rb +66 -8
  35. data/lib/swarm_sdk/model_aliases.json +4 -1
  36. data/lib/swarm_sdk/node_context.rb +1 -1
  37. data/lib/swarm_sdk/observer/builder.rb +81 -0
  38. data/lib/swarm_sdk/observer/config.rb +45 -0
  39. data/lib/swarm_sdk/observer/manager.rb +236 -0
  40. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  41. data/lib/swarm_sdk/plugin.rb +93 -3
  42. data/lib/swarm_sdk/proc_helpers.rb +53 -0
  43. data/lib/swarm_sdk/restore_result.rb +65 -0
  44. data/lib/swarm_sdk/snapshot.rb +156 -0
  45. data/lib/swarm_sdk/snapshot_from_events.rb +397 -0
  46. data/lib/swarm_sdk/state_restorer.rb +476 -0
  47. data/lib/swarm_sdk/state_snapshot.rb +334 -0
  48. data/lib/swarm_sdk/swarm/agent_initializer.rb +428 -79
  49. data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
  50. data/lib/swarm_sdk/swarm/builder.rb +69 -407
  51. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  52. data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
  53. data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
  54. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  55. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +67 -0
  56. data/lib/swarm_sdk/swarm/tool_configurator.rb +88 -149
  57. data/lib/swarm_sdk/swarm.rb +337 -584
  58. data/lib/swarm_sdk/swarm_loader.rb +145 -0
  59. data/lib/swarm_sdk/swarm_registry.rb +136 -0
  60. data/lib/swarm_sdk/tools/bash.rb +11 -3
  61. data/lib/swarm_sdk/tools/delegate.rb +127 -24
  62. data/lib/swarm_sdk/tools/edit.rb +8 -13
  63. data/lib/swarm_sdk/tools/glob.rb +9 -1
  64. data/lib/swarm_sdk/tools/grep.rb +7 -0
  65. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  66. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  67. data/lib/swarm_sdk/tools/read.rb +28 -18
  68. data/lib/swarm_sdk/tools/registry.rb +122 -10
  69. data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
  70. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +53 -5
  71. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  72. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  73. data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
  74. data/lib/swarm_sdk/tools/write.rb +8 -13
  75. data/lib/swarm_sdk/utils.rb +18 -0
  76. data/lib/swarm_sdk/validation_result.rb +33 -0
  77. data/lib/swarm_sdk/version.rb +1 -1
  78. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +34 -9
  79. data/lib/swarm_sdk/workflow/builder.rb +143 -0
  80. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  81. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +42 -21
  82. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
  83. data/lib/swarm_sdk/workflow.rb +554 -0
  84. data/lib/swarm_sdk.rb +73 -11
  85. metadata +79 -16
  86. data/lib/swarm_sdk/mcp.rb +0 -16
  87. data/lib/swarm_sdk/node_orchestrator.rb +0 -591
  88. data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -582
data/lib/swarm_sdk.rb CHANGED
@@ -15,6 +15,28 @@ require "yaml"
15
15
  require "async"
16
16
  require "async/semaphore"
17
17
  require "ruby_llm"
18
+ require "ruby_llm/mcp"
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"
18
40
 
19
41
  require_relative "swarm_sdk/version"
20
42
 
@@ -25,6 +47,8 @@ loader.push_dir("#{__dir__}/swarm_sdk", namespace: SwarmSDK)
25
47
  loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
26
48
  loader.inflector.inflect(
27
49
  "cli" => "CLI",
50
+ "llm_instrumentation_middleware" => "LLMInstrumentationMiddleware",
51
+ "mcp" => "MCP",
28
52
  "openai_with_responses" => "OpenAIWithResponses",
29
53
  )
30
54
  loader.setup
@@ -42,9 +66,18 @@ module SwarmSDK
42
66
  # Settings for SwarmSDK (global configuration)
43
67
  attr_accessor :settings
44
68
 
45
- # Main entry point for DSL
46
- def build(&block)
47
- Swarm::Builder.build(&block)
69
+ # Main entry point for DSL - builds simple multi-agent swarms
70
+ #
71
+ # @return [Swarm] Always returns a Swarm instance
72
+ def build(allow_filesystem_tools: nil, &block)
73
+ Swarm::Builder.build(allow_filesystem_tools: allow_filesystem_tools, &block)
74
+ end
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)
48
81
  end
49
82
 
50
83
  # Validate YAML configuration without creating a swarm
@@ -84,6 +117,10 @@ module SwarmSDK
84
117
  begin
85
118
  config = Configuration.new(yaml_content, base_dir: base_dir)
86
119
  config.load_and_validate
120
+
121
+ # Build swarm to trigger DSL validation
122
+ # This catches errors from Agent::Definition, Builder, etc.
123
+ config.to_swarm
87
124
  rescue ConfigurationError, CircularDependencyError => e
88
125
  errors << parse_configuration_error(e)
89
126
  rescue StandardError => e
@@ -142,7 +179,7 @@ module SwarmSDK
142
179
  #
143
180
  # @param yaml_content [String] YAML configuration content
144
181
  # @param base_dir [String, Pathname] Base directory for resolving agent file paths (default: Dir.pwd)
145
- # @return [Swarm, NodeOrchestrator] Configured swarm or orchestrator instance
182
+ # @return [Swarm, Workflow] Configured swarm or workflow instance
146
183
  # @raise [ConfigurationError] If YAML is invalid or configuration is incorrect
147
184
  #
148
185
  # @example Load from YAML string
@@ -164,10 +201,10 @@ module SwarmSDK
164
201
  # @example Load with default base_dir (Dir.pwd)
165
202
  # yaml = File.read("config.yml")
166
203
  # swarm = SwarmSDK.load(yaml) # base_dir defaults to Dir.pwd
167
- def load(yaml_content, base_dir: Dir.pwd)
204
+ def load(yaml_content, base_dir: Dir.pwd, allow_filesystem_tools: nil)
168
205
  config = Configuration.new(yaml_content, base_dir: base_dir)
169
206
  config.load_and_validate
170
- swarm = config.to_swarm
207
+ swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
171
208
 
172
209
  # Apply hooks if any are configured (YAML-only feature)
173
210
  if hooks_configured?(config)
@@ -187,7 +224,7 @@ module SwarmSDK
187
224
  # loading swarms from configuration files.
188
225
  #
189
226
  # @param path [String, Pathname] Path to YAML configuration file
190
- # @return [Swarm, NodeOrchestrator] Configured swarm or orchestrator instance
227
+ # @return [Swarm, Workflow] Configured swarm or workflow instance
191
228
  # @raise [ConfigurationError] If file not found or configuration invalid
192
229
  #
193
230
  # @example
@@ -196,9 +233,9 @@ module SwarmSDK
196
233
  #
197
234
  # @example With absolute path
198
235
  # swarm = SwarmSDK.load_file("/absolute/path/config.yml")
199
- def load_file(path)
236
+ def load_file(path, allow_filesystem_tools: nil)
200
237
  config = Configuration.load_file(path)
201
- swarm = config.to_swarm
238
+ swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
202
239
 
203
240
  # Apply hooks if any are configured (YAML-only feature)
204
241
  if hooks_configured?(config)
@@ -235,7 +272,7 @@ module SwarmSDK
235
272
  def hooks_configured?(config)
236
273
  config.swarm_hooks.any? ||
237
274
  config.all_agents_hooks.any? ||
238
- config.agents.any? { |_, agent_def| agent_def.hooks&.any? }
275
+ config.agents.any? { |_, agent_config| agent_config[:hooks]&.any? }
239
276
  end
240
277
 
241
278
  # Parse configuration error and extract structured information
@@ -323,7 +360,7 @@ module SwarmSDK
323
360
  field: "swarm.lead",
324
361
  )
325
362
 
326
- # Unknown agent in connections
363
+ # Unknown agent in connections (old format)
327
364
  when /Agent '([^']+)' has connection to unknown agent '([^']+)'/i
328
365
  agent_name = Regexp.last_match(1)
329
366
  error_hash.merge!(
@@ -332,6 +369,15 @@ module SwarmSDK
332
369
  agent: agent_name,
333
370
  )
334
371
 
372
+ # Unknown agent in connections (new format with composable swarms)
373
+ when /Agent '([^']+)' delegates to unknown target '([^']+)'/i
374
+ agent_name = Regexp.last_match(1)
375
+ error_hash.merge!(
376
+ type: :invalid_reference,
377
+ field: "swarm.agents.#{agent_name}.delegates_to",
378
+ agent: agent_name,
379
+ )
380
+
335
381
  # Circular dependency
336
382
  when /Circular dependency detected/i
337
383
  error_hash.merge!(
@@ -397,17 +443,33 @@ module SwarmSDK
397
443
  # WebFetch tool LLM processing configuration
398
444
  attr_accessor :webfetch_provider, :webfetch_model, :webfetch_base_url, :webfetch_max_tokens
399
445
 
446
+ # Filesystem tools control
447
+ attr_accessor :allow_filesystem_tools
448
+
400
449
  def initialize
401
450
  @webfetch_provider = nil
402
451
  @webfetch_model = nil
403
452
  @webfetch_base_url = nil
404
453
  @webfetch_max_tokens = 4096
454
+ @allow_filesystem_tools = parse_env_bool("SWARM_SDK_ALLOW_FILESYSTEM_TOOLS", default: true)
405
455
  end
406
456
 
407
457
  # Check if WebFetch LLM processing is enabled
408
458
  def webfetch_llm_enabled?
409
459
  !@webfetch_provider.nil? && !@webfetch_model.nil?
410
460
  end
461
+
462
+ private
463
+
464
+ def parse_env_bool(key, default:)
465
+ return default unless ENV.key?(key)
466
+
467
+ value = ENV[key].to_s.downcase
468
+ return true if ["true", "yes", "1", "on", "enabled"].include?(value)
469
+ return false if ["false", "no", "0", "off", "disabled"].include?(value)
470
+
471
+ default
472
+ end
411
473
  end
412
474
 
413
475
  # Initialize default settings
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.1.3
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: ruby_llm
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: '1.8'
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: '1.8'
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.6.3
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: 0.6.3
81
+ version: 1.9.2
54
82
  - !ruby/object:Gem::Dependency
55
83
  name: zeitwerk
56
84
  requirement: !ruby/object:Gem::Requirement
@@ -81,18 +109,36 @@ 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/chat/context_tracker.rb
85
- - lib/swarm_sdk/agent/chat/hook_integration.rb
86
- - lib/swarm_sdk/agent/chat/logging_helpers.rb
87
- - lib/swarm_sdk/agent/chat/system_reminder_injector.rb
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
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
91
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
92
132
  - lib/swarm_sdk/configuration.rb
133
+ - lib/swarm_sdk/configuration/parser.rb
134
+ - lib/swarm_sdk/configuration/translator.rb
93
135
  - lib/swarm_sdk/context_compactor.rb
94
136
  - lib/swarm_sdk/context_compactor/metrics.rb
95
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
141
+ - lib/swarm_sdk/events_to_messages.rb
96
142
  - lib/swarm_sdk/hooks/adapter.rb
97
143
  - lib/swarm_sdk/hooks/context.rb
98
144
  - lib/swarm_sdk/hooks/definition.rb
@@ -106,15 +152,14 @@ files:
106
152
  - lib/swarm_sdk/log_collector.rb
107
153
  - lib/swarm_sdk/log_stream.rb
108
154
  - lib/swarm_sdk/markdown_parser.rb
109
- - lib/swarm_sdk/mcp.rb
110
155
  - lib/swarm_sdk/model_aliases.json
111
156
  - lib/swarm_sdk/models.json
112
157
  - lib/swarm_sdk/models.rb
113
- - lib/swarm_sdk/node/agent_config.rb
114
- - lib/swarm_sdk/node/builder.rb
115
- - lib/swarm_sdk/node/transformer_executor.rb
116
158
  - lib/swarm_sdk/node_context.rb
117
- - lib/swarm_sdk/node_orchestrator.rb
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
118
163
  - lib/swarm_sdk/permissions/config.rb
119
164
  - lib/swarm_sdk/permissions/error_formatter.rb
120
165
  - lib/swarm_sdk/permissions/path_matcher.rb
@@ -122,15 +167,26 @@ files:
122
167
  - lib/swarm_sdk/permissions_builder.rb
123
168
  - lib/swarm_sdk/plugin.rb
124
169
  - lib/swarm_sdk/plugin_registry.rb
170
+ - lib/swarm_sdk/proc_helpers.rb
125
171
  - lib/swarm_sdk/prompts/base_system_prompt.md.erb
126
- - lib/swarm_sdk/providers/openai_with_responses.rb
172
+ - lib/swarm_sdk/restore_result.rb
127
173
  - lib/swarm_sdk/result.rb
174
+ - lib/swarm_sdk/snapshot.rb
175
+ - lib/swarm_sdk/snapshot_from_events.rb
176
+ - lib/swarm_sdk/state_restorer.rb
177
+ - lib/swarm_sdk/state_snapshot.rb
128
178
  - lib/swarm_sdk/swarm.rb
129
179
  - lib/swarm_sdk/swarm/agent_initializer.rb
130
180
  - lib/swarm_sdk/swarm/all_agents_builder.rb
131
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
132
185
  - lib/swarm_sdk/swarm/mcp_configurator.rb
186
+ - lib/swarm_sdk/swarm/swarm_registry_builder.rb
133
187
  - lib/swarm_sdk/swarm/tool_configurator.rb
188
+ - lib/swarm_sdk/swarm_loader.rb
189
+ - lib/swarm_sdk/swarm_registry.rb
134
190
  - lib/swarm_sdk/tools/bash.rb
135
191
  - lib/swarm_sdk/tools/clock.rb
136
192
  - lib/swarm_sdk/tools/delegate.rb
@@ -161,7 +217,14 @@ files:
161
217
  - lib/swarm_sdk/tools/web_fetch.rb
162
218
  - lib/swarm_sdk/tools/write.rb
163
219
  - lib/swarm_sdk/utils.rb
220
+ - lib/swarm_sdk/validation_result.rb
164
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
165
228
  homepage: https://github.com/parruda/claude-swarm
166
229
  licenses:
167
230
  - MIT
data/lib/swarm_sdk/mcp.rb DELETED
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SwarmSDK
4
- module MCP
5
- class << self
6
- # Lazy load ruby_llm-mcp only when MCP servers are used
7
- def lazy_load
8
- return if @loaded
9
-
10
- require "ruby_llm/mcp"
11
-
12
- @loaded = true
13
- end
14
- end
15
- end
16
- end