swarm_sdk 2.7.13 → 3.0.0.alpha1

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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/ruby_llm_patches/chat_callbacks_patch.rb +43 -22
  3. data/lib/swarm_sdk/ruby_llm_patches/init.rb +6 -0
  4. data/lib/swarm_sdk/ruby_llm_patches/mcp_ssl_patch.rb +144 -0
  5. data/lib/swarm_sdk/ruby_llm_patches/tool_concurrency_patch.rb +3 -4
  6. data/lib/swarm_sdk/v3/agent.rb +1165 -0
  7. data/lib/swarm_sdk/v3/agent_builder.rb +533 -0
  8. data/lib/swarm_sdk/v3/agent_definition.rb +330 -0
  9. data/lib/swarm_sdk/v3/configuration.rb +490 -0
  10. data/lib/swarm_sdk/v3/debug_log.rb +86 -0
  11. data/lib/swarm_sdk/v3/event_stream.rb +130 -0
  12. data/lib/swarm_sdk/v3/hooks/context.rb +112 -0
  13. data/lib/swarm_sdk/v3/hooks/result.rb +115 -0
  14. data/lib/swarm_sdk/v3/hooks/runner.rb +128 -0
  15. data/lib/swarm_sdk/v3/mcp/connector.rb +183 -0
  16. data/lib/swarm_sdk/v3/mcp/mcp_error.rb +15 -0
  17. data/lib/swarm_sdk/v3/mcp/server_definition.rb +125 -0
  18. data/lib/swarm_sdk/v3/mcp/ssl_http_transport.rb +103 -0
  19. data/lib/swarm_sdk/v3/mcp/stdio_transport.rb +135 -0
  20. data/lib/swarm_sdk/v3/mcp/tool_proxy.rb +53 -0
  21. data/lib/swarm_sdk/v3/memory/adapters/base.rb +297 -0
  22. data/lib/swarm_sdk/v3/memory/adapters/faiss_support.rb +194 -0
  23. data/lib/swarm_sdk/v3/memory/adapters/filesystem_adapter.rb +212 -0
  24. data/lib/swarm_sdk/v3/memory/adapters/sqlite_adapter.rb +507 -0
  25. data/lib/swarm_sdk/v3/memory/adapters/vector_utils.rb +88 -0
  26. data/lib/swarm_sdk/v3/memory/card.rb +206 -0
  27. data/lib/swarm_sdk/v3/memory/cluster.rb +146 -0
  28. data/lib/swarm_sdk/v3/memory/compressor.rb +496 -0
  29. data/lib/swarm_sdk/v3/memory/consolidator.rb +427 -0
  30. data/lib/swarm_sdk/v3/memory/context_builder.rb +339 -0
  31. data/lib/swarm_sdk/v3/memory/edge.rb +105 -0
  32. data/lib/swarm_sdk/v3/memory/embedder.rb +185 -0
  33. data/lib/swarm_sdk/v3/memory/exposure_tracker.rb +104 -0
  34. data/lib/swarm_sdk/v3/memory/ingestion_pipeline.rb +394 -0
  35. data/lib/swarm_sdk/v3/memory/retriever.rb +289 -0
  36. data/lib/swarm_sdk/v3/memory/store.rb +489 -0
  37. data/lib/swarm_sdk/v3/skills/loader.rb +147 -0
  38. data/lib/swarm_sdk/v3/skills/manifest.rb +45 -0
  39. data/lib/swarm_sdk/v3/sub_task_agent.rb +248 -0
  40. data/lib/swarm_sdk/v3/tools/base.rb +80 -0
  41. data/lib/swarm_sdk/v3/tools/bash.rb +174 -0
  42. data/lib/swarm_sdk/v3/tools/clock.rb +32 -0
  43. data/lib/swarm_sdk/v3/tools/edit.rb +111 -0
  44. data/lib/swarm_sdk/v3/tools/glob.rb +96 -0
  45. data/lib/swarm_sdk/v3/tools/grep.rb +200 -0
  46. data/lib/swarm_sdk/v3/tools/message_teammate.rb +15 -0
  47. data/lib/swarm_sdk/v3/tools/message_user.rb +15 -0
  48. data/lib/swarm_sdk/v3/tools/read.rb +181 -0
  49. data/lib/swarm_sdk/v3/tools/read_tracker.rb +40 -0
  50. data/lib/swarm_sdk/v3/tools/registry.rb +208 -0
  51. data/lib/swarm_sdk/v3/tools/sub_task.rb +183 -0
  52. data/lib/swarm_sdk/v3/tools/think.rb +88 -0
  53. data/lib/swarm_sdk/v3/tools/write.rb +87 -0
  54. data/lib/swarm_sdk/v3.rb +145 -0
  55. metadata +84 -148
  56. data/lib/swarm_sdk/agent/RETRY_LOGIC.md +0 -175
  57. data/lib/swarm_sdk/agent/builder.rb +0 -680
  58. data/lib/swarm_sdk/agent/chat.rb +0 -1432
  59. data/lib/swarm_sdk/agent/chat_helpers/context_tracker.rb +0 -375
  60. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +0 -204
  61. data/lib/swarm_sdk/agent/chat_helpers/hook_integration.rb +0 -480
  62. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +0 -85
  63. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +0 -290
  64. data/lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb +0 -116
  65. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +0 -83
  66. data/lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb +0 -134
  67. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +0 -79
  68. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +0 -146
  69. data/lib/swarm_sdk/agent/context.rb +0 -115
  70. data/lib/swarm_sdk/agent/context_manager.rb +0 -315
  71. data/lib/swarm_sdk/agent/definition.rb +0 -581
  72. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +0 -226
  73. data/lib/swarm_sdk/agent/system_prompt_builder.rb +0 -161
  74. data/lib/swarm_sdk/agent/tool_registry.rb +0 -189
  75. data/lib/swarm_sdk/agent_registry.rb +0 -146
  76. data/lib/swarm_sdk/builders/base_builder.rb +0 -553
  77. data/lib/swarm_sdk/claude_code_agent_adapter.rb +0 -205
  78. data/lib/swarm_sdk/concerns/cleanupable.rb +0 -39
  79. data/lib/swarm_sdk/concerns/snapshotable.rb +0 -67
  80. data/lib/swarm_sdk/concerns/validatable.rb +0 -55
  81. data/lib/swarm_sdk/config.rb +0 -367
  82. data/lib/swarm_sdk/configuration/parser.rb +0 -397
  83. data/lib/swarm_sdk/configuration/translator.rb +0 -283
  84. data/lib/swarm_sdk/configuration.rb +0 -165
  85. data/lib/swarm_sdk/context_compactor/metrics.rb +0 -147
  86. data/lib/swarm_sdk/context_compactor/token_counter.rb +0 -102
  87. data/lib/swarm_sdk/context_compactor.rb +0 -335
  88. data/lib/swarm_sdk/context_management/builder.rb +0 -128
  89. data/lib/swarm_sdk/context_management/context.rb +0 -328
  90. data/lib/swarm_sdk/custom_tool_registry.rb +0 -226
  91. data/lib/swarm_sdk/defaults.rb +0 -251
  92. data/lib/swarm_sdk/events_to_messages.rb +0 -199
  93. data/lib/swarm_sdk/hooks/adapter.rb +0 -359
  94. data/lib/swarm_sdk/hooks/context.rb +0 -197
  95. data/lib/swarm_sdk/hooks/definition.rb +0 -80
  96. data/lib/swarm_sdk/hooks/error.rb +0 -29
  97. data/lib/swarm_sdk/hooks/executor.rb +0 -146
  98. data/lib/swarm_sdk/hooks/registry.rb +0 -147
  99. data/lib/swarm_sdk/hooks/result.rb +0 -150
  100. data/lib/swarm_sdk/hooks/shell_executor.rb +0 -256
  101. data/lib/swarm_sdk/hooks/tool_call.rb +0 -35
  102. data/lib/swarm_sdk/hooks/tool_result.rb +0 -62
  103. data/lib/swarm_sdk/log_collector.rb +0 -227
  104. data/lib/swarm_sdk/log_stream.rb +0 -127
  105. data/lib/swarm_sdk/markdown_parser.rb +0 -75
  106. data/lib/swarm_sdk/model_aliases.json +0 -8
  107. data/lib/swarm_sdk/models.json +0 -44002
  108. data/lib/swarm_sdk/models.rb +0 -161
  109. data/lib/swarm_sdk/node_context.rb +0 -245
  110. data/lib/swarm_sdk/observer/builder.rb +0 -81
  111. data/lib/swarm_sdk/observer/config.rb +0 -45
  112. data/lib/swarm_sdk/observer/manager.rb +0 -236
  113. data/lib/swarm_sdk/patterns/agent_observer.rb +0 -160
  114. data/lib/swarm_sdk/permissions/config.rb +0 -239
  115. data/lib/swarm_sdk/permissions/error_formatter.rb +0 -121
  116. data/lib/swarm_sdk/permissions/path_matcher.rb +0 -35
  117. data/lib/swarm_sdk/permissions/validator.rb +0 -173
  118. data/lib/swarm_sdk/permissions_builder.rb +0 -122
  119. data/lib/swarm_sdk/plugin.rb +0 -309
  120. data/lib/swarm_sdk/plugin_registry.rb +0 -101
  121. data/lib/swarm_sdk/proc_helpers.rb +0 -53
  122. data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +0 -117
  123. data/lib/swarm_sdk/restore_result.rb +0 -65
  124. data/lib/swarm_sdk/result.rb +0 -212
  125. data/lib/swarm_sdk/snapshot.rb +0 -156
  126. data/lib/swarm_sdk/snapshot_from_events.rb +0 -397
  127. data/lib/swarm_sdk/state_restorer.rb +0 -476
  128. data/lib/swarm_sdk/state_snapshot.rb +0 -334
  129. data/lib/swarm_sdk/swarm/agent_initializer.rb +0 -648
  130. data/lib/swarm_sdk/swarm/all_agents_builder.rb +0 -195
  131. data/lib/swarm_sdk/swarm/builder.rb +0 -256
  132. data/lib/swarm_sdk/swarm/executor.rb +0 -290
  133. data/lib/swarm_sdk/swarm/hook_triggers.rb +0 -151
  134. data/lib/swarm_sdk/swarm/lazy_delegate_chat.rb +0 -372
  135. data/lib/swarm_sdk/swarm/logging_callbacks.rb +0 -360
  136. data/lib/swarm_sdk/swarm/mcp_configurator.rb +0 -270
  137. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +0 -67
  138. data/lib/swarm_sdk/swarm/tool_configurator.rb +0 -392
  139. data/lib/swarm_sdk/swarm.rb +0 -843
  140. data/lib/swarm_sdk/swarm_loader.rb +0 -145
  141. data/lib/swarm_sdk/swarm_registry.rb +0 -136
  142. data/lib/swarm_sdk/tools/base.rb +0 -63
  143. data/lib/swarm_sdk/tools/bash.rb +0 -280
  144. data/lib/swarm_sdk/tools/clock.rb +0 -46
  145. data/lib/swarm_sdk/tools/delegate.rb +0 -389
  146. data/lib/swarm_sdk/tools/document_converters/base_converter.rb +0 -83
  147. data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +0 -99
  148. data/lib/swarm_sdk/tools/document_converters/html_converter.rb +0 -101
  149. data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +0 -78
  150. data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +0 -194
  151. data/lib/swarm_sdk/tools/edit.rb +0 -145
  152. data/lib/swarm_sdk/tools/glob.rb +0 -166
  153. data/lib/swarm_sdk/tools/grep.rb +0 -235
  154. data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +0 -43
  155. data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +0 -167
  156. data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +0 -65
  157. data/lib/swarm_sdk/tools/mcp_tool_stub.rb +0 -198
  158. data/lib/swarm_sdk/tools/multi_edit.rb +0 -236
  159. data/lib/swarm_sdk/tools/path_resolver.rb +0 -92
  160. data/lib/swarm_sdk/tools/read.rb +0 -261
  161. data/lib/swarm_sdk/tools/registry.rb +0 -205
  162. data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +0 -117
  163. data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +0 -97
  164. data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +0 -108
  165. data/lib/swarm_sdk/tools/stores/read_tracker.rb +0 -96
  166. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +0 -273
  167. data/lib/swarm_sdk/tools/stores/storage.rb +0 -142
  168. data/lib/swarm_sdk/tools/stores/todo_manager.rb +0 -65
  169. data/lib/swarm_sdk/tools/think.rb +0 -100
  170. data/lib/swarm_sdk/tools/todo_write.rb +0 -237
  171. data/lib/swarm_sdk/tools/web_fetch.rb +0 -264
  172. data/lib/swarm_sdk/tools/write.rb +0 -112
  173. data/lib/swarm_sdk/transcript_builder.rb +0 -278
  174. data/lib/swarm_sdk/utils.rb +0 -68
  175. data/lib/swarm_sdk/validation_result.rb +0 -33
  176. data/lib/swarm_sdk/version.rb +0 -5
  177. data/lib/swarm_sdk/workflow/agent_config.rb +0 -95
  178. data/lib/swarm_sdk/workflow/builder.rb +0 -227
  179. data/lib/swarm_sdk/workflow/executor.rb +0 -497
  180. data/lib/swarm_sdk/workflow/node_builder.rb +0 -593
  181. data/lib/swarm_sdk/workflow/transformer_executor.rb +0 -250
  182. data/lib/swarm_sdk/workflow.rb +0 -589
  183. data/lib/swarm_sdk.rb +0 -718
@@ -1,227 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SwarmSDK
4
- class Workflow
5
- # Builder provides DSL for building multi-node workflows
6
- # This is the top-level builder accessed via SwarmSDK.workflow
7
- #
8
- # The DSL enables:
9
- # - Node-based workflow configuration
10
- # - Agent delegation per node
11
- # - Input/output transformers for data flow
12
- # - Context preservation across nodes
13
- #
14
- # @example Multi-stage workflow
15
- # workflow = SwarmSDK.workflow do
16
- # name "Build Pipeline"
17
- # start_node :planning
18
- #
19
- # agent :architect do
20
- # model "gpt-5"
21
- # prompt "You design systems"
22
- # end
23
- #
24
- # agent :coder do
25
- # model "gpt-4"
26
- # prompt "You implement code"
27
- # end
28
- #
29
- # node :planning do
30
- # agent(:architect)
31
- # end
32
- #
33
- # node :implementation do
34
- # agent(:coder)
35
- # depends_on :planning
36
- # end
37
- # end
38
- #
39
- # workflow.execute("Build auth system")
40
- class Builder < Builders::BaseBuilder
41
- # Main entry point for DSL
42
- #
43
- # @example
44
- # workflow = SwarmSDK.workflow do
45
- # name "Pipeline"
46
- # start_node :planning
47
- # node(:planning) { agent(:architect) }
48
- # end
49
- class << self
50
- def build(allow_filesystem_tools: nil, &block)
51
- builder = new(allow_filesystem_tools: allow_filesystem_tools)
52
- builder.instance_eval(&block)
53
- builder.build_swarm
54
- end
55
- end
56
-
57
- def initialize(allow_filesystem_tools: nil)
58
- super
59
- @nodes = {}
60
- @start_node = nil
61
- end
62
-
63
- # Define a node (mini-swarm execution stage)
64
- #
65
- # Nodes enable multi-stage workflows where different agent teams
66
- # collaborate in sequence. Each node is an independent swarm execution.
67
- #
68
- # @param name [Symbol] Node name
69
- # @yield Block for node configuration
70
- # @return [void]
71
- #
72
- # @example Solo agent node
73
- # node :planning do
74
- # agent(:architect)
75
- # end
76
- #
77
- # @example Multi-agent node with delegation
78
- # node :implementation do
79
- # agent(:backend).delegates_to(:tester, :database)
80
- # agent(:tester).delegates_to(:database)
81
- # agent(:database)
82
- # depends_on :planning
83
- # end
84
- def node(name, &block)
85
- builder = Workflow::NodeBuilder.new(name)
86
- builder.instance_eval(&block)
87
- @nodes[name] = builder
88
- end
89
-
90
- # Set the starting node for workflow execution
91
- #
92
- # Required when nodes are defined. Specifies which node to execute first.
93
- #
94
- # @param name [Symbol] Name of starting node
95
- # @return [void]
96
- #
97
- # @example
98
- # start_node :planning
99
- def start_node(name)
100
- @start_node = name.to_sym
101
- end
102
-
103
- # Build the actual Workflow instance
104
- def build_swarm # Returns Workflow despite method name
105
- raise ConfigurationError, "Workflow name not set. Use: name 'My Workflow'" unless @swarm_name
106
- raise ConfigurationError, "No nodes defined. Use: node :name { ... }" if @nodes.empty?
107
- raise ConfigurationError, "start_node not set. Use: start_node :name" unless @start_node
108
-
109
- # Validate filesystem tools BEFORE building
110
- validate_all_agents_filesystem_tools if @all_agents_config
111
- validate_agent_filesystem_tools
112
-
113
- build_workflow
114
- end
115
-
116
- private
117
-
118
- # Build a node-based workflow
119
- #
120
- # @return [Workflow] Configured workflow instance
121
- def build_workflow
122
- # Resolve any missing agents from global registry before building definitions
123
- resolve_missing_agents_from_registry
124
-
125
- # Build agent definitions
126
- agent_definitions = build_agent_definitions
127
-
128
- # Create workflow
129
- workflow = Workflow.new(
130
- swarm_name: @swarm_name,
131
- swarm_id: @swarm_id,
132
- agent_definitions: agent_definitions,
133
- nodes: @nodes,
134
- start_node: @start_node,
135
- scratchpad: @scratchpad,
136
- allow_filesystem_tools: @allow_filesystem_tools,
137
- )
138
-
139
- # Pass swarm registry config to workflow if external swarms registered
140
- workflow.swarm_registry_config = @swarm_registry_config if @swarm_registry_config.any?
141
-
142
- workflow
143
- end
144
-
145
- # Resolve agents referenced in nodes that aren't defined at workflow level
146
- #
147
- # For each agent referenced in a node but not defined with `agent :name do ... end`,
148
- # checks the global AgentRegistry and loads the agent if found.
149
- #
150
- # This allows workflows to reference globally registered agents without
151
- # explicitly re-declaring them at the workflow level.
152
- #
153
- # @return [void]
154
- # @raise [ConfigurationError] If agent not found in workflow or registry
155
- def resolve_missing_agents_from_registry
156
- # Collect all agents referenced in nodes
157
- referenced_agents = collect_referenced_agents
158
-
159
- # Find agents that aren't defined at workflow level
160
- defined_agents = @agents.keys
161
- missing_agents = referenced_agents - defined_agents
162
-
163
- # Try to resolve each missing agent from the global registry
164
- missing_agents.each do |agent_name|
165
- if AgentRegistry.registered?(agent_name)
166
- # Load from registry (uses same method as BaseBuilder)
167
- load_agent_from_registry(agent_name)
168
- else
169
- raise ConfigurationError,
170
- "Agent '#{agent_name}' referenced in node but not found. " \
171
- "Either define at workflow level with `agent :#{agent_name} do ... end` " \
172
- "or register globally with `SwarmSDK.agent :#{agent_name} do ... end`"
173
- end
174
- end
175
- end
176
-
177
- # Collect all agent names referenced across all nodes
178
- #
179
- # Includes both directly referenced agents and delegation targets.
180
- #
181
- # @return [Array<Symbol>] Unique agent names referenced in nodes
182
- def collect_referenced_agents
183
- @nodes.values.flat_map do |node_builder|
184
- # Collect both direct agents and their delegation targets
185
- node_builder.agent_configs.flat_map do |config|
186
- # Extract delegate agent names (handles array and hash formats)
187
- delegate_names = extract_delegate_agent_names(config[:delegates_to] || [])
188
- [config[:agent]] + delegate_names
189
- end
190
- end.uniq
191
- end
192
-
193
- # Extract agent names from delegation configuration
194
- #
195
- # Handles multiple formats:
196
- # - Array of symbols: [:frontend, :backend]
197
- # - Hash: {frontend: "Custom", backend: nil}
198
- # - Array of hashes: [{agent: :frontend, tool_name: "Custom"}]
199
- #
200
- # @param delegation_config [Array, Hash, nil] Delegation configuration
201
- # @return [Array<Symbol>] Array of agent name symbols
202
- def extract_delegate_agent_names(delegation_config)
203
- return [] if delegation_config.nil?
204
- return [] if delegation_config.respond_to?(:empty?) && delegation_config.empty?
205
-
206
- case delegation_config
207
- when Array
208
- delegation_config.map do |item|
209
- case item
210
- when Symbol, String
211
- item.to_sym
212
- when Hash
213
- # Extract agent name from normalized format
214
- agent_name = item[:agent] || item["agent"]
215
- agent_name&.to_sym
216
- end
217
- end.compact # Remove nils from malformed hashes
218
- when Hash
219
- # Hash format: keys are agent names
220
- delegation_config.keys.map(&:to_sym)
221
- else
222
- []
223
- end
224
- end
225
- end
226
- end
227
- end