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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/agent/builder.rb +58 -0
  3. data/lib/swarm_sdk/agent/chat.rb +527 -1059
  4. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +9 -88
  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 +111 -44
  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 +12 -12
  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 +2 -2
  15. data/lib/swarm_sdk/agent/definition.rb +66 -154
  16. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
  17. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  18. data/lib/swarm_sdk/builders/base_builder.rb +409 -0
  19. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  20. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  21. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  22. data/lib/swarm_sdk/configuration/parser.rb +353 -0
  23. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  24. data/lib/swarm_sdk/configuration.rb +65 -543
  25. data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
  26. data/lib/swarm_sdk/context_compactor.rb +6 -11
  27. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  28. data/lib/swarm_sdk/context_management/context.rb +328 -0
  29. data/lib/swarm_sdk/defaults.rb +196 -0
  30. data/lib/swarm_sdk/events_to_messages.rb +18 -0
  31. data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
  32. data/lib/swarm_sdk/log_collector.rb +179 -29
  33. data/lib/swarm_sdk/log_stream.rb +29 -0
  34. data/lib/swarm_sdk/node_context.rb +1 -1
  35. data/lib/swarm_sdk/observer/builder.rb +81 -0
  36. data/lib/swarm_sdk/observer/config.rb +45 -0
  37. data/lib/swarm_sdk/observer/manager.rb +236 -0
  38. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  39. data/lib/swarm_sdk/plugin.rb +93 -3
  40. data/lib/swarm_sdk/snapshot.rb +6 -6
  41. data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
  42. data/lib/swarm_sdk/state_restorer.rb +136 -151
  43. data/lib/swarm_sdk/state_snapshot.rb +65 -100
  44. data/lib/swarm_sdk/swarm/agent_initializer.rb +180 -136
  45. data/lib/swarm_sdk/swarm/builder.rb +44 -578
  46. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  47. data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
  48. data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
  49. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  50. data/lib/swarm_sdk/swarm/tool_configurator.rb +42 -138
  51. data/lib/swarm_sdk/swarm.rb +137 -679
  52. data/lib/swarm_sdk/tools/bash.rb +11 -3
  53. data/lib/swarm_sdk/tools/delegate.rb +61 -43
  54. data/lib/swarm_sdk/tools/edit.rb +8 -13
  55. data/lib/swarm_sdk/tools/glob.rb +9 -1
  56. data/lib/swarm_sdk/tools/grep.rb +7 -0
  57. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  58. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  59. data/lib/swarm_sdk/tools/read.rb +11 -13
  60. data/lib/swarm_sdk/tools/registry.rb +122 -10
  61. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +8 -5
  62. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  63. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  64. data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
  65. data/lib/swarm_sdk/tools/write.rb +8 -13
  66. data/lib/swarm_sdk/version.rb +1 -1
  67. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
  68. data/lib/swarm_sdk/workflow/builder.rb +143 -0
  69. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  70. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +3 -3
  71. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
  72. data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
  73. data/lib/swarm_sdk.rb +33 -3
  74. metadata +67 -15
  75. 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, NodeOrchestrator] Configured swarm or orchestrator instance
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, NodeOrchestrator] Configured swarm or orchestrator instance
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.2.0
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.9'
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.9'
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.7'
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.7'
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/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
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/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
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