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.
- checksums.yaml +4 -4
- 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 +67 -15
- 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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f8643441321fcf3c24d637134d75697f61670ffa4129608c1c4d0e98571805a5
|
|
4
|
+
data.tar.gz: cb105cd387671e16eea9ebf52fbcf31a11f9ec0d6a03b7f2e45cad7721434dab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|