swarm_sdk 2.1.3 → 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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/agent/builder.rb +91 -0
  3. data/lib/swarm_sdk/agent/chat.rb +540 -925
  4. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +33 -79
  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 +147 -39
  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 +22 -38
  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 +8 -4
  15. data/lib/swarm_sdk/agent/context_manager.rb +6 -0
  16. data/lib/swarm_sdk/agent/definition.rb +79 -155
  17. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +182 -0
  18. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  19. data/lib/swarm_sdk/builders/base_builder.rb +409 -0
  20. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  21. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  22. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  23. data/lib/swarm_sdk/configuration/parser.rb +353 -0
  24. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  25. data/lib/swarm_sdk/configuration.rb +72 -257
  26. data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
  27. data/lib/swarm_sdk/context_compactor.rb +6 -11
  28. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  29. data/lib/swarm_sdk/context_management/context.rb +328 -0
  30. data/lib/swarm_sdk/defaults.rb +196 -0
  31. data/lib/swarm_sdk/events_to_messages.rb +199 -0
  32. data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
  33. data/lib/swarm_sdk/log_collector.rb +192 -16
  34. data/lib/swarm_sdk/log_stream.rb +66 -8
  35. data/lib/swarm_sdk/model_aliases.json +4 -1
  36. data/lib/swarm_sdk/node_context.rb +1 -1
  37. data/lib/swarm_sdk/observer/builder.rb +81 -0
  38. data/lib/swarm_sdk/observer/config.rb +45 -0
  39. data/lib/swarm_sdk/observer/manager.rb +236 -0
  40. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  41. data/lib/swarm_sdk/plugin.rb +93 -3
  42. data/lib/swarm_sdk/proc_helpers.rb +53 -0
  43. data/lib/swarm_sdk/restore_result.rb +65 -0
  44. data/lib/swarm_sdk/snapshot.rb +156 -0
  45. data/lib/swarm_sdk/snapshot_from_events.rb +397 -0
  46. data/lib/swarm_sdk/state_restorer.rb +476 -0
  47. data/lib/swarm_sdk/state_snapshot.rb +334 -0
  48. data/lib/swarm_sdk/swarm/agent_initializer.rb +428 -79
  49. data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
  50. data/lib/swarm_sdk/swarm/builder.rb +69 -407
  51. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  52. data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
  53. data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
  54. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  55. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +67 -0
  56. data/lib/swarm_sdk/swarm/tool_configurator.rb +88 -149
  57. data/lib/swarm_sdk/swarm.rb +337 -584
  58. data/lib/swarm_sdk/swarm_loader.rb +145 -0
  59. data/lib/swarm_sdk/swarm_registry.rb +136 -0
  60. data/lib/swarm_sdk/tools/bash.rb +11 -3
  61. data/lib/swarm_sdk/tools/delegate.rb +127 -24
  62. data/lib/swarm_sdk/tools/edit.rb +8 -13
  63. data/lib/swarm_sdk/tools/glob.rb +9 -1
  64. data/lib/swarm_sdk/tools/grep.rb +7 -0
  65. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  66. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  67. data/lib/swarm_sdk/tools/read.rb +28 -18
  68. data/lib/swarm_sdk/tools/registry.rb +122 -10
  69. data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
  70. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +53 -5
  71. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  72. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  73. data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
  74. data/lib/swarm_sdk/tools/write.rb +8 -13
  75. data/lib/swarm_sdk/utils.rb +18 -0
  76. data/lib/swarm_sdk/validation_result.rb +33 -0
  77. data/lib/swarm_sdk/version.rb +1 -1
  78. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +34 -9
  79. data/lib/swarm_sdk/workflow/builder.rb +143 -0
  80. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  81. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +42 -21
  82. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
  83. data/lib/swarm_sdk/workflow.rb +554 -0
  84. data/lib/swarm_sdk.rb +73 -11
  85. metadata +79 -16
  86. data/lib/swarm_sdk/mcp.rb +0 -16
  87. data/lib/swarm_sdk/node_orchestrator.rb +0 -591
  88. data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -582
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5d0702a4e7e567c81f3a9974fdc197f4e3247fe9d6ce38d5a80b373423fff40
4
- data.tar.gz: f6907d5c9baa55ab32e19cbe440643cb169aac1d1c9ef4501679357f63ec364c
3
+ metadata.gz: f8643441321fcf3c24d637134d75697f61670ffa4129608c1c4d0e98571805a5
4
+ data.tar.gz: cb105cd387671e16eea9ebf52fbcf31a11f9ec0d6a03b7f2e45cad7721434dab
5
5
  SHA512:
6
- metadata.gz: 460b59be54dc659ba6eb6cc37e9946ac9edd14d946bde9672f7a02c119cd89792b7253f2de29238fc9493cc4cdffa19283e83c4f86417840050fd1cf1dd33766
7
- data.tar.gz: 5a377235df41937afacc67ac76ba8420960931bd1f72f64d77db2c86741a55bf0ea05918f78922f7bf4645f7beb0a8b2420413395a5fec267f098e10106d28e4
6
+ metadata.gz: f613f1d8be2c5fd00ebaaa896b54bdeb34f6537b56638706c5655d8b0ceeb942c87702be5d07be748dd194ec90c48c5e7b24d180ca6bea58714f43cd55afaf86
7
+ data.tar.gz: b608df1ef8b5368c4f1e84a057591103943df755706bdaba521fa56075805d6281d434968eadb4cb35edb6a4d9987e710e9b1450fde09c9ed23ed1bebe5af075
@@ -24,6 +24,13 @@ module SwarmSDK
24
24
  # Expose mcp_servers for tests
25
25
  attr_reader :mcp_servers
26
26
 
27
+ # Get tools list as array for validation
28
+ #
29
+ # @return [Array<Symbol>] List of tools
30
+ def tools_list
31
+ @tools.to_a
32
+ end
33
+
27
34
  def initialize(name)
28
35
  @name = name
29
36
  @description = nil
@@ -52,6 +59,8 @@ module SwarmSDK
52
59
  @permissions_config = {}
53
60
  @default_permissions = {} # Set by SwarmBuilder from all_agents
54
61
  @memory_config = nil
62
+ @shared_across_delegations = nil # nil = not set (will default to false in Definition)
63
+ @context_management_config = nil # Context management DSL hooks
55
64
  end
56
65
 
57
66
  # Set/get agent model
@@ -267,6 +276,80 @@ module SwarmSDK
267
276
  @permissions_config = PermissionsBuilder.build(&block)
268
277
  end
269
278
 
279
+ # Configure delegation isolation mode
280
+ #
281
+ # @param enabled [Boolean] If true, allows sharing instances across delegations (old behavior)
282
+ # If false (default), creates isolated instances per delegation
283
+ # @return [self] Returns self for method chaining
284
+ #
285
+ # @example
286
+ # shared_across_delegations true # Allow sharing (old behavior)
287
+ def shared_across_delegations(enabled)
288
+ @shared_across_delegations = enabled
289
+ self
290
+ end
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
+
342
+ # Set permissions directly from hash (for YAML translation)
343
+ #
344
+ # This is intentionally separate from permissions() to keep the DSL clean.
345
+ # Called by Configuration when translating YAML permissions.
346
+ #
347
+ # @param hash [Hash] Permissions configuration hash
348
+ # @return [void]
349
+ def permissions_hash=(hash)
350
+ @permissions_config = hash || {}
351
+ end
352
+
270
353
  # Check if model has been explicitly set (not default)
271
354
  #
272
355
  # Used by Swarm::Builder to determine if all_agents model should apply.
@@ -374,10 +457,18 @@ module SwarmSDK
374
457
  agent_config[:permissions] = @permissions_config if @permissions_config.any?
375
458
  agent_config[:default_permissions] = @default_permissions if @default_permissions.any?
376
459
  agent_config[:memory] = @memory_config if @memory_config
460
+ agent_config[:shared_across_delegations] = @shared_across_delegations unless @shared_across_delegations.nil?
377
461
 
378
462
  # Convert DSL hooks to HookDefinition format
379
463
  agent_config[:hooks] = convert_hooks_to_definitions if @hooks.any?
380
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
+
381
472
  Agent::Definition.new(@name, agent_config)
382
473
  end
383
474