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.
- checksums.yaml +4 -4
- data/lib/claude_swarm/claude_mcp_server.rb +1 -0
- data/lib/claude_swarm/cli.rb +5 -18
- data/lib/claude_swarm/configuration.rb +2 -15
- data/lib/claude_swarm/mcp_generator.rb +1 -0
- data/lib/claude_swarm/openai/chat_completion.rb +4 -12
- data/lib/claude_swarm/openai/executor.rb +3 -1
- data/lib/claude_swarm/openai/responses.rb +13 -32
- data/lib/claude_swarm/version.rb +1 -1
- data/lib/swarm_cli/commands/run.rb +2 -2
- data/lib/swarm_cli/config_loader.rb +11 -11
- data/lib/swarm_cli/formatters/human_formatter.rb +70 -0
- data/lib/swarm_cli/interactive_repl.rb +11 -5
- data/lib/swarm_cli/ui/icons.rb +0 -23
- data/lib/swarm_cli/version.rb +1 -1
- data/lib/swarm_memory/adapters/filesystem_adapter.rb +11 -34
- data/lib/swarm_memory/integration/sdk_plugin.rb +87 -7
- data/lib/swarm_memory/version.rb +1 -1
- data/lib/swarm_memory.rb +1 -1
- 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 +37 -14
- data/lib/swarm_memory/chat_extension.rb +0 -34
- 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_memory
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
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:
|
|
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:
|
|
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:
|
|
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/
|
|
211
|
-
- lib/swarm_sdk/agent/
|
|
212
|
-
- lib/swarm_sdk/agent/
|
|
213
|
-
- lib/swarm_sdk/agent/
|
|
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/
|
|
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
|