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.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGELOG.md → CHANGELOG.claude-swarm.md} +10 -0
  3. data/CLAUDE.md +346 -191
  4. data/decisions/2025-11-22-001-global-agent-registry.md +172 -0
  5. data/docs/v2/CHANGELOG.swarm_cli.md +20 -0
  6. data/docs/v2/CHANGELOG.swarm_memory.md +146 -1
  7. data/docs/v2/CHANGELOG.swarm_sdk.md +433 -10
  8. data/docs/v2/README.md +20 -5
  9. data/docs/v2/guides/complete-tutorial.md +95 -9
  10. data/docs/v2/guides/getting-started.md +10 -8
  11. data/docs/v2/guides/memory-adapters.md +41 -0
  12. data/docs/v2/guides/migrating-to-2.x.md +746 -0
  13. data/docs/v2/guides/plugins.md +52 -5
  14. data/docs/v2/guides/rails-integration.md +6 -0
  15. data/docs/v2/guides/snapshots.md +14 -14
  16. data/docs/v2/guides/swarm-memory.md +2 -13
  17. data/docs/v2/reference/architecture-flow.md +3 -3
  18. data/docs/v2/reference/cli.md +0 -1
  19. data/docs/v2/reference/configuration_reference.md +300 -0
  20. data/docs/v2/reference/event_payload_structures.md +27 -5
  21. data/docs/v2/reference/ruby-dsl.md +614 -18
  22. data/docs/v2/reference/swarm_memory_technical_details.md +7 -29
  23. data/docs/v2/reference/yaml.md +172 -54
  24. data/examples/snapshot_demo.rb +2 -2
  25. data/lib/claude_swarm/mcp_generator.rb +8 -21
  26. data/lib/claude_swarm/orchestrator.rb +8 -1
  27. data/lib/claude_swarm/version.rb +1 -1
  28. data/lib/swarm_cli/commands/run.rb +2 -2
  29. data/lib/swarm_cli/config_loader.rb +11 -11
  30. data/lib/swarm_cli/formatters/human_formatter.rb +0 -33
  31. data/lib/swarm_cli/interactive_repl.rb +2 -2
  32. data/lib/swarm_cli/ui/icons.rb +0 -23
  33. data/lib/swarm_cli/version.rb +1 -1
  34. data/lib/swarm_memory/adapters/filesystem_adapter.rb +11 -34
  35. data/lib/swarm_memory/core/semantic_index.rb +10 -2
  36. data/lib/swarm_memory/core/storage.rb +7 -2
  37. data/lib/swarm_memory/dsl/memory_config.rb +37 -0
  38. data/lib/swarm_memory/integration/sdk_plugin.rb +201 -28
  39. data/lib/swarm_memory/optimization/defragmenter.rb +1 -1
  40. data/lib/swarm_memory/prompts/memory_researcher.md.erb +0 -1
  41. data/lib/swarm_memory/tools/load_skill.rb +0 -1
  42. data/lib/swarm_memory/tools/memory_edit.rb +2 -1
  43. data/lib/swarm_memory/tools/memory_read.rb +1 -1
  44. data/lib/swarm_memory/version.rb +1 -1
  45. data/lib/swarm_memory.rb +8 -6
  46. data/lib/swarm_sdk/agent/builder.rb +58 -0
  47. data/lib/swarm_sdk/agent/chat.rb +527 -1061
  48. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +13 -88
  49. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
  50. data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +108 -46
  51. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
  52. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +267 -0
  53. data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +3 -3
  54. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
  55. data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +11 -13
  56. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
  57. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +146 -0
  58. data/lib/swarm_sdk/agent/context.rb +1 -2
  59. data/lib/swarm_sdk/agent/definition.rb +66 -154
  60. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
  61. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  62. data/lib/swarm_sdk/agent_registry.rb +146 -0
  63. data/lib/swarm_sdk/builders/base_builder.rb +488 -0
  64. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  65. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  66. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  67. data/lib/swarm_sdk/config.rb +302 -0
  68. data/lib/swarm_sdk/configuration/parser.rb +373 -0
  69. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  70. data/lib/swarm_sdk/configuration.rb +77 -546
  71. data/lib/swarm_sdk/context_compactor/token_counter.rb +2 -6
  72. data/lib/swarm_sdk/context_compactor.rb +6 -11
  73. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  74. data/lib/swarm_sdk/context_management/context.rb +328 -0
  75. data/lib/swarm_sdk/custom_tool_registry.rb +226 -0
  76. data/lib/swarm_sdk/defaults.rb +196 -0
  77. data/lib/swarm_sdk/events_to_messages.rb +18 -0
  78. data/lib/swarm_sdk/hooks/adapter.rb +3 -3
  79. data/lib/swarm_sdk/hooks/shell_executor.rb +4 -2
  80. data/lib/swarm_sdk/log_collector.rb +179 -29
  81. data/lib/swarm_sdk/log_stream.rb +29 -0
  82. data/lib/swarm_sdk/models.json +4333 -1
  83. data/lib/swarm_sdk/models.rb +43 -2
  84. data/lib/swarm_sdk/node_context.rb +1 -1
  85. data/lib/swarm_sdk/observer/builder.rb +81 -0
  86. data/lib/swarm_sdk/observer/config.rb +45 -0
  87. data/lib/swarm_sdk/observer/manager.rb +236 -0
  88. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  89. data/lib/swarm_sdk/plugin.rb +95 -5
  90. data/lib/swarm_sdk/result.rb +52 -0
  91. data/lib/swarm_sdk/snapshot.rb +6 -6
  92. data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
  93. data/lib/swarm_sdk/state_restorer.rb +136 -151
  94. data/lib/swarm_sdk/state_snapshot.rb +65 -100
  95. data/lib/swarm_sdk/swarm/agent_initializer.rb +181 -137
  96. data/lib/swarm_sdk/swarm/builder.rb +44 -578
  97. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  98. data/lib/swarm_sdk/swarm/hook_triggers.rb +151 -0
  99. data/lib/swarm_sdk/swarm/logging_callbacks.rb +341 -0
  100. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  101. data/lib/swarm_sdk/swarm/tool_configurator.rb +58 -140
  102. data/lib/swarm_sdk/swarm.rb +203 -683
  103. data/lib/swarm_sdk/tools/bash.rb +14 -8
  104. data/lib/swarm_sdk/tools/delegate.rb +61 -43
  105. data/lib/swarm_sdk/tools/edit.rb +8 -13
  106. data/lib/swarm_sdk/tools/glob.rb +12 -4
  107. data/lib/swarm_sdk/tools/grep.rb +7 -0
  108. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  109. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  110. data/lib/swarm_sdk/tools/read.rb +16 -18
  111. data/lib/swarm_sdk/tools/registry.rb +122 -10
  112. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +9 -5
  113. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  114. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  115. data/lib/swarm_sdk/tools/web_fetch.rb +20 -17
  116. data/lib/swarm_sdk/tools/write.rb +8 -13
  117. data/lib/swarm_sdk/version.rb +1 -1
  118. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
  119. data/lib/swarm_sdk/workflow/builder.rb +192 -0
  120. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  121. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +7 -5
  122. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +5 -3
  123. data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
  124. data/lib/swarm_sdk.rb +294 -108
  125. data/rubocop/cop/security/no_reflection_methods.rb +1 -1
  126. data/swarm_cli.gemspec +1 -1
  127. data/swarm_memory.gemspec +8 -3
  128. data/swarm_sdk.gemspec +6 -4
  129. data/team_full.yml +124 -320
  130. metadata +42 -14
  131. data/lib/swarm_memory/chat_extension.rb +0 -34
  132. data/lib/swarm_memory/tools/memory_multi_edit.rb +0 -281
  133. data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -589
  134. /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 errors and version first
25
- require_relative "swarm_memory/errors"
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
- require_relative "swarm_memory/chat_extension"
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