swarm_sdk 2.2.0 → 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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/agent/builder.rb +58 -0
  3. data/lib/swarm_sdk/agent/chat.rb +527 -1059
  4. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +9 -88
  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 +111 -44
  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 +12 -12
  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 +2 -2
  15. data/lib/swarm_sdk/agent/definition.rb +66 -154
  16. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
  17. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  18. data/lib/swarm_sdk/builders/base_builder.rb +409 -0
  19. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  20. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  21. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  22. data/lib/swarm_sdk/configuration/parser.rb +353 -0
  23. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  24. data/lib/swarm_sdk/configuration.rb +65 -543
  25. data/lib/swarm_sdk/context_compactor/token_counter.rb +3 -3
  26. data/lib/swarm_sdk/context_compactor.rb +6 -11
  27. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  28. data/lib/swarm_sdk/context_management/context.rb +328 -0
  29. data/lib/swarm_sdk/defaults.rb +196 -0
  30. data/lib/swarm_sdk/events_to_messages.rb +18 -0
  31. data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
  32. data/lib/swarm_sdk/log_collector.rb +179 -29
  33. data/lib/swarm_sdk/log_stream.rb +29 -0
  34. data/lib/swarm_sdk/node_context.rb +1 -1
  35. data/lib/swarm_sdk/observer/builder.rb +81 -0
  36. data/lib/swarm_sdk/observer/config.rb +45 -0
  37. data/lib/swarm_sdk/observer/manager.rb +236 -0
  38. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  39. data/lib/swarm_sdk/plugin.rb +93 -3
  40. data/lib/swarm_sdk/snapshot.rb +6 -6
  41. data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
  42. data/lib/swarm_sdk/state_restorer.rb +136 -151
  43. data/lib/swarm_sdk/state_snapshot.rb +65 -100
  44. data/lib/swarm_sdk/swarm/agent_initializer.rb +180 -136
  45. data/lib/swarm_sdk/swarm/builder.rb +44 -578
  46. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  47. data/lib/swarm_sdk/swarm/hook_triggers.rb +150 -0
  48. data/lib/swarm_sdk/swarm/logging_callbacks.rb +340 -0
  49. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  50. data/lib/swarm_sdk/swarm/tool_configurator.rb +42 -138
  51. data/lib/swarm_sdk/swarm.rb +137 -679
  52. data/lib/swarm_sdk/tools/bash.rb +11 -3
  53. data/lib/swarm_sdk/tools/delegate.rb +61 -43
  54. data/lib/swarm_sdk/tools/edit.rb +8 -13
  55. data/lib/swarm_sdk/tools/glob.rb +9 -1
  56. data/lib/swarm_sdk/tools/grep.rb +7 -0
  57. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  58. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  59. data/lib/swarm_sdk/tools/read.rb +11 -13
  60. data/lib/swarm_sdk/tools/registry.rb +122 -10
  61. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +8 -5
  62. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  63. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  64. data/lib/swarm_sdk/tools/web_fetch.rb +3 -2
  65. data/lib/swarm_sdk/tools/write.rb +8 -13
  66. data/lib/swarm_sdk/version.rb +1 -1
  67. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
  68. data/lib/swarm_sdk/workflow/builder.rb +143 -0
  69. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  70. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +3 -3
  71. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
  72. data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
  73. data/lib/swarm_sdk.rb +33 -3
  74. metadata +67 -15
  75. data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -589
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 024c305673af374d59df3e51afef83508bd787abb57465140d78d9acd5db5943
4
- data.tar.gz: 8a762c50cf958e39f86a16935bc155c75fab57cfb2c334bd5e96017578ad003e
3
+ metadata.gz: f8643441321fcf3c24d637134d75697f61670ffa4129608c1c4d0e98571805a5
4
+ data.tar.gz: cb105cd387671e16eea9ebf52fbcf31a11f9ec0d6a03b7f2e45cad7721434dab
5
5
  SHA512:
6
- metadata.gz: 50caef0938990e2d4c352cbf1254ed8ceea26f23cd6b3aa1490a35d2efb676de0d3b38a7735f72e6e2d490840258d6fa6c8450d5dda75e5e64ad181ad7eff97b
7
- data.tar.gz: b5977d7388e96144b3a2c19e604f2e146e77bd85ca8a92f546e4accb5d3c1cbae384020189965fe27a996eada0fb62b0f5331fba5d9bd41171dbcf0be848b4bc
6
+ metadata.gz: f613f1d8be2c5fd00ebaaa896b54bdeb34f6537b56638706c5655d8b0ceeb942c87702be5d07be748dd194ec90c48c5e7b24d180ca6bea58714f43cd55afaf86
7
+ data.tar.gz: b608df1ef8b5368c4f1e84a057591103943df755706bdaba521fa56075805d6281d434968eadb4cb35edb6a4d9987e710e9b1450fde09c9ed23ed1bebe5af075
@@ -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