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.
- checksums.yaml +4 -4
- data/lib/swarm_sdk/agent/builder.rb +91 -0
- data/lib/swarm_sdk/agent/chat.rb +540 -925
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +33 -79
- data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
- data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +147 -39
- 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 +22 -38
- 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 +8 -4
- data/lib/swarm_sdk/agent/context_manager.rb +6 -0
- data/lib/swarm_sdk/agent/definition.rb +79 -155
- data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +182 -0
- 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 +72 -257
- 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 +199 -0
- data/lib/swarm_sdk/hooks/shell_executor.rb +2 -1
- data/lib/swarm_sdk/log_collector.rb +192 -16
- data/lib/swarm_sdk/log_stream.rb +66 -8
- data/lib/swarm_sdk/model_aliases.json +4 -1
- 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/proc_helpers.rb +53 -0
- data/lib/swarm_sdk/restore_result.rb +65 -0
- data/lib/swarm_sdk/snapshot.rb +156 -0
- data/lib/swarm_sdk/snapshot_from_events.rb +397 -0
- data/lib/swarm_sdk/state_restorer.rb +476 -0
- data/lib/swarm_sdk/state_snapshot.rb +334 -0
- data/lib/swarm_sdk/swarm/agent_initializer.rb +428 -79
- data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
- data/lib/swarm_sdk/swarm/builder.rb +69 -407
- 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/swarm_registry_builder.rb +67 -0
- data/lib/swarm_sdk/swarm/tool_configurator.rb +88 -149
- data/lib/swarm_sdk/swarm.rb +337 -584
- data/lib/swarm_sdk/swarm_loader.rb +145 -0
- data/lib/swarm_sdk/swarm_registry.rb +136 -0
- data/lib/swarm_sdk/tools/bash.rb +11 -3
- data/lib/swarm_sdk/tools/delegate.rb +127 -24
- 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 +28 -18
- data/lib/swarm_sdk/tools/registry.rb +122 -10
- data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +53 -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/utils.rb +18 -0
- data/lib/swarm_sdk/validation_result.rb +33 -0
- data/lib/swarm_sdk/version.rb +1 -1
- data/lib/swarm_sdk/{node → workflow}/agent_config.rb +34 -9
- 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} +42 -21
- data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +3 -2
- data/lib/swarm_sdk/workflow.rb +554 -0
- data/lib/swarm_sdk.rb +73 -11
- metadata +79 -16
- data/lib/swarm_sdk/mcp.rb +0 -16
- data/lib/swarm_sdk/node_orchestrator.rb +0 -591
- 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:
|
|
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
|
|
@@ -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
|
|