swarm_memory 2.1.3 → 2.1.4

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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/lib/claude_swarm/claude_mcp_server.rb +1 -0
  3. data/lib/claude_swarm/cli.rb +5 -18
  4. data/lib/claude_swarm/configuration.rb +2 -15
  5. data/lib/claude_swarm/mcp_generator.rb +1 -0
  6. data/lib/claude_swarm/openai/chat_completion.rb +4 -12
  7. data/lib/claude_swarm/openai/executor.rb +3 -1
  8. data/lib/claude_swarm/openai/responses.rb +13 -32
  9. data/lib/claude_swarm/version.rb +1 -1
  10. data/lib/swarm_cli/commands/run.rb +2 -2
  11. data/lib/swarm_cli/config_loader.rb +11 -11
  12. data/lib/swarm_cli/formatters/human_formatter.rb +70 -0
  13. data/lib/swarm_cli/interactive_repl.rb +11 -5
  14. data/lib/swarm_cli/ui/icons.rb +0 -23
  15. data/lib/swarm_cli/version.rb +1 -1
  16. data/lib/swarm_memory/adapters/filesystem_adapter.rb +11 -34
  17. data/lib/swarm_memory/integration/sdk_plugin.rb +87 -7
  18. data/lib/swarm_memory/version.rb +1 -1
  19. data/lib/swarm_memory.rb +1 -1
  20. data/lib/swarm_sdk/agent/builder.rb +58 -0
  21. data/lib/swarm_sdk/agent/chat.rb +527 -1059
  22. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +9 -88
  23. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
  24. data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +111 -44
  25. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
  26. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +233 -0
  27. data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +1 -1
  28. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
  29. data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +12 -12
  30. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
  31. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +98 -0
  32. data/lib/swarm_sdk/agent/context.rb +2 -2
  33. data/lib/swarm_sdk/agent/definition.rb +66 -154
  34. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
  35. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  36. data/lib/swarm_sdk/builders/base_builder.rb +409 -0
  37. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  38. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  39. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  40. data/lib/swarm_sdk/configuration/parser.rb +353 -0
  41. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  42. data/lib/swarm_sdk/configuration.rb +65 -543
  43. data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
  44. data/lib/swarm_sdk/context_compactor.rb +6 -11
  45. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  46. data/lib/swarm_sdk/context_management/context.rb +328 -0
  47. data/lib/swarm_sdk/defaults.rb +196 -0
  48. data/lib/swarm_sdk/events_to_messages.rb +18 -0
  49. data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
  50. data/lib/swarm_sdk/log_collector.rb +179 -29
  51. data/lib/swarm_sdk/log_stream.rb +29 -0
  52. data/lib/swarm_sdk/node_context.rb +1 -1
  53. data/lib/swarm_sdk/observer/builder.rb +81 -0
  54. data/lib/swarm_sdk/observer/config.rb +45 -0
  55. data/lib/swarm_sdk/observer/manager.rb +236 -0
  56. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  57. data/lib/swarm_sdk/plugin.rb +93 -3
  58. data/lib/swarm_sdk/snapshot.rb +6 -6
  59. data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
  60. data/lib/swarm_sdk/state_restorer.rb +136 -151
  61. data/lib/swarm_sdk/state_snapshot.rb +65 -100
  62. data/lib/swarm_sdk/swarm/agent_initializer.rb +180 -136
  63. data/lib/swarm_sdk/swarm/builder.rb +44 -578
  64. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  65. data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
  66. data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
  67. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  68. data/lib/swarm_sdk/swarm/tool_configurator.rb +42 -138
  69. data/lib/swarm_sdk/swarm.rb +137 -679
  70. data/lib/swarm_sdk/tools/bash.rb +11 -3
  71. data/lib/swarm_sdk/tools/delegate.rb +61 -43
  72. data/lib/swarm_sdk/tools/edit.rb +8 -13
  73. data/lib/swarm_sdk/tools/glob.rb +9 -1
  74. data/lib/swarm_sdk/tools/grep.rb +7 -0
  75. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  76. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  77. data/lib/swarm_sdk/tools/read.rb +11 -13
  78. data/lib/swarm_sdk/tools/registry.rb +122 -10
  79. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +8 -5
  80. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  81. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  82. data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
  83. data/lib/swarm_sdk/tools/write.rb +8 -13
  84. data/lib/swarm_sdk/version.rb +1 -1
  85. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
  86. data/lib/swarm_sdk/workflow/builder.rb +143 -0
  87. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  88. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +3 -3
  89. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
  90. data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
  91. data/lib/swarm_sdk.rb +33 -3
  92. metadata +37 -14
  93. data/lib/swarm_memory/chat_extension.rb +0 -34
  94. 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_memory
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda
@@ -52,19 +52,19 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: 4.6.0
54
54
  - !ruby/object:Gem::Dependency
55
- name: ruby_llm
55
+ name: ruby_llm_swarm
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.9'
60
+ version: 1.9.2
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.9'
67
+ version: 1.9.2
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: swarm_sdk
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +163,6 @@ files:
163
163
  - lib/swarm_memory.rb
164
164
  - lib/swarm_memory/adapters/base.rb
165
165
  - lib/swarm_memory/adapters/filesystem_adapter.rb
166
- - lib/swarm_memory/chat_extension.rb
167
166
  - lib/swarm_memory/cli/commands.rb
168
167
  - lib/swarm_memory/core/entry.rb
169
168
  - lib/swarm_memory/core/frontmatter_parser.rb
@@ -207,19 +206,35 @@ files:
207
206
  - lib/swarm_sdk/agent/RETRY_LOGIC.md
208
207
  - lib/swarm_sdk/agent/builder.rb
209
208
  - lib/swarm_sdk/agent/chat.rb
210
- - lib/swarm_sdk/agent/chat/context_tracker.rb
211
- - lib/swarm_sdk/agent/chat/hook_integration.rb
212
- - lib/swarm_sdk/agent/chat/logging_helpers.rb
213
- - lib/swarm_sdk/agent/chat/system_reminder_injector.rb
209
+ - lib/swarm_sdk/agent/chat_helpers/context_tracker.rb
210
+ - lib/swarm_sdk/agent/chat_helpers/event_emitter.rb
211
+ - lib/swarm_sdk/agent/chat_helpers/hook_integration.rb
212
+ - lib/swarm_sdk/agent/chat_helpers/instrumentation.rb
213
+ - lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb
214
+ - lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb
215
+ - lib/swarm_sdk/agent/chat_helpers/serialization.rb
216
+ - lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb
217
+ - lib/swarm_sdk/agent/chat_helpers/system_reminders.rb
218
+ - lib/swarm_sdk/agent/chat_helpers/token_tracking.rb
214
219
  - lib/swarm_sdk/agent/context.rb
215
220
  - lib/swarm_sdk/agent/context_manager.rb
216
221
  - lib/swarm_sdk/agent/definition.rb
217
222
  - lib/swarm_sdk/agent/llm_instrumentation_middleware.rb
223
+ - lib/swarm_sdk/agent/system_prompt_builder.rb
224
+ - lib/swarm_sdk/builders/base_builder.rb
218
225
  - lib/swarm_sdk/claude_code_agent_adapter.rb
226
+ - lib/swarm_sdk/concerns/cleanupable.rb
227
+ - lib/swarm_sdk/concerns/snapshotable.rb
228
+ - lib/swarm_sdk/concerns/validatable.rb
219
229
  - lib/swarm_sdk/configuration.rb
230
+ - lib/swarm_sdk/configuration/parser.rb
231
+ - lib/swarm_sdk/configuration/translator.rb
220
232
  - lib/swarm_sdk/context_compactor.rb
221
233
  - lib/swarm_sdk/context_compactor/metrics.rb
222
234
  - lib/swarm_sdk/context_compactor/token_counter.rb
235
+ - lib/swarm_sdk/context_management/builder.rb
236
+ - lib/swarm_sdk/context_management/context.rb
237
+ - lib/swarm_sdk/defaults.rb
223
238
  - lib/swarm_sdk/events_to_messages.rb
224
239
  - lib/swarm_sdk/hooks/adapter.rb
225
240
  - lib/swarm_sdk/hooks/context.rb
@@ -237,11 +252,11 @@ files:
237
252
  - lib/swarm_sdk/model_aliases.json
238
253
  - lib/swarm_sdk/models.json
239
254
  - lib/swarm_sdk/models.rb
240
- - lib/swarm_sdk/node/agent_config.rb
241
- - lib/swarm_sdk/node/builder.rb
242
- - lib/swarm_sdk/node/transformer_executor.rb
243
255
  - lib/swarm_sdk/node_context.rb
244
- - lib/swarm_sdk/node_orchestrator.rb
256
+ - lib/swarm_sdk/observer/builder.rb
257
+ - lib/swarm_sdk/observer/config.rb
258
+ - lib/swarm_sdk/observer/manager.rb
259
+ - lib/swarm_sdk/patterns/agent_observer.rb
245
260
  - lib/swarm_sdk/permissions/config.rb
246
261
  - lib/swarm_sdk/permissions/error_formatter.rb
247
262
  - lib/swarm_sdk/permissions/path_matcher.rb
@@ -251,7 +266,6 @@ files:
251
266
  - lib/swarm_sdk/plugin_registry.rb
252
267
  - lib/swarm_sdk/proc_helpers.rb
253
268
  - lib/swarm_sdk/prompts/base_system_prompt.md.erb
254
- - lib/swarm_sdk/providers/openai_with_responses.rb
255
269
  - lib/swarm_sdk/restore_result.rb
256
270
  - lib/swarm_sdk/result.rb
257
271
  - lib/swarm_sdk/snapshot.rb
@@ -262,6 +276,9 @@ files:
262
276
  - lib/swarm_sdk/swarm/agent_initializer.rb
263
277
  - lib/swarm_sdk/swarm/all_agents_builder.rb
264
278
  - lib/swarm_sdk/swarm/builder.rb
279
+ - lib/swarm_sdk/swarm/executor.rb
280
+ - lib/swarm_sdk/swarm/hook_triggers.rb
281
+ - lib/swarm_sdk/swarm/logging_callbacks.rb
265
282
  - lib/swarm_sdk/swarm/mcp_configurator.rb
266
283
  - lib/swarm_sdk/swarm/swarm_registry_builder.rb
267
284
  - lib/swarm_sdk/swarm/tool_configurator.rb
@@ -299,6 +316,12 @@ files:
299
316
  - lib/swarm_sdk/utils.rb
300
317
  - lib/swarm_sdk/validation_result.rb
301
318
  - lib/swarm_sdk/version.rb
319
+ - lib/swarm_sdk/workflow.rb
320
+ - lib/swarm_sdk/workflow/agent_config.rb
321
+ - lib/swarm_sdk/workflow/builder.rb
322
+ - lib/swarm_sdk/workflow/executor.rb
323
+ - lib/swarm_sdk/workflow/node_builder.rb
324
+ - lib/swarm_sdk/workflow/transformer_executor.rb
302
325
  homepage: https://github.com/parruda/claude-swarm
303
326
  licenses:
304
327
  - MIT
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SwarmMemory
4
- # Extension module for SwarmSDK::Agent::Chat
5
- #
6
- # Adds individual tool removal capability needed for:
7
- # 1. Mode-based tool filtering (retrieval/interactive/researcher)
8
- # 2. LoadSkill's fine-grained tool swapping
9
- #
10
- # This is injected into SwarmSDK::Agent::Chat when SwarmMemory is loaded.
11
- module ChatExtension
12
- # Remove a specific tool by name
13
- #
14
- # Used by SwarmMemory to filter tools based on memory mode.
15
- # Unlike remove_mutable_tools (which removes ALL mutable tools),
16
- # this removes a single tool by name.
17
- #
18
- # @param tool_name [String, Symbol] Tool name to remove
19
- # @return [void]
20
- def remove_tool(tool_name)
21
- tool_sym = tool_name.to_sym
22
- tool_str = tool_name.to_s
23
-
24
- # Remove from @tools hash (tools are keyed by symbol)
25
- @tools.delete(tool_sym)
26
- @tools.delete(tool_str)
27
- end
28
- end
29
- end
30
-
31
- # Inject into SwarmSDK when both gems are loaded
32
- if defined?(SwarmSDK::Agent::Chat)
33
- SwarmSDK::Agent::Chat.include(SwarmMemory::ChatExtension)
34
- end