claude_swarm 1.0.9 → 1.0.11
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/{CHANGELOG.md → CHANGELOG.claude-swarm.md} +10 -0
- data/CLAUDE.md +346 -191
- data/decisions/2025-11-22-001-global-agent-registry.md +172 -0
- data/docs/v2/CHANGELOG.swarm_cli.md +20 -0
- data/docs/v2/CHANGELOG.swarm_memory.md +146 -1
- data/docs/v2/CHANGELOG.swarm_sdk.md +433 -10
- data/docs/v2/README.md +20 -5
- data/docs/v2/guides/complete-tutorial.md +95 -9
- data/docs/v2/guides/getting-started.md +10 -8
- data/docs/v2/guides/memory-adapters.md +41 -0
- data/docs/v2/guides/migrating-to-2.x.md +746 -0
- data/docs/v2/guides/plugins.md +52 -5
- data/docs/v2/guides/rails-integration.md +6 -0
- data/docs/v2/guides/snapshots.md +14 -14
- data/docs/v2/guides/swarm-memory.md +2 -13
- data/docs/v2/reference/architecture-flow.md +3 -3
- data/docs/v2/reference/cli.md +0 -1
- data/docs/v2/reference/configuration_reference.md +300 -0
- data/docs/v2/reference/event_payload_structures.md +27 -5
- data/docs/v2/reference/ruby-dsl.md +614 -18
- data/docs/v2/reference/swarm_memory_technical_details.md +7 -29
- data/docs/v2/reference/yaml.md +172 -54
- data/examples/snapshot_demo.rb +2 -2
- data/lib/claude_swarm/mcp_generator.rb +8 -21
- data/lib/claude_swarm/orchestrator.rb +8 -1
- 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 +0 -33
- data/lib/swarm_cli/interactive_repl.rb +2 -2
- 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/core/semantic_index.rb +10 -2
- data/lib/swarm_memory/core/storage.rb +7 -2
- data/lib/swarm_memory/dsl/memory_config.rb +37 -0
- data/lib/swarm_memory/integration/sdk_plugin.rb +201 -28
- data/lib/swarm_memory/optimization/defragmenter.rb +1 -1
- data/lib/swarm_memory/prompts/memory_researcher.md.erb +0 -1
- data/lib/swarm_memory/tools/load_skill.rb +0 -1
- data/lib/swarm_memory/tools/memory_edit.rb +2 -1
- data/lib/swarm_memory/tools/memory_read.rb +1 -1
- data/lib/swarm_memory/version.rb +1 -1
- data/lib/swarm_memory.rb +8 -6
- data/lib/swarm_sdk/agent/builder.rb +58 -0
- data/lib/swarm_sdk/agent/chat.rb +527 -1061
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +13 -88
- data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +108 -46
- data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
- data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +267 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +3 -3
- data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +11 -13
- data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
- data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +146 -0
- data/lib/swarm_sdk/agent/context.rb +1 -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/agent_registry.rb +146 -0
- data/lib/swarm_sdk/builders/base_builder.rb +488 -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/config.rb +302 -0
- data/lib/swarm_sdk/configuration/parser.rb +373 -0
- data/lib/swarm_sdk/configuration/translator.rb +255 -0
- data/lib/swarm_sdk/configuration.rb +77 -546
- data/lib/swarm_sdk/context_compactor/token_counter.rb +2 -6
- 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/custom_tool_registry.rb +226 -0
- data/lib/swarm_sdk/defaults.rb +196 -0
- data/lib/swarm_sdk/events_to_messages.rb +18 -0
- data/lib/swarm_sdk/hooks/adapter.rb +3 -3
- data/lib/swarm_sdk/hooks/shell_executor.rb +4 -2
- data/lib/swarm_sdk/log_collector.rb +179 -29
- data/lib/swarm_sdk/log_stream.rb +29 -0
- data/lib/swarm_sdk/models.json +4333 -1
- data/lib/swarm_sdk/models.rb +43 -2
- 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 +95 -5
- data/lib/swarm_sdk/result.rb +52 -0
- 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 +181 -137
- 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 +151 -0
- data/lib/swarm_sdk/swarm/logging_callbacks.rb +341 -0
- data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
- data/lib/swarm_sdk/swarm/tool_configurator.rb +58 -140
- data/lib/swarm_sdk/swarm.rb +203 -683
- data/lib/swarm_sdk/tools/bash.rb +14 -8
- 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 +12 -4
- 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 +16 -18
- data/lib/swarm_sdk/tools/registry.rb +122 -10
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +9 -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 +20 -17
- 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 +192 -0
- data/lib/swarm_sdk/workflow/executor.rb +497 -0
- data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +7 -5
- data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +5 -3
- data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
- data/lib/swarm_sdk.rb +294 -108
- data/rubocop/cop/security/no_reflection_methods.rb +1 -1
- data/swarm_cli.gemspec +1 -1
- data/swarm_memory.gemspec +8 -3
- data/swarm_sdk.gemspec +6 -4
- data/team_full.yml +124 -320
- metadata +42 -14
- data/lib/swarm_memory/chat_extension.rb +0 -34
- data/lib/swarm_memory/tools/memory_multi_edit.rb +0 -281
- data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -589
- /data/lib/swarm_memory/{errors.rb → error.rb} +0 -0
data/lib/swarm_memory.rb
CHANGED
|
@@ -21,8 +21,8 @@ rescue LoadError
|
|
|
21
21
|
warn("Warning: informers gem not found. Semantic search will be unavailable. Run: gem install informers")
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
# Load
|
|
25
|
-
require_relative "swarm_memory/
|
|
24
|
+
# Load error classes and version first (before Zeitwerk)
|
|
25
|
+
require_relative "swarm_memory/error"
|
|
26
26
|
require_relative "swarm_memory/version"
|
|
27
27
|
|
|
28
28
|
# Setup Zeitwerk loader
|
|
@@ -36,13 +36,18 @@ loader.inflector.inflect(
|
|
|
36
36
|
"dsl" => "DSL",
|
|
37
37
|
"sdk_plugin" => "SDKPlugin",
|
|
38
38
|
)
|
|
39
|
+
|
|
40
|
+
# Ignore files that are manually loaded above
|
|
41
|
+
loader.ignore("#{__dir__}/swarm_memory/error.rb")
|
|
42
|
+
loader.ignore("#{__dir__}/swarm_memory/version.rb")
|
|
43
|
+
|
|
39
44
|
loader.setup
|
|
40
45
|
|
|
41
46
|
# Explicitly load DSL components and extensions to inject into SwarmSDK
|
|
42
47
|
# These must be loaded after Zeitwerk but before anything uses them
|
|
43
48
|
require_relative "swarm_memory/dsl/memory_config"
|
|
44
49
|
require_relative "swarm_memory/dsl/builder_extension"
|
|
45
|
-
|
|
50
|
+
# NOTE: ChatExtension was removed in favor of SDK's built-in remove_tool method
|
|
46
51
|
|
|
47
52
|
module SwarmMemory
|
|
48
53
|
class << self
|
|
@@ -118,8 +123,6 @@ module SwarmMemory
|
|
|
118
123
|
Tools::MemoryRead.new(storage: storage, agent_name: agent_name)
|
|
119
124
|
when :MemoryEdit
|
|
120
125
|
Tools::MemoryEdit.new(storage: storage, agent_name: agent_name)
|
|
121
|
-
when :MemoryMultiEdit
|
|
122
|
-
Tools::MemoryMultiEdit.new(storage: storage, agent_name: agent_name)
|
|
123
126
|
when :MemoryDelete
|
|
124
127
|
Tools::MemoryDelete.new(storage: storage)
|
|
125
128
|
when :MemoryGlob
|
|
@@ -153,7 +156,6 @@ module SwarmMemory
|
|
|
153
156
|
Tools::MemoryWrite.new(storage: storage, agent_name: agent_name),
|
|
154
157
|
Tools::MemoryRead.new(storage: storage, agent_name: agent_name),
|
|
155
158
|
Tools::MemoryEdit.new(storage: storage, agent_name: agent_name),
|
|
156
|
-
Tools::MemoryMultiEdit.new(storage: storage, agent_name: agent_name),
|
|
157
159
|
Tools::MemoryDelete.new(storage: storage),
|
|
158
160
|
Tools::MemoryGlob.new(storage: storage),
|
|
159
161
|
Tools::MemoryGrep.new(storage: storage),
|
|
@@ -60,6 +60,7 @@ module SwarmSDK
|
|
|
60
60
|
@default_permissions = {} # Set by SwarmBuilder from all_agents
|
|
61
61
|
@memory_config = nil
|
|
62
62
|
@shared_across_delegations = nil # nil = not set (will default to false in Definition)
|
|
63
|
+
@context_management_config = nil # Context management DSL hooks
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
# Set/get agent model
|
|
@@ -288,6 +289,56 @@ module SwarmSDK
|
|
|
288
289
|
self
|
|
289
290
|
end
|
|
290
291
|
|
|
292
|
+
# Configure context management handlers
|
|
293
|
+
#
|
|
294
|
+
# Define custom handlers for context warning thresholds (60%, 80%, 90%).
|
|
295
|
+
# Handlers receive a rich context object with message manipulation methods.
|
|
296
|
+
# When a custom handler is registered, automatic compression is disabled
|
|
297
|
+
# for that threshold, giving full control to the handler.
|
|
298
|
+
#
|
|
299
|
+
# @yield Context management DSL block
|
|
300
|
+
# @return [void]
|
|
301
|
+
#
|
|
302
|
+
# @example Basic compression at 60%
|
|
303
|
+
# context_management do
|
|
304
|
+
# on :warning_60 do |ctx|
|
|
305
|
+
# ctx.compress_tool_results(keep_recent: 10)
|
|
306
|
+
# end
|
|
307
|
+
# end
|
|
308
|
+
#
|
|
309
|
+
# @example Multiple thresholds with different strategies
|
|
310
|
+
# context_management do
|
|
311
|
+
# on :warning_60 do |ctx|
|
|
312
|
+
# ctx.compress_tool_results(keep_recent: 15, truncate_to: 500)
|
|
313
|
+
# end
|
|
314
|
+
#
|
|
315
|
+
# on :warning_80 do |ctx|
|
|
316
|
+
# ctx.prune_old_messages(keep_recent: 30)
|
|
317
|
+
# ctx.compress_tool_results(keep_recent: 5, truncate_to: 200)
|
|
318
|
+
# end
|
|
319
|
+
#
|
|
320
|
+
# on :warning_90 do |ctx|
|
|
321
|
+
# ctx.log_action("emergency_pruning", remaining: ctx.tokens_remaining)
|
|
322
|
+
# ctx.prune_old_messages(keep_recent: 15)
|
|
323
|
+
# end
|
|
324
|
+
# end
|
|
325
|
+
#
|
|
326
|
+
# @example Conditional logic based on metrics
|
|
327
|
+
# context_management do
|
|
328
|
+
# on :warning_80 do |ctx|
|
|
329
|
+
# if ctx.usage_percentage > 85
|
|
330
|
+
# ctx.prune_old_messages(keep_recent: 10)
|
|
331
|
+
# else
|
|
332
|
+
# ctx.compress_tool_results(keep_recent: 5)
|
|
333
|
+
# end
|
|
334
|
+
# end
|
|
335
|
+
# end
|
|
336
|
+
def context_management(&block)
|
|
337
|
+
builder = ContextManagement::Builder.new
|
|
338
|
+
builder.instance_eval(&block)
|
|
339
|
+
@context_management_config = builder.build
|
|
340
|
+
end
|
|
341
|
+
|
|
291
342
|
# Set permissions directly from hash (for YAML translation)
|
|
292
343
|
#
|
|
293
344
|
# This is intentionally separate from permissions() to keep the DSL clean.
|
|
@@ -411,6 +462,13 @@ module SwarmSDK
|
|
|
411
462
|
# Convert DSL hooks to HookDefinition format
|
|
412
463
|
agent_config[:hooks] = convert_hooks_to_definitions if @hooks.any?
|
|
413
464
|
|
|
465
|
+
# Merge context management hooks into agent hooks
|
|
466
|
+
if @context_management_config
|
|
467
|
+
agent_config[:hooks] ||= {}
|
|
468
|
+
agent_config[:hooks][:context_warning] ||= []
|
|
469
|
+
agent_config[:hooks][:context_warning].concat(@context_management_config)
|
|
470
|
+
end
|
|
471
|
+
|
|
414
472
|
Agent::Definition.new(@name, agent_config)
|
|
415
473
|
end
|
|
416
474
|
|