swarm_sdk 2.7.14 → 3.0.0.alpha2

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 (185) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/ruby_llm_patches/chat_callbacks_patch.rb +16 -0
  3. data/lib/swarm_sdk/ruby_llm_patches/init.rb +4 -1
  4. data/lib/swarm_sdk/v3/agent.rb +1165 -0
  5. data/lib/swarm_sdk/v3/agent_builder.rb +533 -0
  6. data/lib/swarm_sdk/v3/agent_definition.rb +330 -0
  7. data/lib/swarm_sdk/v3/configuration.rb +490 -0
  8. data/lib/swarm_sdk/v3/debug_log.rb +86 -0
  9. data/lib/swarm_sdk/v3/event_stream.rb +130 -0
  10. data/lib/swarm_sdk/v3/hooks/context.rb +112 -0
  11. data/lib/swarm_sdk/v3/hooks/result.rb +115 -0
  12. data/lib/swarm_sdk/v3/hooks/runner.rb +128 -0
  13. data/lib/swarm_sdk/v3/mcp/connector.rb +183 -0
  14. data/lib/swarm_sdk/v3/mcp/mcp_error.rb +15 -0
  15. data/lib/swarm_sdk/v3/mcp/server_definition.rb +125 -0
  16. data/lib/swarm_sdk/v3/mcp/ssl_http_transport.rb +103 -0
  17. data/lib/swarm_sdk/v3/mcp/stdio_transport.rb +135 -0
  18. data/lib/swarm_sdk/v3/mcp/tool_proxy.rb +53 -0
  19. data/lib/swarm_sdk/v3/memory/adapters/base.rb +297 -0
  20. data/lib/swarm_sdk/v3/memory/adapters/faiss_support.rb +194 -0
  21. data/lib/swarm_sdk/v3/memory/adapters/filesystem_adapter.rb +212 -0
  22. data/lib/swarm_sdk/v3/memory/adapters/sqlite_adapter.rb +507 -0
  23. data/lib/swarm_sdk/v3/memory/adapters/vector_utils.rb +88 -0
  24. data/lib/swarm_sdk/v3/memory/card.rb +206 -0
  25. data/lib/swarm_sdk/v3/memory/cluster.rb +146 -0
  26. data/lib/swarm_sdk/v3/memory/compressor.rb +496 -0
  27. data/lib/swarm_sdk/v3/memory/consolidator.rb +427 -0
  28. data/lib/swarm_sdk/v3/memory/context_builder.rb +339 -0
  29. data/lib/swarm_sdk/v3/memory/edge.rb +105 -0
  30. data/lib/swarm_sdk/v3/memory/embedder.rb +185 -0
  31. data/lib/swarm_sdk/v3/memory/exposure_tracker.rb +104 -0
  32. data/lib/swarm_sdk/v3/memory/ingestion_pipeline.rb +394 -0
  33. data/lib/swarm_sdk/v3/memory/retriever.rb +289 -0
  34. data/lib/swarm_sdk/v3/memory/store.rb +489 -0
  35. data/lib/swarm_sdk/v3/skills/loader.rb +147 -0
  36. data/lib/swarm_sdk/v3/skills/manifest.rb +45 -0
  37. data/lib/swarm_sdk/v3/sub_task_agent.rb +248 -0
  38. data/lib/swarm_sdk/v3/tools/base.rb +80 -0
  39. data/lib/swarm_sdk/v3/tools/bash.rb +174 -0
  40. data/lib/swarm_sdk/v3/tools/clock.rb +32 -0
  41. data/lib/swarm_sdk/v3/tools/document_converters/base.rb +84 -0
  42. data/lib/swarm_sdk/v3/tools/document_converters/docx_converter.rb +120 -0
  43. data/lib/swarm_sdk/v3/tools/document_converters/pdf_converter.rb +111 -0
  44. data/lib/swarm_sdk/v3/tools/document_converters/xlsx_converter.rb +128 -0
  45. data/lib/swarm_sdk/v3/tools/edit.rb +111 -0
  46. data/lib/swarm_sdk/v3/tools/glob.rb +96 -0
  47. data/lib/swarm_sdk/v3/tools/grep.rb +200 -0
  48. data/lib/swarm_sdk/v3/tools/message_teammate.rb +15 -0
  49. data/lib/swarm_sdk/v3/tools/message_user.rb +15 -0
  50. data/lib/swarm_sdk/v3/tools/read.rb +213 -0
  51. data/lib/swarm_sdk/v3/tools/read_tracker.rb +40 -0
  52. data/lib/swarm_sdk/v3/tools/registry.rb +208 -0
  53. data/lib/swarm_sdk/v3/tools/sub_task.rb +183 -0
  54. data/lib/swarm_sdk/v3/tools/think.rb +88 -0
  55. data/lib/swarm_sdk/v3/tools/write.rb +87 -0
  56. data/lib/swarm_sdk/v3.rb +145 -0
  57. metadata +88 -149
  58. data/lib/swarm_sdk/agent/RETRY_LOGIC.md +0 -175
  59. data/lib/swarm_sdk/agent/builder.rb +0 -705
  60. data/lib/swarm_sdk/agent/chat.rb +0 -1438
  61. data/lib/swarm_sdk/agent/chat_helpers/context_tracker.rb +0 -375
  62. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +0 -204
  63. data/lib/swarm_sdk/agent/chat_helpers/hook_integration.rb +0 -480
  64. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +0 -85
  65. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +0 -290
  66. data/lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb +0 -116
  67. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +0 -83
  68. data/lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb +0 -134
  69. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +0 -79
  70. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +0 -146
  71. data/lib/swarm_sdk/agent/context.rb +0 -115
  72. data/lib/swarm_sdk/agent/context_manager.rb +0 -315
  73. data/lib/swarm_sdk/agent/definition.rb +0 -588
  74. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +0 -226
  75. data/lib/swarm_sdk/agent/system_prompt_builder.rb +0 -173
  76. data/lib/swarm_sdk/agent/tool_registry.rb +0 -189
  77. data/lib/swarm_sdk/agent_registry.rb +0 -146
  78. data/lib/swarm_sdk/builders/base_builder.rb +0 -558
  79. data/lib/swarm_sdk/claude_code_agent_adapter.rb +0 -205
  80. data/lib/swarm_sdk/concerns/cleanupable.rb +0 -42
  81. data/lib/swarm_sdk/concerns/snapshotable.rb +0 -67
  82. data/lib/swarm_sdk/concerns/validatable.rb +0 -55
  83. data/lib/swarm_sdk/config.rb +0 -368
  84. data/lib/swarm_sdk/configuration/parser.rb +0 -397
  85. data/lib/swarm_sdk/configuration/translator.rb +0 -285
  86. data/lib/swarm_sdk/configuration.rb +0 -165
  87. data/lib/swarm_sdk/context_compactor/metrics.rb +0 -147
  88. data/lib/swarm_sdk/context_compactor/token_counter.rb +0 -102
  89. data/lib/swarm_sdk/context_compactor.rb +0 -335
  90. data/lib/swarm_sdk/context_management/builder.rb +0 -128
  91. data/lib/swarm_sdk/context_management/context.rb +0 -328
  92. data/lib/swarm_sdk/custom_tool_registry.rb +0 -226
  93. data/lib/swarm_sdk/defaults.rb +0 -251
  94. data/lib/swarm_sdk/events_to_messages.rb +0 -199
  95. data/lib/swarm_sdk/hooks/adapter.rb +0 -359
  96. data/lib/swarm_sdk/hooks/context.rb +0 -197
  97. data/lib/swarm_sdk/hooks/definition.rb +0 -80
  98. data/lib/swarm_sdk/hooks/error.rb +0 -29
  99. data/lib/swarm_sdk/hooks/executor.rb +0 -146
  100. data/lib/swarm_sdk/hooks/registry.rb +0 -147
  101. data/lib/swarm_sdk/hooks/result.rb +0 -150
  102. data/lib/swarm_sdk/hooks/shell_executor.rb +0 -256
  103. data/lib/swarm_sdk/hooks/tool_call.rb +0 -35
  104. data/lib/swarm_sdk/hooks/tool_result.rb +0 -62
  105. data/lib/swarm_sdk/log_collector.rb +0 -227
  106. data/lib/swarm_sdk/log_stream.rb +0 -127
  107. data/lib/swarm_sdk/markdown_parser.rb +0 -75
  108. data/lib/swarm_sdk/model_aliases.json +0 -8
  109. data/lib/swarm_sdk/models.json +0 -44002
  110. data/lib/swarm_sdk/models.rb +0 -161
  111. data/lib/swarm_sdk/node_context.rb +0 -245
  112. data/lib/swarm_sdk/observer/builder.rb +0 -81
  113. data/lib/swarm_sdk/observer/config.rb +0 -45
  114. data/lib/swarm_sdk/observer/manager.rb +0 -248
  115. data/lib/swarm_sdk/patterns/agent_observer.rb +0 -160
  116. data/lib/swarm_sdk/permissions/config.rb +0 -239
  117. data/lib/swarm_sdk/permissions/error_formatter.rb +0 -121
  118. data/lib/swarm_sdk/permissions/path_matcher.rb +0 -35
  119. data/lib/swarm_sdk/permissions/validator.rb +0 -173
  120. data/lib/swarm_sdk/permissions_builder.rb +0 -122
  121. data/lib/swarm_sdk/plugin.rb +0 -309
  122. data/lib/swarm_sdk/plugin_registry.rb +0 -101
  123. data/lib/swarm_sdk/proc_helpers.rb +0 -53
  124. data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +0 -119
  125. data/lib/swarm_sdk/restore_result.rb +0 -65
  126. data/lib/swarm_sdk/result.rb +0 -241
  127. data/lib/swarm_sdk/snapshot.rb +0 -156
  128. data/lib/swarm_sdk/snapshot_from_events.rb +0 -397
  129. data/lib/swarm_sdk/state_restorer.rb +0 -476
  130. data/lib/swarm_sdk/state_snapshot.rb +0 -334
  131. data/lib/swarm_sdk/swarm/agent_initializer.rb +0 -648
  132. data/lib/swarm_sdk/swarm/all_agents_builder.rb +0 -204
  133. data/lib/swarm_sdk/swarm/builder.rb +0 -256
  134. data/lib/swarm_sdk/swarm/executor.rb +0 -446
  135. data/lib/swarm_sdk/swarm/hook_triggers.rb +0 -162
  136. data/lib/swarm_sdk/swarm/lazy_delegate_chat.rb +0 -372
  137. data/lib/swarm_sdk/swarm/logging_callbacks.rb +0 -361
  138. data/lib/swarm_sdk/swarm/mcp_configurator.rb +0 -290
  139. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +0 -67
  140. data/lib/swarm_sdk/swarm/tool_configurator.rb +0 -392
  141. data/lib/swarm_sdk/swarm.rb +0 -973
  142. data/lib/swarm_sdk/swarm_loader.rb +0 -145
  143. data/lib/swarm_sdk/swarm_registry.rb +0 -136
  144. data/lib/swarm_sdk/tools/base.rb +0 -63
  145. data/lib/swarm_sdk/tools/bash.rb +0 -280
  146. data/lib/swarm_sdk/tools/clock.rb +0 -46
  147. data/lib/swarm_sdk/tools/delegate.rb +0 -389
  148. data/lib/swarm_sdk/tools/document_converters/base_converter.rb +0 -83
  149. data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +0 -99
  150. data/lib/swarm_sdk/tools/document_converters/html_converter.rb +0 -101
  151. data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +0 -78
  152. data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +0 -194
  153. data/lib/swarm_sdk/tools/edit.rb +0 -145
  154. data/lib/swarm_sdk/tools/glob.rb +0 -166
  155. data/lib/swarm_sdk/tools/grep.rb +0 -235
  156. data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +0 -43
  157. data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +0 -167
  158. data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +0 -65
  159. data/lib/swarm_sdk/tools/mcp_tool_stub.rb +0 -198
  160. data/lib/swarm_sdk/tools/multi_edit.rb +0 -236
  161. data/lib/swarm_sdk/tools/path_resolver.rb +0 -92
  162. data/lib/swarm_sdk/tools/read.rb +0 -261
  163. data/lib/swarm_sdk/tools/registry.rb +0 -205
  164. data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +0 -117
  165. data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +0 -97
  166. data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +0 -108
  167. data/lib/swarm_sdk/tools/stores/read_tracker.rb +0 -96
  168. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +0 -273
  169. data/lib/swarm_sdk/tools/stores/storage.rb +0 -142
  170. data/lib/swarm_sdk/tools/stores/todo_manager.rb +0 -65
  171. data/lib/swarm_sdk/tools/think.rb +0 -100
  172. data/lib/swarm_sdk/tools/todo_write.rb +0 -237
  173. data/lib/swarm_sdk/tools/web_fetch.rb +0 -264
  174. data/lib/swarm_sdk/tools/write.rb +0 -112
  175. data/lib/swarm_sdk/transcript_builder.rb +0 -278
  176. data/lib/swarm_sdk/utils.rb +0 -68
  177. data/lib/swarm_sdk/validation_result.rb +0 -33
  178. data/lib/swarm_sdk/version.rb +0 -5
  179. data/lib/swarm_sdk/workflow/agent_config.rb +0 -95
  180. data/lib/swarm_sdk/workflow/builder.rb +0 -227
  181. data/lib/swarm_sdk/workflow/executor.rb +0 -497
  182. data/lib/swarm_sdk/workflow/node_builder.rb +0 -593
  183. data/lib/swarm_sdk/workflow/transformer_executor.rb +0 -250
  184. data/lib/swarm_sdk/workflow.rb +0 -589
  185. data/lib/swarm_sdk.rb +0 -721
@@ -1,372 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SwarmSDK
4
- class Swarm
5
- # Lazy loader for delegation agent chats
6
- #
7
- # Instead of creating delegation instances eagerly at swarm initialization,
8
- # this class defers creation until the first delegation call. This improves
9
- # initialization performance for swarms where not all agents are used.
10
- #
11
- # Thread-safe via Mutex - safe for concurrent access.
12
- #
13
- # @example
14
- # lazy_chat = LazyDelegateChat.new(
15
- # instance_name: "backend@frontend",
16
- # base_name: :backend,
17
- # agent_definition: backend_def,
18
- # swarm: swarm
19
- # )
20
- #
21
- # # Later, when delegation is first called:
22
- # chat = lazy_chat.chat # Creates agent on first access
23
- # chat.ask("Do something")
24
- class LazyDelegateChat
25
- attr_reader :instance_name, :base_name, :agent_definition
26
-
27
- # Initialize a lazy delegate chat wrapper
28
- #
29
- # @param instance_name [String] Unique instance name ("base@delegator")
30
- # @param base_name [Symbol] Base agent name (for definition lookup)
31
- # @param agent_definition [Agent::Definition] Agent definition
32
- # @param swarm [Swarm] Parent swarm reference
33
- def initialize(instance_name:, base_name:, agent_definition:, swarm:)
34
- @instance_name = instance_name
35
- @base_name = base_name
36
- @agent_definition = agent_definition
37
- @swarm = swarm
38
- @chat = nil
39
- @mutex = Mutex.new
40
- @initialized = false
41
- end
42
-
43
- # Get or create the agent chat instance
44
- #
45
- # On first call, creates the agent chat and runs initialization.
46
- # Subsequent calls return the cached instance.
47
- #
48
- # @return [Agent::Chat] The initialized chat instance
49
- def chat
50
- return @chat if @initialized
51
-
52
- @mutex.synchronize do
53
- return @chat if @initialized
54
-
55
- @chat = initialize_chat
56
- @initialized = true
57
- @chat
58
- end
59
- end
60
-
61
- # Check if the agent has been initialized
62
- #
63
- # @return [Boolean] True if chat has been created
64
- def initialized?
65
- @mutex.synchronize { @initialized }
66
- end
67
-
68
- private
69
-
70
- # Create and initialize the agent chat
71
- #
72
- # This mirrors the initialization done in AgentInitializer passes 1-6
73
- # but for a single lazy delegate.
74
- #
75
- # @return [Agent::Chat] Fully initialized chat instance
76
- def initialize_chat
77
- emit_lazy_init_start
78
-
79
- # Create tool configurator
80
- tool_configurator = ToolConfigurator.new(
81
- @swarm,
82
- @swarm.scratchpad_storage,
83
- @swarm.plugin_storages,
84
- )
85
-
86
- # Create the agent chat (mirrors AgentInitializer#create_agent_chat_for_delegation)
87
- chat = create_delegation_chat(tool_configurator)
88
-
89
- # Store in delegation_instances (so other code can find it)
90
- @swarm.delegation_instances[@instance_name] = chat
91
-
92
- # Wire delegation tools for this instance (nested delegation support)
93
- wire_delegation_tools(chat, tool_configurator)
94
-
95
- # Setup context
96
- setup_context(chat)
97
-
98
- # Configure hooks
99
- configure_hooks(chat)
100
-
101
- # Apply YAML hooks if present
102
- apply_yaml_hooks(chat)
103
-
104
- # Activate tools
105
- chat.activate_tools_for_prompt
106
-
107
- # Notify plugins
108
- notify_plugins(chat, tool_configurator)
109
-
110
- emit_lazy_init_complete
111
-
112
- chat
113
- end
114
-
115
- # Create the delegation chat instance
116
- #
117
- # @param tool_configurator [ToolConfigurator] Tool configuration helper
118
- # @return [Agent::Chat] Newly created chat instance
119
- def create_delegation_chat(tool_configurator)
120
- chat = Agent::Chat.new(
121
- definition: @agent_definition.to_h,
122
- agent_name: @instance_name.to_sym,
123
- global_semaphore: @swarm.global_semaphore,
124
- )
125
-
126
- # Set provider agent name for logging
127
- chat.provider.agent_name = @instance_name if chat.provider.respond_to?(:agent_name=)
128
-
129
- # Register all tools (built-in, permissions, etc.)
130
- tool_configurator.register_all_tools(
131
- chat: chat,
132
- agent_name: @instance_name.to_sym,
133
- agent_definition: @agent_definition,
134
- )
135
-
136
- # Register MCP servers if configured
137
- if @agent_definition.mcp_servers.any?
138
- mcp_configurator = McpConfigurator.new(@swarm)
139
- mcp_configurator.register_mcp_servers(
140
- chat,
141
- @agent_definition.mcp_servers,
142
- agent_name: @instance_name,
143
- )
144
- end
145
-
146
- # Setup tool activation dependencies
147
- chat.setup_tool_activation(
148
- tool_configurator: tool_configurator,
149
- agent_definition: @agent_definition,
150
- )
151
-
152
- chat
153
- end
154
-
155
- # Wire delegation tools for this instance (nested delegation support)
156
- #
157
- # If this agent delegates to other agents, create those tools.
158
- # The delegate targets may themselves be lazy.
159
- #
160
- # @param chat [Agent::Chat] The chat instance
161
- # @param tool_configurator [ToolConfigurator] Tool configuration helper
162
- # @return [void]
163
- def wire_delegation_tools(chat, tool_configurator)
164
- @agent_definition.delegation_configs.each do |delegation_config|
165
- delegate_name_sym = delegation_config[:agent]
166
- delegate_name_str = delegate_name_sym.to_s
167
- custom_tool_name = delegation_config[:tool_name]
168
- preserve_context = delegation_config.fetch(:preserve_context, true)
169
-
170
- # Check if target is a registered swarm
171
- if @swarm.swarm_registry&.registered?(delegate_name_str)
172
- wire_swarm_delegation(chat, delegate_name_str, custom_tool_name, preserve_context)
173
- elsif @swarm.agent_definitions.key?(delegate_name_sym)
174
- wire_agent_delegation(chat, delegate_name_sym, custom_tool_name, tool_configurator, preserve_context)
175
- else
176
- raise ConfigurationError,
177
- "Agent '#{@instance_name}' delegates to unknown target '#{delegate_name_str}'"
178
- end
179
- end
180
- end
181
-
182
- # Wire delegation to an external swarm
183
- #
184
- # @param chat [Agent::Chat] The delegating chat
185
- # @param swarm_name [String] Name of the registered swarm
186
- # @param custom_tool_name [String, nil] Optional custom tool name
187
- # @param preserve_context [Boolean] Whether to preserve context
188
- # @return [void]
189
- def wire_swarm_delegation(chat, swarm_name, custom_tool_name, preserve_context)
190
- tool = Tools::Delegate.new(
191
- delegate_name: swarm_name,
192
- delegate_description: "External swarm: #{swarm_name}",
193
- delegate_chat: nil,
194
- agent_name: @instance_name,
195
- swarm: @swarm,
196
- delegating_chat: chat,
197
- custom_tool_name: custom_tool_name,
198
- preserve_context: preserve_context,
199
- )
200
-
201
- chat.tool_registry.register(
202
- tool,
203
- source: :delegation,
204
- metadata: { delegate_name: swarm_name, delegation_type: :swarm, preserve_context: preserve_context },
205
- )
206
- end
207
-
208
- # Wire delegation to a local agent
209
- #
210
- # For lazy-loaded agents, creates a LazyDelegateChat wrapper.
211
- # For shared agents, uses the primary instance.
212
- #
213
- # @param chat [Agent::Chat] The delegating chat
214
- # @param delegate_name_sym [Symbol] Name of the delegate agent
215
- # @param custom_tool_name [String, nil] Optional custom tool name
216
- # @param tool_configurator [ToolConfigurator] Tool configuration helper
217
- # @param preserve_context [Boolean] Whether to preserve context
218
- # @return [void]
219
- def wire_agent_delegation(chat, delegate_name_sym, custom_tool_name, tool_configurator, preserve_context)
220
- delegate_definition = @swarm.agent_definitions[delegate_name_sym]
221
-
222
- # Determine which chat instance to use
223
- target_chat = if delegate_definition.shared_across_delegations
224
- # Shared mode: use primary agent
225
- @swarm.agents[delegate_name_sym]
226
- else
227
- # Isolated mode: create nested lazy loader or get existing instance
228
- nested_instance_name = "#{delegate_name_sym}@#{@instance_name}"
229
-
230
- # Check if already exists (might have been created by another path)
231
- existing = @swarm.delegation_instances[nested_instance_name]
232
- if existing
233
- existing
234
- else
235
- # Create lazy loader for nested delegation
236
- LazyDelegateChat.new(
237
- instance_name: nested_instance_name,
238
- base_name: delegate_name_sym,
239
- agent_definition: delegate_definition,
240
- swarm: @swarm,
241
- )
242
- end
243
- end
244
-
245
- # Create delegation tool pointing to chosen instance
246
- tool = Tools::Delegate.new(
247
- delegate_name: delegate_name_sym.to_s,
248
- delegate_description: delegate_definition.description,
249
- delegate_chat: target_chat,
250
- agent_name: @instance_name,
251
- swarm: @swarm,
252
- delegating_chat: chat,
253
- custom_tool_name: custom_tool_name,
254
- preserve_context: preserve_context,
255
- )
256
-
257
- chat.tool_registry.register(
258
- tool,
259
- source: :delegation,
260
- metadata: {
261
- delegate_name: delegate_name_sym,
262
- delegation_mode: delegate_definition.shared_across_delegations ? :shared : :isolated,
263
- preserve_context: preserve_context,
264
- },
265
- )
266
- end
267
-
268
- # Setup agent context
269
- #
270
- # @param chat [Agent::Chat] The chat instance
271
- # @return [void]
272
- def setup_context(chat)
273
- delegate_tool_names = @agent_definition.delegation_configs.map do |delegation_config|
274
- delegation_config[:tool_name] || Tools::Delegate.tool_name_for(delegation_config[:agent])
275
- end
276
-
277
- context = Agent::Context.new(
278
- name: @instance_name.to_sym,
279
- swarm_id: @swarm.swarm_id,
280
- parent_swarm_id: @swarm.parent_swarm_id,
281
- delegation_tools: delegate_tool_names,
282
- metadata: { is_delegation_instance: true },
283
- )
284
-
285
- chat.setup_context(context) if chat.respond_to?(:setup_context)
286
-
287
- # Configure logging if enabled
288
- return unless LogStream.emitter
289
-
290
- chat.setup_logging if chat.respond_to?(:setup_logging)
291
- end
292
-
293
- # Configure hooks for the agent
294
- #
295
- # @param chat [Agent::Chat] The chat instance
296
- # @return [void]
297
- def configure_hooks(chat)
298
- return unless chat.respond_to?(:setup_hooks)
299
-
300
- chat.setup_hooks(
301
- registry: @swarm.hook_registry,
302
- agent_definition: @agent_definition,
303
- swarm: @swarm,
304
- )
305
- end
306
-
307
- # Apply YAML hooks if present
308
- #
309
- # @param chat [Agent::Chat] The chat instance
310
- # @return [void]
311
- def apply_yaml_hooks(chat)
312
- return unless @swarm.config_for_hooks
313
-
314
- agent_config = @swarm.config_for_hooks.agents[@base_name]
315
- return unless agent_config
316
-
317
- hooks = agent_config.is_a?(Hash) ? agent_config[:hooks] : agent_config.hooks
318
- return unless hooks&.any?
319
-
320
- Hooks::Adapter.apply_agent_hooks(chat, @instance_name.to_sym, hooks, @swarm.name)
321
- end
322
-
323
- # Notify plugins that agent was initialized
324
- #
325
- # @param chat [Agent::Chat] The chat instance
326
- # @param tool_configurator [ToolConfigurator] Tool configuration helper
327
- # @return [void]
328
- def notify_plugins(chat, tool_configurator)
329
- PluginRegistry.all.each do |plugin|
330
- plugin_storages = @swarm.plugin_storages[plugin.name] || {}
331
- storage = plugin_storages[@base_name]
332
-
333
- context = {
334
- storage: storage,
335
- agent_definition: @agent_definition,
336
- tool_configurator: tool_configurator,
337
- }
338
-
339
- plugin.on_agent_initialized(
340
- agent_name: @instance_name.to_sym,
341
- agent: chat,
342
- context: context,
343
- )
344
- end
345
- end
346
-
347
- # Emit lazy initialization start event
348
- #
349
- # @return [void]
350
- def emit_lazy_init_start
351
- LogStream.emit(
352
- type: "agent_lazy_initialization_start",
353
- instance_name: @instance_name,
354
- base_name: @base_name,
355
- timestamp: Time.now.utc.iso8601,
356
- )
357
- end
358
-
359
- # Emit lazy initialization complete event
360
- #
361
- # @return [void]
362
- def emit_lazy_init_complete
363
- LogStream.emit(
364
- type: "agent_lazy_initialization_complete",
365
- instance_name: @instance_name,
366
- base_name: @base_name,
367
- timestamp: Time.now.utc.iso8601,
368
- )
369
- end
370
- end
371
- end
372
- end